@amir83nasr/10router 0.1.16 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +9 -9
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  6. package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  7. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/_global-error.html +1 -1
  24. package/.next/server/app/_global-error.rsc +1 -1
  25. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  26. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  28. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/_not-found.html +1 -1
  30. package/.next/server/app/_not-found.rsc +5 -5
  31. package/.next/server/app/_not-found.segments/_full.segment.rsc +5 -5
  32. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -5
  33. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  34. package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -1
  35. package/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  36. package/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  37. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  38. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  39. package/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  40. package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
  41. package/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  42. package/.next/server/app/api/models/route.js +1 -1
  43. package/.next/server/app/api/providers/route.js +1 -1
  44. package/.next/server/app/api/translator/console-logs/route.js +1 -1
  45. package/.next/server/app/api/translator/console-logs/stream/route.js +1 -1
  46. package/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
  47. package/.next/server/app/api/v1/audio/speech/route.js +1 -1
  48. package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  49. package/.next/server/app/api/version/route.js +1 -1
  50. package/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/callback.html +1 -1
  52. package/.next/server/app/callback.rsc +6 -6
  53. package/.next/server/app/callback.segments/_full.segment.rsc +6 -6
  54. package/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  55. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
  56. package/.next/server/app/dashboard/cli-tools.html +1 -1
  57. package/.next/server/app/dashboard/cli-tools.rsc +7 -7
  58. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +7 -7
  59. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  60. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  61. package/.next/server/app/dashboard/combos.html +1 -1
  62. package/.next/server/app/dashboard/combos.rsc +7 -7
  63. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +7 -7
  64. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
  65. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  66. package/.next/server/app/dashboard/endpoint.html +1 -1
  67. package/.next/server/app/dashboard/endpoint.rsc +7 -7
  68. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +7 -7
  69. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  70. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  71. package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
  72. package/.next/server/app/dashboard/media-providers/systemone.rsc +7 -7
  73. package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +7 -7
  74. package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +7 -7
  75. package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +1 -1
  76. package/.next/server/app/dashboard/profile.html +1 -1
  77. package/.next/server/app/dashboard/profile.rsc +7 -7
  78. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +7 -7
  79. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +7 -7
  80. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  81. package/.next/server/app/dashboard/providers/new.html +1 -1
  82. package/.next/server/app/dashboard/providers/new.rsc +7 -7
  83. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +7 -7
  84. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
  85. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  86. package/.next/server/app/dashboard/providers.html +1 -1
  87. package/.next/server/app/dashboard/providers.rsc +7 -7
  88. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +7 -7
  89. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
  90. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  91. package/.next/server/app/dashboard/proxy-pools.html +1 -1
  92. package/.next/server/app/dashboard/proxy-pools.rsc +7 -7
  93. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +7 -7
  94. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -7
  95. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  96. package/.next/server/app/dashboard/pxpipe.html +1 -1
  97. package/.next/server/app/dashboard/pxpipe.rsc +6 -6
  98. package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +6 -6
  99. package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +6 -6
  100. package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  101. package/.next/server/app/dashboard/quota.html +2 -2
  102. package/.next/server/app/dashboard/quota.rsc +8 -8
  103. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +8 -8
  104. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +8 -8
  105. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  106. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  107. package/.next/server/app/dashboard/settings/pricing.html +1 -1
  108. package/.next/server/app/dashboard/settings/pricing.rsc +5 -5
  109. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
  110. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  111. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +5 -5
  112. package/.next/server/app/dashboard/token-saver.html +1 -1
  113. package/.next/server/app/dashboard/token-saver.rsc +6 -6
  114. package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +6 -6
  115. package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
  116. package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  117. package/.next/server/app/dashboard/usage.html +2 -2
  118. package/.next/server/app/dashboard/usage.rsc +7 -7
  119. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +7 -7
  120. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +7 -7
  121. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  122. package/.next/server/app/dashboard.html +1 -1
  123. package/.next/server/app/dashboard.rsc +7 -7
  124. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +7 -7
  125. package/.next/server/app/dashboard.segments/_full.segment.rsc +7 -7
  126. package/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  127. package/.next/server/app/index.html +1 -1
  128. package/.next/server/app/index.rsc +5 -5
  129. package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  130. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  131. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  132. package/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  133. package/.next/server/app/landing.html +1 -1
  134. package/.next/server/app/landing.rsc +6 -6
  135. package/.next/server/app/landing.segments/_full.segment.rsc +6 -6
  136. package/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  137. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +6 -6
  138. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  139. package/.next/server/app/login.html +1 -1
  140. package/.next/server/app/login.rsc +5 -5
  141. package/.next/server/app/login.segments/_full.segment.rsc +5 -5
  142. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  143. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +5 -5
  144. package/.next/server/app/page_client-reference-manifest.js +1 -1
  145. package/.next/server/app-paths-manifest.json +9 -9
  146. package/.next/server/chunks/1649.js +1 -1
  147. package/.next/server/chunks/1751.js +1 -1
  148. package/.next/server/chunks/2143.js +1 -1
  149. package/.next/server/chunks/2282.js +1 -1
  150. package/.next/server/chunks/2531.js +1 -1
  151. package/.next/server/chunks/3671.js +1 -1
  152. package/.next/server/chunks/6343.js +12 -12
  153. package/.next/server/chunks/6617.js +1 -1
  154. package/.next/server/chunks/7591.js +1 -1
  155. package/.next/server/chunks/7904.js +1 -1
  156. package/.next/server/chunks/9429.js +1 -1
  157. package/.next/server/middleware-build-manifest.js +1 -1
  158. package/.next/server/pages/404.html +1 -1
  159. package/.next/server/pages/500.html +1 -1
  160. package/.next/server/server-reference-manifest.js +1 -1
  161. package/.next/server/server-reference-manifest.json +1 -1
  162. package/.next/static/chunks/1660-e0fb9957b437ec4a.js +1 -0
  163. package/.next/static/chunks/{1699-49be310981e2759e.js → 1699-13ee6864a8a31a96.js} +2 -2
  164. package/.next/static/chunks/{3577-1f02993330d7fba7.js → 3577-cd98d40e3099e1b0.js} +1 -1
  165. package/.next/static/chunks/{5862-6f3a3a6d4c00100d.js → 5862-f98c2f3d480b80d2.js} +1 -1
  166. package/.next/static/chunks/{9150-32b4247b1af5e206.js → 9150-8316559e1687b4a8.js} +1 -1
  167. package/.next/static/chunks/{9ce8c186-6cd204e9c27ecee1.js → 9ce8c186-3c7d7dbc5d428052.js} +1 -1
  168. package/CHANGELOG.md +7 -0
  169. package/open-sse/config/opencodeGo.js +3 -2
  170. package/open-sse/executors/opencode-go.js +7 -0
  171. package/open-sse/handlers/chatCore.js +7 -14
  172. package/open-sse/providers/registry/opencode-go.js +116 -31
  173. package/open-sse/services/provider.js +27 -0
  174. package/package.json +1 -1
  175. package/.next/static/chunks/1660-c4c1cfa3cb7c9b2e.js +0 -1
  176. /package/.next/static/{EsP8l_VAPRRfBiiJPJqQe → alTg1qNVWmX6-0j1DLgF7}/_buildManifest.js +0 -0
  177. /package/.next/static/{EsP8l_VAPRRfBiiJPJqQe → alTg1qNVWmX6-0j1DLgF7}/_ssgManifest.js +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to 10Router will be documented in this file.
4
4
 
5
+ ## [0.1.17] — 2026-10-26
6
+
7
+ - Fix: OpenCode Go routed each model to the provider's default endpoint instead of one it actually serves. An OpenAI-format client asking for a claude-only model (`claude-haiku-5-5`, `minimax-m2.7`) was sent to `/chat/completions` and rejected upstream with `ModelProtocolUnsupported`; `chatCore` and the tests now share `resolveModelTransport` (`open-sse/services/provider.js`), which prefers the sourceFormat-matched endpoint (no translation) and otherwise a model-declared one.
8
+ - OpenCode Go transports are ordered `claude → openai → openai-responses → gemini`, so the fallback prefers Anthropic Messages, which is what Claude Code traffic uses.
9
+ - OpenCode Go `supportedFormats` re-verified against the live endpoints (the published table is stale): `kimi-k3`, `kimi-k3.1-pro`, `minimax-m3` and `deepseek-v4.1-flash` also answer on `/messages`, most chat models also answer `/responses`, and `minimax-m2.7` is Messages-only. Models disabled in an account's console read as unavailable, so only `ModelProtocolUnsupported` narrows a model's formats.
10
+ - Added the documented `step-5-preview` and `beam-free` models, plus `gemini-4-argon` on the Google wire: the executor builds the model-scoped `/{model}:generateContent` URL and authenticates with `x-goog-api-key`.
11
+
5
12
  ## [0.1.16] — 2026-10-26
6
13
 
7
14
  - Removed the fish-audio, glm-cn, groq, huggingface, minimax, minimax-cn, siliconflow, vercel-ai-gateway, xiaomi-tokenplan and xquik providers: registry entries, executors, usage, TTS and image handlers, logos and their tests are gone.
@@ -2,8 +2,9 @@
2
2
  // Limits and model access are enforced server-side; nothing here gates requests.
3
3
  export const OPENCODE_GO_DOCS_URL = "https://opencode.ai/v2/docs/console/go";
4
4
 
