@fased/fased 0.1.54 → 0.1.55
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.
- package/dist/agents/authenticated-model-catalog.js +27 -0
- package/dist/agents/current-model-catalog.js +3 -10
- package/dist/agents/model-catalog-normalized.js +1 -0
- package/dist/agents/model-metadata.js +25 -4
- package/dist/agents/pi-embedded-runner/extra-params.js +25 -0
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/brand.js +1 -1
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/cli/providers-cli.js +3 -2
- package/dist/commands/auth-choice.apply.api-providers.js +3 -8
- package/dist/commands/auth-choice.apply.openai.js +13 -7
- package/dist/commands/auth-choice.model-check.js +1 -2
- package/dist/commands/configure.gateway-auth.js +14 -16
- package/dist/commands/model-picker.js +25 -7
- package/dist/commands/models/list.registry.js +12 -17
- package/dist/commands/onboard-auth.config-core.js +1 -1
- package/dist/commands/onboard-auth.config-litellm.js +21 -21
- package/dist/commands/onboard-auth.credentials.js +0 -1
- package/dist/commands/onboard-auth.js +0 -1
- package/dist/commands/openai-codex-model-default.js +27 -5
- package/dist/config/zod-schema.agent-defaults.js +4 -2
- package/dist/config/zod-schema.agent-runtime.js +4 -2
- package/dist/config/zod-schema.core.js +4 -2
- package/dist/control-ui/assets/{app-BKlu6OKz.js → app-D2RaTXoV.js} +1475 -1474
- package/dist/control-ui/assets/chat-model-ref-BZFblCeY.js +2 -0
- package/dist/control-ui/assets/{index-nrFcGMv-.js → index-D2nC6I-9.js} +3 -3
- package/dist/control-ui/assets/{providers-BQFrRqym.js → providers-CyjiG5Jw.js} +4 -4
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -0
- package/dist/gateway/control-ui.js +2 -0
- package/dist/gateway/protocol/schema/agents-models-skills.js +5 -2
- package/dist/gateway/server-methods/models.js +7 -8
- package/dist/gateway/server-model-catalog.js +3 -0
- package/dist/infra/update-runner.js +31 -3
- package/dist/light-update-status.js +11 -11
- package/dist/memory/inventory.js +19 -2
- package/dist/plugin-sdk/{accounts-DW9OS5Ll.js → accounts-CeRNo5Ae.js} +1 -1
- package/dist/plugin-sdk/{actions-DQUXohRr.js → actions-OMRHtXPj.js} +2 -2
- package/dist/plugin-sdk/{active-listener-BZQWZPF7.js → active-listener-BlIkS3iR.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-t4mmHsI2.js → audio-preflight-B2n3a2Tj.js} +26 -26
- package/dist/plugin-sdk/{audit-BZk_6Buw.js → audit-Ppg6dR_b.js} +1 -1
- package/dist/plugin-sdk/{channel-access-CN5HiWdb.js → channel-access-af8dWWRv.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-B7Kkvx9K.js → channel-access-configure-B6IAGlE0.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
- package/dist/plugin-sdk/channel-plugin-common.js +4 -4
- package/dist/plugin-sdk/{chunk-B2ffJ-LR.js → chunk-CD76Byie.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-jOdkyP53.js → chunk-items-Bu19zrYH.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +26 -26
- package/dist/plugin-sdk/{commands-registry-BWb4NcfW.js → commands-registry-DgS55tNj.js} +2 -2
- package/dist/plugin-sdk/{common-C4XrB73N.js → common-CWvfeiX0.js} +1 -1
- package/dist/plugin-sdk/{config-rySyVtKs.js → config-CYDETqcF.js} +83 -65
- package/dist/plugin-sdk/{config-schema-BaybPPrJ.js → config-schema-CQ4EVcQG.js} +128 -66
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +5 -5
- package/dist/plugin-sdk/discord.js +19 -19
- package/dist/plugin-sdk/{group-mentions-DLOOve8d.d.ts → group-mentions-BxDgHCgj.d.ts} +1 -1
- package/dist/plugin-sdk/{handle-action-CGF-Qnp0.js → handle-action-B75UVKxF.js} +13 -13
- package/dist/plugin-sdk/{helpers-DgRMfCnT.js → helpers-BuEwju6y.js} +1 -1
- package/dist/plugin-sdk/{image-ops-CcBfoMLW.js → image-ops-C66HPeAZ.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +8 -8
- package/dist/plugin-sdk/index.js +28 -28
- package/dist/plugin-sdk/{login-DpDQyM7r.js → login-Amr2DpKU.js} +3 -3
- package/dist/plugin-sdk/{login-qr-COaSAPY5.js → login-qr-DMQNEi9m.js} +3 -3
- package/dist/plugin-sdk/{manager-Cqz30lA3.js → manager-Bvpq49BI.js} +2 -2
- package/dist/plugin-sdk/{markdown-tables-BOG5sSQQ.js → markdown-tables-DmQ7oXOm.js} +1 -1
- package/dist/plugin-sdk/{media-Bu-nJpPs.js → media-ByLQbEwJ.js} +2 -2
- package/dist/plugin-sdk/{monitor-II_NIq3G.js → monitor-K_u6daGa.js} +30 -30
- package/dist/plugin-sdk/{monitor-DL6oEVo8.js → monitor-S_7LrvSj.js} +31 -31
- package/dist/plugin-sdk/{openresponses-http-vkHBBpGY.js → openresponses-http-BrDJUZXR.js} +26 -26
- package/dist/plugin-sdk/{optional-runtime-dependency-DEojVNfv.js → optional-runtime-dependency-CbYjAC2b.js} +1 -1
- package/dist/plugin-sdk/{outbound-mf2y6KuY.js → outbound-BuDafBBI.js} +6 -6
- package/dist/plugin-sdk/{outbound-attachment-ivAHpWnn.js → outbound-attachment-DmZmUqFP.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-CvJ6Qa1Q.d.ts → pairing-message-D0-UWGFJ.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-message-CqYG12t-.js → pairing-message-e4D4eBDA.js} +1 -1
- package/dist/plugin-sdk/{pairing-store-D-21Sphe.js → pairing-store-T3IGoGZg.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-B6gD1clF.js → pi-model-discovery-DvAG_Png.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-3yDxS3ro.js → pi-model-discovery-runtime-NjkUgjIf.js} +2 -2
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-CMplwiwf.js → pw-ai-D7eW43DL.js} +3 -3
- package/dist/plugin-sdk/{replies-wiI4veI7.js → replies-BMIPmEoP.js} +2 -2
- package/dist/plugin-sdk/{resolve-outbound-target-bm9RUK5q.js → resolve-outbound-target-CXCqUUPV.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-ekGNc6os.js → resolve-route-DJN-SUSt.js} +1 -1
- package/dist/plugin-sdk/{retry-policy-BvlC2SPh.js → retry-policy-CY1qY6d7.js} +1 -1
- package/dist/plugin-sdk/{runtime-ClSakPxR.js → runtime-CgOkQe0w.js} +3 -3
- package/dist/plugin-sdk/{runtime-dependency-yAWxH4El.js → runtime-dependency-DvdRNMvs.js} +2 -2
- package/dist/plugin-sdk/sat-runtime.d.ts +3 -3
- package/dist/plugin-sdk/sat-runtime.js +5 -5
- package/dist/plugin-sdk/{send-CgyS75Av.js → send-2ITqny2W.js} +8 -8
- package/dist/plugin-sdk/{send-D264hFVb.js → send-BAz22RZr.js} +5 -5
- package/dist/plugin-sdk/{send-C7x6gzSl.js → send-BG3RWyil.js} +7 -7
- package/dist/plugin-sdk/{send-D58yEeH4.js → send-Cr-dj6S-.js} +6 -6
- package/dist/plugin-sdk/{send-DrAtUGLM.js → send-eTxqFFsw.js} +6 -6
- package/dist/plugin-sdk/{session-DyMtb5YQ.js → session-C8nJmmVE.js} +2 -2
- package/dist/plugin-sdk/{skill-commands-Q80wCyry.js → skill-commands-Rm5by9S8.js} +2 -2
- package/dist/plugin-sdk/{slack-actions-dGE_t_Un.js → slack-actions-BNIALJTA.js} +11 -11
- package/dist/plugin-sdk/{slack-C-I6q3NB.js → slack-xvIVvyEM.js} +38 -38
- package/dist/plugin-sdk/slack.d.ts +5 -5
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-DCrDTYIi.js → sticker-cache-D3oDiu2u.js} +3 -3
- package/dist/plugin-sdk/{tables-0mhUOh5v.js → tables-DS5L7lCA.js} +1 -1
- package/dist/plugin-sdk/{targets-znKHngSk.js → targets-D6lUomJc.js} +1 -1
- package/dist/plugin-sdk/{telegram-actions-GBYY8-x9.js → telegram-actions-MSFkDn0m.js} +29 -29
- package/dist/plugin-sdk/telegram.d.ts +5 -5
- package/dist/plugin-sdk/telegram.js +8 -8
- package/dist/plugin-sdk/{thread-bindings.lifecycle-ClzPBK70.js → thread-bindings.lifecycle-Ry6Vcgw3.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-Ha01nmrq.js → thread-bindings.state-C0stmvNk.js} +2 -2
- package/dist/plugin-sdk/{tmp-fased-dir-C_xfeEN9.d.ts → tmp-fased-dir-D91GExk4.d.ts} +2 -2
- package/dist/plugin-sdk/{types-CBCtqtMn.d.ts → types-BzadOItY.d.ts} +1 -1
- package/dist/plugin-sdk/{types-BI2njxWJ.d.ts → types-DKvBJHfH.d.ts} +14 -5
- package/dist/plugin-sdk/{types-DV5TNhMK.d.ts → types-DVTIpopt.d.ts} +2 -2
- package/dist/plugin-sdk/{types.plugin-CvUiB3Kh.d.ts → types.plugin-BiHPaDTF.d.ts} +2 -1
- package/dist/plugin-sdk/{wallet-status-CyovJojz.js → wallet-status-f0HagNeO.js} +8 -5
- package/dist/plugin-sdk/{web-CJMfhGFY.js → web-DRNJxHXA.js} +31 -31
- package/dist/plugin-sdk/{whatsapp-actions-0ZbGo5ZV.js → whatsapp-actions-BDXZF2R5.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-DGTsuvQ8.js → whatsapp-heartbeat-CKgmwCGr.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +5 -5
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-D5jDUlms.js → wsl-Biw7Mj39.js} +3 -3
- package/dist/providers/litellm-models.js +1 -1
- package/dist/providers/refresh.js +218 -56
- package/dist/providers/registry.js +15 -5
- package/dist/providers/runtime-model-catalog.js +181 -0
- package/dist/shared/model-thinking.js +41 -2
- package/dist/wizard/onboarding.js +24 -6
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +6 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/dist/control-ui/assets/chat-model-ref-B9sWop67.js +0 -2
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
import { BASE_THINKING_LEVELS } from "../shared/model-thinking.js";
|
|
2
2
|
import { CLOUDFLARE_AI_GATEWAY_MODEL_IDS, CLOUDFLARE_AI_GATEWAY_PROVIDER_BRAND_ID, CLOUDFLARE_AI_GATEWAY_ROUTE_ID } from "./cloudflare-ai-gateway-shared.js";
|
|
3
3
|
import { HUGGINGFACE_MODEL_IDS } from "./huggingface-models.js";
|
|
4
|
-
import { LITELLM_BASE_URL, LITELLM_MODEL_IDS } from "./litellm-models.js";
|
|
5
4
|
import { OPENCODE_ZEN_MODEL_IDS } from "./opencode-zen-shared.js";
|
|
6
5
|
import { SYNTHETIC_MODEL_IDS } from "./synthetic-models.js";
|
|
7
6
|
import { TOGETHER_MODEL_IDS } from "./together-models.js";
|
|
8
7
|
import { VENICE_MODEL_IDS } from "./venice-models.js";
|
|
9
8
|
import { VERCEL_AI_GATEWAY_MODEL_IDS } from "./vercel-ai-gateway-models.js";
|
|
10
9
|
import { XIAOMI_MODEL_IDS } from "./xiaomi-models.js";
|
|
10
|
+
import { LITELLM_BASE_URL } from "./litellm-models.js";
|
|
11
11
|
import { ANTHROPIC_MODEL_IDS, ANTHROPIC_PROVIDER_BRAND_ID, ANTHROPIC_ROUTE_ID, BYTEPLUS_CODING_MODEL_IDS, BYTEPLUS_CODING_ROUTE_ID, BYTEPLUS_MODEL_IDS, BYTEPLUS_PLAN_ROUTE_ID, BYTEPLUS_PROVIDER_BRAND_ID, BYTEPLUS_ROUTE_ID, CHUTES_MODEL_IDS, CHUTES_PROVIDER_BRAND_ID, CHUTES_ROUTE_ID, COPILOT_PROVIDER_BRAND_ID, COPILOT_PROXY_MODEL_IDS, COPILOT_PROXY_ROUTE_ID, CUSTOM_PROVIDER_BRAND_ID, CUSTOM_PROVIDER_ROUTE_ID, GITHUB_COPILOT_ROUTE_ID, GOOGLE_API_ROUTE_ID, GOOGLE_GEMINI_CLI_ROUTE_ID, GOOGLE_GEMINI_MODEL_IDS, GOOGLE_PROVIDER_BRAND_ID, HUGGINGFACE_PROVIDER_BRAND_ID, HUGGINGFACE_ROUTE_ID, KIMI_CODING_MODEL_IDS, KIMI_CODING_ROUTE_ID, LITELLM_PROVIDER_BRAND_ID, LITELLM_ROUTE_ID, LMSTUDIO_PROVIDER_BRAND_ID, LMSTUDIO_ROUTE_ID, MINIMAX_API_ROUTE_ID, MINIMAX_CN_ROUTE_ID, MINIMAX_MODEL_IDS, MINIMAX_PORTAL_ROUTE_ID, MINIMAX_PROVIDER_BRAND_ID, MISTRAL_MODEL_IDS, MISTRAL_PROVIDER_BRAND_ID, MISTRAL_ROUTE_ID, MOONSHOT_MODEL_IDS, MOONSHOT_PROVIDER_BRAND_ID, MOONSHOT_ROUTE_ID, OLLAMA_PROVIDER_BRAND_ID, OLLAMA_ROUTE_ID, OPENAI_API_MODEL_IDS, OPENAI_API_ROUTE_ID, OPENAI_CODEX_ROUTE_ID, OPENAI_PROVIDER_BRAND_ID, OPENAI_SIGN_IN_MODEL_IDS, OPENCODE_ZEN_PROVIDER_BRAND_ID, OPENCODE_ZEN_ROUTE_ID, OPENROUTER_MODEL_IDS, OPENROUTER_PROVIDER_BRAND_ID, OPENROUTER_ROUTE_ID, QIANFAN_MODEL_IDS, QIANFAN_PROVIDER_BRAND_ID, QIANFAN_ROUTE_ID, QWEN_API_MODEL_IDS, QWEN_API_ROUTE_ID, QWEN_CODING_PLAN_MODEL_IDS, QWEN_CODING_PLAN_ROUTE_ID, QWEN_PROVIDER_BRAND_ID, SYNTHETIC_PROVIDER_BRAND_ID, SYNTHETIC_ROUTE_ID, TOGETHER_PROVIDER_BRAND_ID, TOGETHER_ROUTE_ID, VENICE_PROVIDER_BRAND_ID, VENICE_ROUTE_ID, VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID, VERCEL_AI_GATEWAY_ROUTE_ID, VLLM_PROVIDER_BRAND_ID, VLLM_ROUTE_ID, VOLCENGINE_CODING_MODEL_IDS, VOLCENGINE_CODING_ROUTE_ID, VOLCENGINE_MODEL_IDS, VOLCENGINE_PLAN_ROUTE_ID, VOLCENGINE_PROVIDER_BRAND_ID, VOLCENGINE_ROUTE_ID, XAI_MODEL_IDS, XAI_PROVIDER_BRAND_ID, XAI_ROUTE_ID, XIAOMI_PROVIDER_BRAND_ID, XIAOMI_ROUTE_ID, ZAI_MODEL_IDS, ZAI_PROVIDER_BRAND_ID, ZAI_ROUTE_ID, listProviderBrandManifests, lookupProviderManifestModelCapability, resolveProviderRouteModelCapability } from "./registry.js";
|
|
12
12
|
import { readFile } from "node:fs/promises";
|
|
13
13
|
|
|
14
14
|
//#region src/providers/refresh.ts
|
|
15
15
|
const OPENAI_DOCS_MODELS_URL = "https://developers.openai.com/api/docs/models/all";
|
|
16
|
+
const OPENAI_API_MODELS_URL = "https://api.openai.com/v1/models";
|
|
16
17
|
const CHUTES_MODELS_URL = "https://llm.chutes.ai/v1/models";
|
|
17
18
|
const OPENROUTER_MODELS_URL = "https://openrouter.ai/api/v1/models";
|
|
18
19
|
const VERCEL_AI_GATEWAY_MODELS_URL = "https://ai-gateway.vercel.sh/v1/models";
|
|
19
20
|
const OPENCODE_ZEN_MODELS_URL = "https://opencode.ai/zen/v1/models";
|
|
20
21
|
const HUGGINGFACE_MODELS_URL = "https://router.huggingface.co/v1/models";
|
|
21
22
|
const VENICE_MODELS_URL = "https://api.venice.ai/api/v1/models";
|
|
23
|
+
const PROVIDER_CATALOG_TIMEOUT_MS = 8e3;
|
|
22
24
|
const ANTHROPIC_MODELS_URL = "https://api.anthropic.com/v1/models";
|
|
23
25
|
const GOOGLE_GEMINI_MODELS_URL = "https://generativelanguage.googleapis.com/v1beta/models";
|
|
24
|
-
const
|
|
26
|
+
const XAI_LANGUAGE_MODELS_URL = "https://api.x.ai/v1/language-models";
|
|
25
27
|
const MISTRAL_MODELS_URL = "https://api.mistral.ai/v1/models";
|
|
26
28
|
const MINIMAX_MODELS_URL = "https://api.minimax.io/v1/models";
|
|
27
29
|
const MINIMAX_PORTAL_DEFAULT_BASE_URL = "https://api.minimax.io/anthropic";
|
|
@@ -44,9 +46,6 @@ const VLLM_DEFAULT_BASE_URL = "http://127.0.0.1:8000/v1";
|
|
|
44
46
|
const OLLAMA_DEFAULT_BASE_URL = "http://127.0.0.1:11434";
|
|
45
47
|
const LMSTUDIO_DEFAULT_BASE_URL = "http://127.0.0.1:1234/v1";
|
|
46
48
|
const LITELLM_DEFAULT_BASE_URL = LITELLM_BASE_URL;
|
|
47
|
-
const OPENAI_CURRENT_API_MODEL_RE = /^gpt-5\.(?:[4-9]|\d{2,})(?:-(?:mini|nano|terra|luna))?$/;
|
|
48
|
-
const OPENAI_CURRENT_SIGN_IN_MODEL_RE = /^gpt-(?:5\.6-(?:sol|terra|luna)|5\.(?:[4-9]|\d{2,})(?:-mini)?|5\.3-codex-spark)$/;
|
|
49
|
-
const CHUTES_CURRENT_NORMAL_UI_MODEL_RE = /^(?:google\/gemma-4-[^/]+-TEE|Qwen\/Qwen3(?:\.\d+)?-[^/]+-TEE|deepseek-ai\/DeepSeek-V3\.2-TEE|zai-org\/GLM-5(?:\.\d+)?-TEE|moonshotai\/Kimi-K2\.6-TEE)$/;
|
|
50
49
|
function normalizeModelIds(values, options = {}) {
|
|
51
50
|
const seen = new Set();
|
|
52
51
|
const result = [];
|
|
@@ -109,6 +108,12 @@ function setProviderRefreshEnvFromProfile(params) {
|
|
|
109
108
|
const provider = params.profile.provider.trim();
|
|
110
109
|
const apiKey = resolveApiKeyProfileValue(params.profile, params.env);
|
|
111
110
|
switch (provider) {
|
|
111
|
+
case "openai":
|
|
112
|
+
setProviderRefreshEnvValue(params.target, "OPENAI_API_KEY", apiKey);
|
|
113
|
+
break;
|
|
114
|
+
case "chutes":
|
|
115
|
+
setProviderRefreshEnvValue(params.target, "CHUTES_API_KEY", apiKey);
|
|
116
|
+
break;
|
|
112
117
|
case "anthropic":
|
|
113
118
|
setProviderRefreshEnvValue(params.target, "ANTHROPIC_API_KEY", apiKey);
|
|
114
119
|
break;
|
|
@@ -187,6 +192,23 @@ function setProviderRefreshEnvFromProfile(params) {
|
|
|
187
192
|
case "together":
|
|
188
193
|
setProviderRefreshEnvValue(params.target, "TOGETHER_API_KEY", apiKey);
|
|
189
194
|
break;
|
|
195
|
+
case "openrouter":
|
|
196
|
+
setProviderRefreshEnvValue(params.target, "OPENROUTER_API_KEY", apiKey);
|
|
197
|
+
break;
|
|
198
|
+
case "vercel-ai-gateway":
|
|
199
|
+
case "ai-gateway":
|
|
200
|
+
setProviderRefreshEnvValue(params.target, "AI_GATEWAY_API_KEY", apiKey);
|
|
201
|
+
break;
|
|
202
|
+
case "opencode":
|
|
203
|
+
case "opencode-zen":
|
|
204
|
+
setProviderRefreshEnvValue(params.target, "OPENCODE_API_KEY", apiKey);
|
|
205
|
+
break;
|
|
206
|
+
case "huggingface":
|
|
207
|
+
setProviderRefreshEnvValue(params.target, "HUGGINGFACE_HUB_TOKEN", apiKey);
|
|
208
|
+
break;
|
|
209
|
+
case "venice":
|
|
210
|
+
setProviderRefreshEnvValue(params.target, "VENICE_API_KEY", apiKey);
|
|
211
|
+
break;
|
|
190
212
|
default:
|
|
191
213
|
if (provider.startsWith("custom-")) {
|
|
192
214
|
setProviderRefreshEnvValue(params.target, "CUSTOM_PROVIDER_API_KEY", apiKey);
|
|
@@ -198,6 +220,28 @@ function setProviderRefreshEnvFromModelProvider(params) {
|
|
|
198
220
|
const apiKey = resolveEnvSecretValue(params.provider.apiKey, params.env);
|
|
199
221
|
const baseUrl = typeof params.provider.baseUrl === "string" ? params.provider.baseUrl.trim() : undefined;
|
|
200
222
|
switch (params.providerId) {
|
|
223
|
+
case "openai":
|
|
224
|
+
setProviderRefreshEnvValue(params.target, "OPENAI_API_KEY", apiKey);
|
|
225
|
+
break;
|
|
226
|
+
case "chutes":
|
|
227
|
+
setProviderRefreshEnvValue(params.target, "CHUTES_API_KEY", apiKey);
|
|
228
|
+
break;
|
|
229
|
+
case "openrouter":
|
|
230
|
+
setProviderRefreshEnvValue(params.target, "OPENROUTER_API_KEY", apiKey);
|
|
231
|
+
break;
|
|
232
|
+
case "vercel-ai-gateway":
|
|
233
|
+
case "ai-gateway":
|
|
234
|
+
setProviderRefreshEnvValue(params.target, "AI_GATEWAY_API_KEY", apiKey);
|
|
235
|
+
break;
|
|
236
|
+
case "opencode":
|
|
237
|
+
setProviderRefreshEnvValue(params.target, "OPENCODE_API_KEY", apiKey);
|
|
238
|
+
break;
|
|
239
|
+
case "huggingface":
|
|
240
|
+
setProviderRefreshEnvValue(params.target, "HUGGINGFACE_HUB_TOKEN", apiKey);
|
|
241
|
+
break;
|
|
242
|
+
case "venice":
|
|
243
|
+
setProviderRefreshEnvValue(params.target, "VENICE_API_KEY", apiKey);
|
|
244
|
+
break;
|
|
201
245
|
case "vllm":
|
|
202
246
|
setProviderRefreshEnvValue(params.target, "VLLM_API_KEY", apiKey);
|
|
203
247
|
setProviderRefreshEnvValue(params.target, "VLLM_BASE_URL", baseUrl);
|
|
@@ -1091,13 +1135,13 @@ function selectManifestModelsForNormalUi(modelIds, preferred) {
|
|
|
1091
1135
|
return sortWithPreferredOrder(normalizeModelIds(modelIds).filter((id) => allowed.has(id.toLowerCase())), preferred);
|
|
1092
1136
|
}
|
|
1093
1137
|
function selectOpenAIApiModelsForNormalUi(modelIds) {
|
|
1094
|
-
return
|
|
1138
|
+
return selectManifestModelsForNormalUi(modelIds, OPENAI_API_MODEL_IDS);
|
|
1095
1139
|
}
|
|
1096
1140
|
function selectOpenAISignInModelsForNormalUi(modelIds) {
|
|
1097
|
-
return
|
|
1141
|
+
return selectManifestModelsForNormalUi(modelIds, OPENAI_SIGN_IN_MODEL_IDS);
|
|
1098
1142
|
}
|
|
1099
1143
|
function selectChutesModelsForNormalUi(modelIds) {
|
|
1100
|
-
return
|
|
1144
|
+
return selectManifestModelsForNormalUi(modelIds, CHUTES_MODEL_IDS);
|
|
1101
1145
|
}
|
|
1102
1146
|
function selectAnthropicModelsForNormalUi(modelIds) {
|
|
1103
1147
|
return selectManifestModelsForNormalUi(modelIds, ANTHROPIC_MODEL_IDS);
|
|
@@ -1163,8 +1207,7 @@ function selectDynamicProviderModelsForNormalUi(modelIds) {
|
|
|
1163
1207
|
return normalizeModelIds(modelIds);
|
|
1164
1208
|
}
|
|
1165
1209
|
function selectLitellmModelsForNormalUi(modelIds) {
|
|
1166
|
-
|
|
1167
|
-
return discovered.length > 0 ? discovered : [...LITELLM_MODEL_IDS];
|
|
1210
|
+
return selectDynamicProviderModelsForNormalUi(modelIds);
|
|
1168
1211
|
}
|
|
1169
1212
|
function selectOpenRouterModelsForNormalUi(modelIds) {
|
|
1170
1213
|
return selectManifestModelsForNormalUi(modelIds, OPENROUTER_MODEL_IDS);
|
|
@@ -1193,7 +1236,10 @@ function readEnv(env, names) {
|
|
|
1193
1236
|
return undefined;
|
|
1194
1237
|
}
|
|
1195
1238
|
async function fetchJsonCatalog(params) {
|
|
1196
|
-
const response = await params.fetch(params.url, {
|
|
1239
|
+
const response = await params.fetch(params.url, {
|
|
1240
|
+
headers: params.headers,
|
|
1241
|
+
signal: AbortSignal.timeout(PROVIDER_CATALOG_TIMEOUT_MS)
|
|
1242
|
+
});
|
|
1197
1243
|
if (!response.ok) {
|
|
1198
1244
|
throw new Error(`${params.label} model catalog fetch failed: HTTP ${response.status}`);
|
|
1199
1245
|
}
|
|
@@ -1269,7 +1315,25 @@ function cloudflareAiGatewayHeaders(env, providerKey) {
|
|
|
1269
1315
|
}
|
|
1270
1316
|
async function fetchOpenAIProviderRefreshSnapshot(params = {}) {
|
|
1271
1317
|
const fetchImpl = params.fetch ?? fetch;
|
|
1272
|
-
const
|
|
1318
|
+
const token = readEnv(params.env ?? process.env, ["OPENAI_API_KEY"]);
|
|
1319
|
+
if (token) {
|
|
1320
|
+
const payload = await fetchJsonCatalog({
|
|
1321
|
+
fetch: fetchImpl,
|
|
1322
|
+
url: OPENAI_API_MODELS_URL,
|
|
1323
|
+
headers: bearerHeaders(token),
|
|
1324
|
+
label: "OpenAI"
|
|
1325
|
+
});
|
|
1326
|
+
const models = parseGenericModelSnapshotsFromModelsResponse(payload);
|
|
1327
|
+
const ids = selectOpenAIApiModelsForNormalUi(models.map((model) => model.id));
|
|
1328
|
+
return { providers: { [OPENAI_PROVIDER_BRAND_ID]: {
|
|
1329
|
+
missing: { [OPENAI_CODEX_ROUTE_ID]: {
|
|
1330
|
+
reason: "catalog-unsupported",
|
|
1331
|
+
detail: "ChatGPT sign-in models are discovered from the authenticated runtime."
|
|
1332
|
+
} },
|
|
1333
|
+
routes: { [OPENAI_API_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, OPENAI_API_ROUTE_ID) }
|
|
1334
|
+
} } };
|
|
1335
|
+
}
|
|
1336
|
+
const response = await fetchImpl(OPENAI_DOCS_MODELS_URL, { signal: AbortSignal.timeout(PROVIDER_CATALOG_TIMEOUT_MS) });
|
|
1273
1337
|
if (!response.ok) {
|
|
1274
1338
|
throw new Error(`OpenAI docs model fetch failed: HTTP ${response.status}`);
|
|
1275
1339
|
}
|
|
@@ -1280,16 +1344,20 @@ async function fetchOpenAIProviderRefreshSnapshot(params = {}) {
|
|
|
1280
1344
|
reason: "catalog-unsupported",
|
|
1281
1345
|
detail: "OpenAI public model docs do not verify ChatGPT sign-in route compatibility."
|
|
1282
1346
|
} },
|
|
1283
|
-
routes: { [OPENAI_API_ROUTE_ID]: selectOpenAIApiModelsForNormalUi(ids)
|
|
1347
|
+
routes: { [OPENAI_API_ROUTE_ID]: selectOpenAIApiModelsForNormalUi(ids).map((id) => ({
|
|
1348
|
+
id,
|
|
1349
|
+
source: "official-docs"
|
|
1350
|
+
})) }
|
|
1284
1351
|
} } };
|
|
1285
1352
|
}
|
|
1286
1353
|
async function fetchChutesProviderRefreshSnapshot(params = {}) {
|
|
1287
|
-
const
|
|
1288
|
-
const
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1354
|
+
const token = readEnv(params.env ?? process.env, ["CHUTES_API_KEY"]);
|
|
1355
|
+
const payload = await fetchJsonCatalog({
|
|
1356
|
+
fetch: params.fetch ?? fetch,
|
|
1357
|
+
url: CHUTES_MODELS_URL,
|
|
1358
|
+
headers: optionalBearerHeaders(token),
|
|
1359
|
+
label: "Chutes"
|
|
1360
|
+
});
|
|
1293
1361
|
const models = parseGenericModelSnapshotsFromModelsResponse(payload);
|
|
1294
1362
|
const ids = models.map((model) => model.id);
|
|
1295
1363
|
return { providers: { [CHUTES_PROVIDER_BRAND_ID]: { routes: { [CHUTES_ROUTE_ID]: selectModelSnapshotsByIds(models, selectChutesModelsForNormalUi(ids), CHUTES_ROUTE_ID) } } } };
|
|
@@ -1370,7 +1438,7 @@ async function fetchXaiProviderRefreshSnapshot(params = {}) {
|
|
|
1370
1438
|
}
|
|
1371
1439
|
const payload = await fetchJsonCatalog({
|
|
1372
1440
|
fetch: params.fetch ?? fetch,
|
|
1373
|
-
url:
|
|
1441
|
+
url: XAI_LANGUAGE_MODELS_URL,
|
|
1374
1442
|
headers: bearerHeaders(token),
|
|
1375
1443
|
label: "xAI"
|
|
1376
1444
|
});
|
|
@@ -1864,56 +1932,73 @@ async function fetchTogetherProviderRefreshSnapshot(params = {}) {
|
|
|
1864
1932
|
return { providers: { [TOGETHER_PROVIDER_BRAND_ID]: { routes: { [TOGETHER_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, TOGETHER_ROUTE_ID) } } } };
|
|
1865
1933
|
}
|
|
1866
1934
|
async function fetchOpenRouterProviderRefreshSnapshot(params = {}) {
|
|
1867
|
-
const
|
|
1868
|
-
const
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1935
|
+
const token = readEnv(params.env ?? process.env, ["OPENROUTER_API_KEY"]);
|
|
1936
|
+
const payload = await fetchJsonCatalog({
|
|
1937
|
+
fetch: params.fetch ?? fetch,
|
|
1938
|
+
url: OPENROUTER_MODELS_URL,
|
|
1939
|
+
headers: optionalBearerHeaders(token),
|
|
1940
|
+
label: "OpenRouter"
|
|
1941
|
+
});
|
|
1873
1942
|
const models = parseOpenRouterModelSnapshotsFromModelsResponse(payload);
|
|
1874
1943
|
const ids = selectOpenRouterModelsForNormalUi(models.map((model) => model.id));
|
|
1875
1944
|
return { providers: { [OPENROUTER_PROVIDER_BRAND_ID]: { routes: { [OPENROUTER_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, OPENROUTER_ROUTE_ID) } } } };
|
|
1876
1945
|
}
|
|
1877
1946
|
async function fetchVercelAiGatewayProviderRefreshSnapshot(params = {}) {
|
|
1878
|
-
const
|
|
1879
|
-
const
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1947
|
+
const token = readEnv(params.env ?? process.env, ["AI_GATEWAY_API_KEY"]);
|
|
1948
|
+
const payload = await fetchJsonCatalog({
|
|
1949
|
+
fetch: params.fetch ?? fetch,
|
|
1950
|
+
url: VERCEL_AI_GATEWAY_MODELS_URL,
|
|
1951
|
+
headers: optionalBearerHeaders(token),
|
|
1952
|
+
label: "Vercel AI Gateway"
|
|
1953
|
+
});
|
|
1884
1954
|
const models = parseOpenRouterModelSnapshotsFromModelsResponse(payload);
|
|
1885
1955
|
const ids = selectVercelAiGatewayModelsForNormalUi(models.map((model) => model.id));
|
|
1886
1956
|
return { providers: { [VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID]: { routes: { [VERCEL_AI_GATEWAY_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, VERCEL_AI_GATEWAY_ROUTE_ID) } } } };
|
|
1887
1957
|
}
|
|
1888
1958
|
async function fetchOpencodeZenProviderRefreshSnapshot(params = {}) {
|
|
1889
|
-
const
|
|
1890
|
-
const
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1959
|
+
const token = readEnv(params.env ?? process.env, ["OPENCODE_API_KEY"]);
|
|
1960
|
+
const payload = await fetchJsonCatalog({
|
|
1961
|
+
fetch: params.fetch ?? fetch,
|
|
1962
|
+
url: OPENCODE_ZEN_MODELS_URL,
|
|
1963
|
+
headers: optionalBearerHeaders(token),
|
|
1964
|
+
label: "OpenCode Zen"
|
|
1965
|
+
});
|
|
1895
1966
|
const models = parseOpenRouterModelSnapshotsFromModelsResponse(payload);
|
|
1896
1967
|
const ids = selectOpencodeZenModelsForNormalUi(models.map((model) => model.id));
|
|
1897
1968
|
return { providers: { [OPENCODE_ZEN_PROVIDER_BRAND_ID]: { routes: { [OPENCODE_ZEN_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, OPENCODE_ZEN_ROUTE_ID) } } } };
|
|
1898
1969
|
}
|
|
1899
1970
|
async function fetchHuggingfaceProviderRefreshSnapshot(params = {}) {
|
|
1900
|
-
const
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1971
|
+
const token = readEnv(params.env ?? process.env, ["HUGGINGFACE_HUB_TOKEN", "HF_TOKEN"]);
|
|
1972
|
+
if (!token) {
|
|
1973
|
+
return missingProviderRoutes(HUGGINGFACE_PROVIDER_BRAND_ID, { [HUGGINGFACE_ROUTE_ID]: {
|
|
1974
|
+
reason: "credential-missing",
|
|
1975
|
+
detail: "Set HUGGINGFACE_HUB_TOKEN/HF_TOKEN or configure a Hugging Face token profile."
|
|
1976
|
+
} });
|
|
1904
1977
|
}
|
|
1905
|
-
const payload = await
|
|
1978
|
+
const payload = await fetchJsonCatalog({
|
|
1979
|
+
fetch: params.fetch ?? fetch,
|
|
1980
|
+
url: HUGGINGFACE_MODELS_URL,
|
|
1981
|
+
headers: bearerHeaders(token),
|
|
1982
|
+
label: "Hugging Face"
|
|
1983
|
+
});
|
|
1906
1984
|
const models = parseHuggingfaceModelSnapshotsFromModelsResponse(payload);
|
|
1907
1985
|
const ids = selectHuggingfaceModelsForNormalUi(models.map((model) => model.id));
|
|
1908
1986
|
return { providers: { [HUGGINGFACE_PROVIDER_BRAND_ID]: { routes: { [HUGGINGFACE_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, HUGGINGFACE_ROUTE_ID) } } } };
|
|
1909
1987
|
}
|
|
1910
1988
|
async function fetchVeniceProviderRefreshSnapshot(params = {}) {
|
|
1911
|
-
const
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1989
|
+
const token = readEnv(params.env ?? process.env, ["VENICE_API_KEY"]);
|
|
1990
|
+
if (!token) {
|
|
1991
|
+
return missingProviderRoutes(VENICE_PROVIDER_BRAND_ID, { [VENICE_ROUTE_ID]: {
|
|
1992
|
+
reason: "credential-missing",
|
|
1993
|
+
detail: "Set VENICE_API_KEY or configure a Venice API-key auth profile."
|
|
1994
|
+
} });
|
|
1915
1995
|
}
|
|
1916
|
-
const payload = await
|
|
1996
|
+
const payload = await fetchJsonCatalog({
|
|
1997
|
+
fetch: params.fetch ?? fetch,
|
|
1998
|
+
url: VENICE_MODELS_URL,
|
|
1999
|
+
headers: bearerHeaders(token),
|
|
2000
|
+
label: "Venice AI"
|
|
2001
|
+
});
|
|
1917
2002
|
const models = parseVeniceModelSnapshotsFromModelsResponse(payload);
|
|
1918
2003
|
const ids = selectVeniceModelsForNormalUi(models.map((model) => model.id));
|
|
1919
2004
|
return { providers: { [VENICE_PROVIDER_BRAND_ID]: { routes: { [VENICE_ROUTE_ID]: selectModelSnapshotsByIds(models, ids, VENICE_ROUTE_ID) } } } };
|
|
@@ -1924,6 +2009,62 @@ function fetchStaticUnsupportedProviderRefreshSnapshot() {
|
|
|
1924
2009
|
detail: "Direct GitHub Copilot model catalog probing is not implemented; configure Copilot Proxy for a probeable /models route."
|
|
1925
2010
|
} })]);
|
|
1926
2011
|
}
|
|
2012
|
+
function providerRefreshFetcherForBrand(brandId) {
|
|
2013
|
+
switch (brandId) {
|
|
2014
|
+
case OPENAI_PROVIDER_BRAND_ID: return fetchOpenAIProviderRefreshSnapshot;
|
|
2015
|
+
case CHUTES_PROVIDER_BRAND_ID: return fetchChutesProviderRefreshSnapshot;
|
|
2016
|
+
case ANTHROPIC_PROVIDER_BRAND_ID: return fetchAnthropicProviderRefreshSnapshot;
|
|
2017
|
+
case GOOGLE_PROVIDER_BRAND_ID: return fetchGoogleGeminiProviderRefreshSnapshot;
|
|
2018
|
+
case XAI_PROVIDER_BRAND_ID: return fetchXaiProviderRefreshSnapshot;
|
|
2019
|
+
case MISTRAL_PROVIDER_BRAND_ID: return fetchMistralProviderRefreshSnapshot;
|
|
2020
|
+
case VOLCENGINE_PROVIDER_BRAND_ID: return fetchVolcengineProviderRefreshSnapshot;
|
|
2021
|
+
case BYTEPLUS_PROVIDER_BRAND_ID: return fetchBytePlusProviderRefreshSnapshot;
|
|
2022
|
+
case MINIMAX_PROVIDER_BRAND_ID: return fetchMinimaxProviderRefreshSnapshot;
|
|
2023
|
+
case MOONSHOT_PROVIDER_BRAND_ID: return fetchMoonshotProviderRefreshSnapshot;
|
|
2024
|
+
case QWEN_PROVIDER_BRAND_ID: return fetchQwenProviderRefreshSnapshot;
|
|
2025
|
+
case COPILOT_PROVIDER_BRAND_ID: return fetchCopilotProviderRefreshSnapshot;
|
|
2026
|
+
case XIAOMI_PROVIDER_BRAND_ID: return fetchXiaomiProviderRefreshSnapshot;
|
|
2027
|
+
case SYNTHETIC_PROVIDER_BRAND_ID: return fetchSyntheticProviderRefreshSnapshot;
|
|
2028
|
+
case TOGETHER_PROVIDER_BRAND_ID: return fetchTogetherProviderRefreshSnapshot;
|
|
2029
|
+
case OPENROUTER_PROVIDER_BRAND_ID: return fetchOpenRouterProviderRefreshSnapshot;
|
|
2030
|
+
case ZAI_PROVIDER_BRAND_ID: return fetchZaiProviderRefreshSnapshot;
|
|
2031
|
+
case QIANFAN_PROVIDER_BRAND_ID: return fetchQianfanProviderRefreshSnapshot;
|
|
2032
|
+
case VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID: return fetchVercelAiGatewayProviderRefreshSnapshot;
|
|
2033
|
+
case OPENCODE_ZEN_PROVIDER_BRAND_ID: return fetchOpencodeZenProviderRefreshSnapshot;
|
|
2034
|
+
case OLLAMA_PROVIDER_BRAND_ID: return fetchOllamaProviderRefreshSnapshot;
|
|
2035
|
+
case LMSTUDIO_PROVIDER_BRAND_ID: return fetchLmStudioProviderRefreshSnapshot;
|
|
2036
|
+
case VLLM_PROVIDER_BRAND_ID: return fetchVllmProviderRefreshSnapshot;
|
|
2037
|
+
case LITELLM_PROVIDER_BRAND_ID: return fetchLitellmProviderRefreshSnapshot;
|
|
2038
|
+
case CLOUDFLARE_AI_GATEWAY_PROVIDER_BRAND_ID: return fetchCloudflareAiGatewayProviderRefreshSnapshot;
|
|
2039
|
+
case CUSTOM_PROVIDER_BRAND_ID: return fetchCustomProviderRefreshSnapshot;
|
|
2040
|
+
case HUGGINGFACE_PROVIDER_BRAND_ID: return fetchHuggingfaceProviderRefreshSnapshot;
|
|
2041
|
+
case VENICE_PROVIDER_BRAND_ID: return fetchVeniceProviderRefreshSnapshot;
|
|
2042
|
+
default: return undefined;
|
|
2043
|
+
}
|
|
2044
|
+
}
|
|
2045
|
+
async function fetchProviderRefreshSnapshotForRoutes(params) {
|
|
2046
|
+
const requestedRoutes = new Set([...params.routes].map((route) => route.trim().toLowerCase()).filter(Boolean));
|
|
2047
|
+
const fetchers = new Set();
|
|
2048
|
+
for (const manifest of listProviderBrandManifests()) {
|
|
2049
|
+
const routes = new Set([
|
|
2050
|
+
...manifest.methods.map((method) => method.route.trim().toLowerCase()),
|
|
2051
|
+
...(manifest.modelProviderIds ?? []).map((route) => route.trim().toLowerCase()),
|
|
2052
|
+
...(manifest.routeAliases ?? []).map((route) => route.trim().toLowerCase())
|
|
2053
|
+
]);
|
|
2054
|
+
if (![...routes].some((route) => requestedRoutes.has(route))) {
|
|
2055
|
+
continue;
|
|
2056
|
+
}
|
|
2057
|
+
const fetcher = providerRefreshFetcherForBrand(manifest.id);
|
|
2058
|
+
if (fetcher) {
|
|
2059
|
+
fetchers.add(fetcher);
|
|
2060
|
+
}
|
|
2061
|
+
}
|
|
2062
|
+
const results = await Promise.allSettled([...fetchers].map((fetcher) => fetcher({
|
|
2063
|
+
fetch: params.fetch,
|
|
2064
|
+
env: params.env
|
|
2065
|
+
})));
|
|
2066
|
+
return mergeProviderRefreshSnapshots(results.flatMap((result) => result.status === "fulfilled" ? [result.value] : []));
|
|
2067
|
+
}
|
|
1927
2068
|
function mergeProviderRefreshSnapshots(snapshots) {
|
|
1928
2069
|
const providers = {};
|
|
1929
2070
|
for (const snapshot of snapshots) {
|
|
@@ -1948,8 +2089,14 @@ function mergeProviderRefreshSnapshots(snapshots) {
|
|
|
1948
2089
|
async function fetchOfficialProviderRefreshSnapshot(params = {}) {
|
|
1949
2090
|
const fetchImpl = params.fetch ?? fetch;
|
|
1950
2091
|
const [openai, chutes, anthropic, google, xai, mistral, volcengine, byteplus, minimax, moonshot, qwen, copilot, xiaomi, synthetic, together, openrouter, zai, qianfan, vercelAiGateway, opencodeZen, ollama, lmstudio, vllm, litellm, cloudflareAiGateway, custom, huggingface, venice, staticUnsupported] = await Promise.all([
|
|
1951
|
-
fetchOpenAIProviderRefreshSnapshot({
|
|
1952
|
-
|
|
2092
|
+
fetchOpenAIProviderRefreshSnapshot({
|
|
2093
|
+
fetch: fetchImpl,
|
|
2094
|
+
env: params.env
|
|
2095
|
+
}),
|
|
2096
|
+
fetchChutesProviderRefreshSnapshot({
|
|
2097
|
+
fetch: fetchImpl,
|
|
2098
|
+
env: params.env
|
|
2099
|
+
}),
|
|
1953
2100
|
fetchAnthropicProviderRefreshSnapshot({
|
|
1954
2101
|
fetch: fetchImpl,
|
|
1955
2102
|
env: params.env
|
|
@@ -2002,7 +2149,10 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
|
|
|
2002
2149
|
fetch: fetchImpl,
|
|
2003
2150
|
env: params.env
|
|
2004
2151
|
}),
|
|
2005
|
-
fetchOpenRouterProviderRefreshSnapshot({
|
|
2152
|
+
fetchOpenRouterProviderRefreshSnapshot({
|
|
2153
|
+
fetch: fetchImpl,
|
|
2154
|
+
env: params.env
|
|
2155
|
+
}),
|
|
2006
2156
|
fetchZaiProviderRefreshSnapshot({
|
|
2007
2157
|
fetch: fetchImpl,
|
|
2008
2158
|
env: params.env
|
|
@@ -2011,8 +2161,14 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
|
|
|
2011
2161
|
fetch: fetchImpl,
|
|
2012
2162
|
env: params.env
|
|
2013
2163
|
}),
|
|
2014
|
-
fetchVercelAiGatewayProviderRefreshSnapshot({
|
|
2015
|
-
|
|
2164
|
+
fetchVercelAiGatewayProviderRefreshSnapshot({
|
|
2165
|
+
fetch: fetchImpl,
|
|
2166
|
+
env: params.env
|
|
2167
|
+
}),
|
|
2168
|
+
fetchOpencodeZenProviderRefreshSnapshot({
|
|
2169
|
+
fetch: fetchImpl,
|
|
2170
|
+
env: params.env
|
|
2171
|
+
}),
|
|
2016
2172
|
fetchOllamaProviderRefreshSnapshot({
|
|
2017
2173
|
fetch: fetchImpl,
|
|
2018
2174
|
env: params.env
|
|
@@ -2037,8 +2193,14 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
|
|
|
2037
2193
|
fetch: fetchImpl,
|
|
2038
2194
|
env: params.env
|
|
2039
2195
|
}),
|
|
2040
|
-
fetchHuggingfaceProviderRefreshSnapshot({
|
|
2041
|
-
|
|
2196
|
+
fetchHuggingfaceProviderRefreshSnapshot({
|
|
2197
|
+
fetch: fetchImpl,
|
|
2198
|
+
env: params.env
|
|
2199
|
+
}),
|
|
2200
|
+
fetchVeniceProviderRefreshSnapshot({
|
|
2201
|
+
fetch: fetchImpl,
|
|
2202
|
+
env: params.env
|
|
2203
|
+
}),
|
|
2042
2204
|
Promise.resolve(fetchStaticUnsupportedProviderRefreshSnapshot())
|
|
2043
2205
|
]);
|
|
2044
2206
|
return mergeProviderRefreshSnapshots([
|
|
@@ -2075,4 +2237,4 @@ async function fetchOfficialProviderRefreshSnapshot(params = {}) {
|
|
|
2075
2237
|
}
|
|
2076
2238
|
|
|
2077
2239
|
//#endregion
|
|
2078
|
-
export { applyProviderRefreshToRegistrySource, buildProviderCapabilityOverridesSource, buildProviderRefreshEnvFromCredentials, buildProviderRefreshReport, buildProviderRegistryReviewPatch, fetchOfficialProviderRefreshSnapshot, loadProviderRefreshSnapshotFromFile };
|
|
2240
|
+
export { applyProviderRefreshToRegistrySource, buildProviderCapabilityOverridesSource, buildProviderRefreshEnvFromCredentials, buildProviderRefreshReport, buildProviderRegistryReviewPatch, fetchOfficialProviderRefreshSnapshot, fetchProviderRefreshSnapshotForRoutes, loadProviderRefreshSnapshotFromFile };
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { BASE_THINKING_LEVELS, XHIGH_THINKING_LEVELS, resolveModelThinkingCapability } from "../shared/model-thinking.js";
|
|
2
2
|
import { CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_ID, CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF, CLOUDFLARE_AI_GATEWAY_MODEL_CATALOG, CLOUDFLARE_AI_GATEWAY_MODEL_IDS, CLOUDFLARE_AI_GATEWAY_MODEL_REFS, CLOUDFLARE_AI_GATEWAY_PROVIDER_BRAND_ID, CLOUDFLARE_AI_GATEWAY_ROUTE_ID, buildCloudflareAiGatewayModelCapabilityOverrides, resolveCloudflareAiGatewayBaseUrl } from "./cloudflare-ai-gateway-shared.js";
|
|
3
3
|
import { HUGGINGFACE_DEFAULT_MODEL_ID, HUGGINGFACE_DEFAULT_MODEL_REF, HUGGINGFACE_MODEL_IDS, HUGGINGFACE_MODEL_REFS, buildHuggingfaceModelCapabilityOverrides } from "./huggingface-models.js";
|
|
4
|
-
import { LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID, LITELLM_DEFAULT_MODEL_REF, LITELLM_MODEL_IDS, LITELLM_MODEL_REFS, buildLitellmModelCapabilityOverrides } from "./litellm-models.js";
|
|
5
4
|
import { OPENCODE_ZEN_DEFAULT_MODEL, OPENCODE_ZEN_DEFAULT_MODEL_REF, OPENCODE_ZEN_MODEL_IDS, OPENCODE_ZEN_MODEL_REFS, buildOpencodeZenModelCapabilityOverrides } from "./opencode-zen-shared.js";
|
|
6
5
|
import { SYNTHETIC_MODEL_IDS, buildSyntheticModelCapabilityOverrides } from "./synthetic-models.js";
|
|
7
6
|
import { TOGETHER_DEFAULT_MODEL_ID, TOGETHER_DEFAULT_MODEL_REF, TOGETHER_MODEL_IDS, TOGETHER_MODEL_REFS, buildTogetherModelCapabilityOverrides } from "./together-models.js";
|
|
8
7
|
import { VENICE_DEFAULT_MODEL_ID, VENICE_DEFAULT_MODEL_REF, VENICE_MODEL_IDS, VENICE_MODEL_REFS, buildVeniceModelCapabilityOverrides } from "./venice-models.js";
|
|
9
8
|
import { VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, VERCEL_AI_GATEWAY_MODEL_IDS, VERCEL_AI_GATEWAY_MODEL_REFS, buildVercelAiGatewayModelCapabilityOverrides } from "./vercel-ai-gateway-models.js";
|
|
10
9
|
import { XIAOMI_MODEL_IDS, buildXiaomiModelCapabilityOverrides } from "./xiaomi-models.js";
|
|
10
|
+
import { LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID, LITELLM_MODEL_IDS, LITELLM_MODEL_REFS } from "./litellm-models.js";
|
|
11
11
|
|
|
12
12
|
//#region src/providers/registry.ts
|
|
13
13
|
const PROVIDER_BRAND_ORDER = [
|
|
@@ -422,7 +422,6 @@ const SYNTHETIC_MODEL_CAPABILITY_OVERRIDES = buildSyntheticModelCapabilityOverri
|
|
|
422
422
|
const TOGETHER_MODEL_CAPABILITY_OVERRIDES = buildTogetherModelCapabilityOverrides(TOGETHER_ROUTE_ID);
|
|
423
423
|
const HUGGINGFACE_MODEL_CAPABILITY_OVERRIDES = buildHuggingfaceModelCapabilityOverrides(HUGGINGFACE_ROUTE_ID);
|
|
424
424
|
const VENICE_MODEL_CAPABILITY_OVERRIDES = buildVeniceModelCapabilityOverrides(VENICE_ROUTE_ID);
|
|
425
|
-
const LITELLM_MODEL_CAPABILITY_OVERRIDES = buildLitellmModelCapabilityOverrides(LITELLM_ROUTE_ID);
|
|
426
425
|
const CLOUDFLARE_AI_GATEWAY_MODEL_CAPABILITY_OVERRIDES = buildCloudflareAiGatewayModelCapabilityOverrides(CLOUDFLARE_AI_GATEWAY_ROUTE_ID);
|
|
427
426
|
const CUSTOM_PROVIDER_MODEL_REFS = [];
|
|
428
427
|
function parseModelRef(ref) {
|
|
@@ -1437,12 +1436,12 @@ const LITELLM_PROVIDER_MANIFEST = {
|
|
|
1437
1436
|
hint: "LiteLLM Proxy virtual key or master key plus /v1 base URL"
|
|
1438
1437
|
}],
|
|
1439
1438
|
models: {
|
|
1440
|
-
recommended: [
|
|
1439
|
+
recommended: [],
|
|
1441
1440
|
dynamic: true,
|
|
1442
1441
|
operatorCatalog: true,
|
|
1443
1442
|
routeRules: { [LITELLM_ROUTE_ID]: [`${LITELLM_ROUTE_ID}/*`] }
|
|
1444
1443
|
},
|
|
1445
|
-
modelCapabilities:
|
|
1444
|
+
modelCapabilities: {}
|
|
1446
1445
|
};
|
|
1447
1446
|
const CLOUDFLARE_AI_GATEWAY_PROVIDER_MANIFEST = {
|
|
1448
1447
|
id: CLOUDFLARE_AI_GATEWAY_PROVIDER_BRAND_ID,
|
|
@@ -1581,6 +1580,17 @@ function isStandardProviderModelRef(ref) {
|
|
|
1581
1580
|
}
|
|
1582
1581
|
return STANDARD_PROVIDER_MODEL_REFS.has(value.toLowerCase());
|
|
1583
1582
|
}
|
|
1583
|
+
function providerModelRecommendationRank(provider, model) {
|
|
1584
|
+
const manifest = getProviderBrandManifestForRoute(provider);
|
|
1585
|
+
if (!manifest) {
|
|
1586
|
+
return undefined;
|
|
1587
|
+
}
|
|
1588
|
+
const normalizedProvider = provider.trim().toLowerCase();
|
|
1589
|
+
const normalizedRef = `${normalizedProvider}/${model.trim().toLowerCase()}`;
|
|
1590
|
+
const routeRecommendations = manifest.models.recommended.filter((ref) => ref.trim().toLowerCase().startsWith(`${normalizedProvider}/`));
|
|
1591
|
+
const index = routeRecommendations.findIndex((ref) => ref.trim().toLowerCase() === normalizedRef);
|
|
1592
|
+
return index >= 0 ? index + 1 : undefined;
|
|
1593
|
+
}
|
|
1584
1594
|
function isStandardProviderCatalogEntry(entry) {
|
|
1585
1595
|
const provider = entry.provider.trim();
|
|
1586
1596
|
const id = entry.id.trim();
|
|
@@ -1591,4 +1601,4 @@ function isStandardProviderCatalogEntry(entry) {
|
|
|
1591
1601
|
}
|
|
1592
1602
|
|
|
1593
1603
|
//#endregion
|
|
1594
|
-
export { ANTHROPIC_MODEL_IDS, ANTHROPIC_PROVIDER_BRAND_ID, ANTHROPIC_PROVIDER_MANIFEST, ANTHROPIC_ROUTE_ID, BYTEPLUS_CODING_MODEL_IDS, BYTEPLUS_CODING_MODEL_REFS, BYTEPLUS_CODING_ROUTE_ID, BYTEPLUS_MODEL_IDS, BYTEPLUS_MODEL_REFS, BYTEPLUS_PLAN_ROUTE_ID, BYTEPLUS_PROVIDER_BRAND_ID, BYTEPLUS_ROUTE_ID, CHUTES_MODEL_IDS, CHUTES_PROVIDER_BRAND_ID, CHUTES_ROUTE_ID, COPILOT_PROVIDER_BRAND_ID, COPILOT_PROXY_MODEL_IDS, COPILOT_PROXY_MODEL_REFS, COPILOT_PROXY_ROUTE_ID, CUSTOM_PROVIDER_BRAND_ID, CUSTOM_PROVIDER_ROUTE_ID, GITHUB_COPILOT_DEFAULT_MODEL_REF, GITHUB_COPILOT_MODEL_IDS, GITHUB_COPILOT_MODEL_REFS, GITHUB_COPILOT_ROUTE_ID, GOOGLE_API_MODEL_REFS, GOOGLE_API_ROUTE_ID, GOOGLE_GEMINI_CLI_MODEL_REFS, GOOGLE_GEMINI_CLI_ROUTE_ID, GOOGLE_GEMINI_MODEL_IDS, GOOGLE_PROVIDER_BRAND_ID, HUGGINGFACE_PROVIDER_BRAND_ID, HUGGINGFACE_ROUTE_ID, KIMI_CODING_MODEL_IDS, KIMI_CODING_ROUTE_ID, LITELLM_PROVIDER_BRAND_ID, LITELLM_ROUTE_ID, LMSTUDIO_PROVIDER_BRAND_ID, LMSTUDIO_ROUTE_ID, MINIMAX_API_ROUTE_ID, MINIMAX_CN_ROUTE_ID, MINIMAX_MODEL_IDS, MINIMAX_PORTAL_ROUTE_ID, MINIMAX_PROVIDER_BRAND_ID, MISTRAL_MODEL_IDS, MISTRAL_MODEL_REFS, MISTRAL_PROVIDER_BRAND_ID, MISTRAL_ROUTE_ID, MOONSHOT_MODEL_IDS, MOONSHOT_PROVIDER_BRAND_ID, MOONSHOT_ROUTE_ID, OLLAMA_PROVIDER_BRAND_ID, OLLAMA_ROUTE_ID, OPENAI_API_MODEL_IDS, OPENAI_API_MODEL_REFS, OPENAI_API_ROUTE_ID, OPENAI_CODEX_ROUTE_ID, OPENAI_PROVIDER_BRAND_ID, OPENAI_SIGN_IN_MODEL_IDS, OPENAI_SIGN_IN_MODEL_REFS, OPENCODE_ZEN_PROVIDER_BRAND_ID, OPENCODE_ZEN_ROUTE_ID, OPENROUTER_MODEL_IDS, OPENROUTER_MODEL_REFS, OPENROUTER_PROVIDER_BRAND_ID, OPENROUTER_ROUTE_ID, PROVIDER_BRAND_ORDER, QIANFAN_MODEL_IDS, QIANFAN_MODEL_REFS, QIANFAN_PROVIDER_BRAND_ID, QIANFAN_ROUTE_ID, QWEN_API_MODEL_IDS, QWEN_API_ROUTE_ID, QWEN_CODING_PLAN_MODEL_IDS, QWEN_CODING_PLAN_ROUTE_ID, QWEN_PROVIDER_BRAND_ID, SYNTHETIC_MODEL_REFS, SYNTHETIC_PROVIDER_BRAND_ID, SYNTHETIC_ROUTE_ID, TOGETHER_PROVIDER_BRAND_ID, TOGETHER_ROUTE_ID, VENICE_PROVIDER_BRAND_ID, VENICE_ROUTE_ID, VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID, VERCEL_AI_GATEWAY_ROUTE_ID, VLLM_PROVIDER_BRAND_ID, VLLM_ROUTE_ID, VOLCENGINE_CODING_MODEL_IDS, VOLCENGINE_CODING_MODEL_REFS, VOLCENGINE_CODING_ROUTE_ID, VOLCENGINE_MODEL_IDS, VOLCENGINE_MODEL_REFS, VOLCENGINE_PLAN_ROUTE_ID, VOLCENGINE_PROVIDER_BRAND_ID, VOLCENGINE_ROUTE_ID, XAI_MODEL_IDS, XAI_MODEL_REFS, XAI_PROVIDER_BRAND_ID, XAI_ROUTE_ID, XIAOMI_MODEL_REFS, XIAOMI_PROVIDER_BRAND_ID, XIAOMI_ROUTE_ID, ZAI_MODEL_IDS, ZAI_MODEL_REFS, ZAI_PROVIDER_BRAND_ID, ZAI_ROUTE_ID, getProviderBrandManifestForRoute, isOpenAISignInCatalogModel, isOpenAISignInRuntimeModelSupported, isStandardProviderCatalogEntry, isStandardProviderModelRef, listProviderBrandManifests, lookupProviderManifestModelCapability, resolveProviderRouteModelCapability };
|
|
1604
|
+
export { ANTHROPIC_MODEL_IDS, ANTHROPIC_PROVIDER_BRAND_ID, ANTHROPIC_PROVIDER_MANIFEST, ANTHROPIC_ROUTE_ID, BYTEPLUS_CODING_MODEL_IDS, BYTEPLUS_CODING_MODEL_REFS, BYTEPLUS_CODING_ROUTE_ID, BYTEPLUS_MODEL_IDS, BYTEPLUS_MODEL_REFS, BYTEPLUS_PLAN_ROUTE_ID, BYTEPLUS_PROVIDER_BRAND_ID, BYTEPLUS_ROUTE_ID, CHUTES_MODEL_IDS, CHUTES_PROVIDER_BRAND_ID, CHUTES_ROUTE_ID, COPILOT_PROVIDER_BRAND_ID, COPILOT_PROXY_MODEL_IDS, COPILOT_PROXY_MODEL_REFS, COPILOT_PROXY_ROUTE_ID, CUSTOM_PROVIDER_BRAND_ID, CUSTOM_PROVIDER_ROUTE_ID, GITHUB_COPILOT_DEFAULT_MODEL_REF, GITHUB_COPILOT_MODEL_IDS, GITHUB_COPILOT_MODEL_REFS, GITHUB_COPILOT_ROUTE_ID, GOOGLE_API_MODEL_REFS, GOOGLE_API_ROUTE_ID, GOOGLE_GEMINI_CLI_MODEL_REFS, GOOGLE_GEMINI_CLI_ROUTE_ID, GOOGLE_GEMINI_MODEL_IDS, GOOGLE_PROVIDER_BRAND_ID, HUGGINGFACE_PROVIDER_BRAND_ID, HUGGINGFACE_ROUTE_ID, KIMI_CODING_MODEL_IDS, KIMI_CODING_ROUTE_ID, LITELLM_PROVIDER_BRAND_ID, LITELLM_ROUTE_ID, LMSTUDIO_PROVIDER_BRAND_ID, LMSTUDIO_ROUTE_ID, MINIMAX_API_ROUTE_ID, MINIMAX_CN_ROUTE_ID, MINIMAX_MODEL_IDS, MINIMAX_PORTAL_ROUTE_ID, MINIMAX_PROVIDER_BRAND_ID, MISTRAL_MODEL_IDS, MISTRAL_MODEL_REFS, MISTRAL_PROVIDER_BRAND_ID, MISTRAL_ROUTE_ID, MOONSHOT_MODEL_IDS, MOONSHOT_PROVIDER_BRAND_ID, MOONSHOT_ROUTE_ID, OLLAMA_PROVIDER_BRAND_ID, OLLAMA_ROUTE_ID, OPENAI_API_MODEL_IDS, OPENAI_API_MODEL_REFS, OPENAI_API_ROUTE_ID, OPENAI_CODEX_ROUTE_ID, OPENAI_PROVIDER_BRAND_ID, OPENAI_SIGN_IN_MODEL_IDS, OPENAI_SIGN_IN_MODEL_REFS, OPENCODE_ZEN_PROVIDER_BRAND_ID, OPENCODE_ZEN_ROUTE_ID, OPENROUTER_MODEL_IDS, OPENROUTER_MODEL_REFS, OPENROUTER_PROVIDER_BRAND_ID, OPENROUTER_ROUTE_ID, PROVIDER_BRAND_ORDER, QIANFAN_MODEL_IDS, QIANFAN_MODEL_REFS, QIANFAN_PROVIDER_BRAND_ID, QIANFAN_ROUTE_ID, QWEN_API_MODEL_IDS, QWEN_API_ROUTE_ID, QWEN_CODING_PLAN_MODEL_IDS, QWEN_CODING_PLAN_ROUTE_ID, QWEN_PROVIDER_BRAND_ID, SYNTHETIC_MODEL_REFS, SYNTHETIC_PROVIDER_BRAND_ID, SYNTHETIC_ROUTE_ID, TOGETHER_PROVIDER_BRAND_ID, TOGETHER_ROUTE_ID, VENICE_PROVIDER_BRAND_ID, VENICE_ROUTE_ID, VERCEL_AI_GATEWAY_PROVIDER_BRAND_ID, VERCEL_AI_GATEWAY_ROUTE_ID, VLLM_PROVIDER_BRAND_ID, VLLM_ROUTE_ID, VOLCENGINE_CODING_MODEL_IDS, VOLCENGINE_CODING_MODEL_REFS, VOLCENGINE_CODING_ROUTE_ID, VOLCENGINE_MODEL_IDS, VOLCENGINE_MODEL_REFS, VOLCENGINE_PLAN_ROUTE_ID, VOLCENGINE_PROVIDER_BRAND_ID, VOLCENGINE_ROUTE_ID, XAI_MODEL_IDS, XAI_MODEL_REFS, XAI_PROVIDER_BRAND_ID, XAI_ROUTE_ID, XIAOMI_MODEL_REFS, XIAOMI_PROVIDER_BRAND_ID, XIAOMI_ROUTE_ID, ZAI_MODEL_IDS, ZAI_MODEL_REFS, ZAI_PROVIDER_BRAND_ID, ZAI_ROUTE_ID, getProviderBrandManifestForRoute, isOpenAISignInCatalogModel, isOpenAISignInRuntimeModelSupported, isStandardProviderCatalogEntry, isStandardProviderModelRef, listProviderBrandManifests, lookupProviderManifestModelCapability, providerModelRecommendationRank, resolveProviderRouteModelCapability };
|