refactor: modularize providerRegistry.ts into 159 individual provider plugins (#3993)

Modularize provider registry (#3594). Integrated into release/v3.8.27 after rebase + behavior-preservation verification (provider-consistency gate 159/232/0, typecheck, registry tests, build 556/556).

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
This commit is contained in:
Paijo
2026-06-16 20:54:33 +07:00
committed by GitHub
parent 9cd9ae511e
commit 1ed01dd906
162 changed files with 5044 additions and 4500 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,323 @@
import type { RegistryEntry } from "./shared.ts";
import { aimlapiProvider } from "./registry/aimlapi/index.ts";
import { ollama_cloudProvider } from "./registry/ollama-cloud/index.ts";
import { syntheticProvider } from "./registry/synthetic/index.ts";
import { ideogramProvider } from "./registry/ideogram/index.ts";
import { friendliaiProvider } from "./registry/friendliai/index.ts";
import { sunoProvider } from "./registry/suno/index.ts";
import { adapta_webProvider } from "./registry/adapta-web/index.ts";
import { anthropicProvider } from "./registry/anthropic/index.ts";
import { sambanovaProvider } from "./registry/sambanova/index.ts";
import { puterProvider } from "./registry/puter/index.ts";
import { upstageProvider } from "./registry/upstage/index.ts";
import { nebiusProvider } from "./registry/nebius/index.ts";
import { fireworksProvider } from "./registry/fireworks/index.ts";
import { llamagateProvider } from "./registry/llamagate/index.ts";
import { inclusionaiProvider } from "./registry/inclusionai/index.ts";
import { glmProvider } from "./registry/glm/index.ts";
import { glmtProvider } from "./registry/glm/t/index.ts";
import { glm_cnProvider } from "./registry/glm/cn/index.ts";
import { traeProvider } from "./registry/trae/index.ts";
import { muse_spark_webProvider } from "./registry/muse-spark-web/index.ts";
import { kilocodeProvider } from "./registry/kilocode/index.ts";
import { github_modelsProvider } from "./registry/github/models/index.ts";
import { githubProvider } from "./registry/github/index.ts";
import { difyProvider } from "./registry/dify/index.ts";
import { ovhcloudProvider } from "./registry/ovhcloud/index.ts";
import { claudeProvider } from "./registry/claude/index.ts";
import { claude_webProvider } from "./registry/claude/web/index.ts";
import { bedrockProvider } from "./registry/bedrock/index.ts";
import { inner_aiProvider } from "./registry/inner-ai/index.ts";
import { qoderProvider } from "./registry/qoder/index.ts";
import { xiaomi_mimoProvider } from "./registry/xiaomi-mimo/index.ts";
import { codestralProvider } from "./registry/codestral/index.ts";
import { wandbProvider } from "./registry/wandb/index.ts";
import { predibaseProvider } from "./registry/predibase/index.ts";
import { baichuanProvider } from "./registry/baichuan/index.ts";
import { yiProvider } from "./registry/yi/index.ts";
import { deepseekProvider } from "./registry/deepseek/index.ts";
import { deepseek_webProvider } from "./registry/deepseek/web/index.ts";
import { kimi_coding_apikeyProvider } from "./registry/kimi/coding-apikey/index.ts";
import { kimi_codingProvider } from "./registry/kimi/coding/index.ts";
import { kimiProvider } from "./registry/kimi/index.ts";
import { kimi_webProvider } from "./registry/kimi/web/index.ts";
import { groqProvider } from "./registry/groq/index.ts";
import { inference_netProvider } from "./registry/inference-net/index.ts";
import { llm7Provider } from "./registry/llm7/index.ts";
import { cerebrasProvider } from "./registry/cerebras/index.ts";
import { sparkdeskProvider } from "./registry/sparkdesk/index.ts";
import { nlpcloudProvider } from "./registry/nlpcloud/index.ts";
import { nvidiaProvider } from "./registry/nvidia/index.ts";
import { api_airforceProvider } from "./registry/api-airforce/index.ts";
import { mistralProvider } from "./registry/mistral/index.ts";
import { togetherProvider } from "./registry/together/index.ts";
import { cohereProvider } from "./registry/cohere/index.ts";
import { cursorProvider } from "./registry/cursor/index.ts";
import { volcengineProvider } from "./registry/volcengine/index.ts";
import { hackclubProvider } from "./registry/hackclub/index.ts";
import { tencentProvider } from "./registry/tencent/index.ts";
import { cozeProvider } from "./registry/coze/index.ts";
import { ai21Provider } from "./registry/ai21/index.ts";
import { publicaiProvider } from "./registry/publicai/index.ts";
import { featherless_aiProvider } from "./registry/featherless-ai/index.ts";
import { antigravityProvider } from "./registry/antigravity/index.ts";
import { openaiProvider } from "./registry/openai/index.ts";
import { snowflakeProvider } from "./registry/snowflake/index.ts";
import { huggingfaceProvider } from "./registry/huggingface/index.ts";
import { chipotleProvider } from "./registry/chipotle/index.ts";
import { freeaiapikeyProvider } from "./registry/freeaiapikey/index.ts";
import { qwenProvider } from "./registry/qwen/index.ts";
import { qwen_webProvider } from "./registry/qwen/web/index.ts";
import { modalProvider } from "./registry/modal/index.ts";
import { zenmuxProvider } from "./registry/zenmux/index.ts";
import { leonardoProvider } from "./registry/leonardo/index.ts";
import { grok_webProvider } from "./registry/grok-web/index.ts";
import { kieProvider } from "./registry/kie/index.ts";
import { monsterapiProvider } from "./registry/monsterapi/index.ts";
import { sensenovaProvider } from "./registry/sensenova/index.ts";
import { hyperbolicProvider } from "./registry/hyperbolic/index.ts";
import { lambda_aiProvider } from "./registry/lambda-ai/index.ts";
import { phindProvider } from "./registry/phind/index.ts";
import { t3_webProvider } from "./registry/t3-web/index.ts";
import { klusterProvider } from "./registry/kluster/index.ts";
import { iflytekProvider } from "./registry/iflytek/index.ts";
import { crofProvider } from "./registry/crof/index.ts";
import { moonshotProvider } from "./registry/moonshot/index.ts";
import { bazaarlinkProvider } from "./registry/bazaarlink/index.ts";
import { perplexityProvider } from "./registry/perplexity/index.ts";
import { perplexity_webProvider } from "./registry/perplexity/web/index.ts";
import { minimaxProvider } from "./registry/minimax/index.ts";
import { minimax_cnProvider } from "./registry/minimax/cn/index.ts";
import { haiperProvider } from "./registry/haiper/index.ts";
import { bytezProvider } from "./registry/bytez/index.ts";
import { blackboxProvider } from "./registry/blackbox/index.ts";
import { blackbox_webProvider } from "./registry/blackbox/web/index.ts";
import { uncloseaiProvider } from "./registry/uncloseai/index.ts";
import { nscaleProvider } from "./registry/nscale/index.ts";
import { chatgpt_webProvider } from "./registry/chatgpt-web/index.ts";
import { openrouterProvider } from "./registry/openrouter/index.ts";
import { glhfProvider } from "./registry/glhf/index.ts";
import { copilot_webProvider } from "./registry/copilot-web/index.ts";
import { stepfunProvider } from "./registry/stepfun/index.ts";
import { freemodel_devProvider } from "./registry/freemodel-dev/index.ts";
import { gitlawb_gmiProvider } from "./registry/gitlawb/gmi/index.ts";
import { gitlawbProvider } from "./registry/gitlawb/index.ts";
import { liquidProvider } from "./registry/liquid/index.ts";
import { deepinfraProvider } from "./registry/deepinfra/index.ts";
import { agyProvider } from "./registry/agy/index.ts";
import { udioProvider } from "./registry/udio/index.ts";
import { longcatProvider } from "./registry/longcat/index.ts";
import { vertex_partnerProvider } from "./registry/vertex/partner/index.ts";
import { vertexProvider } from "./registry/vertex/index.ts";
import { duckduckgo_webProvider } from "./registry/duckduckgo-web/index.ts";
import { xaiProvider } from "./registry/xai/index.ts";
import { morphProvider } from "./registry/morph/index.ts";
import { siliconflowProvider } from "./registry/siliconflow/index.ts";
import { gitlab_duoProvider } from "./registry/gitlab-duo/index.ts";
import { command_codeProvider } from "./registry/command-code/index.ts";
import { novitaProvider } from "./registry/novita/index.ts";
import { windsurfProvider } from "./registry/windsurf/index.ts";
import { nanogptProvider } from "./registry/nanogpt/index.ts";
import { scalewayProvider } from "./registry/scaleway/index.ts";
import { agentrouterProvider } from "./registry/agentrouter/index.ts";
import { zaiProvider } from "./registry/zai/index.ts";
import { huggingchatProvider } from "./registry/huggingchat/index.ts";
import { galadrielProvider } from "./registry/galadriel/index.ts";
import { qianfanProvider } from "./registry/qianfan/index.ts";
import { meta_llamaProvider } from "./registry/meta-llama/index.ts";
import { cloudflare_aiProvider } from "./registry/cloudflare-ai/index.ts";
import { nous_researchProvider } from "./registry/nous-research/index.ts";
import { alibabaProvider } from "./registry/alibaba/index.ts";
import { alibaba_cnProvider } from "./registry/alibaba/cn/index.ts";
import { doubaoProvider } from "./registry/doubao/index.ts";
import { doubao_webProvider } from "./registry/doubao/web/index.ts";
import { kilo_gatewayProvider } from "./registry/kilo-gateway/index.ts";
import { bailian_coding_planProvider } from "./registry/bailian-coding-plan/index.ts";
import { gigachatProvider } from "./registry/gigachat/index.ts";
import { devin_cliProvider } from "./registry/devin-cli/index.ts";
import { chutesProvider } from "./registry/chutes/index.ts";
import { databricksProvider } from "./registry/databricks/index.ts";
import { rekaProvider } from "./registry/reka/index.ts";
import { vercel_ai_gatewayProvider } from "./registry/vercel-ai-gateway/index.ts";
import { v0_vercelProvider } from "./registry/v0-vercel/index.ts";
import { opencode_zenProvider } from "./registry/opencode/zen/index.ts";
import { opencode_goProvider } from "./registry/opencode/go/index.ts";
import { opencodeProvider } from "./registry/opencode/index.ts";
import { maritalkProvider } from "./registry/maritalk/index.ts";
import { basetenProvider } from "./registry/baseten/index.ts";
import { gemini_cliProvider } from "./registry/gemini/cli/index.ts";
import { geminiProvider } from "./registry/gemini/index.ts";
import { gemini_webProvider } from "./registry/gemini/web/index.ts";
import { clineProvider } from "./registry/cline/index.ts";
import { herokuProvider } from "./registry/heroku/index.ts";
import { bluesmindsProvider } from "./registry/bluesminds/index.ts";
import { theoldllmProvider } from "./registry/theoldllm/index.ts";
import { baiduProvider } from "./registry/baidu/index.ts";
import { pollinationsProvider } from "./registry/pollinations/index.ts";
import { veoaifree_webProvider } from "./registry/veoaifree-web/index.ts";
import { codexProvider } from "./registry/codex/index.ts";
import { veniceProvider } from "./registry/venice/index.ts";
import { kiroProvider } from "./registry/kiro/index.ts";
export const REGISTRY: Record<string, RegistryEntry> = {
aimlapi: aimlapiProvider,
"ollama-cloud": ollama_cloudProvider,
synthetic: syntheticProvider,
ideogram: ideogramProvider,
friendliai: friendliaiProvider,
suno: sunoProvider,
"adapta-web": adapta_webProvider,
anthropic: anthropicProvider,
sambanova: sambanovaProvider,
puter: puterProvider,
upstage: upstageProvider,
nebius: nebiusProvider,
fireworks: fireworksProvider,
llamagate: llamagateProvider,
inclusionai: inclusionaiProvider,
glm: glmProvider,
glmt: glmtProvider,
"glm-cn": glm_cnProvider,
trae: traeProvider,
"muse-spark-web": muse_spark_webProvider,
kilocode: kilocodeProvider,
"github-models": github_modelsProvider,
github: githubProvider,
dify: difyProvider,
ovhcloud: ovhcloudProvider,
claude: claudeProvider,
"claude-web": claude_webProvider,
bedrock: bedrockProvider,
"inner-ai": inner_aiProvider,
qoder: qoderProvider,
"xiaomi-mimo": xiaomi_mimoProvider,
codestral: codestralProvider,
wandb: wandbProvider,
predibase: predibaseProvider,
baichuan: baichuanProvider,
yi: yiProvider,
deepseek: deepseekProvider,
"deepseek-web": deepseek_webProvider,
"kimi-coding-apikey": kimi_coding_apikeyProvider,
"kimi-coding": kimi_codingProvider,
kimi: kimiProvider,
"kimi-web": kimi_webProvider,
groq: groqProvider,
"inference-net": inference_netProvider,
llm7: llm7Provider,
cerebras: cerebrasProvider,
sparkdesk: sparkdeskProvider,
nlpcloud: nlpcloudProvider,
nvidia: nvidiaProvider,
"api-airforce": api_airforceProvider,
mistral: mistralProvider,
together: togetherProvider,
cohere: cohereProvider,
cursor: cursorProvider,
volcengine: volcengineProvider,
hackclub: hackclubProvider,
tencent: tencentProvider,
coze: cozeProvider,
ai21: ai21Provider,
publicai: publicaiProvider,
"featherless-ai": featherless_aiProvider,
antigravity: antigravityProvider,
openai: openaiProvider,
snowflake: snowflakeProvider,
huggingface: huggingfaceProvider,
chipotle: chipotleProvider,
freeaiapikey: freeaiapikeyProvider,
qwen: qwenProvider,
"qwen-web": qwen_webProvider,
modal: modalProvider,
zenmux: zenmuxProvider,
leonardo: leonardoProvider,
"grok-web": grok_webProvider,
kie: kieProvider,
monsterapi: monsterapiProvider,
sensenova: sensenovaProvider,
hyperbolic: hyperbolicProvider,
"lambda-ai": lambda_aiProvider,
phind: phindProvider,
"t3-web": t3_webProvider,
kluster: klusterProvider,
iflytek: iflytekProvider,
crof: crofProvider,
moonshot: moonshotProvider,
bazaarlink: bazaarlinkProvider,
perplexity: perplexityProvider,
"perplexity-web": perplexity_webProvider,
minimax: minimaxProvider,
"minimax-cn": minimax_cnProvider,
haiper: haiperProvider,
bytez: bytezProvider,
blackbox: blackboxProvider,
"blackbox-web": blackbox_webProvider,
uncloseai: uncloseaiProvider,
nscale: nscaleProvider,
"chatgpt-web": chatgpt_webProvider,
openrouter: openrouterProvider,
glhf: glhfProvider,
"copilot-web": copilot_webProvider,
stepfun: stepfunProvider,
"freemodel-dev": freemodel_devProvider,
"gitlawb-gmi": gitlawb_gmiProvider,
gitlawb: gitlawbProvider,
liquid: liquidProvider,
deepinfra: deepinfraProvider,
agy: agyProvider,
udio: udioProvider,
longcat: longcatProvider,
"vertex-partner": vertex_partnerProvider,
vertex: vertexProvider,
"duckduckgo-web": duckduckgo_webProvider,
xai: xaiProvider,
morph: morphProvider,
siliconflow: siliconflowProvider,
"gitlab-duo": gitlab_duoProvider,
"command-code": command_codeProvider,
novita: novitaProvider,
windsurf: windsurfProvider,
nanogpt: nanogptProvider,
scaleway: scalewayProvider,
agentrouter: agentrouterProvider,
zai: zaiProvider,
huggingchat: huggingchatProvider,
galadriel: galadrielProvider,
qianfan: qianfanProvider,
"meta-llama": meta_llamaProvider,
"cloudflare-ai": cloudflare_aiProvider,
"nous-research": nous_researchProvider,
alibaba: alibabaProvider,
"alibaba-cn": alibaba_cnProvider,
doubao: doubaoProvider,
"doubao-web": doubao_webProvider,
"kilo-gateway": kilo_gatewayProvider,
"bailian-coding-plan": bailian_coding_planProvider,
gigachat: gigachatProvider,
"devin-cli": devin_cliProvider,
chutes: chutesProvider,
databricks: databricksProvider,
reka: rekaProvider,
"vercel-ai-gateway": vercel_ai_gatewayProvider,
"v0-vercel": v0_vercelProvider,
"opencode-zen": opencode_zenProvider,
"opencode-go": opencode_goProvider,
opencode: opencodeProvider,
maritalk: maritalkProvider,
baseten: basetenProvider,
"gemini-cli": gemini_cliProvider,
gemini: geminiProvider,
"gemini-web": gemini_webProvider,
cline: clineProvider,
heroku: herokuProvider,
bluesminds: bluesmindsProvider,
theoldllm: theoldllmProvider,
baidu: baiduProvider,
pollinations: pollinationsProvider,
"veoaifree-web": veoaifree_webProvider,
codex: codexProvider,
venice: veniceProvider,
kiro: kiroProvider,
};

View File

@@ -0,0 +1,20 @@
import type { RegistryEntry } from "../../shared.ts";
export const adapta_webProvider: RegistryEntry = {
id: "adapta-web",
alias: "adp-web",
format: "openai",
executor: "adapta-web",
baseUrl: "https://agent.adapta.one/api/chat/stream/v1",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "adapta-one", name: "Adapta ONE (Auto)" },
{ id: "adapta-gpt", name: "GPT-5 (via Adapta)" },
{ id: "adapta-claude", name: "Claude Sonnet 4.6 (via Adapta)" },
{ id: "adapta-gemini", name: "Gemini 2.5 Pro (via Adapta)" },
{ id: "adapta-grok", name: "Grok 4 (via Adapta)" },
{ id: "adapta-deepseek", name: "DeepSeek R2 (via Adapta)" },
{ id: "adapta-llama", name: "Llama 4 (via Adapta)" },
],
};