5
- // Wire formats Go serves, matching the registry transport `format` values. A Go key
6
- // must be accepted by every endpoint here, so the connection probe checks all of them.
5
+ // Wire formats the connection probe covers, matching registry transport `format`
6
+ // values. The Google wire (`/google/v1beta/models/{model}`) is served for a single
7
+ // model and is not probed, because its URL depends on that model's availability.
7
8
  export const OPENCODE_GO_ENDPOINTS = [
8
9
  {
9
10
  format: "openai",
@@ -50,6 +50,13 @@ export class OpenCodeGoExecutor extends DefaultExecutor {
50
50
  buildUrl(model, stream, urlIndex = 0, credentials = null) {
51
51
  // Muse Spark lives on /responses even when a stale runtimeTransport leaks in.
52
52
  if (isResponsesModel(model)) return RESPONSES_BASE_URL;
53
+ // Google wire carries the model id in the path, unlike the OpenAI/Anthropic
54
+ // endpoints whose transport URL is the full target.
55
+ const transport = credentials?.runtimeTransport;
56
+ if (transport?.format === "gemini") {
57
+ const action = stream ? "streamGenerateContent?alt=sse" : "generateContent";
58
+ return `${transport.baseUrl}/${baseModelId(model)}:${action}`;
59
+ }
53
60
  return super.buildUrl(model, stream, urlIndex, credentials);
54
61
  }
55
62
 
@@ -1,4 +1,4 @@
1
- import { detectFormat, getTargetFormat, resolveTransport } from "../services/provider.js";
1
+ import { detectFormat, getTargetFormat, resolveModelTransport } from "../services/provider.js";
2
2
  import { translateRequest } from "../translator/index.js";
3
3
  import {
4
4
  applyThinking,
@@ -138,20 +138,13 @@ export async function handleChatCore({
138
138
  const alias = PROVIDER_ID_TO_ALIAS[provider] || provider;
139
139
  const modelTargetFormat = getModelTargetFormat(alias, model);
140
140
  // Multi-endpoint providers: pick transport matching sourceFormat → zero translation.
141
- // Per-model guard: only use the transport when the model declares support for that
142
- // sourceFormat — opencode-go models differ in endpoint support (kimi/glm only do
143
- // /chat/completions), so without this guard a claude-format request would wrongly
144
- // route kimi to /messages.
141
+ // Guarded per model: opencode-go models differ in endpoint support, so a
142
+ // claude-format request must not go to /messages for kimi/glm and an OpenAI one
143
+ // must not go to /chat/completions for claude-haiku-5-5 (upstream answers
144
+ // ModelProtocolUnsupported). When the client format has no endpoint, the model's
145
+ // preferred declared endpoint is used and translation handles the wire change.
145
146
  const modelSupportedFormats = getModelSupportedFormats(alias, model);
146
- const runtimeTransport = resolveTransport(provider, sourceFormat);
147
- // Per-model guard: when a model declares supportedFormats, only use the
148
- // sourceFormat-matched transport if that format is declared (opencode-go models
149
- // differ — kimi/glm only do /chat/completions). Undeclared models keep the
150
- // upstream default (use the transport), preserving behavior for glm/deepseek/...
151
- const useTransport =
152
- !modelSupportedFormats || modelSupportedFormats.includes(sourceFormat)
153
- ? runtimeTransport
154
- : null;
147
+ const useTransport = resolveModelTransport(provider, sourceFormat, modelSupportedFormats);
155
148
  // A source-format-matched endpoint keeps the request lossless. Prefer it
156
149
  // over a model-level targetFormat, which is only the fallback for clients
157
150
  // whose wire format has no supported transport (for example MiniMax-M3:
@@ -25,8 +25,15 @@ export default {
25
25
  },
26
26
  // Multi-endpoint: pick the transport matching the client sourceFormat to skip
27
27
  // translation. Guarded per-model by `supportedFormats` (see chatCore) because
28
- // opencode-go models differ in endpoint support.
28
+ // opencode-go models differ in endpoint support. Order is the fallback
29
+ // preference when the client format has no endpoint on the model: Anthropic
30
+ // first (Claude Code is the main client), then Chat Completions, then Responses.
29
31
  transports: [
32
+ {
33
+ format: "claude",
34
+ baseUrl: "https://opencode.ai/inference/go/anthropic/v1/messages",
35
+ auth: { combined: true, header: "x-api-key", scheme: "raw", anthropicVersion: true },
36
+ },
30
37
  {
31
38
  format: "openai",
32
39
  baseUrl: "https://opencode.ai/inference/go/openai/v1/chat/completions",
@@ -35,58 +42,122 @@ export default {
35
42
  // (400 unknown field "thinking"), so normalize reasoning to reasoning_effort.
36
43
  thinkingFormat: "openai",
37
44
  },
38
- {
39
- format: "claude",
40
- baseUrl: "https://opencode.ai/inference/go/anthropic/v1/messages",
41
- auth: { combined: true, header: "x-api-key", scheme: "raw", anthropicVersion: true },
42
- },
43
45
  {
44
46
  format: "openai-responses",
45
47
  baseUrl: "https://opencode.ai/inference/go/openai/v1/responses",
46
48
  auth: { combined: true, header: "Authorization", scheme: "bearer" },
47
49
  thinkingFormat: "openai",
48
50
  },
51
+ {
52
+ // Google protocol: the model id is a path segment, so the executor appends
53
+ // `/{model}:generateContent` instead of using baseUrl as the full endpoint.
54
+ format: "gemini",
55
+ baseUrl: "https://opencode.ai/inference/go/google/v1beta/models",
56
+ auth: { combined: true, header: "x-goog-api-key", scheme: "raw" },
57
+ },
49
58
  ],
50
- // supportedFormats follow the endpoint table in https://opencode.ai/v2/docs/console/go
59
+ // supportedFormats are the endpoints each model actually answers on. The docs table
60
+ // is incomplete (it omits models a Go key can reach and lists protocols the gateway
61
+ // rejects); these values were verified against the live Go endpoints. claude comes
62
+ // first on purpose: most 10Router traffic is Claude Code, which then needs no
63
+ // translation. Probes ran on one account, so "model unavailable" can mean the model
64
+ // is disabled in that account's console — do not narrow a model's formats for it;
65
+ // only ModelProtocolUnsupported proves an endpoint is unsupported.
51
66
  models: [
52
- { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", supportedFormats: ["openai"] },
53
- { id: "glm-5.3-flash", name: "GLM 5.3 Flash (Vision)", supportedFormats: ["openai"] },
54
- { id: "glm-5.3", name: "GLM 5.3", supportedFormats: ["openai"] },
55
- { id: "glm-5.2", name: "GLM 5.2", supportedFormats: ["openai"] },
56
- { id: "glm-5.1", name: "GLM 5.1", supportedFormats: ["openai"] },
57
- { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", supportedFormats: ["openai"] },
58
- { id: "kimi-k2.6", name: "Kimi K2.6", supportedFormats: ["openai"] },
59
- { id: "kimi-k3", name: "Kimi K3", supportedFormats: ["openai"] },
60
- { id: "kimi-k3.1-pro", name: "Kimi K3.1 Pro", supportedFormats: ["openai"] },
67
+ {
68
+ id: "deepseek-v4.1-flash",
69
+ name: "DeepSeek V4.1 Flash",
70
+ supportedFormats: ["claude", "openai", "openai-responses"],
71
+ },
72
+ {
73
+ id: "glm-5.3-flash",
74
+ name: "GLM 5.3 Flash (Vision)",
75
+ supportedFormats: ["openai", "openai-responses"],
76
+ },
77
+ { id: "glm-5.3", name: "GLM 5.3", supportedFormats: ["openai", "openai-responses"] },
78
+ { id: "glm-5.2", name: "GLM 5.2", supportedFormats: ["openai", "openai-responses"] },
79
+ { id: "glm-5.1", name: "GLM 5.1", supportedFormats: ["openai", "openai-responses"] },
80
+ {
81
+ id: "kimi-k2.7-code",
82
+ name: "Kimi K2.7 Code",
83
+ supportedFormats: ["openai", "openai-responses"],
84
+ },
85
+ { id: "kimi-k2.6", name: "Kimi K2.6", supportedFormats: ["openai", "openai-responses"] },
86
+ {
87
+ id: "kimi-k3",
88
+ name: "Kimi K3",
89
+ supportedFormats: ["claude", "openai", "openai-responses"],
90
+ },
91
+ {
92
+ id: "kimi-k3.1-pro",
93
+ name: "Kimi K3.1 Pro",
94
+ supportedFormats: ["claude", "openai", "openai-responses"],
95
+ },
61
96
  {
62
97
  id: "deepseek-v4-pro",
63
98
  name: "DeepSeek V4 Pro",
64
- supportedFormats: ["openai", "claude", "openai-responses"],
99
+ supportedFormats: ["claude", "openai", "openai-responses"],
65
100
  },
66
101
  {
67
102
  id: "deepseek-v4-flash",
68
103
  name: "DeepSeek V4 Flash",
69
- supportedFormats: ["openai", "claude", "openai-responses"],
104
+ supportedFormats: ["claude", "openai", "openai-responses"],
70
105
  },
71
106
  {
72
107
  id: "deepseek-v4-flash-vision-exp",
73
108
  name: "DeepSeek V4 Flash Vision (Exp)",
74
- supportedFormats: ["openai", "claude", "openai-responses"],
109
+ supportedFormats: ["claude", "openai", "openai-responses"],
110
+ },
111
+ { id: "longcat-2.0", name: "LongCat 2.0", supportedFormats: ["openai", "openai-responses"] },
112
+ {
113
+ id: "mimo-v2.6-flash",
114
+ name: "MiMo V2.6 Flash",
115
+ supportedFormats: ["openai", "openai-responses"],
75
116
  },
76
- { id: "longcat-2.0", name: "LongCat 2.0", supportedFormats: ["openai"] },
77
- { id: "mimo-v2.6-flash", name: "MiMo V2.6 Flash", supportedFormats: ["openai"] },
78
- { id: "mimo-v2.6-pro", name: "MiMo V2.6 Pro", supportedFormats: ["openai"] },
79
- { id: "mimo-v2.5", name: "MiMo V2.5", supportedFormats: ["openai"] },
117
+ {
118
+ id: "mimo-v2.6-pro",
119
+ name: "MiMo V2.6 Pro",
120
+ supportedFormats: ["openai", "openai-responses"],
121
+ },
122
+ { id: "mimo-v2.5", name: "MiMo V2.5", supportedFormats: ["openai", "openai-responses"] },
123
+ // "Unsupported model" on every wire: either retired or disabled in the account's
124
+ // console, which the probe cannot tell apart. Keep the documented Chat Completions
125
+ // route instead of narrowing what other accounts can use.
80
126
  { id: "mimo-v2.5-pro", name: "MiMo V2.5 Pro", supportedFormats: ["openai"] },
81
- { id: "minimax-m3", name: "MiniMax M3", supportedFormats: ["openai", "claude"] },
82
- { id: "minimax-m3.1-flash", name: "MiniMax M3.1 Flash", supportedFormats: ["openai"] },
83
- { id: "minimax-m2.7", name: "MiniMax M2.7", supportedFormats: ["openai", "claude"] },
127
+ {
128
+ id: "minimax-m3",
129
+ name: "MiniMax M3",
130
+ supportedFormats: ["claude", "openai", "openai-responses"],
131
+ },
132
+ {
133
+ id: "minimax-m3.1-flash",
134
+ name: "MiniMax M3.1 Flash",
135
+ supportedFormats: ["claude", "openai"],
136
+ },
137
+ { id: "minimax-m2.7", name: "MiniMax M2.7", supportedFormats: ["claude"] },
84
138
  { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", supportedFormats: ["claude"] },
85
- { id: "qwen3.8-max", name: "Qwen 3.8 Max", supportedFormats: ["openai", "claude"] },
86
- { id: "qwen3.8-flash", name: "Qwen 3.8 Flash", supportedFormats: ["openai", "claude"] },
87
- { id: "qwen3.7-plus", name: "Qwen 3.7 Plus", supportedFormats: ["openai", "claude"] },
88
- { id: "hy4-preview", name: "Hy4 Preview", supportedFormats: ["openai"] },
89
- { id: "hy3", name: "Hy3", supportedFormats: ["openai"] },
139
+ {
140
+ id: "qwen3.8-max",
141
+ name: "Qwen 3.8 Max",
142
+ supportedFormats: ["claude", "openai", "openai-responses"],
143
+ },
144
+ {
145
+ id: "qwen3.8-flash",
146
+ name: "Qwen 3.8 Flash",
147
+ supportedFormats: ["claude", "openai", "openai-responses"],
148
+ },
149
+ {
150
+ id: "qwen3.7-plus",
151
+ name: "Qwen 3.7 Plus",
152
+ supportedFormats: ["claude", "openai", "openai-responses"],
153
+ },
154
+ { id: "hy4-preview", name: "Hy4 Preview", supportedFormats: ["openai", "openai-responses"] },
155
+ { id: "hy3", name: "Hy3", supportedFormats: ["openai", "openai-responses"] },
156
+ {
157
+ id: "step-5-preview",
158
+ name: "Step 5 Preview",
159
+ supportedFormats: ["openai", "openai-responses"],
160
+ },
90
161
  {
91
162
  id: "space-bunny-free",
92
163
  name: "Space Bunny Free",
@@ -99,6 +170,20 @@ export default {
99
170
  supportedFormats: ["openai"],
100
171
  tier: "free",
101
172
  },
173
+ {
174
+ id: "beam-free",
175
+ name: "Beam Free",
176
+ supportedFormats: ["openai", "openai-responses"],
177
+ tier: "free",
178
+ },
179
+ // Google wire only (documented). Every client format pivots through OpenAI to
180
+ // gemini, and the executor builds `/{model}:generateContent` from the transport.
181
+ {
182
+ id: "gemini-4-argon",
183
+ name: "Gemini 4 Argon",
184
+ targetFormat: "gemini",
185
+ supportedFormats: ["gemini"],
186
+ },
102
187
  // Served by /inference/go/openai/v1/responses only — the responses-only entry forces chatCore
103
188
  // past the sourceFormat-matched transports into translation (see chatCore guard).
104
189
  {
@@ -158,6 +158,33 @@ export function resolveTransport(provider, sourceFormat) {
158
158
  return transports.find((t) => t.format === sourceFormat) || null;
159
159
  }
160
160
 
161
+ // Fallback transport for a multi-endpoint provider when the client's wire format
162
+ // has no endpoint on this model (per-model `supportedFormats`). Without it the
163
+ // request would go to the provider's default URL and upstream would answer
164
+ // ModelProtocolUnsupported (opencode-go: claude-haiku-5-5 has no /chat/completions).
165
+ // The registry's transport order is the preference order, so providers can put the
166
+ // endpoint real clients use most first.
167
+ export function resolveFallbackTransport(provider, supportedFormats) {
168
+ if (!Array.isArray(supportedFormats) || !supportedFormats.length) return null;
169
+ const config = PROVIDERS[provider];
170
+ const transports = config?.transports;
171
+ if (!Array.isArray(transports) || !transports.length) return null;
172
+ return transports.find((t) => supportedFormats.includes(t.format || "openai")) || null;
173
+ }
174
+
175
+ // Transport for one model: the sourceFormat-matched endpoint when the model
176
+ // declares that format (zero translation), otherwise the model's preferred
177
+ // declared endpoint. Undeclared models keep the old behavior — the matched
178
+ // transport or the provider default.
179
+ export function resolveModelTransport(provider, sourceFormat, supportedFormats) {
180
+ const matchesSource = !supportedFormats || supportedFormats.includes(sourceFormat);
181
+ if (matchesSource) {
182
+ const matched = resolveTransport(provider, sourceFormat);
183
+ if (matched) return matched;
184
+ }
185
+ return resolveFallbackTransport(provider, supportedFormats);
186
+ }
187
+
161
188
  // Check if last message is from user
162
189
  export function isLastMessageFromUser(body) {
163
190
  const messages = body.messages || body.contents;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amir83nasr/10router",
3
- "version": "0.1.16",
3
+ "version": "0.1.17",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/Amir83Nasr/10Router.git"
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1660],{10671:(e,a,i)=>{i.d(a,{A:()=>m});var t=i(11461);let o={"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"};(function(){switch((0,t.arch)()){case"x64":case"arm64":case"ia32":return;default:return(0,t.arch)()}})(),function(){switch((0,t.platform)()){case"darwin":case"win32":case"linux":case"freebsd":return;default:return(0,t.platform)()}}();let n="https://daily-cloudcode-pa.googleapis.com",s="antigravity/ide/2.11.0 darwin/arm64",r="0.154.0",m=[{id:"antigravity",priority:20,alias:"ag",uiAlias:"ag",display:{name:"Antigravity",icon:"rocket_launch",color:"#F59E0B",website:"https://antigravity.google",notice:{signupUrl:"https://antigravity.google"},deprecated:!0,deprecationNotice:"RISK_NOTICE"},category:"oauth",serviceKinds:["llm","image","webSearch"],transport:{baseUrls:[n],format:"antigravity",headers:{"User-Agent":s},retry:{429:{attempts:3},500:{attempts:3},503:{attempts:3}},usage:{quotaApiUrl:`${n}/v1internal:fetchAvailableModels`,quotaSummaryApiUrl:`${n}/v1internal:retrieveUserQuotaSummary`,loadProjectApiUrl:"https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",tokenUrl:"https://oauth2.googleapis.com/token"},clientId:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecret:"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"},models:[{id:"gemini-3.8-flash-high",name:"Gemini 3.8 Flash (High)",upstreamModelId:"gemini-3.8-flash-high(high)"},{id:"gemini-3.8-flash-medium",name:"Gemini 3.8 Flash (Medium)",upstreamModelId:"gemini-3.8-flash-medium(medium)"},{id:"gemini-3.8-flash-low",name:"Gemini 3.8 Flash (Low)",upstreamModelId:"gemini-3.8-flash-low(low)"},{id:"gemini-3.8-flash",name:"Gemini 3.8 Flash",upstreamModelId:"gemini-3.8-flash-medium(medium)"},{id:"gemini-3.7-flash-high",name:"Gemini 3.7 Flash (High)",upstreamModelId:"gemini-3.7-flash-tiered(high)"},{id:"gemini-3.7-flash-medium",name:"Gemini 3.7 Flash (Medium)",upstreamModelId:"gemini-3.7-flash-tiered(medium)"},{id:"gemini-3.7-flash-low",name:"Gemini 3.7 Flash (Low)",upstreamModelId:"gemini-3.7-flash-tiered(low)"},{id:"gemini-3.6-flash-high",name:"Gemini 3.6 Flash (High)",upstreamModelId:"gemini-3.6-flash-tiered(high)"},{id:"gemini-3.6-flash-medium",name:"Gemini 3.6 Flash (Medium)",upstreamModelId:"gemini-3.6-flash-tiered(medium)"},{id:"gemini-3.6-flash-low",name:"Gemini 3.6 Flash (Low)",upstreamModelId:"gemini-3.6-flash-tiered(low)"},{id:"gemini-3.5-flash-high",name:"Gemini 3.5 Flash (High)"},{id:"gemini-3-flash-agent",name:"Gemini 3.5 Flash (High)"},{id:"gemini-3.5-flash-low",name:"Gemini 3.5 Flash (Medium)"},{id:"gemini-3.5-flash-extra-low",name:"Gemini 3.5 Flash (Low)"},{id:"gemini-pro-agent",name:"Gemini 3.1 Pro (High)"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro (Low)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6 (Thinking)"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 (Thinking)"},{id:"gpt-oss-120b-medium",name:"GPT-OSS 120B (Medium)"},{id:"gemini-3-flash",name:"Gemini 3 Flash",thinking:!1},{id:"gemini-3.1-flash-image",name:"Gemini 3.1 Flash (Image)",kind:"image",imageGen:!0,capabilities:["textToImage"]}],oauth:{authorizeUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",userInfoUrl:"https://www.googleapis.com/oauth2/v1/userinfo",scopes:["https://www.googleapis.com/auth/cloud-platform","https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/userinfo.profile","https://www.googleapis.com/auth/cclog","https://www.googleapis.com/auth/experimentsandconfigs"],apiEndpoint:"https://daily-cloudcode-pa.googleapis.com",apiVersion:"v1internal",loadCodeAssistEndpoint:"https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",onboardUserEndpoint:"https://cloudcode-pa.googleapis.com/v1internal:onboardUser",loadCodeAssistUserAgent:s,refreshLeadMs:3e5},searchViaChat:{defaultModel:"gemini-2.5-flash",endpoint:`${n}/v1internal:generateContent`,freeTier:"Free — Google Search grounding through an Antigravity OAuth account."},features:{usage:!0}},{id:"claude",priority:10,alias:"cc",uiAlias:"cc",display:{name:"Claude Code",icon:"smart_toy",color:"#D97757",website:"https://claude.ai",notice:{signupUrl:"https://claude.ai"},deprecated:!0,deprecationNotice:"RISK_NOTICE"},category:"oauth",transport:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",urlSuffix:"?beta=true",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advanced-tool-use-2025-11-20,effort-2025-11-24,structured-outputs-2025-12-15,fast-mode-2026-02-01,redact-thinking-2026-02-12,token-efficient-tools-2026-03-28","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/2.1.258 (external, sdk-cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.14.0","X-Stainless-Package-Version":"0.80.0","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":"arm64","X-Stainless-Os":"MacOS","X-Stainless-Timeout":"600"},quirks:{cloakToolsOnOAuth:!0},auth:{apiKey:{header:"x-api-key",scheme:"raw"},oauth:{header:"Authorization",scheme:"bearer"}},usage:{oauthUrl:"https://api.anthropic.com/api/oauth/usage",orgUrl:"https://api.anthropic.com/v1/organizations/{org_id}/usage",settingsUrl:"https://api.anthropic.com/v1/settings"}},models:[{id:"claude-opus-5",name:"Claude Opus 5"},{id:"claude-fable-5-1",name:"Claude Fable 5.1"},{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}],oauth:{clientId:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",authorizeUrl:"https://claude.ai/oauth/authorize",tokenUrl:"https://api.anthropic.com/v1/oauth/token",scopes:["org:create_api_key","user:profile","user:inference"],codeChallengeMethod:"S256",refreshLeadMs:144e5,refresh:{encoding:"json"}},features:{usage:!0}},{id:"codex",priority:30,alias:"cx",uiAlias:"cx",display:{name:"OpenAI Codex",icon:"code",color:"#3B82F6",website:"https://chatgpt.com/codex",notice:{signupUrl:"https://chatgpt.com/codex"},deprecated:!0,deprecationNotice:"RISK_NOTICE",kindNotice:{image:"Requires a ChatGPT Plus (or higher) account. Free accounts are not supported for image generation."}},category:"oauth",thinkingConfig:{options:["auto","none","low","medium","high"],defaultMode:"auto"},transport:{baseUrl:"https://chatgpt.com/backend-api/codex/responses",format:"openai-responses",forceStream:!0,cliVersion:r,headers:{originator:"codex_cli_rs","User-Agent":`codex_cli_rs/${r}`},usage:{url:"https://chatgpt.com/backend-api/wham/usage",resetCreditsUrl:"https://chatgpt.com/backend-api/wham/rate-limit-reset-credits",resetCreditsConsumeUrl:"https://chatgpt.com/backend-api/wham/rate-limit-reset-credits/consume"}},models:[{id:"gpt-6-astra",name:"GPT 6.0 Astra"},{id:"gpt-5.6-sol",name:"GPT 5.6 Sol"},{id:"gpt-5.6-sol-review",name:"GPT 5.6 Sol Review",upstreamModelId:"gpt-5.6-sol",quotaFamily:"review"},{id:"gpt-5.6-terra",name:"GPT 5.6 Terra"},{id:"gpt-5.6-terra-review",name:"GPT 5.6 Terra Review",upstreamModelId:"gpt-5.6-terra",quotaFamily:"review"},{id:"gpt-5.6-luna",name:"GPT 5.6 Luna"},{id:"gpt-5.6-luna-review",name:"GPT 5.6 Luna Review",upstreamModelId:"gpt-5.6-luna",quotaFamily:"review"},{id:"gpt-5.5",name:"GPT 5.5"},{id:"gpt-5.5-review",name:"GPT 5.5 Review",upstreamModelId:"gpt-5.5",quotaFamily:"review"},{id:"gpt-5.4",name:"GPT 5.4"},{id:"gpt-5.4-review",name:"GPT 5.4 Review",upstreamModelId:"gpt-5.4",quotaFamily:"review"},{id:"gpt-5.4-mini",name:"GPT 5.4 Mini"},{id:"gpt-5.4-mini-review",name:"GPT 5.4 Mini Review",upstreamModelId:"gpt-5.4-mini",quotaFamily:"review"},{id:"gpt-5.3-codex-spark",name:"GPT 5.3 Codex Spark"},{id:"gpt-5.3-codex-spark-review",name:"GPT 5.3 Codex Spark Review",upstreamModelId:"gpt-5.3-codex-spark",quotaFamily:"review"},{id:"codex-auto-review",name:"Codex Auto Review",upstreamModelId:"codex-auto-review",quotaFamily:"review"},{id:"gpt-image-2.5",name:"GPT Image 2.5",capabilities:["text2img","edit","multiImage"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-image-2.5-flare",name:"GPT Image 2.5 Flare",capabilities:["text2img","edit","multiImage"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-image-2.5-sunburst",name:"GPT Image 2.5 Sunburst",capabilities:["text2img","edit","multiImage"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-image-2",name:"GPT Image 2",capabilities:["text2img","edit","multiImage"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-image-1.5",name:"GPT Image 1.5",capabilities:["text2img","edit","multiImage"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.6-sol-image",name:"GPT 5.6 Sol Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.6-terra-image",name:"GPT 5.6 Terra Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.6-luna-image",name:"GPT 5.6 Luna Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.5-image",name:"GPT 5.5 Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.4-image",name:"GPT 5.4 Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.3-image",name:"GPT 5.3 Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"}],serviceKinds:["llm","image"],oauth:{clientId:"app_EMoamEEZ73f0CkXaXp7hrann",authorizeUrl:"https://auth.openai.com/oauth/authorize",tokenUrl:"https://auth.openai.com/oauth/token",scope:"openid profile email offline_access",codeChallengeMethod:"S256",fixedPort:1455,callbackPath:"/auth/callback",extraParams:{id_token_add_organizations:"true",codex_cli_simplified_flow:"true",originator:"codex_cli_rs"},refreshLeadMs:432e6,refresh:{encoding:"form",scope:"openid profile email offline_access"},maxRefreshAgeMs:6912e5,trackRefreshAt:!0},features:{usage:!0}},{id:"cursor",priority:50,alias:"cu",uiAlias:"cu",display:{name:"Cursor IDE",icon:"edit_note",color:"#00D4AA",website:"https://cursor.com",notice:{signupUrl:"https://cursor.com"}},category:"oauth",transport:{baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",format:"cursor",headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"3.12.17"},models:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"claude-4.6-opus-max",name:"Claude 4.6 Opus Max"},{id:"claude-4.6-sonnet-medium-thinking",name:"Claude 4.6 Sonnet Medium Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"}],oauth:{apiEndpoint:"https://api2.cursor.sh",chatEndpoint:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",modelsEndpoint:"/agent.v1.AgentService/GetUsableModels",api3Endpoint:"https://api3.cursor.sh",agentEndpoint:"https://agent.api5.cursor.sh",agentNonPrivacyEndpoint:"https://agentn.api5.cursor.sh",clientVersion:"3.12.17",clientType:"ide",dbKeys:{accessToken:"cursorAuth/accessToken",machineId:"storage.serviceMachineId"}}},{id:"deepseek",priority:110,alias:"deepseek",aliases:["ds"],uiAlias:"ds",display:{name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com",notice:{apiKeyUrl:"https://platform.deepseek.com/api_keys"}},category:"apikey",transport:{baseUrl:"https://api.deepseek.com/chat/completions",validateUrl:"https://api.deepseek.com/models",reasoningInject:{scope:"all"},quirks:{claudeSupportedToolTypes:["web_search_20250305","web_search_20260209"]}},transports:[{format:"openai",baseUrl:"https://api.deepseek.com/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"}},{format:"claude",baseUrl:"https://api.deepseek.com/anthropic/v1/messages",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"}}],models:[{id:"deepseek-v4-pro",name:"DeepSeek V4 Pro"},{id:"deepseek-v4-pro-max",name:"DeepSeek V4 Pro Max",upstreamModelId:"deepseek-v4-pro"},{id:"deepseek-v4-pro-none",name:"DeepSeek V4 Pro No Thinking",upstreamModelId:"deepseek-v4-pro"},{id:"deepseek-v4.1-flash",name:"DeepSeek V4.1 Flash"},{id:"deepseek-v4-flash",name:"DeepSeek V4 Flash"},{id:"deepseek-v4-flash-vision-exp",name:"DeepSeek V4 Flash Vision (Exp)"},{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}],features:{usage:!0,usageApikey:!0}},{id:"gemini",priority:50,hasFree:!0,alias:"gemini",display:{name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev",notice:{apiKeyUrl:"https://aistudio.google.com/app/apikey"}},category:"freeTier",authType:"apikey",authModes:["apikey"],mediaPriority:1,transport:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",format:"gemini",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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",auth:{apiKey:{header:"x-goog-api-key",scheme:"raw"},oauth:{header:"Authorization",scheme:"bearer"}}},models:[{id:"gemini-3.8-flash",name:"Gemini 3.8 Flash"},{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash"},{id:"gemini-3.5-flash-lite",name:"Gemini 3.5 Flash Lite"},{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"gemma-4-31b-it",name:"Gemma 4 31B IT"},{id:"gemini-embedding-2-preview",name:"Gemini Embedding 2 Preview",kind:"embedding"},{id:"gemini-embedding-001",name:"Gemini Embedding 001",kind:"embedding"},{id:"text-embedding-005",name:"Text Embedding 005",kind:"embedding"},{id:"text-embedding-004",name:"Text Embedding 004 (Legacy)",kind:"embedding"},{id:"gemini-3.1-flash-image-preview",name:"Gemini 3.1 Flash Image (Nano Banana 2)",params:[],kind:"image"},{id:"gemini-3-pro-image-preview",name:"Gemini 3 Pro Image (Nano Banana Pro)",params:[],kind:"image"},{id:"gemini-2.5-flash-image",name:"Gemini 2.5 Flash Image (Nano Banana)",params:[],kind:"image"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro (Best)",params:["language","prompt"],kind:"stt"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash",params:["language","prompt"],kind:"stt"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite (Cheapest)",params:["language","prompt"],kind:"stt"},{id:"gemini-2.0-flash",name:"Gemini 2.0 Flash",params:["language","prompt"],kind:"stt"},{id:"gemini-3.1-flash-tts-preview",name:"Gemini 3.1 Flash TTS",kind:"tts"},{id:"gemini-2.5-flash-preview-tts",name:"Gemini 2.5 Flash TTS",kind:"tts"},{id:"gemini-2.5-pro-preview-tts",name:"Gemini 2.5 Pro TTS",kind:"tts"},{id:"embedding-001",name:"Embedding 001",dimensions:768,kind:"embedding"}],serviceKinds:["llm","embedding","image","imageToText","webSearch","tts","stt"],ttsConfig:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",authType:"apikey",authHeader:"key",format:"gemini-tts"},sttConfig:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",authType:"apikey",authHeader:"key",format:"gemini-stt"},embeddingConfig:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",authType:"apikey",authHeader:"key"},imageConfig:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models"},searchViaChat:{defaultModel:"gemini-2.5-flash",endpoint:"https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent",pricingUrl:"https://ai.google.dev/pricing",freeTier:"Free tier: 15 RPM, 1M tokens/day on gemini-2.5-flash via AI Studio."}},{id:"glm",priority:140,alias:"glm",display:{name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn",notice:{apiKeyUrl:"https://open.bigmodel.cn/usercenter/apikeys"}},category:"apikey",transport:{baseUrl:"https://api.z.ai/api/anthropic/v1/messages",format:"claude",urlSuffix:"?beta=true",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"},usage:{url:"https://api.z.ai/api/monitor/usage/quota/limit"}},transports:[{format:"openai",baseUrl:"https://api.z.ai/api/coding/paas/v4/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"}},{format:"claude",baseUrl:"https://api.z.ai/api/anthropic/v1/messages",urlSuffix:"?beta=true",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"}}],models:[{id:"glm-5.3",name:"GLM 5.3"},{id:"glm-5.3-flash",name:"GLM 5.3 Flash (Vision)"},{id:"glm-5.2",name:"GLM 5.2"},{id:"glm-5.1",name:"GLM 5.1"},{id:"glm-5-turbo",name:"GLM 5 Turbo"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"}],serviceKinds:["llm","webSearch"],searchConfig:{baseUrl:"https://api.z.ai/api/mcp/web_search_prime/mcp",method:"POST",authType:"apikey",authHeader:"bearer",costPerQuery:0,searchTypes:["web"],defaultMaxResults:5,maxMaxResults:50,timeoutMs:1e4,cacheTTLMs:3e5},features:{usage:!0,usageApikey:!0}},{id:"iflow",hidden:!0,priority:110,alias:"if",display:{name:"iFlow AI",icon:"water_drop",color:"#6366F1",website:"https://iflow.cn",notice:{signupUrl:"https://iflow.cn"}},category:"oauth",transport:{baseUrl:"https://apis.iflow.cn/v1/chat/completions",thinkingFormat:"openai",headers:{"User-Agent":"iFlow-Cli"}},models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 VL Plus"},{id:"qwen3-max-preview",name:"Qwen3 Max Preview"},{id:"qwen3-235b",name:"Qwen3 235B A22B"},{id:"qwen3-235b-a22b-instruct",name:"Qwen3 235B A22B Instruct"},{id:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-v3.2",name:"DeepSeek V3.2 Exp"},{id:"deepseek-v3.1",name:"DeepSeek V3.1 Terminus"},{id:"deepseek-v3",name:"DeepSeek V3 671B"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"glm-4.7",name:"GLM 4.7"},{id:"iflow-rome-30ba3b",name:"iFlow ROME"}],oauth:{clientId:"10009311001",clientSecret:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",authorizeUrl:"https://iflow.cn/oauth",tokenUrl:"https://iflow.cn/oauth/token",userInfoUrl:"https://iflow.cn/api/oauth/getUserInfo",extraParams:{loginMethod:"phone",type:"phone"},refreshLeadMs:864e5}},{id:"openai",priority:30,alias:"openai",display:{name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com",notice:{apiKeyUrl:"https://platform.openai.com/api-keys"}},category:"apikey",thinkingConfig:{options:["auto","none","low","medium","high"],defaultMode:"auto"},transport:{baseUrl:"https://api.openai.com/v1/chat/completions",forceStream:!0},models:[{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.4-nano",name:"GPT-5.4 Nano"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-nano",name:"GPT-5 Nano"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini"},{id:"gpt-4.1-nano",name:"GPT-4.1 Nano"},{id:"o3",name:"O3"},{id:"o3-mini",name:"O3 Mini"},{id:"o3-pro",name:"O3 Pro"},{id:"o4-mini",name:"O4 Mini"},{id:"o1",name:"O1"},{id:"o1-mini",name:"O1 Mini"},{id:"text-embedding-3-large",name:"Text Embedding 3 Large",kind:"embedding"},{id:"text-embedding-3-small",name:"Text Embedding 3 Small",kind:"embedding"},{id:"text-embedding-ada-002",name:"Text Embedding Ada 002",kind:"embedding"},{id:"tts-1",name:"TTS-1",kind:"tts"},{id:"tts-1-hd",name:"TTS-1 HD",kind:"tts"},{id:"gpt-4o-mini-tts",name:"GPT-4o Mini TTS",kind:"tts"},{id:"whisper-1",name:"Whisper 1",params:["language","response_format","temperature","prompt"],kind:"stt"},{id:"gpt-4o-transcribe",name:"GPT-4o Transcribe",params:["language","response_format","temperature","prompt"],kind:"stt"},{id:"gpt-4o-mini-transcribe",name:"GPT-4o Mini Transcribe",params:["language","response_format","temperature","prompt"],kind:"stt"},{id:"gpt-image-2.5",name:"GPT Image 2.5",params:["n","size","quality","response_format"],kind:"image"},{id:"gpt-image-2.5-flare",name:"GPT Image 2.5 Flare",params:["n","size","quality","response_format"],kind:"image"},{id:"gpt-image-2.5-sunburst",name:"GPT Image 2.5 Sunburst",params:["n","size","quality","response_format"],kind:"image"},{id:"gpt-image-1",name:"GPT Image 1",params:["n","size","quality","response_format"],kind:"image"},{id:"dall-e-3",name:"DALL-E 3",params:["size","quality","style","response_format"],kind:"image"},{id:"dall-e-2",name:"DALL-E 2",params:["n","size","response_format"],kind:"image"}],serviceKinds:["llm","embedding","tts","stt","image","imageToText","webSearch"],ttsConfig:{baseUrl:"https://api.openai.com/v1/audio/speech",authType:"apikey",authHeader:"bearer",format:"openai",defaultModel:"gpt-4o-mini-tts"},sttConfig:{baseUrl:"https://api.openai.com/v1/audio/transcriptions",authType:"apikey",authHeader:"bearer",format:"openai"},embeddingConfig:{baseUrl:"https://api.openai.com/v1/embeddings",authType:"apikey",authHeader:"bearer"},imageConfig:{baseUrl:"https://api.openai.com/v1/images/generations"},searchViaChat:{defaultModel:"gpt-4o-mini",pricingUrl:"https://openai.com/api/pricing"}},{id:"opencode-go",priority:210,alias:"opencode-go",aliases:["ocg"],uiAlias:"ocg",display:{name:"OpenCode Go",icon:"terminal",color:"#E87040",textIcon:"OC",website:"https://opencode.ai/auth",notice:{text:"OpenCode Go: $10/mo, Go Plus $40/mo. Access to Kimi, GLM, Qwen, MiMo, MiniMax models.",apiKeyUrl:"https://opencode.ai/auth"}},category:"apikey",transport:{baseUrl:"https://opencode.ai/inference/go/openai/v1/chat/completions",headers:{},usage:{url:"https://opencode.ai/inference/go/v1/usage"}},transports:[{format:"openai",baseUrl:"https://opencode.ai/inference/go/openai/v1/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"},thinkingFormat:"openai"},{format:"claude",baseUrl:"https://opencode.ai/inference/go/anthropic/v1/messages",auth:{combined:!0,header:"x-api-key",scheme:"raw",anthropicVersion:!0}},{format:"openai-responses",baseUrl:"https://opencode.ai/inference/go/openai/v1/responses",auth:{combined:!0,header:"Authorization",scheme:"bearer"},thinkingFormat:"openai"}],models:[{id:"deepseek-v4.1-flash",name:"DeepSeek V4.1 Flash",supportedFormats:["openai"]},{id:"glm-5.3-flash",name:"GLM 5.3 Flash (Vision)",supportedFormats:["openai"]},{id:"glm-5.3",name:"GLM 5.3",supportedFormats:["openai"]},{id:"glm-5.2",name:"GLM 5.2",supportedFormats:["openai"]},{id:"glm-5.1",name:"GLM 5.1",supportedFormats:["openai"]},{id:"kimi-k2.7-code",name:"Kimi K2.7 Code",supportedFormats:["openai"]},{id:"kimi-k2.6",name:"Kimi K2.6",supportedFormats:["openai"]},{id:"kimi-k3",name:"Kimi K3",supportedFormats:["openai"]},{id:"kimi-k3.1-pro",name:"Kimi K3.1 Pro",supportedFormats:["openai"]},{id:"deepseek-v4-pro",name:"DeepSeek V4 Pro",supportedFormats:["openai","claude","openai-responses"]},{id:"deepseek-v4-flash",name:"DeepSeek V4 Flash",supportedFormats:["openai","claude","openai-responses"]},{id:"deepseek-v4-flash-vision-exp",name:"DeepSeek V4 Flash Vision (Exp)",supportedFormats:["openai","claude","openai-responses"]},{id:"longcat-2.0",name:"LongCat 2.0",supportedFormats:["openai"]},{id:"mimo-v2.6-flash",name:"MiMo V2.6 Flash",supportedFormats:["openai"]},{id:"mimo-v2.6-pro",name:"MiMo V2.6 Pro",supportedFormats:["openai"]},{id:"mimo-v2.5",name:"MiMo V2.5",supportedFormats:["openai"]},{id:"mimo-v2.5-pro",name:"MiMo V2.5 Pro",supportedFormats:["openai"]},{id:"minimax-m3",name:"MiniMax M3",supportedFormats:["openai","claude"]},{id:"minimax-m3.1-flash",name:"MiniMax M3.1 Flash",supportedFormats:["openai"]},{id:"minimax-m2.7",name:"MiniMax M2.7",supportedFormats:["openai","claude"]},{id:"claude-haiku-5-5",name:"Claude Haiku 5.5",supportedFormats:["claude"]},{id:"qwen3.8-max",name:"Qwen 3.8 Max",supportedFormats:["openai","claude"]},{id:"qwen3.8-flash",name:"Qwen 3.8 Flash",supportedFormats:["openai","claude"]},{id:"qwen3.7-plus",name:"Qwen 3.7 Plus",supportedFormats:["openai","claude"]},{id:"hy4-preview",name:"Hy4 Preview",supportedFormats:["openai"]},{id:"hy3",name:"Hy3",supportedFormats:["openai"]},{id:"space-bunny-free",name:"Space Bunny Free",supportedFormats:["openai"],tier:"free"},{id:"longcat-2.5-preview-free",name:"LongCat 2.5 Preview Free",supportedFormats:["openai"],tier:"free"},{id:"grok-4.7",name:"Grok 4.7",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"grok-4.6",name:"Grok 4.6",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-6-luna",name:"GPT 6 Luna",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.6-luna",name:"GPT 5.6 Luna",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"muse-spark-1.2-contributor",name:"Muse Spark 1.2 Contributor",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"muse-spark-1.3-contributor",name:"Muse Spark 1.3 Contributor",targetFormat:"openai-responses",supportedFormats:["openai-responses"]}],features:{usage:!0,usageApikey:!0}},{id:"opencode",priority:40,hasFree:!0,alias:"oc",uiAlias:"oc",display:{name:"OpenCode Free",icon:"terminal",color:"#E87040",textIcon:"OC"},category:"free",noAuth:!0,transport:{baseUrl:"https://opencode.ai",headers:{"x-opencode-client":"cli"},forceStream:!0,noAuth:!0,thinkingFormat:"openai",quirks:{forceAutoToolChoiceModels:["muse-spark-1.2-contributor-free","muse-spark-1.3-contributor-free"]}},models:[{id:"muse-spark-1.2-contributor-free",name:"Muse Spark 1.2 Contributor Free",targetFormat:"openai-responses",tier:"free"},{id:"muse-spark-1.3-contributor-free",name:"Muse Spark 1.3 Contributor Free",targetFormat:"openai-responses",tier:"free"},{id:"union-alpha",name:"Union Alpha Free",targetFormat:"claude",tier:"free"},{id:"jev-1.13-free",name:"Jev 1.13 Free",kind:"systemone",tier:"free"}],serviceKinds:["llm","systemone"],systemoneConfig:{baseUrl:"https://opencode.ai/inference/systemone/v1/systemone",headers:{"x-opencode-client":"cli","User-Agent":"opencode/latest/2.0.26/cli"}},modelsFetcher:{url:"https://opencode.ai/inference/v1/models",type:"opencode-free"},passthroughModels:!0},{id:"openrouter",priority:10,hasFree:!0,alias:"openrouter",display:{name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",website:"https://openrouter.ai",notice:{text:"Free tier: 27+ free models, no credit card needed, 200 req/day. After 0 credit: 1,000 req/day.",apiKeyUrl:"https://openrouter.ai/settings/keys"}},category:"freeTier",authType:"apikey",authModes:["apikey"],transport:{baseUrl:"https://openrouter.ai/api/v1/chat/completions",thinkingFormat:"openai",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},models:[{id:"openai/text-embedding-3-large",name:"OpenAI Text Embedding 3 Large",kind:"embedding"},{id:"openai/text-embedding-3-small",name:"OpenAI Text Embedding 3 Small",kind:"embedding"},{id:"openai/text-embedding-ada-002",name:"OpenAI Text Embedding Ada 002",kind:"embedding"},{id:"qwen/qwen3-embedding-8b",name:"Qwen3 Embedding 8B",kind:"embedding"},{id:"perplexity/pplx-embed-v1-4b",name:"Perplexity Embed V1 4B",kind:"embedding"},{id:"perplexity/pplx-embed-v1-0.6b",name:"Perplexity Embed V1 0.6B",kind:"embedding"},{id:"nvidia/llama-nemotron-embed-vl-1b-v2:free",name:"NVIDIA Nemotron Embed VL 1B V2 (Free)",kind:"embedding"},{id:"openai/gpt-4o-mini-tts",name:"GPT-4o Mini TTS",kind:"tts"},{id:"openai/tts-1-hd",name:"TTS-1 HD",kind:"tts"},{id:"openai/tts-1",name:"TTS-1",kind:"tts"},{id:"openai/dall-e-3",name:"DALL-E 3 (via OpenRouter)",params:["size","quality","style","response_format"],kind:"image"},{id:"openai/gpt-image-1",name:"GPT Image 1 (via OpenRouter)",params:["n","size","quality","response_format"],kind:"image"},{id:"google/imagen-3.0-generate-002",name:"Imagen 3 (via OpenRouter)",params:["n","size"],kind:"image"},{id:"black-forest-labs/FLUX.1-schnell",name:"FLUX.1 Schnell (via OpenRouter)",params:["n","size"],kind:"image"},{id:"google/veo-3.1",name:"Veo 3.1 (via OpenRouter)",params:["duration","aspect_ratio","resolution"],kind:"video"},{id:"openai/sora-2-pro",name:"Sora 2 Pro (via OpenRouter)",params:["duration","aspect_ratio","resolution"],kind:"video"},{id:"bytedance/seedance-2.0",name:"Seedance 2.0 (via OpenRouter)",params:["duration","aspect_ratio","resolution"],kind:"video"},{id:"typesafe/jev-1.13",name:"Jev 1.13",kind:"systemone"}],serviceKinds:["llm","embedding","tts","imageToText","video","systemone"],systemoneConfig:{baseUrl:"https://openrouter.ai/api/v1/systemone",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},ttsConfig:{baseUrl:"https://openrouter.ai/api/v1/chat/completions",defaultModel:"openai/gpt-4o-mini-tts",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},embeddingConfig:{baseUrl:"https://openrouter.ai/api/v1/embeddings",authType:"apikey",authHeader:"bearer",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},imageConfig:{baseUrl:"https://openrouter.ai/api/v1/images/generations",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},videoConfig:{baseUrl:"https://openrouter.ai/api/v1/videos",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},modelsFetcher:{url:"https://openrouter.ai/api/v1/models",type:"openrouter-free"},passthroughModels:!0},{id:"xai",priority:280,alias:"xai",display:{name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai",notice:{apiKeyUrl:"https://console.x.ai"}},category:"oauth",authModes:["oauth","apikey"],hasOAuth:!0,transport:{baseUrl:"https://api.x.ai/v1/chat/completions",validateUrl:"https://api.x.ai/v1/models",responsesUrl:"https://api.x.ai/v1/responses",clientId:"b1a00492-073a-47ea-816f-4c329264a828",tokenUrl:"https://auth.x.ai/oauth2/token",refreshUrl:"https://auth.x.ai/oauth2/token"},models:[{id:"grok-4.6",name:"Grok 4.6"},{id:"grok-4.5",name:"Grok 4.5"},{id:"grok-4",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"},{id:"grok-2-image-1212",name:"Grok 2 Image",params:["n","response_format"],kind:"image"},{id:"grok-imagine-video",name:"Grok Imagine Video",params:["duration","aspect_ratio","resolution"],kind:"video"}],serviceKinds:["llm","imageToText","webSearch","image","video"],imageConfig:{baseUrl:"https://api.x.ai/v1/images/generations",bodyFields:["model","prompt","n","response_format"]},videoConfig:{baseUrl:"https://api.x.ai/v1/videos"},searchViaChat:{defaultModel:"grok-4.20-reasoning",endpoint:"https://api.x.ai/v1/responses",pricingUrl:"https://x.ai/api#pricing"}},{id:"xiaomi-mimo",priority:290,alias:"xiaomi-mimo",aliases:["mimo","mimo-desktop","xmd"],uiAlias:"mimo",display:{name:"Xiaomi MiMo",icon:"smart_toy",color:"#FF6900",textIcon:"XM",website:"https://xiaomimimo.com",notice:{apiKeyUrl:"https://platform.xiaomimimo.com/console/api-keys",signupUrl:"https://mimo.xiaomimimo.com/desktop/invite/"}},category:"oauth",authModes:["oauth","apikey"],hasOAuth:!0,serviceKinds:["llm","tts"],transport:{baseUrl:"https://api.xiaomimimo.com/v1/chat/completions",validateUrl:"https://api.xiaomimimo.com/v1/models"},transports:[{format:"openai",baseUrl:"https://api.xiaomimimo.com/v1/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"}},{format:"claude",baseUrl:"https://api.xiaomimimo.com/anthropic/v1/messages",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"}}],models:[{id:"mimo-x-pro-preview",name:"MiMo-X-Pro-Preview",upstreamModelId:"xiaomi/mimo-x-pro-preview",supportedFormats:["openai"]},{id:"mimo-x-flash-preview",name:"MiMo-X-Flash-Preview",upstreamModelId:"xiaomi/mimo-x-flash-preview",supportedFormats:["openai"]},{id:"mimo-v2.5-pro",name:"MiMo V2.5 Pro"},{id:"mimo-v2.5",name:"MiMo V2.5"},{id:"mimo-v2-omni",name:"MiMo V2 Omni"},{id:"mimo-v2-flash",name:"MiMo V2 Flash"},{id:"mimo-v2.5-tts",name:"MiMo V2.5 TTS",kind:"tts"}],ttsConfig:{baseUrl:"https://api.xiaomimimo.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",format:"xiaomi-mimo-tts"},features:{usage:!0,usageApikey:!0},oauth:{custom:!0,authorizeUrl:"https://platform.xiaomimimo.com/authorize",callbackParam:"u",kn:"mimocode"}},{id:"zed",priority:999,alias:"zd",uiAlias:"zd",display:{name:"Zed",icon:"code",color:"#A855F7",website:"https://zed.dev",notice:{signupUrl:"https://zed.dev/native_app_signin"}},category:"oauth",authType:"oauth",hasOAuth:!0,transport:{baseUrl:"https://cloud.zed.dev/completions",format:"openai",forceStream:!0,headers:{"content-type":"application/json"},auth:{combined:!0,header:"Authorization",scheme:"<user_id> <access_token>"},usage:{url:"https://cloud.zed.dev/client/users/me"},modelsUrl:"https://cloud.zed.dev/models"},models:[],passthroughModels:!0,oauth:{authorizeUrl:"https://zed.dev/native_app_signin",platform:"zed",rsaKeyExchange:!0},features:{usage:!0}},{id:"mimo-free",hidden:!0,priority:50,hasFree:!0,alias:"mmf",uiAlias:"mmf",display:{name:"MiMo Code Free",icon:"smart_toy",color:"#FF6900",textIcon:"MF"},category:"free",noAuth:!0,transport:{baseUrl:"https://api.xiaomimimo.com/api/free-ai/openai/chat",noAuth:!0},models:[{id:"mimo-auto",name:"MiMo Auto"}],modelsFetcher:{url:"https://models.dev/api.json",type:"mimo-free"},passthroughModels:!0},{id:"opencode-zen",priority:205,alias:"ocz",aliases:["opencode-zen"],uiAlias:"ocz",display:{name:"OpenCode Zen",icon:"terminal",color:"#E87040",textIcon:"OZ",website:"https://opencode.ai/auth",notice:{text:"OpenCode Zen PAYG: pay-as-you-go, key from https://opencode.ai/auth. Same models as Zen: paid + free tiers on the fast lane.",apiKeyUrl:"https://opencode.ai/auth"}},category:"apikey",transport:{baseUrl:"https://opencode.ai/inference/openai/v1/chat/completions",headers:{}},transports:[{format:"openai",baseUrl:"https://opencode.ai/inference/openai/v1/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"},thinkingFormat:"openai"},{format:"claude",baseUrl:"https://opencode.ai/inference/anthropic/v1/messages",auth:{combined:!0,header:"x-api-key",scheme:"raw",anthropicVersion:!0}},{format:"openai-responses",baseUrl:"https://opencode.ai/inference/openai/v1/responses",auth:{combined:!0,header:"Authorization",scheme:"bearer"},thinkingFormat:"openai"}],models:[{id:"claude-fable-5",name:"Claude Fable 5",supportedFormats:["claude"]},{id:"claude-fable-5-1",name:"Claude Fable 5.1",supportedFormats:["claude"]},{id:"claude-opus-5",name:"Claude Opus 5",supportedFormats:["claude"]},{id:"claude-opus-4-8",name:"Claude Opus 4.8",supportedFormats:["claude"]},{id:"claude-opus-4-7",name:"Claude Opus 4.7",supportedFormats:["claude"]},{id:"claude-opus-4-6",name:"Claude Opus 4.6",supportedFormats:["claude"]},{id:"claude-opus-4-5",name:"Claude Opus 4.5",supportedFormats:["claude"]},{id:"claude-sonnet-5",name:"Claude Sonnet 5",supportedFormats:["claude"]},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",supportedFormats:["claude"]},{id:"claude-sonnet-4-5",name:"Claude Sonnet 4.5",supportedFormats:["claude"]},{id:"claude-sonnet-4",name:"Claude Sonnet 4",supportedFormats:["claude"]},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",supportedFormats:["claude"]},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",supportedFormats:["openai"]},{id:"gemini-3.8-flash",name:"Gemini 3.8 Flash",supportedFormats:["openai"]},{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",supportedFormats:["openai"]},{id:"gemini-3.5-flash-lite",name:"Gemini 3.5 Flash Lite",supportedFormats:["openai"]},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",supportedFormats:["openai"]},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",supportedFormats:["openai"]},{id:"gemini-3-flash",name:"Gemini 3 Flash",supportedFormats:["openai"]},{id:"gpt-6-astra",name:"GPT 6 Astra",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.6-sol",name:"GPT 5.6 Sol",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.6-terra",name:"GPT 5.6 Terra",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.6-luna",name:"GPT 5.6 Luna",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.5",name:"GPT 5.5",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.5-pro",name:"GPT 5.5 Pro",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.4",name:"GPT 5.4",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.4-pro",name:"GPT 5.4 Pro",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.4-mini",name:"GPT 5.4 Mini",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.4-nano",name:"GPT 5.4 Nano",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.3-codex-spark",name:"GPT 5.3 Codex Spark",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.2",name:"GPT 5.2",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.1",name:"GPT 5.1",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5",name:"GPT 5",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5-codex",name:"GPT 5 Codex",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5-nano",name:"GPT 5 Nano",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"grok-build-0.1",name:"Grok Build 0.1",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"grok-4.6",name:"Grok 4.6",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"grok-4.5",name:"Grok 4.5",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"muse-spark-1.3",name:"Muse Spark 1.3",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"muse-spark-1.2",name:"Muse Spark 1.2",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"qwen3.6-plus",name:"Qwen 3.6 Plus",supportedFormats:["claude"]},{id:"qwen3.5-plus",name:"Qwen 3.5 Plus",supportedFormats:["claude"]},{id:"deepseek-v4-pro",name:"DeepSeek V4 Pro",supportedFormats:["openai"]},{id:"deepseek-v4-flash",name:"DeepSeek V4 Flash",supportedFormats:["openai"]},{id:"deepseek-v4-flash-vision-exp",name:"DeepSeek V4 Flash Vision Exp",supportedFormats:["openai"]},{id:"glm-5.3-flash",name:"GLM 5.3 Flash (Vision)",supportedFormats:["openai"]},{id:"glm-5.3",name:"GLM 5.3",supportedFormats:["openai"]},{id:"glm-5.2",name:"GLM 5.2",supportedFormats:["openai"]},{id:"glm-5.1",name:"GLM 5.1",supportedFormats:["openai"]},{id:"glm-5",name:"GLM 5",supportedFormats:["openai"]},{id:"minimax-m3",name:"MiniMax M3",supportedFormats:["openai"]},{id:"minimax-m2.7",name:"MiniMax M2.7",supportedFormats:["openai"]},{id:"minimax-m2.5",name:"MiniMax M2.5",supportedFormats:["openai"]},{id:"kimi-k3",name:"Kimi K3",supportedFormats:["openai"]},{id:"kimi-k2.7-code",name:"Kimi K2.7 Code",supportedFormats:["openai"]},{id:"kimi-k2.6",name:"Kimi K2.6",supportedFormats:["openai"]},{id:"kimi-k2.5",name:"Kimi K2.5",supportedFormats:["openai"]},{id:"big-pickle",name:"Big Pickle",supportedFormats:["openai"]},{id:"union-alpha",name:"Union Alpha",supportedFormats:["claude"]},{id:"deepseek-v4-flash-free",name:"DeepSeek V4 Flash Free",supportedFormats:["openai"],tier:"free"},{id:"mimo-v2.6-flash-free",name:"MiMo V2.6 Flash Free",supportedFormats:["openai"],tier:"free"},{id:"mimo-v2.5-free",name:"MiMo V2.5 Free",supportedFormats:["openai"],tier:"free"},{id:"ling-3.0-flash-fin-free",name:"Ling 3.0 Flash Fin Free",supportedFormats:["openai"],tier:"free"},{id:"nemotron-3-ultra-free",name:"Nemotron 3 Ultra Free",supportedFormats:["openai"],tier:"free"},{id:"nemotron-3.5-lightning-free",name:"Nemotron 3.5 Lightning Free",supportedFormats:["openai"],tier:"free"},{id:"muse-spark-1.3-contributor-free",name:"Muse Spark 1.3 Contributor Free",targetFormat:"openai-responses",supportedFormats:["openai-responses"],tier:"free"},{id:"muse-spark-1.2-contributor-free",name:"Muse Spark 1.2 Contributor Free",targetFormat:"openai-responses",supportedFormats:["openai-responses"],tier:"free"},{id:"jev-1.13",name:"Jev 1.13",kind:"systemone"},{id:"jev-1.13-free",name:"Jev 1.13 Free",kind:"systemone",tier:"free"}],serviceKinds:["llm","systemone"],systemoneConfig:{baseUrl:"https://opencode.ai/inference/systemone/v1/systemone",headers:{"x-opencode-client":"cli","User-Agent":"opencode/latest/2.0.26/cli"}},modelsFetcher:{url:"https://opencode.ai/inference/v1/models",type:"opencode-free"},passthroughModels:!0,features:{usage:!0,usageApikey:!0}},{id:"qoder",priority:30,alias:"qd",uiAlias:"qd",display:{name:"Qoder",icon:"water_drop",color:"#EC4899",website:"https://qoder.com",notice:{signupUrl:"https://qoder.com"}},category:"oauth",authModes:["oauth","apikey"],hasOAuth:!0,authHint:"Personal Access Token (pt-...) from https://qoder.com/account/integrations",transport:{baseUrl:"https://api3.qoder.sh/algo/api/v2/service/pro/sse/agent_chat_generation",headers:{},timeoutMs:12e4,stallTimeoutMs:12e4,usage:{url:"https://openapi.qoder.sh/api/v2/quota/usage"}},models:[{id:"ultimate",name:"Ultimate"},{id:"auto",name:"Auto"},{id:"performance",name:"Performance"},{id:"efficient",name:"Efficient"},{id:"lite",name:"Lite"},{id:"qmodel_38max",name:"Qwen3.8-Max"},{id:"qmodel_latest",name:"Qwen3.7-Max"},{id:"qmodel",name:"Qwen3.7-Plus"},{id:"qfmodel",name:"Qwen3.8-Flash"},{id:"kmodel_latest",name:"Kimi-K3"},{id:"kmodel",name:"Kimi-K2.7-Code"},{id:"gmodel",name:"GLM-5.3"},{id:"gfmodel",name:"GLM-5.3-Flash"},{id:"dmodel",name:"DeepSeek-V4-Pro"},{id:"dfmodel",name:"DeepSeek-V4-Flash"},{id:"mmodel",name:"MiniMax-M3"}],oauth:{openApiBaseUrl:"https://openapi.qoder.sh",centerBaseUrl:"https://center.qoder.sh",chatBaseUrl:"https://api3.qoder.sh",deviceTokenUrl:"https://openapi.qoder.sh/api/v1/deviceToken/poll",refreshUrl:"https://center.qoder.sh/algo/api/v3/user/refresh_token",userInfoUrl:"https://openapi.qoder.sh/api/v1/userinfo",quotaUsageUrl:"https://openapi.qoder.sh/api/v2/quota/usage",loginUrl:"https://qoder.com/device/selectAccounts"},features:{usage:!0,usageApikey:!0}}]},13794:(e,a,i)=>{i.d(a,{Q2:()=>y,DI:()=>g,fg:()=>d,MA:()=>k,IS:()=>r,nJ:()=>m,rj:()=>u,zN:()=>p,JH:()=>c,wb:()=>T,br:()=>l,wG:()=>b,zt:()=>v,o5:()=>F,gb:()=>f,mq:()=>h});var t=i(10671);let o="⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.";Object.fromEntries(t.A.filter(e=>e.display).map(e=>{let a;return[e.id,"RISK_NOTICE"===(a=e.display).deprecationNotice?{...a,deprecationNotice:o}:a]}));let n=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","credentialFallback","systemoneConfig","modelsFetcher","mediaPriority","hiddenKinds"],s=e=>Object.fromEntries(t.A.filter(a=>a.category===e).map(e=>[e.id,function(e){let a={};for(let i of(e.media&&Object.assign(a,e.media),n))void 0!==e[i]&&(a[i]=e[i]);let i={...e.display||{}};return"RISK_NOTICE"===i.deprecationNotice&&(i.deprecationNotice=o),{...i,id:e.id,alias:e.uiAlias||e.alias,...e.hidden?{hidden:!0}:{},...a,...void 0!==e.priority?{priority:e.priority}:{},...e.hasFree?{hasFree:!0}:{},...e.thinkingConfig?{thinkingConfig:e.thinkingConfig}:{},...e.regions?{regions:e.regions,defaultRegion:e.defaultRegion}:{},...e.hasProviderSpecificData?{hasProviderSpecificData:!0}:{},...e.noAuth?{noAuth:!0}:{},...e.passthroughModels?{passthroughModels:!0}:{},...e.hasOAuth?{hasOAuth:!0}:{},...e.authModes?{authModes:e.authModes}:{},...e.authType?{authType:e.authType}:{},...e.authHint?{authHint:e.authHint}:{}}}(e)])),r=s("free"),m=s("freeTier"),p=s("oauth"),d=s("apikey"),l=s("webCookie"),u=[{id:"embedding",label:"Embedding",icon:"data_array",endpoint:{method:"POST",path:"/v1/embeddings"}},{id:"image",label:"Text to Image",icon:"brush",endpoint:{method:"POST",path:"/v1/images/generations"}},{id:"imageToText",label:"Image to Text",icon:"image_search",endpoint:{method:"POST",path:"/v1/images/understanding"}},{id:"tts",label:"Text To Speech",icon:"record_voice_over",endpoint:{method:"POST",path:"/v1/audio/speech"}},{id:"stt",label:"Speech To Text",icon:"mic",endpoint:{method:"POST",path:"/v1/audio/transcriptions"}},{id:"webSearch",label:"Web Search",icon:"travel_explore",endpoint:{method:"POST",path:"/v1/search"}},{id:"webFetch",label:"Web Fetch",icon:"language",endpoint:{method:"POST",path:"/v1/web/fetch"}},{id:"video",label:"Video",icon:"movie",endpoint:{method:"POST",path:"/v1/videos/generations"}},{id:"music",label:"Music",icon:"music_note",endpoint:{method:"POST",path:"/v1/audio/music"}},{id:"systemone",label:"System One",icon:"bolt",endpoint:{method:"POST",path:"/v1/systemone"},isNew:!0}],c="openai-compatible-",g="anthropic-compatible-";function h(e){return"string"==typeof e&&e.startsWith(c)}function f(e){return"string"==typeof e&&e.startsWith(g)}let y={...r,...m,...p,...d,...l},k={oauth:{id:"oauth"},apikey:{id:"apikey"},cookie:{id:"cookie"}};function v(e){for(let a of Object.values(y))if(a.alias===e||a.id===e)return a;return null}function b(e){let a=y[e];return a?.alias||e}function F(e){return Object.values(y).filter(a=>!(!(a.serviceKinds??["llm"]).includes(e)||a.hidden||a.hiddenKinds?.includes(e))).sort((e,a)=>(e.priority??e.mediaPriority??999)-(a.priority??a.mediaPriority??999))}Object.values(y).reduce((e,a)=>(e[a.alias]=a.id,e),{}),Object.values(y).reduce((e,a)=>(e[a.id]=a.alias,e),{});let T=t.A.filter(e=>e.features?.usage).map(e=>e.id);t.A.filter(e=>e.features?.usageApikey).map(e=>e.id)},51660:(e,a,i)=>{i.d(a,{Q2:()=>t.Q2,fg:()=>t.fg,vQ:()=>o,_$:()=>s,MA:()=>t.MA,UY:()=>m,Nu:()=>n,zN:()=>t.zN,B2:()=>r});var t=i(13794);i(80159);let o={name:"10Router Proxy",description:"AI Infrastructure Management",version:"0.1.16"},n={changelogUrl:"/api/changelog"},s=20128,r={storageKey:"theme",defaultTheme:"light"},m={maxLines:500,pollIntervalMs:1e3}},58014:(e,a,i)=>{i.d(a,{Xg:()=>x,vq:()=>k,KC:()=>w,An:()=>T});var t=i(10671),o=i(65746);function n(e,a){let i=o.env[e];if(null==i||""===i)return a;let t=parseInt(i,10);return Number.isFinite(t)&&t>0?t:a}o.env.SEARXNG_URL?.trim(),n("STREAM_STALL_TIMEOUT_MS",36e4),n("STREAM_FIRST_CHUNK_TIMEOUT_MS",2e5),n("FETCH_CONNECT_TIMEOUT_MS",6e4),n("GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS",45e3);function s(e){return e.split(/[-_\s]+/).filter(Boolean).map(e=>/^\d/.test(e)?e:e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}let r=[[/^kimi-k(\d+(?:\.\d+)?)(-thinking)?$/i,e=>`Kimi K${e[1]}${e[2]?" Thinking":""}`],[/^glm-(\d+(?:\.\d+)?)(v)?$/i,e=>`GLM ${e[1]}${e[2]?"V (Vision)":""}`],[/^minimax-m(\d+(?:\.\d+)?)$/i,e=>`MiniMax M${e[1]}`],[/^gpt-(.+)$/i,e=>`GPT ${s(e[1])}`],[/^gemini-(.+)$/i,e=>`Gemini ${s(e[1])}`],[/^grok-(.+)$/i,e=>`Grok ${s(e[1])}`],[/^deepseek-(.+)$/i,e=>`DeepSeek ${s(e[1])}`],[/^qwen([\d.]+.*)$/i,e=>`Qwen ${s(e[1])}`]];function m(e){let a="string"==typeof e?{id:e}:e;return void 0!==a.name?a:{...a,name:function(e){if("string"!=typeof e)return e;for(let[a,i]of r){let t=e.match(a);if(t)return i(t)}return e}(a.id)}}let p={alloy:{id:"alloy",name:"Alloy"},ash:{id:"ash",name:"Ash"},ballad:{id:"ballad",name:"Ballad"},cedar:{id:"cedar",name:"Cedar"},coral:{id:"coral",name:"Coral"},echo:{id:"echo",name:"Echo"},fable:{id:"fable",name:"Fable"},marin:{id:"marin",name:"Marin"},nova:{id:"nova",name:"Nova"},onyx:{id:"onyx",name:"Onyx"},sage:{id:"sage",name:"Sage"},shimmer:{id:"shimmer",name:"Shimmer"},verse:{id:"verse",name:"Verse"}},d=(...e)=>e.map(e=>({...p[e],type:"tts"})),l=d("alloy","ash","coral","echo","fable","nova","onyx","sage","shimmer"),u=d("alloy","ash","ballad","cedar","coral","echo","fable","marin","nova","onyx","sage","shimmer","verse"),c=["Zephyr","Puck","Charon","Kore","Fenrir","Leda","Orus","Aoede","Callirrhoe","Autonoe","Enceladus","Iapetus","Umbriel","Algieba","Despina","Erinome","Algenib","Rasalgethi","Laomedeia","Achernar","Alnilam","Schedar","Gacrux","Pulcherrima","Achird","Zubenelgenubi","Vindemiatrix","Sadachbia","Sadaltager","Sulafat"].map(e=>({id:e,name:e,type:"tts"})),g={openai:{models:[{id:"gpt-4o-mini-tts",name:"GPT-4o Mini TTS",type:"tts"},{id:"tts-1-hd",name:"TTS-1 HD",type:"tts"},{id:"tts-1",name:"TTS-1",type:"tts"}],voices:{"gpt-4o-mini-tts":u,"tts-1":l,"tts-1-hd":l},allVoices:u},openrouter:{models:[{id:"openai/gpt-4o-mini-tts",name:"GPT-4o Mini TTS",type:"tts"},{id:"openai/tts-1-hd",name:"TTS-1 HD",type:"tts"},{id:"openai/tts-1",name:"TTS-1",type:"tts"}],voices:{"openai/gpt-4o-mini-tts":u,"openai/tts-1":l,"openai/tts-1-hd":l},allVoices:u},elevenlabs:{models:[{id:"eleven_flash_v2_5",name:"Flash v2.5 (Fastest)",type:"tts"},{id:"eleven_turbo_v2_5",name:"Turbo v2.5 (Fast)",type:"tts"},{id:"eleven_multilingual_v2",name:"Multilingual v2 (Quality)",type:"tts"},{id:"eleven_monolingual_v1",name:"Monolingual v1 (English)",type:"tts"}]},"edge-tts":{defaults:[{id:"en-US-AriaNeural",name:"Aria (en-US)",type:"tts"},{id:"en-US-GuyNeural",name:"Guy (en-US)",type:"tts"},{id:"en-GB-SoniaNeural",name:"Sonia (en-GB)",type:"tts"},{id:"vi-VN-HoaiMyNeural",name:"Hoai My (vi-VN)",type:"tts"},{id:"vi-VN-NamMinhNeural",name:"Nam Minh (vi-VN)",type:"tts"},{id:"zh-CN-XiaoxiaoNeural",name:"Xiaoxiao (zh-CN)",type:"tts"},{id:"zh-CN-YunxiNeural",name:"Yunxi (zh-CN)",type:"tts"},{id:"fr-FR-DeniseNeural",name:"Denise (fr-FR)",type:"tts"},{id:"de-DE-KatjaNeural",name:"Katja (de-DE)",type:"tts"},{id:"ja-JP-NanamiNeural",name:"Nanami (ja-JP)",type:"tts"},{id:"ko-KR-SunHiNeural",name:"SunHi (ko-KR)",type:"tts"}]},"local-device":{defaults:[{id:"default",name:"System Default Voice",type:"tts"}]},"google-tts":{defaults:[{id:"af",name:"Afrikaans",type:"tts"},{id:"ar",name:"Arabic",type:"tts"},{id:"bg",name:"Bulgarian",type:"tts"},{id:"bn",name:"Bengali",type:"tts"},{id:"bs",name:"Bosnian",type:"tts"},{id:"ca",name:"Catalan",type:"tts"},{id:"cs",name:"Czech",type:"tts"},{id:"cy",name:"Welsh",type:"tts"},{id:"da",name:"Danish",type:"tts"},{id:"de",name:"German",type:"tts"},{id:"el",name:"Greek",type:"tts"},{id:"en",name:"English",type:"tts"},{id:"eo",name:"Esperanto",type:"tts"},{id:"es",name:"Spanish",type:"tts"},{id:"et",name:"Estonian",type:"tts"},{id:"fi",name:"Finnish",type:"tts"},{id:"fr",name:"French",type:"tts"},{id:"gu",name:"Gujarati",type:"tts"},{id:"hi",name:"Hindi",type:"tts"},{id:"hr",name:"Croatian",type:"tts"},{id:"hu",name:"Hungarian",type:"tts"},{id:"hy",name:"Armenian",type:"tts"},{id:"id",name:"Indonesian",type:"tts"},{id:"is",name:"Icelandic",type:"tts"},{id:"it",name:"Italian",type:"tts"},{id:"ja",name:"Japanese",type:"tts"},{id:"jw",name:"Javanese",type:"tts"},{id:"km",name:"Khmer",type:"tts"},{id:"kn",name:"Kannada",type:"tts"},{id:"ko",name:"Korean",type:"tts"},{id:"la",name:"Latin",type:"tts"},{id:"lv",name:"Latvian",type:"tts"},{id:"mk",name:"Macedonian",type:"tts"},{id:"ml",name:"Malayalam",type:"tts"},{id:"mr",name:"Marathi",type:"tts"},{id:"my",name:"Myanmar (Burmese)",type:"tts"},{id:"ne",name:"Nepali",type:"tts"},{id:"nl",name:"Dutch",type:"tts"},{id:"no",name:"Norwegian",type:"tts"},{id:"pl",name:"Polish",type:"tts"},{id:"pt",name:"Portuguese",type:"tts"},{id:"ro",name:"Romanian",type:"tts"},{id:"ru",name:"Russian",type:"tts"},{id:"si",name:"Sinhala",type:"tts"},{id:"sk",name:"Slovak",type:"tts"},{id:"sq",name:"Albanian",type:"tts"},{id:"sr",name:"Serbian",type:"tts"},{id:"su",name:"Sundanese",type:"tts"},{id:"sv",name:"Swedish",type:"tts"},{id:"sw",name:"Swahili",type:"tts"},{id:"ta",name:"Tamil",type:"tts"},{id:"te",name:"Telugu",type:"tts"},{id:"th",name:"Thai",type:"tts"},{id:"tl",name:"Filipino",type:"tts"},{id:"tr",name:"Turkish",type:"tts"},{id:"uk",name:"Ukrainian",type:"tts"},{id:"ur",name:"Urdu",type:"tts"},{id:"vi",name:"Vietnamese",type:"tts"},{id:"zh-CN",name:"Chinese (Simplified)",type:"tts"},{id:"zh-TW",name:"Chinese (Traditional)",type:"tts"}]},gemini:{models:[{id:"gemini-3.1-flash-tts-preview",name:"Gemini 3.1 Flash TTS",type:"tts"},{id:"gemini-2.5-flash-preview-tts",name:"Gemini 2.5 Flash TTS",type:"tts"},{id:"gemini-2.5-pro-preview-tts",name:"Gemini 2.5 Pro TTS",type:"tts"}],voices:{"gemini-3.1-flash-tts-preview":c,"gemini-2.5-flash-preview-tts":c,"gemini-2.5-pro-preview-tts":c},allVoices:c},"xiaomi-mimo":{models:[{id:"mimo-v2.5-tts",name:"MiMo V2.5 TTS",type:"tts"}],voices:{"mimo-v2.5-tts":[{id:"mimo_default",name:"mimo_default"},{id:"冰糖",name:"冰糖"},{id:"茉莉",name:"茉莉"},{id:"苏打",name:"苏打"},{id:"白桦",name:"白桦"},{id:"Mia",name:"Mia"},{id:"Chloe",name:"Chloe"},{id:"Milo",name:"Milo"},{id:"Dean",name:"Dean"}].map(e=>({type:"tts",...e}))}}},h=["clientId","clientSecret","tokenUrl","refreshUrl"],f=new Set(["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","systemoneConfig","modelsFetcher","mediaPriority","hiddenKinds"]),y={},k={},v={},b={};for(let e of t.A){e.transport&&(y[e.id]=function(e,a){let i={...e};if(i.format||(i.format="openai"),a)for(let e of h)void 0===i[e]&&void 0!==a[e]&&(i[e]=a[e]);return i}(e.transport,e.oauth),e.transports&&(y[e.id].transports=e.transports)),void 0!==e.models&&(k[e.alias||e.id]=e.models.map(m)),e.oauth&&(v[e.id]=e.oauth);let a={};for(let i of f)void 0!==e[i]&&(a[i]=e[i]);e.media&&Object.assign(a,e.media),Object.keys(a).length&&(b[e.id]=a)}Object.assign(k,function(){let e={};for(let[a,i]of Object.entries(g))i.models&&(e[`${a}-tts-models`]=i.models),i.allVoices&&(e[`${a}-tts-voices`]=i.allVoices),i.defaults&&(e[a]=i.defaults);return e["openai-tts-voices"]=g.openai.allVoices,e["openrouter-tts-voices"]=g.openrouter.allVoices,e}());let F=new Set(["kr"]);function T(e,a){let i,t;return"free"===((t=k[i=x[e]||e])&&function(e,a,i){if(!e)return;let t="string"==typeof a?a.replace(/\([^()]+\)\s*$/,"").trim():a,o=e.find(e=>e.id===a||e.id===t);if(o)return o;if(!F.has(i))return;let n="string"!=typeof t?t:t.replace(/(\d)-(\d)/g,"$1.$2");if(n!==t)return e.find(e=>e.id===n)}(t,a,i)?.tier||null)}let M=Object.fromEntries(t.A.filter(e=>e.alias&&e.alias!==e.id).map(e=>[e.id,e.alias])),x=Object.fromEntries(Object.keys(y).map(e=>[e,M[e]||e]));function w(e){return k[x[e]||e]||[]}},80159:(e,a,i)=>{i.d(a,{An:()=>t.An,CP:()=>o,KC:()=>t.KC,Xg:()=>t.Xg,bs:()=>n});var t=i(58014);Object.entries(i(13794).Q2).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(t.vq).flatMap(([e,a])=>a.map(a=>({provider:e,model:a.id,name:a.name})));let o=(e,a=null)=>e?.kind||e?.type||a,n={vision:{icon:"visibility",label:"Vision",desc:"Supports image input",color:"text-blue-500"},reasoning:{icon:"neurology",label:"Reasoning",desc:"Supports reasoning / thinking",color:"text-amber-500"}}}}]);