@jacobbd/relay-ai 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{chunk-2NXLK3O6.js → chunk-G6QWYYAY.js} +36 -33
- package/dist/chunk-G6QWYYAY.js.map +1 -0
- package/dist/{chunk-P4IS6537.js → chunk-SFN33VAE.js} +5 -3
- package/dist/chunk-SFN33VAE.js.map +1 -0
- package/dist/cli.js +27 -27
- package/dist/cli.js.map +1 -1
- package/dist/core/index.js +33 -28
- package/dist/core/index.js.map +1 -1
- package/dist/{provider-templates-7M24FAAI.js → provider-templates-TZOM62WC.js} +2 -2
- package/dist/{ui-command-6ZMM5K5K.js → ui-command-RJVKDGGG.js} +4 -4
- package/package.json +22 -23
- package/dist/chunk-2NXLK3O6.js.map +0 -1
- package/dist/chunk-P4IS6537.js.map +0 -1
- /package/dist/{provider-templates-7M24FAAI.js.map → provider-templates-TZOM62WC.js.map} +0 -0
- /package/dist/{ui-command-6ZMM5K5K.js.map → ui-command-RJVKDGGG.js.map} +0 -0
|
@@ -319,7 +319,7 @@ var init_provider_templates = __esm({
|
|
|
319
319
|
id: "venice",
|
|
320
320
|
name: "Venice AI",
|
|
321
321
|
authType: "api",
|
|
322
|
-
npm: "
|
|
322
|
+
npm: "@ai-sdk/openai-compatible",
|
|
323
323
|
defaultBaseUrl: "https://api.venice.ai/api/v1",
|
|
324
324
|
signupUrl: "https://venice.ai/settings/api",
|
|
325
325
|
modelSource: "api-list",
|
|
@@ -421,7 +421,9 @@ var init_provider_templates = __esm({
|
|
|
421
421
|
{
|
|
422
422
|
id: "antigravity",
|
|
423
423
|
name: "Cloud Code Assist OAuth (Google)",
|
|
424
|
-
|
|
424
|
+
// Compact label users actually recognise: every surface that shows this
|
|
425
|
+
// provider calls it Antigravity, and it is also the shortest of the two.
|
|
426
|
+
shortName: "Antigravity",
|
|
425
427
|
authType: "oauth",
|
|
426
428
|
npm: "@ai-sdk/openai-compatible",
|
|
427
429
|
signupUrl: "https://antigravity.google",
|
|
@@ -478,4 +480,4 @@ export {
|
|
|
478
480
|
provider_templates_exports,
|
|
479
481
|
init_provider_templates
|
|
480
482
|
};
|
|
481
|
-
//# sourceMappingURL=chunk-
|
|
483
|
+
//# sourceMappingURL=chunk-SFN33VAE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/provider-templates.ts"],"sourcesContent":["// src/provider-templates.ts — builtin provider templates for relay-ai providers add\n\nexport type ProviderAuthType = 'api' | 'oauth' | 'none';\nexport type ProviderModelSource = 'api-list' | 'static-seed' | 'manual-only' | 'zen-go-api' | 'cline-recommended';\n\nexport interface ProviderTemplate {\n id: string;\n name: string;\n /** Compact label for constrained model lists. */\n shortName?: string;\n authType: ProviderAuthType;\n /** Supported setup methods; defaults to the template's authType. */\n authMethods?: ProviderAuthType[];\n npm: string;\n defaultBaseUrl?: string;\n modelsPath?: string;\n signupUrl?: string;\n urlPlaceholder?: string;\n urlPrompt?: string;\n accountIdPrompt?: string;\n apiKeyOptional?: boolean;\n anonymousFreeModels?: boolean;\n /** Static headers this provider requires on every request (model listing and runtime). */\n headers?: Record<string, string>;\n modelSource: ProviderModelSource;\n staticModels?: Array<{ id: string; name: string }>;\n supported: boolean;\n addable?: boolean;\n hidden?: boolean;\n unsupportedReason?: string;\n /** True for providers that extract subscription tokens — carries account risk. */\n subscriptionRisk?: boolean;\n}\n\n/** Templates aligned with SDK packages shipped in package.json (API-key providers first). */\nexport const PROVIDER_TEMPLATES: ProviderTemplate[] = [\n {\n id: 'cline-pass',\n name: 'ClinePass',\n authType: 'api',\n authMethods: ['api', 'oauth'],\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.cline.bot/api/v1',\n signupUrl: 'https://app.cline.bot',\n modelSource: 'cline-recommended',\n headers: { 'HTTP-Referer': 'https://cline.bot', 'X-Title': 'Cline' },\n supported: true,\n subscriptionRisk: true,\n },\n {\n id: 'groq',\n name: 'Groq',\n authType: 'api',\n npm: '@ai-sdk/groq',\n defaultBaseUrl: 'https://api.groq.com/openai/v1',\n signupUrl: 'https://console.groq.com/keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'nvidia',\n name: 'Nvidia',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://integrate.api.nvidia.com/v1',\n signupUrl: 'https://build.nvidia.com',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'mistral',\n name: 'Mistral',\n authType: 'api',\n npm: '@ai-sdk/mistral',\n defaultBaseUrl: 'https://api.mistral.ai/v1',\n signupUrl: 'https://console.mistral.ai/api-keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'togetherai',\n name: 'Together AI',\n authType: 'api',\n npm: '@ai-sdk/togetherai',\n defaultBaseUrl: 'https://api.together.xyz/v1',\n signupUrl: 'https://api.together.xyz/settings/api-keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'cerebras',\n name: 'Cerebras',\n authType: 'api',\n npm: '@ai-sdk/cerebras',\n defaultBaseUrl: 'https://api.cerebras.ai/v1',\n signupUrl: 'https://cloud.cerebras.ai',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'deepinfra',\n name: 'DeepInfra',\n authType: 'api',\n npm: '@ai-sdk/deepinfra',\n defaultBaseUrl: 'https://api.deepinfra.com/v1/openai',\n signupUrl: 'https://deepinfra.com/dash/api_keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'deepseek',\n name: 'DeepSeek',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.deepseek.com/v1',\n signupUrl: 'https://platform.deepseek.com',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'zhipu',\n name: 'Zhipu AI (GLM)',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://open.bigmodel.cn/api/paas/v4',\n signupUrl: 'https://open.bigmodel.cn',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'moonshot',\n name: 'Moonshot (Kimi)',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.moonshot.cn/v1',\n signupUrl: 'https://platform.moonshot.cn',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'moonshot-global',\n name: 'Moonshot Global (kimi.ai)',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.moonshot.ai/v1',\n signupUrl: 'https://platform.kimi.ai',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'kimi-code',\n name: 'Kimi Code (Subscription Required)',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.kimi.com/coding/v1',\n modelSource: 'static-seed',\n staticModels: [\n { id: 'kimi-for-coding', name: 'Kimi Code K2.7 (Unified)' }\n ],\n supported: true,\n },\n {\n id: 'xai',\n name: 'xAI',\n authType: 'api',\n npm: '@ai-sdk/xai',\n defaultBaseUrl: 'https://api.x.ai/v1',\n signupUrl: 'https://console.x.ai',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'perplexity',\n name: 'Perplexity',\n authType: 'api',\n npm: '@ai-sdk/perplexity',\n defaultBaseUrl: 'https://api.perplexity.ai',\n signupUrl: 'https://www.perplexity.ai/settings/api',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'cohere',\n name: 'Cohere',\n authType: 'api',\n npm: '@ai-sdk/cohere',\n defaultBaseUrl: 'https://api.cohere.com/compatibility/v1',\n signupUrl: 'https://dashboard.cohere.com/api-keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'openai',\n name: 'OpenAI',\n authType: 'api',\n npm: '@ai-sdk/openai',\n defaultBaseUrl: 'https://api.openai.com/v1',\n signupUrl: 'https://platform.openai.com/api-keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'google',\n name: 'Google Gemini',\n authType: 'api',\n npm: '@ai-sdk/google',\n defaultBaseUrl: 'https://generativelanguage.googleapis.com/v1beta/openai',\n signupUrl: 'https://aistudio.google.com/apikey',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'alibaba',\n name: 'Alibaba DashScope (China)',\n authType: 'api',\n npm: '@ai-sdk/alibaba',\n defaultBaseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n signupUrl: 'https://dashscope.console.aliyun.com/apiKey',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'qwen-cloud-token-plan',\n name: 'Qwen Cloud (Token Plan)',\n shortName: 'Qwen Cloud',\n authType: 'api',\n npm: '@ai-sdk/alibaba',\n defaultBaseUrl: 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1',\n signupUrl: 'https://home.qwencloud.com/api-keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'qwen-cloud-payg',\n name: 'Qwen Cloud (Pay-As-You-Go)',\n shortName: 'Qwen Cloud',\n authType: 'api',\n npm: '@ai-sdk/alibaba',\n defaultBaseUrl: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1',\n signupUrl: 'https://home.qwencloud.com/api-keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'openrouter',\n name: 'OpenRouter',\n authType: 'api',\n npm: '@openrouter/ai-sdk-provider',\n defaultBaseUrl: 'https://openrouter.ai/api/v1',\n signupUrl: 'https://openrouter.ai/keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'kilo',\n name: 'Kilo Code',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.kilo.ai/api/gateway',\n modelsPath: '/models',\n signupUrl: 'https://app.kilo.ai',\n apiKeyOptional: true,\n anonymousFreeModels: true,\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'ollama',\n name: 'Ollama',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'http://127.0.0.1:11434/v1',\n urlPrompt: 'Ollama API Base URL:',\n apiKeyOptional: true,\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'lmstudio',\n name: 'LM Studio',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'http://127.0.0.1:1234/v1',\n urlPrompt: 'LM Studio API Base URL:',\n apiKeyOptional: true,\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'venice',\n name: 'Venice AI',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.venice.ai/api/v1',\n signupUrl: 'https://venice.ai/settings/api',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'cloudflare',\n name: 'Cloudflare Workers AI',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1',\n modelsPath: '/models/search?task=Text%20Generation',\n signupUrl: 'https://dash.cloudflare.com',\n accountIdPrompt: 'Cloudflare Account ID:',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'anthropic',\n name: 'Anthropic',\n authType: 'api',\n npm: '@ai-sdk/anthropic',\n defaultBaseUrl: 'https://api.anthropic.com',\n signupUrl: 'https://console.anthropic.com/settings/keys',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'bedrock',\n name: 'Amazon Bedrock',\n authType: 'api',\n npm: '@ai-sdk/amazon-bedrock',\n modelSource: 'manual-only',\n supported: false,\n unsupportedReason: 'Not supported yet (requires AWS credentials). Optional: relay-ai providers import if already set up in OpenCode CLI.',\n },\n {\n id: 'azure',\n name: 'Azure OpenAI',\n authType: 'api',\n npm: '@ai-sdk/azure',\n modelSource: 'manual-only',\n supported: false,\n unsupportedReason: 'Not supported yet (requires Azure deployment URLs). Optional: relay-ai providers import if already set up in OpenCode CLI.',\n },\n {\n id: 'vertex',\n name: 'Google Vertex AI',\n authType: 'none',\n npm: '@ai-sdk/google-vertex',\n modelSource: 'manual-only',\n supported: false,\n unsupportedReason: 'Uses gcloud Application Default Credentials — use relay-ai server --vertex, not an API key.',\n },\n {\n id: 'opencode-cloud',\n name: 'OpenCode Zen / Go',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n signupUrl: 'https://opencode.ai/auth',\n modelSource: 'zen-go-api',\n supported: true,\n },\n {\n id: 'zen',\n name: 'OpenCode Zen',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n signupUrl: 'https://opencode.ai/auth',\n modelSource: 'zen-go-api',\n supported: true,\n addable: false,\n },\n {\n id: 'go',\n name: 'OpenCode Go',\n authType: 'api',\n npm: '@ai-sdk/openai-compatible',\n signupUrl: 'https://opencode.ai/auth',\n modelSource: 'zen-go-api',\n supported: true,\n addable: false,\n },\n // Subscription OAuth providers — Authorization Code + PKCE (browser redirect)\n // ⚠️ These extract tokens from paid subscriptions. Account risk — see plan docs.\n {\n id: 'claude-code',\n name: 'Claude Code (Anthropic subscription)',\n shortName: 'Claude Code',\n authType: 'oauth',\n npm: '@ai-sdk/anthropic',\n defaultBaseUrl: 'https://api.anthropic.com',\n signupUrl: 'https://claude.ai',\n modelSource: 'api-list',\n supported: true,\n hidden: true,\n subscriptionRisk: true,\n },\n {\n id: 'antigravity',\n name: 'Cloud Code Assist OAuth (Google)',\n // Compact label users actually recognise: every surface that shows this\n // provider calls it Antigravity, and it is also the shortest of the two.\n shortName: 'Antigravity',\n authType: 'oauth',\n npm: '@ai-sdk/openai-compatible',\n signupUrl: 'https://antigravity.google',\n modelSource: 'api-list',\n supported: true,\n hidden: true,\n subscriptionRisk: true,\n },\n // OAuth-gated subscription providers — device code or broker sign-in\n {\n id: 'xai-oauth',\n name: 'xAI Grok (SuperGrok)',\n shortName: 'xAI Grok',\n authType: 'oauth',\n npm: '@ai-sdk/xai',\n signupUrl: 'https://x.ai',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'openai-oauth',\n name: 'OpenAI (ChatGPT)',\n shortName: 'OpenAI',\n authType: 'oauth',\n npm: '@ai-sdk/openai',\n signupUrl: 'https://chatgpt.com',\n modelSource: 'api-list',\n supported: true,\n },\n {\n id: 'github-copilot',\n name: 'GitHub Copilot',\n authType: 'oauth',\n npm: '@ai-sdk/openai-compatible',\n defaultBaseUrl: 'https://api.githubcopilot.com',\n modelsPath: '/models',\n signupUrl: 'https://github.com/features/copilot',\n modelSource: 'api-list',\n headers: { 'Editor-Version': 'vscode/1.85.1' },\n supported: true,\n },\n];\n\nexport function listSupportedTemplates(): ProviderTemplate[] {\n return PROVIDER_TEMPLATES\n .filter(t => t.supported && (t.authMethods ?? [t.authType]).includes('api') && t.addable !== false && !t.hidden)\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/** Supported templates not yet present in the user's registry. */\nexport function listAddableTemplates(configuredIds: Iterable<string> = []): ProviderTemplate[] {\n const configured = new Set(configuredIds);\n return listSupportedTemplates().filter(t => {\n if (t.id === 'opencode-cloud') {\n return !configured.has('zen') && !configured.has('go');\n }\n return !configured.has(t.id);\n });\n}\n\nexport function listVisibleOAuthTemplates(configuredIds: Iterable<string> = []): ProviderTemplate[] {\n const configured = new Set(configuredIds);\n return PROVIDER_TEMPLATES\n .filter(t => {\n const methods = t.authMethods ?? [t.authType];\n return methods.includes('oauth')\n && !methods.includes('api')\n && t.supported\n && t.addable !== false\n && !t.hidden\n && !configured.has(t.id);\n })\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function getTemplateById(id: string): ProviderTemplate | undefined {\n return PROVIDER_TEMPLATES.find(t => t.id === id);\n}\n\nexport function filterTemplates(templates: ProviderTemplate[], query: string): ProviderTemplate[] {\n const q = query.trim().toLowerCase();\n if (!q) return templates;\n return templates.filter(\n t =>\n t.id.toLowerCase().includes(q) ||\n t.name.toLowerCase().includes(q) ||\n t.npm.toLowerCase().includes(q),\n );\n}\n"],"mappings":"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","names":[]}
|
package/dist/cli.js
CHANGED
|
@@ -202,7 +202,7 @@ import {
|
|
|
202
202
|
waitForCodexAppQuit,
|
|
203
203
|
writeSecureLogLine,
|
|
204
204
|
zenRegistryStub
|
|
205
|
-
} from "./chunk-
|
|
205
|
+
} from "./chunk-G6QWYYAY.js";
|
|
206
206
|
import {
|
|
207
207
|
filterTemplates,
|
|
208
208
|
getTemplateById,
|
|
@@ -210,7 +210,7 @@ import {
|
|
|
210
210
|
listAddableTemplates,
|
|
211
211
|
listSupportedTemplates,
|
|
212
212
|
listVisibleOAuthTemplates
|
|
213
|
-
} from "./chunk-
|
|
213
|
+
} from "./chunk-SFN33VAE.js";
|
|
214
214
|
|
|
215
215
|
// src/cli.ts
|
|
216
216
|
import pc12 from "picocolors";
|
|
@@ -2272,7 +2272,7 @@ function claudeCodeProviderOptions(input, sdkParams) {
|
|
|
2272
2272
|
const seed = input.oauthAccountId ?? input.apiKey;
|
|
2273
2273
|
const { userId } = injectClaudeIdentity({}, input.providerData, seed);
|
|
2274
2274
|
const betaBody = {
|
|
2275
|
-
...sdkParams.
|
|
2275
|
+
...sdkParams.instructions ? { system: [{ type: "text", text: sdkParams.instructions }] } : {},
|
|
2276
2276
|
...sdkParams.tools ? { tools: Object.keys(sdkParams.tools).map((name) => ({ name })) } : {}
|
|
2277
2277
|
};
|
|
2278
2278
|
return {
|
|
@@ -2284,7 +2284,7 @@ function claudeCodeProviderOptions(input, sdkParams) {
|
|
|
2284
2284
|
}
|
|
2285
2285
|
function applyClaudeCodeOAuthIdentity(input, sdkParams) {
|
|
2286
2286
|
if (!isClaudeCodeOAuthRoute(input)) return sdkParams;
|
|
2287
|
-
sdkParams.
|
|
2287
|
+
sdkParams.instructions = prependClaudeCodeBillingLine(sdkParams.instructions);
|
|
2288
2288
|
sdkParams.providerOptions = mergeProviderOptions(
|
|
2289
2289
|
sdkParams.providerOptions,
|
|
2290
2290
|
claudeCodeProviderOptions(input, sdkParams)
|
|
@@ -2433,7 +2433,7 @@ function makeReasoningOutputItem(id, text5) {
|
|
|
2433
2433
|
function translateResponsesInput(input, instructions, npm, toolContext = createCodexToolContext()) {
|
|
2434
2434
|
if (typeof input === "string") {
|
|
2435
2435
|
return {
|
|
2436
|
-
|
|
2436
|
+
instructions: instructions?.trim() || void 0,
|
|
2437
2437
|
messages: [{ role: "user", content: [{ type: "text", text: input }] }],
|
|
2438
2438
|
deferredTools: []
|
|
2439
2439
|
};
|
|
@@ -2545,7 +2545,7 @@ ${summary}` }] });
|
|
|
2545
2545
|
}
|
|
2546
2546
|
}
|
|
2547
2547
|
return {
|
|
2548
|
-
system,
|
|
2548
|
+
instructions: system,
|
|
2549
2549
|
messages: ensureUserFirst(mergeConsecutiveMessages(messages)),
|
|
2550
2550
|
deferredTools
|
|
2551
2551
|
};
|
|
@@ -2611,7 +2611,7 @@ function translateResponsesRequest(body, npm, metadata, options = {}) {
|
|
|
2611
2611
|
effectiveTools = lifted.tools;
|
|
2612
2612
|
}
|
|
2613
2613
|
ingestToolDefs(effectiveTools, toolContext);
|
|
2614
|
-
const { system, messages, deferredTools } = translateResponsesInput(effectiveInput, body.instructions, npm, toolContext);
|
|
2614
|
+
const { instructions: system, messages, deferredTools } = translateResponsesInput(effectiveInput, body.instructions, npm, toolContext);
|
|
2615
2615
|
const effort = body.reasoning?.effort;
|
|
2616
2616
|
const providerOptions = deepMergeProviderOptions(
|
|
2617
2617
|
thinkingProviderOptions(npm),
|
|
@@ -2619,7 +2619,7 @@ function translateResponsesRequest(body, npm, metadata, options = {}) {
|
|
|
2619
2619
|
);
|
|
2620
2620
|
const tools = translateResponsesTools([...effectiveTools, ...deferredTools], options);
|
|
2621
2621
|
return {
|
|
2622
|
-
system,
|
|
2622
|
+
instructions: system,
|
|
2623
2623
|
messages,
|
|
2624
2624
|
tools,
|
|
2625
2625
|
toolContext,
|
|
@@ -3110,7 +3110,7 @@ async function streamResponsesResponse(model, params, modelId, write, onDone, on
|
|
|
3110
3110
|
});
|
|
3111
3111
|
const watchedStream = (async function* () {
|
|
3112
3112
|
try {
|
|
3113
|
-
for await (const part of result.
|
|
3113
|
+
for await (const part of result.stream) {
|
|
3114
3114
|
clearTimeout(idleTimer);
|
|
3115
3115
|
idleTimer = setTimeout(
|
|
3116
3116
|
() => abort.abort(new Error(`no data received from provider for ${Math.round(idleTimeoutMs / 1e3)}s`)),
|
|
@@ -3859,7 +3859,7 @@ function isExternalToolContinuation(input) {
|
|
|
3859
3859
|
return Array.isArray(input) && input.length > 0 && input.every(isExternalToolOutputItem);
|
|
3860
3860
|
}
|
|
3861
3861
|
function estimateCodexRequestChars(params) {
|
|
3862
|
-
let chars = (params.
|
|
3862
|
+
let chars = (params.instructions ?? "").length;
|
|
3863
3863
|
for (const msg of params.messages) {
|
|
3864
3864
|
if (Array.isArray(msg.content)) {
|
|
3865
3865
|
for (const part of msg.content) {
|
|
@@ -4069,9 +4069,9 @@ function applyExternalCodexRuntimeIdentity(params, route) {
|
|
|
4069
4069
|
].join("\n");
|
|
4070
4070
|
return {
|
|
4071
4071
|
...params,
|
|
4072
|
-
|
|
4072
|
+
instructions: params.instructions?.trim() ? `${identity}
|
|
4073
4073
|
|
|
4074
|
-
${params.
|
|
4074
|
+
${params.instructions}` : identity
|
|
4075
4075
|
};
|
|
4076
4076
|
}
|
|
4077
4077
|
async function startCodexProxy(routes, options = {}) {
|
|
@@ -7285,8 +7285,8 @@ function translateGeminiRequest(body, options = {}) {
|
|
|
7285
7285
|
}
|
|
7286
7286
|
} else if (p15.inlineData) {
|
|
7287
7287
|
parts.push({
|
|
7288
|
-
type: "
|
|
7289
|
-
|
|
7288
|
+
type: "file",
|
|
7289
|
+
data: Buffer.from(p15.inlineData.data, "base64"),
|
|
7290
7290
|
mediaType: p15.inlineData.mimeType
|
|
7291
7291
|
});
|
|
7292
7292
|
} else if (p15.functionCall) {
|
|
@@ -7359,7 +7359,7 @@ function translateGeminiRequest(body, options = {}) {
|
|
|
7359
7359
|
responseFormat = { type: "json" };
|
|
7360
7360
|
}
|
|
7361
7361
|
return {
|
|
7362
|
-
system,
|
|
7362
|
+
instructions: system,
|
|
7363
7363
|
messages: mergedMessages,
|
|
7364
7364
|
tools: tools && Object.keys(tools).length > 0 ? tools : void 0,
|
|
7365
7365
|
toolChoice,
|
|
@@ -7523,13 +7523,13 @@ ${JSON.stringify(params, null, 2)}`);
|
|
|
7523
7523
|
"Connection": "keep-alive"
|
|
7524
7524
|
});
|
|
7525
7525
|
plog("Starting streamText...");
|
|
7526
|
-
const {
|
|
7526
|
+
const { stream } = streamText2({
|
|
7527
7527
|
model: languageModel,
|
|
7528
7528
|
...params
|
|
7529
7529
|
});
|
|
7530
7530
|
const toolCallBuffers = /* @__PURE__ */ new Map();
|
|
7531
7531
|
let isThinking = false;
|
|
7532
|
-
for await (const part of
|
|
7532
|
+
for await (const part of stream) {
|
|
7533
7533
|
const p15 = part;
|
|
7534
7534
|
plog(`Stream chunk type: ${p15.type}`);
|
|
7535
7535
|
if (isThinking && (p15.type === "tool-input-start" || p15.type === "tool-call" || p15.type === "finish")) {
|
|
@@ -8220,7 +8220,7 @@ function summarizeSdkRequestForTrace(request2) {
|
|
|
8220
8220
|
return { role: message.role, parts };
|
|
8221
8221
|
});
|
|
8222
8222
|
return {
|
|
8223
|
-
systemChars: request2.
|
|
8223
|
+
systemChars: request2.instructions?.length ?? 0,
|
|
8224
8224
|
messages,
|
|
8225
8225
|
toolNames: Object.keys(request2.tools ?? {}),
|
|
8226
8226
|
...request2.toolChoice ? { toolChoice: request2.toolChoice } : {}
|
|
@@ -8347,9 +8347,9 @@ function translateRequest(ccReq, options = {}) {
|
|
|
8347
8347
|
} else if (part.inlineData) {
|
|
8348
8348
|
if (isSupportedImage(part)) {
|
|
8349
8349
|
contentParts.push({
|
|
8350
|
-
type: "
|
|
8351
|
-
|
|
8352
|
-
|
|
8350
|
+
type: "file",
|
|
8351
|
+
data: Buffer.from(part.inlineData.data, "base64"),
|
|
8352
|
+
mediaType: part.inlineData.mimeType
|
|
8353
8353
|
});
|
|
8354
8354
|
} else {
|
|
8355
8355
|
contentParts.push({ type: "text", text: OMITTED_VOICE_TEXT });
|
|
@@ -8400,7 +8400,7 @@ function translateRequest(ccReq, options = {}) {
|
|
|
8400
8400
|
toolChoice = "auto";
|
|
8401
8401
|
}
|
|
8402
8402
|
return {
|
|
8403
|
-
system,
|
|
8403
|
+
instructions: system,
|
|
8404
8404
|
messages: sdkMessages,
|
|
8405
8405
|
tools,
|
|
8406
8406
|
toolChoice,
|
|
@@ -10032,9 +10032,9 @@ async function handleStreamingRequest(res, route, providerOptions, parsed, log14
|
|
|
10032
10032
|
);
|
|
10033
10033
|
const langModel = await createRouteLanguageModel(route);
|
|
10034
10034
|
const responseId = `relay-${Date.now()}`;
|
|
10035
|
-
const {
|
|
10035
|
+
const { stream } = streamText3({
|
|
10036
10036
|
model: langModel,
|
|
10037
|
-
|
|
10037
|
+
instructions: sdkParams.instructions,
|
|
10038
10038
|
messages: sdkParams.messages,
|
|
10039
10039
|
tools: sdkParams.tools,
|
|
10040
10040
|
toolChoice: sdkParams.toolChoice,
|
|
@@ -10084,7 +10084,7 @@ async function handleStreamingRequest(res, route, providerOptions, parsed, log14
|
|
|
10084
10084
|
textBuffer = "";
|
|
10085
10085
|
bufferingJsonText = false;
|
|
10086
10086
|
};
|
|
10087
|
-
for await (const part of
|
|
10087
|
+
for await (const part of stream) {
|
|
10088
10088
|
const p15 = part;
|
|
10089
10089
|
if (p15.type === "reasoning-delta" || p15.type === "reasoning") {
|
|
10090
10090
|
const reasoning = reasoningDeltaText(p15);
|
|
@@ -10212,7 +10212,7 @@ async function handleUnaryRequest(res, route, providerOptions, parsed, log14, op
|
|
|
10212
10212
|
const responseId = `relay-${Date.now()}`;
|
|
10213
10213
|
const result = await generateText3({
|
|
10214
10214
|
model: langModel,
|
|
10215
|
-
|
|
10215
|
+
instructions: sdkParams.instructions,
|
|
10216
10216
|
messages: sdkParams.messages,
|
|
10217
10217
|
tools: sdkParams.tools,
|
|
10218
10218
|
toolChoice: sdkParams.toolChoice,
|
|
@@ -15846,7 +15846,7 @@ Options:
|
|
|
15846
15846
|
--trace Write debug logs under ~/.relay-ai/logs/`);
|
|
15847
15847
|
return 0;
|
|
15848
15848
|
}
|
|
15849
|
-
const { runUiCommand } = await import("./ui-command-
|
|
15849
|
+
const { runUiCommand } = await import("./ui-command-RJVKDGGG.js");
|
|
15850
15850
|
return runUiCommand({ trace: parsed.trace, serverMode: parsed.uiServerMode });
|
|
15851
15851
|
}
|
|
15852
15852
|
if (parsed.command === "models") {
|