View File

@@ -0,0 +1,30 @@
import type { RegistryEntry } from "../../shared.ts";
import {
getClaudeCliHeaders,
mapStainlessOs,
mapStainlessArch,
ANTHROPIC_BETA_CLAUDE_OAUTH,
ANTHROPIC_VERSION_HEADER,
CLAUDE_CLI_STAINLESS_PACKAGE_VERSION,
CLAUDE_CLI_STAINLESS_RUNTIME_VERSION,
CLAUDE_CLI_USER_AGENT,
} from "../../shared.ts";
export const agentrouterProvider: RegistryEntry = {
id: "agentrouter",
alias: "agentrouter",
format: "claude",
executor: "default",
baseUrl: "https://agentrouter.org/v1/messages",
authType: "apikey",
authHeader: "x-api-key",
defaultContextLength: 128000,
headers: getClaudeCliHeaders(),
models: [
{ id: "claude-opus-4-6", name: "Claude 4.6 Opus" },
{ id: "claude-haiku-4-5-20251001", name: "Claude 4.5 Haiku" },
{ id: "glm-5.1", name: "GLM 5.1" },
{ id: "deepseek-v3.2", name: "DeepSeek V3.2" },
],
passthroughModels: true,
};

View File

@@ -0,0 +1,28 @@
import type { RegistryEntry } from "../../shared.ts";
import {
buildAntigravityUrl,
ANTIGRAVITY_BASE_URLS,
AGY_PUBLIC_MODELS,
getAntigravityProviderHeaders,
resolvePublicCred,
} from "../../shared.ts";
export const agyProvider: RegistryEntry = {
id: "agy",
alias: "agy",
format: "antigravity",
executor: "antigravity",
baseUrls: [...ANTIGRAVITY_BASE_URLS],
urlBuilder: buildAntigravityUrl,
authType: "oauth",
authHeader: "bearer",
headers: getAntigravityProviderHeaders(),
oauth: {
clientIdEnv: "ANTIGRAVITY_OAUTH_CLIENT_ID",
clientIdDefault: resolvePublicCred("antigravity_id"),
clientSecretEnv: "ANTIGRAVITY_OAUTH_CLIENT_SECRET",
clientSecretDefault: resolvePublicCred("antigravity_alt"),
},
models: [...AGY_PUBLIC_MODELS],
passthroughModels: true,
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const ai21Provider: RegistryEntry = {
id: "ai21",
alias: "ai21",
format: "openai",
executor: "default",
baseUrl: "https://api.ai21.com/studio/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.ai21,
};

View File

@@ -0,0 +1,21 @@
import type { RegistryEntry } from "../../shared.ts";
export const aimlapiProvider: RegistryEntry = {
id: "aimlapi",
alias: "aiml",
format: "openai",
executor: "default",
baseUrl: "https://api.aimlapi.com/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
// $0.025/day free credits — 200+ models via single aggregator endpoint
models: [
{ id: "gpt-4o", name: "GPT-4o (via AI/ML API)" },
{ id: "claude-3-5-sonnet-20241022", name: "Claude 3.5 Sonnet (via AI/ML API)" },
{ id: "gemini-1.5-pro", name: "Gemini 1.5 Pro (via AI/ML API)" },
{ id: "meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo", name: "Llama 3.1 70B (via AI/ML API)" },
{ id: "deepseek-chat", name: "DeepSeek Chat (via AI/ML API)" },
{ id: "mistral-large-latest", name: "Mistral Large (via AI/ML API)" },
],
passthroughModels: true,
};

View File

@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../../shared.ts";
import { ALIBABA_DASHSCOPE_MODELS } from "../../../shared.ts";
export const alibaba_cnProvider: RegistryEntry = {
id: "alibaba-cn",
alias: "ali-cn",
format: "openai",
executor: "default",
baseUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
modelsUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1/models",
authType: "apikey",
authHeader: "bearer",
models: ALIBABA_DASHSCOPE_MODELS,
passthroughModels: true,
};

View File

@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../shared.ts";
import { ALIBABA_DASHSCOPE_MODELS } from "../../shared.ts";
export const alibabaProvider: RegistryEntry = {
id: "alibaba",
alias: "ali",
format: "openai",
executor: "default",
baseUrl: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions",
modelsUrl: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/models",
authType: "apikey",
authHeader: "bearer",
models: ALIBABA_DASHSCOPE_MODELS,
passthroughModels: true,
};

View File

@@ -0,0 +1,25 @@
import type { RegistryEntry } from "../../shared.ts";
import { ANTHROPIC_BETA_API_KEY, ANTHROPIC_VERSION_HEADER } from "../../shared.ts";
export const anthropicProvider: RegistryEntry = {
id: "anthropic",
alias: "anthropic",
format: "claude",
executor: "default",
baseUrl: "https://api.anthropic.com/v1/messages",
urlSuffix: "?beta=true",
authType: "apikey",
authHeader: "x-api-key",
defaultContextLength: 200000,
headers: {
"Anthropic-Version": ANTHROPIC_VERSION_HEADER,
"Anthropic-Beta": ANTHROPIC_BETA_API_KEY,
},
models: [
{ id: "claude-opus-4.7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4.6", name: "Claude Opus 4.6" },
{ id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6" },
{ id: "claude-sonnet-4.5", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4.5", name: "Claude Haiku 4.5" },
],
};

View File

@@ -0,0 +1,28 @@
import type { RegistryEntry } from "../../shared.ts";
import {
buildAntigravityUrl,
ANTIGRAVITY_BASE_URLS,
ANTIGRAVITY_PUBLIC_MODELS,
getAntigravityProviderHeaders,
resolvePublicCred,
} from "../../shared.ts";
export const antigravityProvider: RegistryEntry = {
id: "antigravity",
alias: undefined,
format: "antigravity",
executor: "antigravity",
baseUrls: [...ANTIGRAVITY_BASE_URLS],
urlBuilder: buildAntigravityUrl,
authType: "oauth",
authHeader: "bearer",
headers: getAntigravityProviderHeaders(),
oauth: {
clientIdEnv: "ANTIGRAVITY_OAUTH_CLIENT_ID",
clientIdDefault: resolvePublicCred("antigravity_id"),
clientSecretEnv: "ANTIGRAVITY_OAUTH_CLIENT_SECRET",
clientSecretDefault: resolvePublicCred("antigravity_alt"),
},
models: [...ANTIGRAVITY_PUBLIC_MODELS],
passthroughModels: true,
};

View File

@@ -0,0 +1,57 @@
import type { RegistryEntry } from "../../shared.ts";
export const api_airforceProvider: RegistryEntry = {
id: "api-airforce",
alias: "af",
format: "openai",
executor: "default",
baseUrl: "https://api.airforce/v1/chat/completions",
modelsUrl: "https://api.airforce/v1/models",
authType: "apikey",
authHeader: "bearer",
defaultContextLength: 128000,
headers: {
"HTTP-Referer": "https://endpoint-proxy.local",
"X-Title": "Endpoint Proxy",
},
models: [
// Free tier models (55 available)
{ id: "x-ai/grok-3", name: "Grok-3 (Free)", contextLength: 131072, maxOutputTokens: 65536 },
{
id: "x-ai/grok-2-1212",
name: "Grok-2 1212 (Free)",
contextLength: 131072,
maxOutputTokens: 65536,
},
{
id: "anthropic/claude-3.7-sonnet",
name: "Claude 3.7 Sonnet (Free)",
contextLength: 200000,
maxOutputTokens: 8192,
},
{
id: "qwen/qwen3-32b",
name: "Qwen3 32B (Free)",
contextLength: 128000,
maxOutputTokens: 8192,
},
{
id: "moonshot/kimi-k2.6",
name: "Kimi K2.6 (Free)",
contextLength: 262144,
maxOutputTokens: 65536,
},
{
id: "google/gemini-2.5-flash",
name: "Gemini 2.5 Flash (Free)",
contextLength: 1048576,
maxOutputTokens: 65536,
},
{
id: "deepseek/deepseek-v3",
name: "DeepSeek V3 (Free)",
contextLength: 262144,
maxOutputTokens: 16384,
},
],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const baichuanProvider: RegistryEntry = {
id: "baichuan",
alias: "baichuan",
format: "openai",
executor: "default",
baseUrl: "https://api.baichuan-ai.com/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "Baichuan4", name: "Baichuan 4" }],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const baiduProvider: RegistryEntry = {
id: "baidu",
alias: "baidu",
format: "openai",
executor: "default",
baseUrl: "https://qianfan.baidubce.com/v2/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "ernie-4.0-8k", name: "ERNIE 4.0 8K" }],
};

View File

@@ -0,0 +1,22 @@
import type { RegistryEntry } from "../../shared.ts";
import { getAnthropicCompatHeaders, ANTHROPIC_VERSION_HEADER } from "../../shared.ts";
export const bailian_coding_planProvider: RegistryEntry = {
id: "bailian-coding-plan",
alias: "bcp",
format: "claude",
executor: "default",
baseUrl: "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic/v1",
chatPath: "/messages",
authType: "apikey",
authHeader: "x-api-key",
headers: getAnthropicCompatHeaders(),
models: [
{ id: "qwen3.6-plus", name: "Qwen3.6 Plus(vision)" },
{ id: "qwen3.5-plus", name: "Qwen3.5 Plus(vision)" },
{ id: "qwen3-max-2026-01-23", name: "Qwen3 Max" },
{ id: "kimi-k2.5", name: "Kimi K2.5(vision)" },
{ id: "glm-5", name: "GLM 5" },
{ id: "MiniMax-M2.5", name: "MiniMax M2.5" },
],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const basetenProvider: RegistryEntry = {
id: "baseten",
alias: "baseten",
format: "openai",
executor: "default",
baseUrl: "https://inference.baseten.co/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.baseten,
};

View File

@@ -0,0 +1,48 @@
import type { RegistryEntry } from "../../shared.ts";
export const bazaarlinkProvider: RegistryEntry = {
id: "bazaarlink",
alias: "bzl",
format: "openai",
executor: "default",
baseUrl: "https://bazaarlink.ai/api/v1/chat/completions",
modelsUrl: "https://bazaarlink.ai/api/v1/models",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "auto:free", name: "Auto Free (Zero Cost)" },
{ id: "claude-opus-4.7", name: "Claude Opus 4.7" },
{ id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4.5", name: "Claude Haiku 4.5" },
{ id: "gpt-5.5", name: "GPT-5.5" },
{ 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: "grok-4.3", name: "Grok 4.3" },
{ id: "grok-4.20", name: "Grok 4.20" },
{ id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro" },
{ id: "gemini-3-flash-preview", name: "Gemini 3 Flash" },
{ id: "gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite" },
{ id: "gemma-4-31b-it", name: "Gemma 4 31B" },
{ id: "gemma-4-26b-a4b-it", name: "Gemma 4 26B A4B" },
{ id: "deepseek-v3.2", name: "DeepSeek V3.2" },
{ id: "kimi-k2.6", name: "Kimi K2.6" },
{ id: "kimi-k2.5", name: "Kimi K2.5" },
{ id: "glm-5.1", name: "GLM 5.1" },
{ id: "glm-5", name: "GLM 5" },
{ id: "mimo-v2.5-pro", name: "MiMo-V2.5-Pro" },
{ id: "mimo-v2.5", name: "MiMo-V2.5" },
// #3110: MiniMax M3 via OpenCode Zen
{ id: "minimax-m3", name: "MiniMax M3", contextLength: 1048576, supportsVision: true },
{ id: "minimax-m2.7", name: "MiniMax M2.7" },
{ id: "minimax-m2.5", name: "MiniMax M2.5" },
{ id: "llama-4-maverick", name: "Llama 4 Maverick" },
{ id: "llama-4-scout", name: "Llama 4 Scout" },
{ id: "llama-3.3-70b-instruct", name: "Llama 3.3 70B" },
{ id: "qwen3.6-plus", name: "Qwen 3.6 Plus" },
{ id: "mistral-large-2512", name: "Mistral Large 3" },
{ id: "mistral-medium-3.1", name: "Mistral Medium 3.1" },
{ id: "mistral-small-2603", name: "Mistral Small 4" },
{ id: "nemotron-3-super-120b-a12b", name: "Nemotron 3 Super" },
],
};

View File

@@ -0,0 +1,49 @@
import type { RegistryEntry } from "../../shared.ts";
export const bedrockProvider: RegistryEntry = {
id: "bedrock",
alias: "bedrock",
format: "openai",
executor: "bedrock",
authType: "apikey",
authHeader: "bearer",
defaultContextLength: 200000,
models: [
{
id: "anthropic.claude-sonnet-4-6",
name: "Claude Sonnet 4.6 (Bedrock)",
toolCalling: true,
supportsVision: true,
contextLength: 1000000,
},
{
id: "anthropic.claude-sonnet-4-5",
name: "Claude Sonnet 4.5 (Bedrock)",
toolCalling: true,
supportsVision: true,
contextLength: 200000,
},
{
id: "anthropic.claude-opus-4-6",
name: "Claude Opus 4.6 (Bedrock)",
toolCalling: true,
supportsVision: true,
contextLength: 1000000,
},
{
id: "anthropic.claude-opus-4-7",
name: "Claude Opus 4.7 (Bedrock)",
toolCalling: true,
supportsVision: true,
contextLength: 1000000,
},
{
id: "anthropic.claude-haiku-4-5",
name: "Claude Haiku 4.5 (Bedrock)",
toolCalling: true,
supportsVision: true,
},
{ id: "openai.gpt-oss-120b-1:0", name: "GPT-OSS 120B (Bedrock)" },
],
passthroughModels: true,
};

View File

@@ -0,0 +1,20 @@
import type { RegistryEntry } from "../../shared.ts";
export const blackboxProvider: RegistryEntry = {
id: "blackbox",
alias: "bb",
format: "openai",
executor: "default",
baseUrl: "https://api.blackbox.ai/v1/chat/completions",
modelsUrl: "https://api.blackbox.ai/v1/models",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "gpt-4o", name: "GPT-4o" },
{ id: "gemini-2.5-flash", name: "Gemini 2.5 Flash" },
{ id: "claude-sonnet-4", name: "Claude Sonnet 4" },
{ id: "deepseek-v3", name: "DeepSeek V3" },
{ id: "blackboxai", name: "Blackbox AI" },
{ id: "blackboxai-pro", name: "Blackbox AI Pro" },
],
};

View File

@@ -0,0 +1,19 @@
import type { RegistryEntry } from "../../../shared.ts";
export const blackbox_webProvider: RegistryEntry = {
id: "blackbox-web",
alias: "bb-web",
format: "openai",
executor: "blackbox-web",
baseUrl: "https://app.blackbox.ai/api/chat",
authType: "apikey",
authHeader: "cookie",
models: [
{ id: "gpt-4-turbo", name: "GPT-4 Turbo" },
{ id: "gpt-4", name: "GPT-4" },
{ id: "gpt-3.5-turbo", name: "GPT-3.5 Turbo" },
{ id: "claude-3-opus", name: "Claude 3 Opus" },
{ id: "claude-3-sonnet", name: "Claude 3 Sonnet" },
{ id: "gemini-pro", name: "Gemini Pro" },
],
};

View File

@@ -0,0 +1,39 @@
import type { RegistryEntry } from "../../shared.ts";
export const bluesmindsProvider: RegistryEntry = {
id: "bluesminds",
alias: "bm",
format: "openai",
executor: "default",
baseUrl: "https://api.bluesminds.com/v1/chat/completions",
modelsUrl: "https://api.bluesminds.com/v1/models",
authType: "apikey",
authHeader: "bearer",
defaultContextLength: 128000,
models: [
// Default free models
{ id: "gpt-4o", name: "GPT-4o" },
{ id: "gpt-4o-mini", name: "GPT-4o Mini" },
{ 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: "claude-sonnet-4-5", name: "Claude Sonnet 4.5" },
{ id: "claude-haiku-4-5", name: "Claude Haiku 4.5" },
{ id: "gemini-2.0-flash", name: "Gemini 2.0 Flash" },
{ id: "gemini-2.0-flash-exp", name: "Gemini 2.0 Flash (Exp)" },
{ id: "deepseek-reasoner", name: "DeepSeek Reasoner", supportsReasoning: true },
{ id: "deepseek-chat", name: "DeepSeek Chat" },
{ id: "qwen-plus", name: "Qwen Plus" },
{ id: "qwen-turbo", name: "Qwen Turbo" },
{ id: "kimi-k2", name: "Kimi K2" },
{ id: "kimi-k2-thinking", name: "Kimi K2 Thinking" },
{ id: "glm-4.7", name: "GLM 4.7" },
{ id: "glm-4-flash", name: "GLM 4 Flash" },
{ id: "minimax-m2.5", name: "MiniMax M2.5" },
// VIP models (cost pi credits)
{ id: "claude-opus-4-5", name: "Claude Opus 4.5 (VIP)", contextLength: 200000 },
{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro (VIP)", contextLength: 1048576 },
{ id: "grok-3", name: "Grok-3 (VIP)", contextLength: 131072 },
{ id: "qwen-max", name: "Qwen Max (VIP)" },
],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const bytezProvider: RegistryEntry = {
id: "bytez",
alias: "bytez",
format: "openai",
executor: "default",
baseUrl: "https://api.bytez.com/models/v2",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.bytez,
};

View File

@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../shared.ts";
export const cerebrasProvider: RegistryEntry = {
id: "cerebras",
alias: "cerebras",
format: "openai",
executor: "default",
baseUrl: "https://api.cerebras.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "zai-glm-4.7", name: "GLM 4.7" },
{ id: "gpt-oss-120b", name: "GPT OSS 120B" },
],
};

View File

@@ -0,0 +1,26 @@
import type { RegistryEntry } from "../../shared.ts";
export const chatgpt_webProvider: RegistryEntry = {
id: "chatgpt-web",
alias: "cgpt-web",
format: "openai",
executor: "chatgpt-web",
baseUrl: "https://chatgpt.com/backend-api/conversation",
authType: "apikey",
authHeader: "cookie",
models: [
{ id: "gpt-5.5-pro", name: "GPT-5.5 Pro" }, //pro tier only
{ id: "gpt-5.5-thinking", name: "GPT-5.5 Thinking" }, //plus, pro tier
{ id: "gpt-5.5", name: "GPT-5.5 Instant" }, //free, plus, pro tier
{ id: "gpt-5.4-pro", name: "GPT-5.4 Pro" }, //pro tier only
{ id: "gpt-5.4-thinking", name: "GPT-5.4 Thinking" }, //plus, pro tier
{ id: "gpt-5.4-thinking-mini", name: "GPT-5.4 Thinking Mini" }, //free-login only
{ id: "gpt-5.3", name: "GPT-5.3 Instant" }, //free, free-login, plus, pro tier
{ id: "gpt-5.3-mini", name: "GPT-5.3 Mini" }, //limit fallback
{ id: "gpt-5.2-pro", name: "GPT-5.2 Pro" }, //pro tier only
{ id: "gpt-5.2-thinking", name: "GPT-5.2 Thinking" }, //plus ~ tier
{ id: "gpt-5.2-instant", name: "GPT-5.2 Instant" }, //plus ~ tier
{ id: "o3", name: "o3" }, //plus ~ tier
{ id: "gpt-4-5", name: "GPT-4.5" }, //pro tier only
],
};

View File

@@ -0,0 +1,14 @@
import type { RegistryEntry } from "../../shared.ts";
export const chipotleProvider: RegistryEntry = {
id: "chipotle",
alias: "pepper",
format: "openai",
executor: "chipotle",
baseUrl: "https://amelia.chipotle.com",
baseUrls: ["https://amelia.chipotle.com"],
authType: "none",
authHeader: "none",
models: [{ id: "pepper-1", name: "Pepper (Chipotle AI 🌯)" }],
passthroughModels: true,
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const chutesProvider: RegistryEntry = {
id: "chutes",
alias: "chutes",
format: "openai",
executor: "default",
baseUrl: "https://api.chutesai.com/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "Qwen2.5-72B-Instruct", name: "Qwen2.5 72B" }],
};

View File

@@ -0,0 +1,85 @@
import type { RegistryEntry } from "../../shared.ts";
import {
getClaudeCliHeaders,
mapStainlessOs,
mapStainlessArch,
ANTHROPIC_BETA_CLAUDE_OAUTH,
ANTHROPIC_VERSION_HEADER,
CLAUDE_CLI_STAINLESS_PACKAGE_VERSION,
CLAUDE_CLI_STAINLESS_RUNTIME_VERSION,
CLAUDE_CLI_USER_AGENT,
resolvePublicCred,
} from "../../shared.ts";
export const claudeProvider: RegistryEntry = {
id: "claude",
alias: "cc",
format: "claude",
executor: "default",
baseUrl: "https://api.anthropic.com/v1/messages",
urlSuffix: "?beta=true",
authType: "oauth",
authHeader: "x-api-key",
defaultContextLength: 200000,
headers: getClaudeCliHeaders(),
oauth: {
clientIdEnv: "CLAUDE_OAUTH_CLIENT_ID",
clientIdDefault: resolvePublicCred("claude_id"),
tokenUrl: "https://api.anthropic.com/v1/oauth/token",
},
models: [
{
id: "claude-fable-5",
name: "Claude Fable 5",
contextLength: 1000000,
maxOutputTokens: 128000,
},
{
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextLength: 1000000,
maxOutputTokens: 128000,
},
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
contextLength: 1000000,
maxOutputTokens: 128000,
},
{
id: "claude-opus-4-6",
name: "Claude Opus 4.6",
supportsXHighEffort: false,
contextLength: 1000000,
maxOutputTokens: 128000,
},
{
id: "claude-opus-4-5-20251101",
name: "Claude Opus 4.5",
supportsXHighEffort: false,
contextLength: 200000,
maxOutputTokens: 64000,
},
{
id: "claude-sonnet-4-6",
name: "Claude 4.6 Sonnet",
supportsXHighEffort: false,
contextLength: 200000,
maxOutputTokens: 64000,
},
{
id: "claude-sonnet-4-5-20250929",
name: "Claude 4.5 Sonnet",
supportsXHighEffort: false,
contextLength: 200000,
maxOutputTokens: 64000,
},
{
id: "claude-haiku-4-5-20251001",
name: "Claude 4.5 Haiku",
supportsXHighEffort: false,
contextLength: 200000,
maxOutputTokens: 64000,
},
],
};

View File

@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../../shared.ts";
export const claude_webProvider: RegistryEntry = {
id: "claude-web",
alias: "cw",
format: "openai",
executor: "claude-web",
baseUrl: "https://claude.ai/api/organizations",
authType: "apikey",
authHeader: "cookie",
models: [
{ id: "claude-sonnet-4-6", name: "Claude 4.6 Sonnet (web)" },
{ id: "claude-haiku-4-5", name: "Claude 4.5 Haiku (web)" },
],
};

View File

@@ -0,0 +1,32 @@
import type { RegistryEntry } from "../../shared.ts";
export const clineProvider: RegistryEntry = {
id: "cline",
alias: "cl",
format: "openai",
executor: "openai",
baseUrl: "https://api.cline.bot/api/v1/chat/completions",
authType: "oauth",
authHeader: "Authorization",
authPrefix: "Bearer ",
oauth: {
tokenUrl: "https://api.cline.bot/api/v1/auth/token",
refreshUrl: "https://api.cline.bot/api/v1/auth/refresh",
authUrl: "https://api.cline.bot/api/v1/auth/authorize",
},
extraHeaders: {
"HTTP-Referer": "https://cline.bot",
"X-Title": "Cline",
},
models: [
{ id: "moonshotai/kimi-k2.6", name: "Kimi K2.6 (Free)" },
{ id: "anthropic/claude-sonnet-4.6", name: "Claude Sonnet 4.6" },
{ id: "anthropic/claude-opus-4.7", name: "Claude Opus 4.7" },
{ id: "google/gemini-3.1-pro-preview", name: "Gemini 3.1 Pro" },
{ id: "google/gemini-3-flash-preview", name: "Gemini 3 Flash" },
{ id: "openai/gpt-5.5", name: "GPT-5.5" },
{ id: "deepseek/deepseek-v4-flash", name: "DeepSeek V4 Flash", supportsReasoning: true },
{ id: "deepseek/deepseek-v4-pro", name: "DeepSeek V4 Pro", supportsReasoning: true },
],
passthroughModels: true,
};

View File

@@ -0,0 +1,21 @@
import type { RegistryEntry } from "../../shared.ts";
export const cloudflare_aiProvider: RegistryEntry = {
id: "cloudflare-ai",
alias: "cf",
format: "openai",
executor: "cloudflare-ai",
// URL is dynamic: uses accountId from credentials. The executor builds it.
baseUrl: "https://api.cloudflare.com/client/v4/accounts",
authType: "apikey",
authHeader: "bearer",
// 10K Neurons/day free: ~150 LLM responses or 500s Whisper audio — global edge
models: [
{ id: "@cf/meta/llama-3.3-70b-instruct", name: "Llama 3.3 70B (🆓 ~150 resp/day)" },
{ id: "@cf/meta/llama-3.1-8b-instruct", name: "Llama 3.1 8B (🆓)" },
{ id: "@cf/google/gemma-3-12b-it", name: "Gemma 3 12B (🆓)" },
{ id: "@cf/mistral/mistral-7b-instruct-v0.2-lora", name: "Mistral 7B (🆓)" },
{ id: "@cf/qwen/qwen2.5-coder-15b-instruct", name: "Qwen 2.5 Coder 15B (🆓)" },
{ id: "@cf/deepseek-ai/deepseek-r1-distill-qwen-32b", name: "DeepSeek R1 Distill 32B (🆓)" },
],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const codestralProvider: RegistryEntry = {
id: "codestral",
alias: "codestral",
format: "openai",
executor: "default",
baseUrl: "https://codestral.mistral.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.codestral,
};

View File

@@ -0,0 +1,102 @@
import type { RegistryEntry } from "../../shared.ts";
import {
GPT_5_5_CODEX_CAPABILITIES,
GPT_5_4_CODEX_CAPABILITIES,
getCodexDefaultHeaders,
resolvePublicCred,
} from "../../shared.ts";
export const codexProvider: RegistryEntry = {
id: "codex",
alias: "cx",
format: "openai-responses",
executor: "codex",
baseUrl: "https://chatgpt.com/backend-api/codex/responses",
authType: "oauth",
authHeader: "bearer",
defaultContextLength: 400000,
headers: getCodexDefaultHeaders(),
oauth: {
clientIdEnv: "CODEX_OAUTH_CLIENT_ID",
clientIdDefault: resolvePublicCred("codex_id"),
clientSecretEnv: "CODEX_OAUTH_CLIENT_SECRET",
clientSecretDefault: "",
tokenUrl: "https://auth.openai.com/oauth/token",
},
models: [
// gpt-5.5 codex OAuth backend caps context at 400K (not the public-API
// 1.05M). Public refs : openai/codex#19208, #19319, #19464 ;
// opencode#24171. max_output_tokens is stripped server-side
// (litellm#21193, codex#4138) so 128K is informational only.
{
id: "gpt-5.5",
name: "GPT 5.5",
...GPT_5_5_CODEX_CAPABILITIES,
contextLength: 400000,
maxOutputTokens: 128000,
},
{
id: "gpt-5.5-xhigh",
name: "GPT 5.5 (xHigh)",
...GPT_5_5_CODEX_CAPABILITIES,
contextLength: 400000,
maxOutputTokens: 128000,
},
{
id: "gpt-5.5-high",
name: "GPT 5.5 (High)",
...GPT_5_5_CODEX_CAPABILITIES,
contextLength: 400000,
maxOutputTokens: 128000,
},
{
id: "gpt-5.5-medium",
name: "GPT 5.5 (Medium)",
...GPT_5_5_CODEX_CAPABILITIES,
contextLength: 400000,
maxOutputTokens: 128000,
},
{
id: "gpt-5.5-low",
name: "GPT 5.5 (Low)",
...GPT_5_5_CODEX_CAPABILITIES,
contextLength: 400000,
maxOutputTokens: 128000,
},
{
id: "gpt-5.4",
name: "GPT 5.4",
...GPT_5_4_CODEX_CAPABILITIES,
},
{
id: "gpt-5.4-xhigh",
name: "GPT 5.4 (xHigh)",
...GPT_5_4_CODEX_CAPABILITIES,
},
{
id: "gpt-5.4-high",
name: "GPT 5.4 (High)",
...GPT_5_4_CODEX_CAPABILITIES,
},
{
id: "gpt-5.4-medium",
name: "GPT 5.4 (Medium)",
...GPT_5_4_CODEX_CAPABILITIES,
},
{
id: "gpt-5.4-low",
name: "GPT 5.4 (Low)",
...GPT_5_4_CODEX_CAPABILITIES,
},
{ id: "gpt-5.4-mini", name: "GPT 5.4 Mini", targetFormat: "openai-responses" },
{ id: "gpt-5.3-codex-spark", name: "GPT 5.3 Codex Spark" },
{
id: "gpt-5.3-codex",
name: "GPT 5.3 Codex",
targetFormat: "openai-responses",
supportsReasoning: true,
supportsXHighEffort: true,
},
{ id: "gpt-5.2", name: "GPT 5.2" },
],
};

View File

@@ -0,0 +1,28 @@
import type { RegistryEntry } from "../../shared.ts";
export const cohereProvider: RegistryEntry = {
id: "cohere",
alias: "cohere",
format: "openai",
executor: "default",
// Issue #2360: Cohere's native /v2/chat endpoint returns the upstream
// proprietary shape ({ message: { content: [{type:"text", text:...}] } })
// which the combo test validator (extractComboTestResponseText) does not
// know how to read, surfacing as "Provider returned HTTP 200 but no text
// content." Cohere also publishes an OpenAI-compatible compatibility
// layer at /compatibility/v1 that returns the canonical
// { choices: [{ message: { content: "..." } }] } shape, so we route
// through it instead of needing a Cohere-specific response translator.
baseUrl: "https://api.cohere.com/compatibility/v1/chat/completions",
modelsUrl: "https://api.cohere.com/compatibility/v1/models",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "command-a-reasoning-08-2025", name: "Command A Reasoning (Aug 2025)" },
{ id: "command-a-vision-07-2025", name: "Command A Vision (Jul 2025)" },
{ id: "command-a-03-2025", name: "Command A (Mar 2025)" },
{ id: "command-r7b-12-2024", name: "Command R7B (Dec 2024)" },
{ id: "command-r-plus-08-2024", name: "Command R Plus (Aug 2024)" },
{ id: "command-r-08-2024", name: "Command R (Aug 2024)" },
],
};

View File

@@ -0,0 +1,143 @@
import type { RegistryEntry } from "../../shared.ts";
export const command_codeProvider: RegistryEntry = {
id: "command-code",
alias: "cmd",
format: "openai",
executor: "command-code",
baseUrl: "https://api.commandcode.ai",
chatPath: "/alpha/generate",
modelsUrl: "https://api.commandcode.ai/provider/v1/models",
authType: "apikey",
authHeader: "Authorization",
authPrefix: "Bearer ",
defaultContextLength: 200000,
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7 (CC)",
supportsReasoning: true,
contextLength: 200000,
maxOutputTokens: 32000,
},
{
id: "claude-opus-4-6",
name: "Claude Opus 4.6 (CC)",
supportsReasoning: true,
contextLength: 200000,
maxOutputTokens: 32000,
},
{
id: "claude-sonnet-4-6",
name: "Claude Sonnet 4.6 (CC)",
supportsReasoning: true,
contextLength: 200000,
maxOutputTokens: 16384,
},
{
id: "claude-haiku-4-5-20251001",
name: "Claude Haiku 4.5 (CC)",
supportsReasoning: true,
contextLength: 200000,
maxOutputTokens: 8192,
},
{
id: "gpt-5.5",
name: "GPT-5.5 (CC)",
supportsReasoning: true,
contextLength: 256000,
maxOutputTokens: 128000,
},
{
id: "gpt-5.4",
name: "GPT-5.4 (CC)",
supportsReasoning: true,
contextLength: 256000,
maxOutputTokens: 128000,
},
{
id: "gpt-5.3-codex",
name: "GPT-5.3 Codex (CC)",
supportsReasoning: true,
contextLength: 256000,
maxOutputTokens: 128000,
},
{
id: "gpt-5.4-mini",
name: "GPT-5.4 Mini (CC)",
supportsReasoning: false,
contextLength: 256000,
maxOutputTokens: 128000,
},
{
id: "deepseek/deepseek-v4-pro",
name: "DeepSeek V4 Pro (CC)",
supportsReasoning: true,
contextLength: 1000000,
maxOutputTokens: 384000,
},
{
id: "deepseek/deepseek-v4-flash",
name: "DeepSeek V4 Flash (CC)",
supportsReasoning: true,
contextLength: 1000000,
maxOutputTokens: 384000,
},
{
id: "moonshotai/Kimi-K2.6",
name: "Kimi K2.6 (CC)",
supportsReasoning: true,
contextLength: 262144,
maxOutputTokens: 131072,
},
{
id: "moonshotai/Kimi-K2.5",
name: "Kimi K2.5 (CC)",
supportsReasoning: true,
contextLength: 262144,
maxOutputTokens: 131072,
},
{
id: "zai-org/GLM-5.1",
name: "GLM-5.1 (CC)",
supportsReasoning: true,
contextLength: 200000,
maxOutputTokens: 131072,
},
{
id: "zai-org/GLM-5",
name: "GLM-5 (CC)",
supportsReasoning: true,
contextLength: 200000,
maxOutputTokens: 131072,
},
{
id: "MiniMaxAI/MiniMax-M2.7",
name: "MiniMax M2.7 (CC)",
supportsReasoning: true,
contextLength: 1048576,
maxOutputTokens: 131072,
},
{
id: "MiniMaxAI/MiniMax-M2.5",
name: "MiniMax M2.5 (CC)",
supportsReasoning: true,
contextLength: 1048576,
maxOutputTokens: 131072,
},
{
id: "Qwen/Qwen3.6-Max-Preview",
name: "Qwen 3.6 Max (CC)",
supportsReasoning: true,
contextLength: 1000000,
maxOutputTokens: 131072,
},
{
id: "Qwen/Qwen3.6-Plus",
name: "Qwen 3.6 Plus (CC)",
supportsReasoning: true,
contextLength: 1000000,
maxOutputTokens: 131072,
},
],
};

View File

@@ -0,0 +1,16 @@
import type { RegistryEntry } from "../../shared.ts";
export const copilot_webProvider: RegistryEntry = {
id: "copilot-web",
alias: "copilot-web",
format: "openai",
executor: "copilot-web",
baseUrl: "wss://copilot.microsoft.com/c/api/chat?api-version=2",
authType: "apikey",
authHeader: "cookie",
models: [
{ id: "copilot-pro", name: "Copilot Pro (web)" },
{ id: "gpt-4-turbo", name: "GPT-4 Turbo (via Copilot)" },
{ id: "gpt-4", name: "GPT-4 (via Copilot)" },
],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const cozeProvider: RegistryEntry = {
id: "coze",
alias: "coze",
format: "openai",
executor: "default",
baseUrl: "https://api.coze.com/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "claude-3-7-sonnet-20250514", name: "Claude 3.7 Sonnet" }],
};

View File

@@ -0,0 +1,38 @@
import type { RegistryEntry } from "../../shared.ts";
export const crofProvider: RegistryEntry = {
id: "crof",
alias: "crof",
format: "openai",
executor: "default",
baseUrl: "https://crof.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
// Seed list — runtime /v1/models discovery keeps this fresh.
// Source: GET https://crof.ai/v1/models (2026-05-17).
models: [
{
id: "deepseek-v4-pro-precision",
name: "DeepSeek V4 Pro (Precision)",
supportsReasoning: true,
},
{ id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", supportsReasoning: true },
{ id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", supportsReasoning: true },
{ id: "deepseek-v3.2", name: "DeepSeek V3.2" },
{ id: "kimi-k2.6-precision", name: "Kimi K2.6 (Precision)", supportsReasoning: true },
{ id: "kimi-k2.6", name: "Kimi K2.6", supportsReasoning: true },
{ id: "kimi-k2.5-lightning", name: "Kimi K2.5 (Lightning)", supportsReasoning: true },
{ id: "kimi-k2.5", name: "Kimi K2.5", supportsReasoning: true },
{ id: "glm-5.1-precision", name: "GLM 5.1 (Precision)", supportsReasoning: true },
{ id: "glm-5.1", name: "GLM 5.1", supportsReasoning: true },
{ id: "glm-4.7", name: "GLM 4.7" },
{ id: "glm-4.7-flash", name: "GLM 4.7 Flash" },
{ id: "mimo-v2.5-pro-precision", name: "Mimo 2.5 Pro (Precision)", supportsReasoning: true },
{ id: "mimo-v2.5-pro", name: "Mimo 2.5 Pro", supportsReasoning: true },
{ id: "gemma-4-31b-it", name: "Gemma 4 31B", supportsReasoning: true },
{ id: "minimax-m2.5", name: "MiniMax M2.5" },
{ id: "qwen3.6-27b", name: "Qwen3.6 27B", supportsReasoning: true },
{ id: "qwen3.5-397b-a17b", name: "Qwen3.5 397B A17B", supportsReasoning: true },
{ id: "qwen3.5-9b", name: "Qwen3.5 9B", supportsReasoning: true },
],
};

View File

@@ -0,0 +1,111 @@
import type { RegistryEntry } from "../../shared.ts";
import { CURSOR_REGISTRY_VERSION, getCursorRegistryHeaders } from "../../shared.ts";
export const cursorProvider: RegistryEntry = {
id: "cursor",
alias: "cu",
format: "cursor",
executor: "cursor",
baseUrl: "https://api2.cursor.sh",
chatPath: "/aiserver.v1.ChatService/StreamUnifiedChatWithTools",
authType: "oauth",
authHeader: "bearer",
defaultContextLength: 200000,
headers: getCursorRegistryHeaders(),
clientVersion: CURSOR_REGISTRY_VERSION,
models: [
{ id: "auto", name: "Auto (Server Picks)" },
{ id: "composer-2.5-fast", name: "Composer 2.5 Fast" },
{ id: "composer-2.5", name: "Composer 2.5" },
{ id: "composer-2-fast", name: "Composer 2 Fast" },
{ id: "composer-2", name: "Composer 2" },
//
{ id: "gpt-5.5-none", name: "GPT 5.5 None" },
{ id: "gpt-5.5-none-fast", name: "GPT 5.5 None Fast" },
{ id: "gpt-5.5-low", name: "GPT 5.5 Low" },
{ id: "gpt-5.5-low-fast", name: "GPT 5.5 Low Fast" },
{ id: "gpt-5.5-medium", name: "GPT 5.5 Medium" },
{ id: "gpt-5.5-medium-fast", name: "GPT 5.5 Medium Fast" },
{ id: "gpt-5.5-high", name: "GPT 5.5 High" },
{ id: "gpt-5.5-high-fast", name: "GPT 5.5 High Fast" },
{ id: "gpt-5.5-extra-high", name: "GPT 5.5 Extra High" },
{ id: "gpt-5.5-extra-high-fast", name: "GPT 5.5 Extra High Fast" },
//
{ id: "gpt-5.4-low", name: "GPT 5.4 Low" },
{ id: "gpt-5.4-low-fast", name: "GPT 5.4 Low Fast" },
{ id: "gpt-5.4-medium", name: "GPT 5.4 Medium" },
{ id: "gpt-5.4-medium-fast", name: "GPT 5.4 Medium Fast" },
{ id: "gpt-5.4-high", name: "GPT 5.4 High" },
{ id: "gpt-5.4-high-fast", name: "GPT 5.4 High Fast" },
{ id: "gpt-5.4-xhigh", name: "GPT 5.4 XHigh" },
{ id: "gpt-5.4-xhigh-fast", name: "GPT 5.4 XHigh Fast" },
//
{ id: "gpt-5.4-mini-none", name: "GPT 5.4 Mini None" },
{ id: "gpt-5.4-mini-low", name: "GPT 5.4 Mini Low" },
{ id: "gpt-5.4-mini-medium", name: "GPT 5.4 Mini Medium" },
{ id: "gpt-5.4-mini-high", name: "GPT 5.4 Mini High" },
{ id: "gpt-5.4-mini-xhigh", name: "GPT 5.4 Mini XHigh" },
//
{ id: "gpt-5.4-nano-none", name: "GPT 5.4 Nano None" },
{ id: "gpt-5.4-nano-low", name: "GPT 5.4 Nano Low" },
{ id: "gpt-5.4-nano-medium", name: "GPT 5.4 Nano Medium" },
{ id: "gpt-5.4-nano-high", name: "GPT 5.4 Nano High" },
{ id: "gpt-5.4-nano-xhigh", name: "GPT 5.4 Nano XHigh" },
//
{ id: "gpt-5.3-codex-spark-preview-low", name: "GPT 5.3 Codex Spark Preview Low" },
{ id: "gpt-5.3-codex-spark-preview", name: "GPT 5.3 Codex Spark Preview" },
{ id: "gpt-5.3-codex-spark-preview-high", name: "GPT 5.3 Codex Spark Preview High" },
{ id: "gpt-5.3-codex-spark-preview-xhigh", name: "GPT 5.3 Codex Spark Preview XHigh" },
//
{ id: "gpt-5.3-codex-low", name: "GPT 5.3 Codex Low" },
{ id: "gpt-5.3-codex-low-fast", name: "GPT 5.3 Codex Low Fast" },
{ id: "gpt-5.3-codex", name: "GPT 5.3 Codex" },
{ id: "gpt-5.3-codex-fast", name: "GPT 5.3 Codex Fast" },
{ id: "gpt-5.3-codex-high", name: "GPT 5.3 Codex High" },
{ id: "gpt-5.3-codex-high-fast", name: "GPT 5.3 Codex High Fast" },
{ id: "gpt-5.3-codex-xhigh", name: "GPT 5.3 Codex XHigh" },
{ id: "gpt-5.3-codex-xhigh-fast", name: "GPT 5.3 Codex XHigh Fast" },
//
{ id: "gpt-5.2-low", name: "GPT 5.2 Low" },
{ id: "gpt-5.2-low-fast", name: "GPT 5.2 Low Fast" },
{ id: "gpt-5.2", name: "GPT 5.2" },
{ id: "gpt-5.2-fast", name: "GPT 5.2 Fast" },
{ id: "gpt-5.2-high", name: "GPT 5.2 High" },
{ id: "gpt-5.2-high-fast", name: "GPT 5.2 High Fast" },
{ id: "gpt-5.2-xhigh", name: "GPT 5.2 XHigh" },
{ id: "gpt-5.2-xhigh-fast", name: "GPT 5.2 XHigh Fast" },
//
{ id: "claude-opus-4-7-low", name: "Claude Opus 4.7 Low" },
{ id: "claude-opus-4-7-medium", name: "Claude Opus 4.7 Medium" },
{ id: "claude-opus-4-7-high", name: "Claude Opus 4.7 High" },
{ id: "claude-opus-4-7-xhigh", name: "Claude Opus 4.7 XHigh" },
{ id: "claude-opus-4-7-max", name: "Claude Opus 4.7 Max" },
{ id: "claude-opus-4-7-thinking-low", name: "Claude Opus 4.7 Thinking Low" },
{ id: "claude-opus-4-7-thinking-medium", name: "Claude Opus 4.7 Thinking Medium" },
{ id: "claude-opus-4-7-thinking-high", name: "Claude Opus 4.7 Thinking High" },
{ id: "claude-opus-4-7-thinking-xhigh", name: "Claude Opus 4.7 Thinking XHigh" },
{ id: "claude-opus-4-7-thinking-max", name: "Claude Opus 4.7 Thinking Max" },
//
{ id: "claude-4.6-opus-high", name: "Claude 4.6 Opus High" },
{ id: "claude-4.6-opus-high-thinking", name: "Claude 4.6 Opus High Thinking" },
{ id: "claude-4.6-opus-high-thinking-fast", name: "Claude 4.6 Opus High Thinking Fast" },
{ id: "claude-4.6-opus-max", name: "Claude 4.6 Opus Max" },
{ id: "claude-4.6-opus-max-thinking", name: "Claude 4.6 Opus Max Thinking" },
{ id: "claude-4.6-opus-max-thinking-fast", name: "Claude 4.6 Opus Max Thinking Fast" },
//
{ id: "claude-4.6-sonnet-medium", name: "Claude 4.6 Sonnet Medium" },
{ id: "claude-4.6-sonnet-medium-thinking", name: "Claude 4.6 Sonnet Medium Thinking" },
//
{ id: "claude-4.5-sonnet", name: "Claude 4.5 Sonnet" },
{ id: "claude-4.5-sonnet-thinking", name: "Claude 4.5 Sonnet Thinking" },
//
{ id: "gemini-3.1-pro", name: "Gemini 3.1 Pro" },
//
{ id: "gemini-3-flash", name: "Gemini 3 Flash" },
//
{ id: "grok-4.3", name: "Grok 4.3" },
//
{ id: "kimi-k2.5", name: "Kimi K2.5" },
],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const databricksProvider: RegistryEntry = {
id: "databricks",
alias: "databricks",
format: "openai",
executor: "default",
baseUrl: "https://adb-0000000000000000.0.azuredatabricks.net/serving-endpoints",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.databricks,
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const deepinfraProvider: RegistryEntry = {
id: "deepinfra",
alias: "deepinfra",
format: "openai",
executor: "default",
baseUrl: "https://api.deepinfra.com/v1/openai/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.deepinfra,
};

View File

@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../shared.ts";
export const deepseekProvider: RegistryEntry = {
id: "deepseek",
alias: "ds",
format: "openai",
executor: "default",
baseUrl: "https://api.deepseek.com/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", supportsReasoning: true },
{ id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", supportsReasoning: true },
],
};

View File

@@ -0,0 +1,35 @@
import type { RegistryEntry } from "../../../shared.ts";
export const deepseek_webProvider: RegistryEntry = {
id: "deepseek-web",
alias: "ds-web",
format: "openai",
executor: "deepseek-web",
baseUrl: "https://chat.deepseek.com/api/v0/chat/completion",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "deepseek-v4-pro", name: "DeepSeek V4 Pro" },
{ id: "deepseek-v4-pro-think", name: "DeepSeek V4 Pro Think", supportsReasoning: true },
{ id: "deepseek-v4-pro-search", name: "DeepSeek V4 Pro Search" },
{
id: "deepseek-v4-pro-think-search",
name: "DeepSeek V4 Pro Think+Search",
supportsReasoning: true,
},
{ id: "deepseek-v4-flash", name: "DeepSeek V4 Flash" },
{ id: "deepseek-v4-flash-think", name: "DeepSeek V4 Flash Think", supportsReasoning: true },
{ id: "deepseek-v4-flash-search", name: "DeepSeek V4 Flash Search" },
{
id: "deepseek-v4-flash-think-search",
name: "DeepSeek V4 Flash Think+Search",
supportsReasoning: true,
},
{ id: "deepseek-chat", name: "DeepSeek Chat" },
{ id: "deepseek-reasoner", name: "DeepSeek Reasoner", supportsReasoning: true },
{ id: "DeepSeek-R1", name: "DeepSeek R1", supportsReasoning: true },
{ id: "DeepSeek-R1-Search", name: "DeepSeek R1 Search", supportsReasoning: true },
{ id: "DeepSeek-V3.2", name: "DeepSeek V3.2" },
{ id: "DeepSeek-Search", name: "DeepSeek Search" },
],
};

View File

@@ -0,0 +1,68 @@
import type { RegistryEntry } from "../../shared.ts";
export const devin_cliProvider: RegistryEntry = {
id: "devin-cli",
alias: "dv",
format: "openai",
executor: "devin-cli",
baseUrl: "devin://acp/stdio",
authType: "oauth",
authHeader: "Authorization",
authPrefix: "Bearer ",
defaultContextLength: 200000,
models: [
// Cognition / SWE — default model family recommended for coding tasks
{ id: "swe-1.6-fast", name: "SWE-1.6 Fast" },
{ id: "swe-1.6", name: "SWE-1.6" },
{ id: "swe-1.5-fast", name: "SWE-1.5 Fast" },
{ id: "swe-1.5", name: "SWE-1.5" },
// Claude Opus 4.7
{ id: "claude-opus-4.7-max", name: "Claude Opus 4.7 Max", contextLength: 200000 },
{ id: "claude-opus-4.7-high", name: "Claude Opus 4.7 High", contextLength: 200000 },
{ id: "claude-opus-4.7-medium", name: "Claude Opus 4.7 Medium", contextLength: 200000 },
{ id: "claude-opus-4.7-low", name: "Claude Opus 4.7 Low", contextLength: 200000 },
// Claude Sonnet/Opus 4.6
{
id: "claude-sonnet-4.6-thinking-1m",
name: "Claude Sonnet 4.6 Thinking 1M",
contextLength: 1000000,
},
{
id: "claude-sonnet-4.6-thinking",
name: "Claude Sonnet 4.6 Thinking",
contextLength: 200000,
},
{ id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6", contextLength: 200000 },
{ id: "claude-opus-4.6-thinking", name: "Claude Opus 4.6 Thinking", contextLength: 200000 },
{ id: "claude-opus-4.6", name: "Claude Opus 4.6", contextLength: 200000 },
// Claude 4.5
{ id: "claude-sonnet-4.5", name: "Claude Sonnet 4.5", contextLength: 200000 },
{ id: "claude-haiku-4.5", name: "Claude Haiku 4.5", contextLength: 200000 },
// GPT-5.5
{ id: "gpt-5.5-xhigh", name: "GPT-5.5 XHigh", contextLength: 200000 },
{ id: "gpt-5.5-high", name: "GPT-5.5 High", contextLength: 200000 },
{ id: "gpt-5.5-medium", name: "GPT-5.5 Medium", contextLength: 200000 },
{ id: "gpt-5.5-low", name: "GPT-5.5 Low", contextLength: 200000 },
// GPT-5.4
{ id: "gpt-5.4-high", name: "GPT-5.4 High", contextLength: 200000 },
{ id: "gpt-5.4-medium", name: "GPT-5.4 Medium", contextLength: 200000 },
{ id: "gpt-5.4-low", name: "GPT-5.4 Low", contextLength: 200000 },
// GPT-5.3 Codex
{ id: "gpt-5.3-codex-high", name: "GPT-5.3 Codex High", contextLength: 200000 },
{ id: "gpt-5.3-codex-medium", name: "GPT-5.3 Codex Medium", contextLength: 200000 },
{ id: "gpt-5.3-codex-low", name: "GPT-5.3 Codex Low", contextLength: 200000 },
// GPT-5.2
{ id: "gpt-5.2-high", name: "GPT-5.2 High", contextLength: 200000 },
{ id: "gpt-5.2-medium", name: "GPT-5.2 Medium", contextLength: 200000 },
{ id: "gpt-5.2-low", name: "GPT-5.2 Low", contextLength: 200000 },
// Gemini
{ id: "gemini-3.1-pro-high", name: "Gemini 3.1 Pro High", contextLength: 1000000 },
{ id: "gemini-3.1-pro-low", name: "Gemini 3.1 Pro Low", contextLength: 1000000 },
{ id: "gemini-3.0-flash-high", name: "Gemini 3 Flash High", contextLength: 1000000 },
{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", contextLength: 1000000 },
// Others
{ id: "deepseek-v4", name: "DeepSeek V4", contextLength: 64000 },
{ id: "kimi-k2.6", name: "Kimi K2.6", contextLength: 131000 },
{ id: "glm-5.1", name: "GLM-5.1", contextLength: 128000 },
],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const difyProvider: RegistryEntry = {
id: "dify",
alias: "dify",
format: "openai",
executor: "default",
baseUrl: "https://api.dify.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "auto", name: "Auto" }],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const doubaoProvider: RegistryEntry = {
id: "doubao",
alias: "doubao",
format: "openai",
executor: "default",
baseUrl: "https://ark.cn-beijing.volces.com/api/v3/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "doubao-pro-32k", name: "Doubao Pro 32K" }],
};

View File

@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../../shared.ts";
export const doubao_webProvider: RegistryEntry = {
id: "doubao-web",
alias: "db",
format: "openai",
executor: "doubao-web",
baseUrl: "https://www.doubao.com/api/chat",
authType: "apikey",
authHeader: "cookie",
models: [
{ id: "doubao-default", name: "Doubao Default" },
{ id: "doubao-pro", name: "Doubao Pro" },
],
};

View File

@@ -0,0 +1,19 @@
import type { RegistryEntry } from "../../shared.ts";
export const duckduckgo_webProvider: RegistryEntry = {
id: "duckduckgo-web",
alias: "ddgw",
format: "openai",
executor: "duckduckgo-web",
baseUrl: "https://duckduckgo.com/duckchat/v1/chat",
authType: "none",
authHeader: "none",
models: [
{ id: "gpt-4o-mini", name: "GPT-4o Mini" },
{ id: "gpt-5-mini", name: "GPT-5 Mini" },
{ id: "claude-3-5-haiku-20241022", name: "Claude 3.5 Haiku" },
{ id: "llama-4-scout", name: "Llama 4 Scout" },
{ id: "mistral-small-2501", name: "Mistral Small" },
{ id: "o3-mini", name: "O3 Mini" },
],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const featherless_aiProvider: RegistryEntry = {
id: "featherless-ai",
alias: "featherless",
format: "openai",
executor: "default",
baseUrl: "https://api.featherless.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS["featherless-ai"],
};

View File

@@ -0,0 +1,35 @@
import type { RegistryEntry } from "../../shared.ts";
export const fireworksProvider: RegistryEntry = {
id: "fireworks",
alias: "fireworks",
format: "openai",
executor: "default",
baseUrl: "https://api.fireworks.ai/inference/v1/chat/completions",
modelsUrl:
"https://api.fireworks.ai/v1/accounts/fireworks/models?filter=supports_serverless=true",
modelIdPrefix: "accounts/fireworks/models/",
acceptedModelIdPrefixes: ["accounts/fireworks/models/", "accounts/fireworks/routers/"],
authType: "apikey",
authHeader: "bearer",
models: [
{
id: "deepseek-v4-flash",
name: "DeepSeek V4 Flash",
supportsReasoning: true,
},
{
id: "deepseek-v4-pro",
name: "DeepSeek V4 Pro",
supportsReasoning: true,
},
{ id: "glm-5p1", name: "GLM 5.1" },
{ id: "gpt-oss-120b", name: "OpenAI gpt-oss-120b" },
{ id: "gpt-oss-20b", name: "OpenAI gpt-oss-20b" },
{ id: "kimi-k2p5", name: "Kimi K2.5" },
{ id: "kimi-k2p6", name: "Kimi K2.6" },
{ id: "minimax-m2p5", name: "MiniMax M2.5" },
{ id: "minimax-m2p7", name: "MiniMax M2.7" },
{ id: "qwen3p6-plus", name: "Qwen3.6 Plus" },
],
};

View File

@@ -0,0 +1,38 @@
import type { RegistryEntry } from "../../shared.ts";
export const freeaiapikeyProvider: RegistryEntry = {
id: "freeaiapikey",
alias: "faik",
format: "openai",
executor: "default",
baseUrl: "https://freeaiapikey.com/v1/chat/completions",
modelsUrl: "https://freeaiapikey.com/v1/models",
authType: "apikey",
authHeader: "bearer",
defaultContextLength: 128000,
models: [
{ id: "openai/gpt-5", name: "GPT-5 (via FreeAIAPIKey)", contextLength: 400000 },
{ id: "openai/gpt-4o", name: "GPT-4o (via FreeAIAPIKey)" },
{ id: "openai/gpt-5.2-codex", name: "GPT-5.2 Codex (via FreeAIAPIKey)" },
{
id: "anthropic/claude-opus-4.6",
name: "Claude Opus 4.6 (via FreeAIAPIKey)",
contextLength: 1000000,
},
{
id: "anthropic/claude-sonnet-4.6",
name: "Claude Sonnet 4.6 (via FreeAIAPIKey)",
contextLength: 1000000,
},
{
id: "Alibaba/qwen3.5",
name: "Qwen 3.5 (via FreeAIAPIKey)",
contextLength: 128000,
},
{
id: "Alibaba/qwen3-vl:235b",
name: "Qwen 3 VL 235B (via FreeAIAPIKey)",
contextLength: 128000,
},
],
};

View File

@@ -0,0 +1,19 @@
import type { RegistryEntry } from "../../shared.ts";
export const freemodel_devProvider: RegistryEntry = {
id: "freemodel-dev",
alias: "fmd",
format: "openai",
executor: "default",
baseUrl: "https://api.freemodel.dev/v1/chat/completions",
modelsUrl: "https://api.freemodel.dev/v1/models",
authType: "apikey",
authHeader: "bearer",
defaultContextLength: 128000,
models: [
{ id: "gpt-5.5", name: "GPT-5.5", contextLength: 400000 },
{ id: "gpt-5.4", name: "GPT-5.4", contextLength: 400000 },
{ id: "gpt-5.4-mini", name: "GPT-5.4 Mini" },
{ id: "gpt-5.3-codex", name: "GPT-5.3 Codex" },
],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const friendliaiProvider: RegistryEntry = {
id: "friendliai",
alias: "friendli",
format: "openai",
executor: "default",
baseUrl: "https://api.friendli.ai/dedicated/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.friendliai,
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const galadrielProvider: RegistryEntry = {
id: "galadriel",
alias: "galadriel",
format: "openai",
executor: "default",
baseUrl: "https://api.galadriel.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.galadriel,
};

View File

@@ -0,0 +1,34 @@
import type { RegistryEntry } from "../../../shared.ts";
import { resolvePublicCred } from "../../../shared.ts";
export const gemini_cliProvider: RegistryEntry = {
id: "gemini-cli",
alias: "gemini-cli",
format: "gemini-cli",
executor: "gemini-cli",
baseUrl: "https://cloudcode-pa.googleapis.com/v1internal",
urlBuilder: (base, model, stream) => {
const action = stream ? "streamGenerateContent?alt=sse" : "generateContent";
return `${base}:${action}`;
},
authType: "apikey",
authHeader: "x-goog-api-key",
defaultContextLength: 1048576,
oauth: {
clientIdEnv: "GEMINI_CLI_OAUTH_CLIENT_ID",
clientIdDefault: resolvePublicCred("gemini_id"),
clientSecretEnv: "GEMINI_CLI_OAUTH_CLIENT_SECRET",
clientSecretDefault: resolvePublicCred("gemini_alt"),
},
models: [
{ id: "gemini-2.0-flash", name: "Gemini 2.0 Flash" },
{ id: "gemini-2.0-flash-thinking", name: "Gemini 2.0 Flash Thinking" },
{ id: "gemini-2.0-pro-exp-02-05", name: "Gemini 2.0 Pro Experimental" },
{ id: "gemini-1.5-pro", name: "Gemini 1.5 Pro" },
{ id: "gemini-1.5-flash", name: "Gemini 1.5 Flash" },
{ id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview" },
{ id: "gemini-3.1-pro-preview-customtools", name: "Gemini 3.1 Pro Preview Custom Tools" },
{ id: "gemini-3-flash-preview", name: "Gemini 3 Flash Preview" },
{ id: "gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite" },
],
};

View File

@@ -0,0 +1,76 @@
import type { RegistryEntry } from "../../shared.ts";
import { resolvePublicCred } from "../../shared.ts";
export const geminiProvider: RegistryEntry = {
id: "gemini",
alias: "gemini",
format: "gemini",
executor: "default",
baseUrl: "https://generativelanguage.googleapis.com/v1beta/models",
urlBuilder: (base, model, stream) => {
const action = stream ? "streamGenerateContent?alt=sse" : "generateContent";
return `${base}/${model}:${action}`;
},
authType: "apikey",
authHeader: "x-goog-api-key",
defaultContextLength: 1048576,
oauth: {
clientIdEnv: "GEMINI_OAUTH_CLIENT_ID",
clientIdDefault: resolvePublicCred("gemini_id"),
clientSecretEnv: "GEMINI_OAUTH_CLIENT_SECRET",
clientSecretDefault: resolvePublicCred("gemini_alt"),
},
models: [
{ id: "gemini-2.0-flash", name: "Gemini 2.0 Flash", toolCalling: true, supportsVision: true },
{
id: "gemini-3.1-pro-preview",
name: "Gemini 3.1 Pro Preview",
toolCalling: true,
supportsVision: true,
},
{
id: "gemini-3-flash-preview",
name: "Gemini 3 Flash Preview",
toolCalling: true,
supportsVision: true,
},
{
id: "gemini-3.1-flash-lite-preview",
name: "Gemini 3.1 Flash Lite Preview",
toolCalling: true,
supportsVision: true,
},
{
id: "gemini-3.5-flash",
name: "Gemini 3.5 Flash",
toolCalling: true,
supportsVision: true,
},
{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", toolCalling: true, supportsVision: true },
{
id: "gemini-2.5-flash",
name: "Gemini 2.5 Flash",
toolCalling: true,
supportsVision: true,
},
{
id: "gemini-2.5-flash-lite",
name: "Gemini 2.5 Flash Lite",
toolCalling: true,
supportsVision: true,
},
{
id: "gemini-2.0-flash-thinking-exp-01-21",
name: "Gemini 2.0 Flash Thinking",
supportsReasoning: true,
},
{
id: "gemini-2.0-pro-exp-02-05",
name: "Gemini 2.0 Pro Experimental",
toolCalling: true,
supportsVision: true,
},
{ id: "gemini-1.5-pro", name: "Gemini 1.5 Pro", toolCalling: true, supportsVision: true },
{ id: "gemini-1.5-flash", name: "Gemini 1.5 Flash", toolCalling: true, supportsVision: true },
],
};

View File

@@ -0,0 +1,19 @@
import type { RegistryEntry } from "../../../shared.ts";
export const gemini_webProvider: RegistryEntry = {
id: "gemini-web",
alias: "gweb",
format: "openai",
executor: "gemini-web",
baseUrl: "https://gemini.google.com/app",
authType: "apikey",
authHeader: "cookie",
models: [
{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro" },
{ id: "gemini-2.5-flash", name: "Gemini 2.5 Flash" },
{ id: "gemini-2.0-pro", name: "Gemini 2.0 Pro" },
{ id: "gemini-2.0-flash", name: "Gemini 2.0 Flash" },
{ id: "gemini-1.5-pro", name: "Gemini 1.5 Pro" },
{ id: "gemini-1.5-flash", name: "Gemini 1.5 Flash" },
],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const gigachatProvider: RegistryEntry = {
id: "gigachat",
alias: "gigachat",
format: "openai",
executor: "default",
baseUrl: "https://gigachat.devices.sberbank.ru/api/v1",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.gigachat,
};

View File

@@ -0,0 +1,71 @@
import type { RegistryEntry } from "../../shared.ts";
import { GPT_5_5_CODEX_CAPABILITIES, getGitHubCopilotChatHeaders } from "../../shared.ts";
export const githubProvider: RegistryEntry = {
id: "github",
alias: "gh",
format: "openai",
executor: "github",
baseUrl: "https://api.githubcopilot.com/chat/completions",
responsesBaseUrl: "https://api.githubcopilot.com/responses",
authType: "oauth",
authHeader: "bearer",
defaultContextLength: 128000,
headers: getGitHubCopilotChatHeaders(),
models: [
{ id: "gpt-5-mini", name: "GPT-5 Mini", targetFormat: "openai-responses" },
{ id: "gpt-5.3-codex", name: "GPT-5.3 Codex", targetFormat: "openai-responses" },
{ id: "gpt-5.4-mini", name: "GPT-5.4 Mini", targetFormat: "openai-responses" },
{
id: "gpt-5.4",
name: "GPT-5.4",
targetFormat: "openai-responses",
supportsXHighEffort: true,
},
{ id: "gpt-5.5", name: "GPT-5.5", ...GPT_5_5_CODEX_CAPABILITIES },
{
id: "claude-haiku-4.5",
name: "Claude Haiku 4.5",
contextLength: 200000,
maxOutputTokens: 64000,
},
{
id: "claude-sonnet-4.5",
name: "Claude Sonnet 4.5",
contextLength: 200000,
maxOutputTokens: 64000,
},
{
id: "claude-sonnet-4.6",
name: "Claude Sonnet 4.6",
contextLength: 200000,
maxOutputTokens: 64000,
},
{
// #2911: GitHub Copilot's Responses API does not serve Claude/Gemini —
// route them via chat/completions (provider default) like claude-opus-4.6.
id: "claude-opus-4-5-20251101",
name: "Claude Opus 4.5 (Full ID)",
contextLength: 200000,
maxOutputTokens: 64000,
},
{
id: "claude-opus-4.6",
name: "Claude Opus 4.6",
contextLength: 1000000,
maxOutputTokens: 128000,
},
{
// #2911: Claude on Copilot must use chat/completions, not the Responses API.
id: "claude-opus-4.7",
name: "Claude Opus 4.7",
contextLength: 1000000,
maxOutputTokens: 128000,
},
// #2911: Gemini on Copilot must use chat/completions, not the Responses API.
{ id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro" },
{ id: "gemini-3-flash-preview", name: "Gemini 3 Flash" },
{ id: "oswe-vscode-prime", name: "Raptor Mini", targetFormat: "openai-responses" },
//{ id: "?", name: "Goldeneye" },
],
};

View File

@@ -0,0 +1,38 @@
import type { RegistryEntry } from "../../../shared.ts";
export const github_modelsProvider: RegistryEntry = {
id: "github-models",
alias: "ghm",
format: "openai",
executor: "default",
baseUrl: "https://models.github.ai/inference/chat/completions",
modelsUrl: "https://models.github.ai/inference/models",
authType: "apikey",
authHeader: "Authorization",
authPrefix: "Bearer",
headers: {
"X-GitHub-Api-Version": "2022-11-28",
Accept: "application/vnd.github+json",
},
defaultContextLength: 128000,
models: [
{ id: "openai/gpt-4.1", name: "GPT-4.1 (Free)", contextLength: 1047576 },
{ id: "openai/gpt-4o", name: "GPT-4o (Free)", contextLength: 128000 },
{ id: "openai/gpt-4o-mini", name: "GPT-4o Mini (Free)", contextLength: 128000 },
{ id: "openai/o1", name: "o1 (Free)", contextLength: 200000 },
{ id: "openai/o3", name: "o3 (Free)", contextLength: 200000 },
{ id: "openai/o4-mini", name: "o4-mini (Free)", contextLength: 200000 },
{ id: "deepseek/DeepSeek-R1", name: "DeepSeek R1 (Free)", contextLength: 131072 },
{
id: "meta/Llama-4-Maverick-17B-128E-Instruct",
name: "Llama 4 Maverick (Free)",
contextLength: 131072,
},
{ id: "xai/grok-3", name: "Grok 3 (Free)", contextLength: 131072 },
{ id: "mistral-ai/Mistral-Medium-3", name: "Mistral Medium 3 (Free)", contextLength: 128000 },
{ id: "cohere/Cohere-command-a", name: "Cohere Command A (Free)", contextLength: 128000 },
{ id: "microsoft/Phi-4", name: "Phi-4 (Free)", contextLength: 16384 },
{ id: "openai/text-embedding-3-large", name: "Text Embedding 3 Large (Free)" },
{ id: "openai/text-embedding-3-small", name: "Text Embedding 3 Small (Free)" },
],
};

View File

@@ -0,0 +1,29 @@
import type { RegistryEntry } from "../../shared.ts";
import { buildGitLabOAuthEndpoints, GITLAB_DUO_DEFAULT_BASE_URL } from "../../shared.ts";
export const gitlab_duoProvider: RegistryEntry = {
id: "gitlab-duo",
alias: "gld",
format: "openai",
executor: "gitlab",
// baseUrl is dynamic: resolved at request time from providerSpecificData.baseUrl
// by GitlabExecutor.buildUrl() via buildGitLabOAuthEndpoints().
// The default here keeps the PROVIDERS map non-null so refreshAccessToken()
// can look up this provider.
baseUrl: buildGitLabOAuthEndpoints(GITLAB_DUO_DEFAULT_BASE_URL).publicCompletionsUrl,
authType: "oauth",
authHeader: "bearer",
defaultContextLength: 128000,
oauth: {
clientIdEnv: "GITLAB_DUO_OAUTH_CLIENT_ID",
clientIdDefault: process.env.GITLAB_OAUTH_CLIENT_ID || "",
clientSecretEnv: "GITLAB_DUO_OAUTH_CLIENT_SECRET",
clientSecretDefault: process.env.GITLAB_OAUTH_CLIENT_SECRET || "",
tokenUrl: buildGitLabOAuthEndpoints(GITLAB_DUO_DEFAULT_BASE_URL).tokenUrl,
authUrl: buildGitLabOAuthEndpoints(GITLAB_DUO_DEFAULT_BASE_URL).authorizeUrl,
},
models: [
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6 (GitLab Duo)" },
{ id: "claude-haiku-4-5", name: "Claude Haiku 4.5 (GitLab Duo)" },
],
};

View File

@@ -0,0 +1,19 @@
import type { RegistryEntry } from "../../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../../shared.ts";
export const gitlawb_gmiProvider: RegistryEntry = {
id: "gitlawb-gmi",
alias: "glb-gmi",
format: "openai",
executor: "default",
baseUrl: "https://opengateway.gitlawb.com/v1/gmi-cloud",
authType: "apikey",
authHeader: "bearer",
headers: {
"User-Agent": "OpenClaude/1.0 (linux; x86_64)",
"X-Title": "OpenClaude CLI",
"HTTP-Referer": "https://github.com/Gitlawb/openclaude",
},
passthroughModels: true,
models: CHAT_OPENAI_COMPAT_MODELS["gitlawb-gmi"],
};

View File

@@ -0,0 +1,18 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const gitlawbProvider: RegistryEntry = {
id: "gitlawb",
alias: "glb",
format: "openai",
executor: "default",
baseUrl: "https://opengateway.gitlawb.com/v1/xiaomi-mimo",
authType: "apikey",
authHeader: "bearer",
headers: {
"User-Agent": "OpenClaude/1.0 (linux; x86_64)",
"X-Title": "OpenClaude CLI",
"HTTP-Referer": "https://github.com/Gitlawb/openclaude",
},
models: CHAT_OPENAI_COMPAT_MODELS["gitlawb"],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const glhfProvider: RegistryEntry = {
id: "glhf",
alias: "glhf",
format: "openai",
executor: "default",
baseUrl: "https://api.laf.run/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "deepseek-7b-chat", name: "DeepSeek 7B Chat" }],
};

View File

@@ -0,0 +1,17 @@
import type { RegistryEntry } from "../../../shared.ts";
import { GLM_REQUEST_DEFAULTS, GLM_TIMEOUT_MS, GLM_SHARED_MODELS } from "../../../shared.ts";
export const glm_cnProvider: RegistryEntry = {
id: "glm-cn",
alias: "glmcn",
format: "openai",
executor: "glm",
baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",
authType: "apikey",
authHeader: "bearer",
defaultContextLength: 200000,
requestDefaults: GLM_REQUEST_DEFAULTS,
timeoutMs: GLM_TIMEOUT_MS,
models: [...GLM_SHARED_MODELS],
passthroughModels: true,
};

View File

@@ -0,0 +1,16 @@
import type { RegistryEntry } from "../../shared.ts";
import { GLM_REQUEST_DEFAULTS, GLM_TIMEOUT_MS, GLM_SHARED_MODELS } from "../../shared.ts";
export const glmProvider: RegistryEntry = {
id: "glm",
alias: "glm",
format: "openai",
executor: "glm",
baseUrl: "https://api.z.ai/api/coding/paas/v4/chat/completions",
defaultContextLength: 200000,
authType: "apikey",
authHeader: "bearer",
requestDefaults: GLM_REQUEST_DEFAULTS,
timeoutMs: GLM_TIMEOUT_MS,
models: [...GLM_SHARED_MODELS],
};

View File

@@ -0,0 +1,16 @@
import type { RegistryEntry } from "../../../shared.ts";
import { GLMT_REQUEST_DEFAULTS, GLMT_TIMEOUT_MS, GLM_SHARED_MODELS } from "../../../shared.ts";
export const glmtProvider: RegistryEntry = {
id: "glmt",
alias: "glmt",
format: "openai",
executor: "glm",
baseUrl: "https://api.z.ai/api/coding/paas/v4/chat/completions",
defaultContextLength: 200000,
authType: "apikey",
authHeader: "bearer",
requestDefaults: GLMT_REQUEST_DEFAULTS,
timeoutMs: GLMT_TIMEOUT_MS,
models: [...GLM_SHARED_MODELS],
};

View File

@@ -0,0 +1,18 @@
import type { RegistryEntry } from "../../shared.ts";
export const grok_webProvider: RegistryEntry = {
id: "grok-web",
alias: "gw",
format: "openai",
executor: "grok-web",
baseUrl: "https://grok.com/rest/app-chat/conversations/new",
authType: "apikey",
authHeader: "cookie",
passthroughModels: true,
models: [
{ id: "fast", name: "Grok 4.20", toolCalling: true },
{ id: "expert", name: "Grok 4.20 Thinking", toolCalling: true },
{ id: "heavy", name: "Grok 4.20 Multi Agent", toolCalling: true },
{ id: "grok-420-computer-use-sa", name: "Grok 4.3 (Beta)", toolCalling: true },
],
};

View File

@@ -0,0 +1,23 @@
import type { RegistryEntry } from "../../shared.ts";
export const groqProvider: RegistryEntry = {
id: "groq",
alias: "groq",
format: "openai",
executor: "default",
baseUrl: "https://api.groq.com/openai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [
// Non-reasoning Llama models: Groq returns HTTP 400 if reasoning_effort is sent (#3258).
{
id: "meta-llama/llama-4-scout-17b-16e-instruct",
name: "Llama 4 Scout",
supportsReasoning: false,
},
{ id: "llama-3.3-70b-versatile", name: "Llama 3.3 70B", supportsReasoning: false },
{ id: "openai/gpt-oss-120b", name: "GPT-OSS 120B" },
{ id: "openai/gpt-oss-20b", name: "GPT-OSS 20B" },
{ id: "qwen/qwen3-32b", name: "Qwen3 32B" },
],
};

View File

@@ -0,0 +1,19 @@
import type { RegistryEntry } from "../../shared.ts";
export const hackclubProvider: RegistryEntry = {
id: "hackclub",
alias: "hc",
format: "openai",
executor: "default",
baseUrl: "https://ai.hackclub.com/proxy/v1/chat/completions",
modelsUrl: "https://ai.hackclub.com/proxy/v1/models",
authType: "optional",
authHeader: "bearer",
passthroughModels: true,
defaultContextLength: 128000,
models: [
{ id: "meta-llama/llama-3.3-70b-instruct", name: "Llama 3.3 70B" },
{ id: "mistralai/mistral-7b-instruct", name: "Mistral 7B" },
{ id: "deepseek-ai/deepseek-coder-33b", name: "DeepSeek Coder 33B" },
],
};

View File

@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../shared.ts";
export const haiperProvider: RegistryEntry = {
id: "haiper",
alias: "hp",
format: "openai",
executor: "default",
baseUrl: "https://api.haiper.ai/v1",
authType: "apikey",
authHeader: "HAIPER_KEY",
models: [
{ id: "gen2", name: "Gen 2 Video" },
{ id: "gen2-image", name: "Gen 2 Image" },
],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const herokuProvider: RegistryEntry = {
id: "heroku",
alias: "heroku",
format: "openai",
executor: "default",
baseUrl: "https://us.inference.heroku.com/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.heroku,
};

View File

@@ -0,0 +1,19 @@
import type { RegistryEntry } from "../../shared.ts";
export const huggingchatProvider: RegistryEntry = {
id: "huggingchat",
// Distinct alias: "hc" belongs to the hackclub provider; huggingchat is
// addressed by its own id to avoid the alias collision.
alias: "huggingchat",
format: "openai",
executor: "huggingchat",
baseUrl: "https://huggingface.co/chat/conversation",
authType: "apikey",
authHeader: "cookie",
models: [
{ id: "meta-llama/Llama-3.3-70B-Instruct", name: "Llama 3.3 70B" },
{ id: "Qwen/Qwen2.5-72B-Instruct", name: "Qwen 2.5 72B" },
{ id: "mistralai/Mistral-Small-24B-Instruct-2501", name: "Mistral Small 24B" },
{ id: "deepseek-ai/DeepSeek-R1", name: "DeepSeek R1" },
],
};

View File

@@ -0,0 +1,20 @@
import type { RegistryEntry } from "../../shared.ts";
export const huggingfaceProvider: RegistryEntry = {
id: "huggingface",
alias: "hf",
format: "openai",
executor: "default",
baseUrl: "https://router.huggingface.co/v1/chat/completions",
modelsUrl: "https://router.huggingface.co/v1/models",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "meta-llama/llama-3.1-8b-instruct", name: "Llama 3.1 8B" },
{ id: "meta-llama/llama-3.2-11b-instruct", name: "Llama 3.2 11B" },
{ id: "mistralai/mistral-7b-instruct", name: "Mistral 7B" },
{ id: "google/gemma-2-9b-it", name: "Gemma 2 9B" },
{ id: "Qwen/Qwen2.5-7B-Instruct", name: "Qwen 2.5 7B" },
{ id: "deepseek-ai/DeepSeek-V3", name: "DeepSeek V3" },
],
};

View File

@@ -0,0 +1,21 @@
import type { RegistryEntry } from "../../shared.ts";
export const hyperbolicProvider: RegistryEntry = {
id: "hyperbolic",
alias: "hyp",
format: "openai",
executor: "default",
baseUrl: "https://api.hyperbolic.xyz/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "Qwen/QwQ-32B", name: "QwQ 32B" },
{ id: "deepseek-ai/DeepSeek-R1", name: "DeepSeek R1" },
{ id: "deepseek-ai/DeepSeek-V3", name: "DeepSeek V3" },
{ id: "meta-llama/Llama-3.3-70B-Instruct", name: "Llama 3.3 70B" },
{ id: "meta-llama/Llama-3.2-3B-Instruct", name: "Llama 3.2 3B" },
{ id: "Qwen/Qwen2.5-72B-Instruct", name: "Qwen 2.5 72B" },
{ id: "Qwen/Qwen2.5-Coder-32B-Instruct", name: "Qwen 2.5 Coder 32B" },
{ id: "NousResearch/Hermes-3-Llama-3.1-70B", name: "Hermes 3 70B" },
],
};

View File

@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../shared.ts";
export const ideogramProvider: RegistryEntry = {
id: "ideogram",
alias: "ideo",
format: "openai",
executor: "default",
baseUrl: "https://api.ideogram.ai",
authType: "apikey",
authHeader: "Api-Key",
models: [
{ id: "V_3", name: "Ideogram V3" },
{ id: "V_2A", name: "Ideogram V2A" },
],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const iflytekProvider: RegistryEntry = {
id: "iflytek",
alias: "iflytek",
format: "openai",
executor: "default",
baseUrl: "https://spark-api.xf-yun.com/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "generalv3.5", name: "General V3.5" }],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const inclusionaiProvider: RegistryEntry = {
id: "inclusionai",
alias: "inclusionai",
format: "openai",
executor: "default",
baseUrl: "https://api.inclusionai.tech/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "inclusion-model", name: "Inclusion Model" }],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const inference_netProvider: RegistryEntry = {
id: "inference-net",
alias: "inet",
format: "openai",
executor: "default",
baseUrl: "https://api.inference.net/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS["inference-net"],
};

View File

@@ -0,0 +1,43 @@
import type { RegistryEntry } from "../../shared.ts";
export const inner_aiProvider: RegistryEntry = {
id: "inner-ai",
alias: "in-ai",
format: "openai",
executor: "inner-ai",
baseUrl: "https://chatapi.innerai.com/chat",
authType: "apikey",
authHeader: "bearer",
models: [
// OpenAI
{ id: "gpt-4o", name: "GPT-4o (via Inner.ai)" },
{ id: "gpt-4.1", name: "GPT-4.1 (via Inner.ai)" },
{ id: "gpt-4.1-mini", name: "GPT-4.1 Mini (via Inner.ai)" },
{ id: "o3", name: "o3 (via Inner.ai)", supportsReasoning: true },
{ id: "o4-mini", name: "o4-mini (via Inner.ai)", supportsReasoning: true },
// Anthropic
{ id: "claude-opus-4-5", name: "Claude Opus 4.5 (via Inner.ai)" },
{ id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5 (via Inner.ai)" },
{ id: "claude-3-7-sonnet-20250219", name: "Claude 3.7 Sonnet (via Inner.ai)" },
{ id: "claude-3-5-sonnet-20241022", name: "Claude 3.5 Sonnet (via Inner.ai)" },
// Google
{ id: "gemini-2.5-pro", name: "Gemini 2.5 Pro (via Inner.ai)" },
{ id: "gemini-2.5-flash", name: "Gemini 2.5 Flash (via Inner.ai)" },
{ id: "gemini-2.0-flash", name: "Gemini 2.0 Flash (via Inner.ai)" },
// DeepSeek
{
id: "deepseek-r1",
name: "DeepSeek R1 (via Inner.ai)",
supportsReasoning: true,
},
{ id: "deepseek-v3", name: "DeepSeek V3 (via Inner.ai)" },
// xAI
{ id: "grok-3", name: "Grok 3 (via Inner.ai)" },
{ id: "grok-3-mini", name: "Grok 3 Mini (via Inner.ai)", supportsReasoning: true },
// Meta
{ id: "llama-4-maverick", name: "Llama 4 Maverick (via Inner.ai)" },
{ id: "llama-3.3-70b-instruct", name: "Llama 3.3 70B (via Inner.ai)" },
// Mistral
{ id: "mistral-large-2411", name: "Mistral Large (via Inner.ai)" },
],
};

View File

@@ -0,0 +1,23 @@
import type { RegistryEntry } from "../../shared.ts";
export const kieProvider: RegistryEntry = {
id: "kie",
alias: "kie",
format: "openai",
executor: "default",
baseUrl: "https://api.kie.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
defaultContextLength: 128000,
models: [
{ id: "claude-opus-4-7", name: "Claude 4.7 Opus" },
{ id: "claude-sonnet-4-6", name: "Claude 4.6 Sonnet" },
{ id: "claude-haiku-4-5", name: "Claude 4.5 Haiku" },
{ id: "gpt-5-5", name: "GPT 5.5" },
{ id: "gpt-5-4", name: "GPT 5.4" },
{ id: "gpt-5-2", name: "GPT 5.2" },
{ id: "gemini-3-1-pro", name: "Gemini 3.1 Pro" },
{ id: "gemini-2-5-pro", name: "Gemini 2.5 Pro" },
{ id: "gemini-3-flash", name: "Gemini 3 Flash" },
],
};

View File

@@ -0,0 +1,21 @@
import type { RegistryEntry } from "../../shared.ts";
export const kilo_gatewayProvider: RegistryEntry = {
id: "kilo-gateway",
alias: "kg",
format: "openai",
executor: "default",
baseUrl: "https://api.kilo.ai/api/gateway/chat/completions",
modelsUrl: "https://api.kilo.ai/api/gateway/models",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "kilo-auto/frontier", name: "Kilo Auto Frontier" },
{ id: "kilo-auto/balanced", name: "Kilo Auto Balanced" },
{ id: "kilo-auto/free", name: "Kilo Auto Free" },
{ id: "nvidia/nemotron-3-super-120b-a12b:free", name: "Nemotron 3 Super 120B (Free)" },
{ id: "minimax/minimax-m2.5:free", name: "MiniMax M2.5 (Free)" },
{ id: "arcee-ai/trinity-large-preview:free", name: "Trinity Large Preview (Free)" },
],
passthroughModels: true,
};

View File

@@ -0,0 +1,34 @@
import type { RegistryEntry } from "../../shared.ts";
export const kilocodeProvider: RegistryEntry = {
id: "kilocode",
alias: "kc",
format: "openai",
executor: "default",
baseUrl: "https://api.kilo.ai/api/openrouter/chat/completions",
modelsUrl: "https://api.kilo.ai/api/openrouter/models",
authType: "oauth",
authHeader: "Authorization",
authPrefix: "Bearer ",
oauth: {
initiateUrl: "https://api.kilo.ai/api/device-auth/codes",
pollUrlBase: "https://api.kilo.ai/api/device-auth/codes",
},
models: [
{ id: "openrouter/free", name: "Free Models Router" },
{ id: "qwen/qwen3.6-plus", name: "Qwen3.6 Plus" },
{ id: "qwen/qwen3.5-397b-a17b", name: "Qwen3.5 397B A17B" },
{ id: "openai/gpt-5.5", name: "GPT-5.5" },
{ id: "openai/gpt-5.4-mini", name: "GPT-5.4 Mini" },
{ id: "anthropic/claude-opus-4.7", name: "Claude Opus 4.7" },
{ id: "anthropic/claude-sonnet-4.6", name: "Claude Sonnet 4.6" },
{ id: "anthropic/claude-haiku-4.5", name: "Claude Haiku 4.5" },
{ id: "google/gemini-3.1-pro-preview", name: "Gemini 3.1 Pro" },
{ id: "google/gemini-3-flash-preview", name: "Gemini 3 Flash" },
{ id: "google/gemini-3.1-flash-lite", name: "Gemini 3.1 Flash Lite" },
{ id: "deepseek/deepseek-v4-pro", name: "DeepSeek V4 Pro", supportsReasoning: true },
{ id: "deepseek/deepseek-v4-flash", name: "DeepSeek V4 Flash", supportsReasoning: true },
{ id: "moonshotai/kimi-k2.6", name: "Kimi K2.6" },
],
passthroughModels: true,
};

View File

@@ -0,0 +1,9 @@
import type { RegistryEntry } from "../../../shared.ts";
import { KIMI_CODING_SHARED } from "../../../shared.ts";
export const kimi_coding_apikeyProvider: RegistryEntry = {
id: "kimi-coding-apikey",
alias: "kmca",
...KIMI_CODING_SHARED,
authType: "apikey",
};

View File

@@ -0,0 +1,17 @@
import type { RegistryEntry } from "../../../shared.ts";
import { KIMI_CODING_SHARED, resolvePublicCred } from "../../../shared.ts";
export const kimi_codingProvider: RegistryEntry = {
id: "kimi-coding",
alias: "kmc",
...KIMI_CODING_SHARED,
urlSuffix: "?beta=true",
authType: "oauth",
oauth: {
clientIdEnv: "KIMI_CODING_OAUTH_CLIENT_ID",
clientIdDefault: resolvePublicCred("kimi_id"),
tokenUrl: "https://auth.kimi.com/api/oauth/token",
refreshUrl: "https://auth.kimi.com/api/oauth/token",
authUrl: "https://auth.kimi.com/api/oauth/device_authorization",
},
};

View File

@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../shared.ts";
export const kimiProvider: RegistryEntry = {
id: "kimi",
alias: "kimi",
format: "openai",
executor: "default",
baseUrl: "https://api.moonshot.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "kimi-k2.6", name: "Kimi K2.6" },
{ id: "kimi-k2.5", name: "Kimi K2.5" },
],
};

View File

@@ -0,0 +1,17 @@
import type { RegistryEntry } from "../../../shared.ts";
export const kimi_webProvider: RegistryEntry = {
id: "kimi-web",
// Distinct alias: the primary "kimi" provider (dedicated KimiExecutor) keeps
// the short "kimi" alias; this web/cookie variant is addressed by its own id.
alias: "kimi-web",
format: "openai",
executor: "kimi-web",
baseUrl: "https://kimi.moonshot.cn/api/chat",
authType: "apikey",
authHeader: "cookie",
models: [
{ id: "kimi-default", name: "Kimi Default" },
{ id: "kimi-128k", name: "Kimi 128K (Long Context)" },
],
};

View File

@@ -0,0 +1,69 @@
import type { RegistryEntry } from "../../shared.ts";
import { getKiroServiceHeaders } from "../../shared.ts";
export const kiroProvider: RegistryEntry = {
id: "kiro",
alias: "kr",
format: "kiro",
executor: "kiro",
baseUrl: "https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",
authType: "oauth",
authHeader: "bearer",
defaultContextLength: 200000,
headers: getKiroServiceHeaders(),
oauth: {
tokenUrl: "https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",
authUrl: "https://prod.us-east-1.auth.desktop.kiro.dev",
},
models: [
{ id: "auto-kiro", name: "Auto (Kiro picks best model)" },
{
id: "claude-fable-5",
name: "Claude Fable 5",
contextLength: 1000000,
maxOutputTokens: 128000,
},
{
id: "claude-opus-4.8",
name: "Claude Opus 4.8",
contextLength: 1000000,
maxOutputTokens: 128000,
},
{
id: "claude-opus-4.7",
name: "Claude Opus 4.7",
contextLength: 1000000,
maxOutputTokens: 128000,
},
{
id: "claude-opus-4.6",
name: "Claude Opus 4.6",
contextLength: 1000000,
maxOutputTokens: 128000,
},
{
id: "claude-sonnet-4.6",
name: "Claude Sonnet 4.6",
contextLength: 200000,
maxOutputTokens: 64000,
},
// models for kiro free tier
{
id: "claude-sonnet-4.5",
name: "Claude Sonnet 4.5",
contextLength: 200000,
maxOutputTokens: 64000,
},
{
id: "claude-haiku-4.5",
name: "Claude Haiku 4.5",
contextLength: 200000,
maxOutputTokens: 64000,
},
{ id: "deepseek-3.2", name: "DeepSeek V3.2" },
{ id: "minimax-m2.5", name: "MiniMax M2.5" },
{ id: "minimax-m2.1", name: "MiniMax M2.1" },
{ id: "glm-5", name: "GLM-5" },
{ id: "qwen3-coder-next", name: "Qwen3 Coder Next" },
],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const klusterProvider: RegistryEntry = {
id: "kluster",
alias: "kluster",
format: "openai",
executor: "default",
baseUrl: "https://api.kluster.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "auto", name: "Auto" }],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const lambda_aiProvider: RegistryEntry = {
id: "lambda-ai",
alias: "lambda",
format: "openai",
executor: "default",
baseUrl: "https://api.lambda.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS["lambda-ai"],
};

View File

@@ -0,0 +1,15 @@
import type { RegistryEntry } from "../../shared.ts";
export const leonardoProvider: RegistryEntry = {
id: "leonardo",
alias: "leo",
format: "openai",
executor: "default",
baseUrl: "https://cloud.leonardo.ai/api/rest/v1",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "phoenix", name: "Phoenix" },
{ id: "sdxl", name: "SDXL" },
],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const liquidProvider: RegistryEntry = {
id: "liquid",
alias: "liquid",
format: "openai",
executor: "default",
baseUrl: "https://api.liquid.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "liquid-lfm-40b", name: "Liquid LFM 40B" }],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const llamagateProvider: RegistryEntry = {
id: "llamagate",
alias: "llamagate",
format: "openai",
executor: "default",
baseUrl: "https://llamagate.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS.llamagate,
};

View File

@@ -0,0 +1,27 @@
import type { RegistryEntry } from "../../shared.ts";
export const llm7Provider: RegistryEntry = {
id: "llm7",
alias: "llm7",
format: "openai",
executor: "default",
baseUrl: "https://api.llm7.io/v1/chat/completions",
modelsUrl: "https://api.llm7.io/v1/models",
authType: "apikey",
authHeader: "bearer",
poolConfig: {
minSessions: 1,
maxSessions: 3,
cooldownBase: 2000,
cooldownMax: 5000,
cooldownJitter: 100,
requestTimeout: 30000,
requestJitter: 50,
},
models: [
{ id: "gpt-4o-mini-2024-07-18", name: "GPT-4o mini (LLM7)" },
{ id: "gpt-4.1-nano-2025-04-14", name: "GPT-4.1 nano (LLM7)" },
{ id: "deepseek-r1-0528", name: "DeepSeek R1 (LLM7)" },
{ id: "qwen2.5-coder-32b-instruct", name: "Qwen2.5 Coder 32B (LLM7)" },
],
};

View File

@@ -0,0 +1,20 @@
import type { RegistryEntry } from "../../shared.ts";
export const longcatProvider: RegistryEntry = {
id: "longcat",
alias: "lc",
format: "openai",
executor: "default",
baseUrl: "https://api.longcat.chat/openai/v1/chat/completions",
authType: "apikey",
authHeader: "Authorization",
authPrefix: "Bearer",
// Free tier: 50M tokens/day (Flash-Lite) + 500K/day (Chat/Thinking) — 100% free while public beta
models: [
{ id: "LongCat-Flash-Lite", name: "LongCat Flash-Lite (50M tok/day 🆓)" },
{ id: "LongCat-Flash-Chat", name: "LongCat Flash-Chat (500K tok/day 🆓)" },
{ id: "LongCat-Flash-Thinking", name: "LongCat Flash-Thinking (500K tok/day 🆓)" },
{ id: "LongCat-Flash-Omni-2603", name: "LongCat Flash-Omni-2603 (500K tok/day 🆓)" },
//{ id: "LongCat-2.0-Preview", name: "LongCat 2.0 Preview (10M tok/day 🆓)" },
],
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS, MARITALK_DEFAULT_BASE_URL } from "../../shared.ts";
export const maritalkProvider: RegistryEntry = {
id: "maritalk",
alias: "maritalk",
format: "openai",
executor: "default",
baseUrl: MARITALK_DEFAULT_BASE_URL,
authType: "apikey",
authHeader: "key",
models: CHAT_OPENAI_COMPAT_MODELS.maritalk,
};

View File

@@ -0,0 +1,13 @@
import type { RegistryEntry } from "../../shared.ts";
import { CHAT_OPENAI_COMPAT_MODELS } from "../../shared.ts";
export const meta_llamaProvider: RegistryEntry = {
id: "meta-llama",
alias: "meta",
format: "openai",
executor: "default",
baseUrl: "https://api.llama.com/compat/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: CHAT_OPENAI_COMPAT_MODELS["meta-llama"],
};

View File

@@ -0,0 +1,23 @@
import type { RegistryEntry } from "../../../shared.ts";
import { getAnthropicCompatHeaders, ANTHROPIC_VERSION_HEADER } from "../../../shared.ts";
export const minimax_cnProvider: RegistryEntry = {
id: "minimax-cn",
alias: "minimax-cn", // unique alias (was colliding with minimax)
format: "claude",
executor: "default",
baseUrl: "https://api.minimaxi.com/anthropic/v1/messages",
urlSuffix: "?beta=true",
authType: "apikey",
authHeader: "bearer",
headers: getAnthropicCompatHeaders(),
models: [
// Keep parity with minimax to ensure model discovery works for minimax-cn connections.
// #3110: MiniMax M3 — frontier coding model with 1M context
{ id: "MiniMax-M3", name: "MiniMax M3", contextLength: 1048576, supportsVision: true },
{ id: "MiniMax-M2.7", name: "MiniMax M2.7" },
{ id: "MiniMax-M2.7-highspeed", name: "MiniMax M2.7 Highspeed" },
{ id: "MiniMax-M2.5", name: "MiniMax M2.5" },
{ id: "MiniMax-M2.5-highspeed", name: "MiniMax M2.5 Highspeed" },
],
};

View File

@@ -0,0 +1,23 @@
import type { RegistryEntry } from "../../shared.ts";
import { getAnthropicCompatHeaders, ANTHROPIC_VERSION_HEADER } from "../../shared.ts";
export const minimaxProvider: RegistryEntry = {
id: "minimax",
alias: "minimax",
format: "claude",
executor: "default",
baseUrl: "https://api.minimax.io/anthropic/v1/messages",
urlSuffix: "?beta=true",
authType: "apikey",
authHeader: "bearer",
headers: getAnthropicCompatHeaders(),
models: [
// T12/T28: MiniMax default upgraded from M2.5 to M2.7
// #3110: MiniMax M3 — frontier coding model with 1M context
{ id: "MiniMax-M3", name: "MiniMax M3", contextLength: 1048576, supportsVision: true },
{ id: "MiniMax-M2.7", name: "MiniMax M2.7" },
{ id: "MiniMax-M2.7-highspeed", name: "MiniMax M2.7 Highspeed" },
{ id: "MiniMax-M2.5", name: "MiniMax M2.5" },
{ id: "MiniMax-M2.5-highspeed", name: "MiniMax M2.5 Highspeed" },
],
};

View File

@@ -0,0 +1,18 @@
import type { RegistryEntry } from "../../shared.ts";
export const mistralProvider: RegistryEntry = {
id: "mistral",
alias: "mistral",
format: "openai",
executor: "default",
baseUrl: "https://api.mistral.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [
{ id: "mistral-large-latest", name: "Mistral Large 3" },
{ id: "mistral-medium-3-5", name: "Mistral Medium 3.5" },
{ id: "mistral-small-latest", name: "Mistral Small 4" },
{ id: "devstral-latest", name: "Devstral 2" },
{ id: "codestral-latest", name: "Codestral" },
],
};

View File

@@ -0,0 +1,12 @@
import type { RegistryEntry } from "../../shared.ts";
export const modalProvider: RegistryEntry = {
id: "modal",
alias: "modal",
format: "openai",
executor: "default",
baseUrl: "https://api.modal.ai/v1/chat/completions",
authType: "apikey",
authHeader: "bearer",
models: [{ id: "google/gemini-2.0-flash", name: "Gemini 2.0 Flash" }],
};

Some files were not shown because too many files have changed in this diff Show More