diff --git a/open-sse/providers/registry/kimchi.js b/open-sse/providers/registry/kimchi.js index c2ec22b1..1fe0b706 100644 --- a/open-sse/providers/registry/kimchi.js +++ b/open-sse/providers/registry/kimchi.js @@ -14,7 +14,7 @@ export default { }, }, category: "freeTier", - authModes: ["oauth"], + authModes: ["oauth", "apikey"], hasOAuth: true, transport: { baseUrl: "https://llm.kimchi.dev/openai/v1/chat/completions", diff --git a/src/app/api/providers/[id]/test/testUtils.js b/src/app/api/providers/[id]/test/testUtils.js index e77a79fb..b9bd966a 100644 --- a/src/app/api/providers/[id]/test/testUtils.js +++ b/src/app/api/providers/[id]/test/testUtils.js @@ -788,13 +788,27 @@ async function testApiKeyConnection(connection, effectiveProxy = null) { ); return { valid: exRes.ok, error: exRes.ok ? null : "Invalid Personal Access Token" }; } - case "llm7": { +case "llm7": { const baseUrl = connection.providerSpecificData?.baseUrl || "https://api.llm7.io/v1"; const res = await fetchWithConnectionProxy(`${baseUrl.replace(/\/$/, "")}/models`, { headers: { Authorization: `Bearer ${connection.apiKey}` }, }, effectiveProxy); return { valid: res.ok, error: res.ok ? null : "Invalid API key or base URL" }; } + case "kimchi": { + // Dual-auth: same validation endpoint as the OAuth flow — the token (API key + // or OAuth access token) is sent as Authorization: Bearer. + const url = KIMCHI_CONFIG.validationUrl || "https://api.cast.ai/v1/llm/openai/supported-providers"; + const res = await fetchWithConnectionProxy(url, { + method: "GET", + headers: { + Accept: "application/json", + Authorization: `Bearer ${connection.apiKey}`, + "User-Agent": "kimchi/0.1.40", + }, + }, effectiveProxy); + return { valid: res.ok, error: res.ok ? null : "Invalid API key", refreshed: false }; + } default: return { valid: false, error: "Provider test not supported" }; } diff --git a/tests/translator/__snapshots__/golden-url-header.test.js.snap b/tests/translator/__snapshots__/golden-url-header.test.js.snap index 9482052c..584e0313 100644 --- a/tests/translator/__snapshots__/golden-url-header.test.js.snap +++ b/tests/translator/__snapshots__/golden-url-header.test.js.snap @@ -38,6 +38,25 @@ exports[`GOLDEN buildHeaders (default executor providers) > alicode-intl → hea } `; +exports[`GOLDEN buildHeaders (default executor providers) > alims-intl → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > anthropic → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -66,6 +85,31 @@ exports[`GOLDEN buildHeaders (default executor providers) > anthropic → header } `; +exports[`GOLDEN buildHeaders (default executor providers) > api-airforce → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "HTTP-Referer": "https://endpoint-proxy.local", + "X-Title": "Endpoint Proxy", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + "HTTP-Referer": "https://endpoint-proxy.local", + "X-Title": "Endpoint Proxy", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "HTTP-Referer": "https://endpoint-proxy.local", + "X-Title": "Endpoint Proxy", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > assemblyai → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -85,6 +129,44 @@ exports[`GOLDEN buildHeaders (default executor providers) > assemblyai → heade } `; +exports[`GOLDEN buildHeaders (default executor providers) > baidu → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + +exports[`GOLDEN buildHeaders (default executor providers) > bazaarlink → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > blackbox → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -104,6 +186,25 @@ exports[`GOLDEN buildHeaders (default executor providers) > blackbox → headers } `; +exports[`GOLDEN buildHeaders (default executor providers) > bluesminds → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > byteplus → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -268,6 +369,52 @@ exports[`GOLDEN buildHeaders (default executor providers) > cline → headers (a } `; +exports[`GOLDEN buildHeaders (default executor providers) > clinepass → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "HTTP-Referer": "https://cline.bot", + "User-Agent": "9Router/0.5.50", + "X-CLIENT-TYPE": "9router", + "X-CLIENT-VERSION": "0.5.50", + "X-CORE-VERSION": "0.5.50", + "X-IS-MULTIROOT": "false", + "X-PLATFORM": "linux", + "X-PLATFORM-VERSION": "v24.15.0", + "X-Title": "Cline", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + "HTTP-Referer": "https://cline.bot", + "User-Agent": "9Router/0.5.50", + "X-CLIENT-TYPE": "9router", + "X-CLIENT-VERSION": "0.5.50", + "X-CORE-VERSION": "0.5.50", + "X-IS-MULTIROOT": "false", + "X-PLATFORM": "linux", + "X-PLATFORM-VERSION": "v24.15.0", + "X-Title": "Cline", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "HTTP-Referer": "https://cline.bot", + "User-Agent": "9Router/0.5.50", + "X-CLIENT-TYPE": "9router", + "X-CLIENT-VERSION": "0.5.50", + "X-CORE-VERSION": "0.5.50", + "X-IS-MULTIROOT": "false", + "X-PLATFORM": "linux", + "X-PLATFORM-VERSION": "v24.15.0", + "X-Title": "Cline", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > cloudflare-ai → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -324,6 +471,43 @@ exports[`GOLDEN buildHeaders (default executor providers) > codebuddy-cn → hea } `; +exports[`GOLDEN buildHeaders (default executor providers) > codebuddy-intl → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "IDE/2.108.1 CodeBuddy/2.108.1", + "X-IDE-Name": "IDE", + "X-IDE-Type": "IDE", + "X-Product": "SaaS", + "x-codebuddy-request": "1", + "x-requested-with": "XMLHttpRequest", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "IDE/2.108.1 CodeBuddy/2.108.1", + "X-IDE-Name": "IDE", + "X-IDE-Type": "IDE", + "X-Product": "SaaS", + "x-codebuddy-request": "1", + "x-requested-with": "XMLHttpRequest", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "IDE/2.108.1 CodeBuddy/2.108.1", + "X-IDE-Name": "IDE", + "X-IDE-Type": "IDE", + "X-Product": "SaaS", + "x-codebuddy-request": "1", + "x-requested-with": "XMLHttpRequest", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > cohere → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -381,6 +565,25 @@ exports[`GOLDEN buildHeaders (default executor providers) > deepseek → headers } `; +exports[`GOLDEN buildHeaders (default executor providers) > featherless → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > fireworks → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -482,6 +685,34 @@ exports[`GOLDEN buildHeaders (default executor providers) > glm-cn → headers ( } `; +exports[`GOLDEN buildHeaders (default executor providers) > grok-cli → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "grok-shell/0.2.99 (linux; x86_64)", + "x-grok-client-identifier": "grok-shell", + "x-grok-client-version": "0.2.99", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "grok-shell/0.2.99 (linux; x86_64)", + "x-grok-client-identifier": "grok-shell", + "x-grok-client-version": "0.2.99", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "grok-shell/0.2.99 (linux; x86_64)", + "x-grok-client-identifier": "grok-shell", + "x-grok-client-version": "0.2.99", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > groq → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -520,6 +751,25 @@ exports[`GOLDEN buildHeaders (default executor providers) > hyperbolic → heade } `; +exports[`GOLDEN buildHeaders (default executor providers) > kilo-gateway → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > kilocode → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -539,6 +789,28 @@ exports[`GOLDEN buildHeaders (default executor providers) > kilocode → headers } `; +exports[`GOLDEN buildHeaders (default executor providers) > kimchi → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "kimchi/0.1.50", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "kimchi/0.1.50", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "kimchi/0.1.50", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > kimi → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -601,6 +873,25 @@ exports[`GOLDEN buildHeaders (default executor providers) > kimi-coding → head } `; +exports[`GOLDEN buildHeaders (default executor providers) > llm7 → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > minimax → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -689,6 +980,25 @@ exports[`GOLDEN buildHeaders (default executor providers) > mmf → headers (api } `; +exports[`GOLDEN buildHeaders (default executor providers) > morph → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > nanobanana → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -828,6 +1138,63 @@ exports[`GOLDEN buildHeaders (default executor providers) > perplexity → heade } `; +exports[`GOLDEN buildHeaders (default executor providers) > perplexity-agent → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + +exports[`GOLDEN buildHeaders (default executor providers) > poolside → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + +exports[`GOLDEN buildHeaders (default executor providers) > sambanova → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > siliconflow → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -847,6 +1214,25 @@ exports[`GOLDEN buildHeaders (default executor providers) > siliconflow → head } `; +exports[`GOLDEN buildHeaders (default executor providers) > tencent → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > together → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -866,6 +1252,44 @@ exports[`GOLDEN buildHeaders (default executor providers) > together → headers } `; +exports[`GOLDEN buildHeaders (default executor providers) > tokenrouter → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + +exports[`GOLDEN buildHeaders (default executor providers) > venice → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + }, +} +`; + exports[`GOLDEN buildHeaders (default executor providers) > vercel-ai-gateway → headers (apiKey / oauth) 1`] = ` { "apiKey": { @@ -942,6 +1366,28 @@ exports[`GOLDEN buildHeaders (default executor providers) > xiaomi-mimo → head } `; +exports[`GOLDEN buildHeaders (default executor providers) > zed → headers (apiKey / oauth) 1`] = ` +{ + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "", + "Content-Type": "application/json", + "content-type": "application/json", + }, + "nonStream": { + "Authorization": "", + "Content-Type": "application/json", + "content-type": "application/json", + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "", + "Content-Type": "application/json", + "content-type": "application/json", + }, +} +`; + exports[`GOLDEN buildUrl (default executor providers) > alicode → url (stream + non-stream) 1`] = ` { "nonStream": "https://coding.dashscope.aliyuncs.com/v1/chat/completions", @@ -956,6 +1402,13 @@ exports[`GOLDEN buildUrl (default executor providers) > alicode-intl → url (st } `; +exports[`GOLDEN buildUrl (default executor providers) > alims-intl → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions", + "stream": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > anthropic → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.anthropic.com/v1/messages", @@ -963,6 +1416,13 @@ exports[`GOLDEN buildUrl (default executor providers) > anthropic → url (strea } `; +exports[`GOLDEN buildUrl (default executor providers) > api-airforce → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.airforce/v1/chat/completions", + "stream": "https://api.airforce/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > assemblyai → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.assemblyai.com/v1/audio/transcriptions", @@ -970,6 +1430,20 @@ exports[`GOLDEN buildUrl (default executor providers) > assemblyai → url (stre } `; +exports[`GOLDEN buildUrl (default executor providers) > baidu → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://qianfan.baidubce.com/v2/chat/completions", + "stream": "https://qianfan.baidubce.com/v2/chat/completions", +} +`; + +exports[`GOLDEN buildUrl (default executor providers) > bazaarlink → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://bazaarlink.ai/api/v1/chat/completions", + "stream": "https://bazaarlink.ai/api/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > blackbox → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.blackbox.ai/chat/completions", @@ -977,6 +1451,13 @@ exports[`GOLDEN buildUrl (default executor providers) > blackbox → url (stream } `; +exports[`GOLDEN buildUrl (default executor providers) > bluesminds → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.bluesminds.com/v1/chat/completions", + "stream": "https://api.bluesminds.com/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > byteplus → url (stream + non-stream) 1`] = ` { "nonStream": "https://ark.ap-southeast.bytepluses.com/api/coding/v3/chat/completions", @@ -1012,6 +1493,13 @@ exports[`GOLDEN buildUrl (default executor providers) > cline → url (stream + } `; +exports[`GOLDEN buildUrl (default executor providers) > clinepass → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.cline.bot/api/v1/chat/completions", + "stream": "https://api.cline.bot/api/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > cloudflare-ai → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.cloudflare.com/client/v4/accounts/ACC123/ai/v1/chat/completions", @@ -1026,6 +1514,13 @@ exports[`GOLDEN buildUrl (default executor providers) > codebuddy-cn → url (st } `; +exports[`GOLDEN buildUrl (default executor providers) > codebuddy-intl → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://www.codebuddy.ai/v2/chat/completions", + "stream": "https://www.codebuddy.ai/v2/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > cohere → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.cohere.ai/v1/chat/completions", @@ -1047,6 +1542,13 @@ exports[`GOLDEN buildUrl (default executor providers) > deepseek → url (stream } `; +exports[`GOLDEN buildUrl (default executor providers) > featherless → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.featherless.ai/v1/chat/completions", + "stream": "https://api.featherless.ai/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > fireworks → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.fireworks.ai/inference/v1/chat/completions", @@ -1082,6 +1584,13 @@ exports[`GOLDEN buildUrl (default executor providers) > glm-cn → url (stream + } `; +exports[`GOLDEN buildUrl (default executor providers) > grok-cli → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://cli-chat-proxy.grok.com/v1/responses", + "stream": "https://cli-chat-proxy.grok.com/v1/responses", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > groq → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.groq.com/openai/v1/chat/completions", @@ -1096,6 +1605,13 @@ exports[`GOLDEN buildUrl (default executor providers) > hyperbolic → url (stre } `; +exports[`GOLDEN buildUrl (default executor providers) > kilo-gateway → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.kilo.ai/api/gateway/chat/completions", + "stream": "https://api.kilo.ai/api/gateway/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > kilocode → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.kilo.ai/api/openrouter/chat/completions", @@ -1103,6 +1619,13 @@ exports[`GOLDEN buildUrl (default executor providers) > kilocode → url (stream } `; +exports[`GOLDEN buildUrl (default executor providers) > kimchi → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://llm.kimchi.dev/openai/v1/chat/completions", + "stream": "https://llm.kimchi.dev/openai/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > kimi → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.kimi.com/coding/v1/messages?beta=true", @@ -1117,6 +1640,13 @@ exports[`GOLDEN buildUrl (default executor providers) > kimi-coding → url (str } `; +exports[`GOLDEN buildUrl (default executor providers) > llm7 → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.llm7.io/v1/chat/completions", + "stream": "https://api.llm7.io/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > minimax → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.minimax.io/anthropic/v1/messages?beta=true", @@ -1145,6 +1675,13 @@ exports[`GOLDEN buildUrl (default executor providers) > mmf → url (stream + no } `; +exports[`GOLDEN buildUrl (default executor providers) > morph → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.morphllm.com/v1/chat/completions", + "stream": "https://api.morphllm.com/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > nanobanana → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.nanobananaapi.ai/v1/chat/completions", @@ -1194,6 +1731,27 @@ exports[`GOLDEN buildUrl (default executor providers) > perplexity → url (stre } `; +exports[`GOLDEN buildUrl (default executor providers) > perplexity-agent → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.perplexity.ai/v1/responses", + "stream": "https://api.perplexity.ai/v1/responses", +} +`; + +exports[`GOLDEN buildUrl (default executor providers) > poolside → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://inference.poolside.ai/v1/chat/completions", + "stream": "https://inference.poolside.ai/v1/chat/completions", +} +`; + +exports[`GOLDEN buildUrl (default executor providers) > sambanova → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.sambanova.ai/v1/chat/completions", + "stream": "https://api.sambanova.ai/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > siliconflow → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.siliconflow.com/v1/chat/completions", @@ -1201,6 +1759,13 @@ exports[`GOLDEN buildUrl (default executor providers) > siliconflow → url (str } `; +exports[`GOLDEN buildUrl (default executor providers) > tencent → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.hunyuan.cloud.tencent.com/v1/chat/completions", + "stream": "https://api.hunyuan.cloud.tencent.com/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > together → url (stream + non-stream) 1`] = ` { "nonStream": "https://api.together.xyz/v1/chat/completions", @@ -1208,6 +1773,20 @@ exports[`GOLDEN buildUrl (default executor providers) > together → url (stream } `; +exports[`GOLDEN buildUrl (default executor providers) > tokenrouter → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.tokenrouter.com/v1/chat/completions", + "stream": "https://api.tokenrouter.com/v1/chat/completions", +} +`; + +exports[`GOLDEN buildUrl (default executor providers) > venice → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://api.venice.ai/api/v1/chat/completions", + "stream": "https://api.venice.ai/api/v1/chat/completions", +} +`; + exports[`GOLDEN buildUrl (default executor providers) > vercel-ai-gateway → url (stream + non-stream) 1`] = ` { "nonStream": "https://ai-gateway.vercel.sh/v1/chat/completions", @@ -1235,3 +1814,10 @@ exports[`GOLDEN buildUrl (default executor providers) > xiaomi-mimo → url (str "stream": "https://api.xiaomimimo.com/v1/chat/completions", } `; + +exports[`GOLDEN buildUrl (default executor providers) > zed → url (stream + non-stream) 1`] = ` +{ + "nonStream": "https://cloud.zed.dev/completions", + "stream": "https://cloud.zed.dev/completions", +} +`;