saros-proxy 0.5.7 → 0.6.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 +55 -8
- package/dist/cli/daemon.js +27 -14
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/help.d.ts +7 -0
- package/dist/cli/help.js +26 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/opencode-config.js +20 -7
- package/dist/cli/opencode-config.js.map +1 -1
- package/dist/constants.d.ts +13 -0
- package/dist/constants.js +21 -11
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +133 -5
- package/dist/index.js.map +1 -1
- package/dist/model-probe.d.ts +48 -0
- package/dist/model-probe.js +234 -0
- package/dist/model-probe.js.map +1 -0
- package/dist/models-fetcher.d.ts +42 -0
- package/dist/models-fetcher.js +137 -0
- package/dist/models-fetcher.js.map +1 -0
- package/dist/models-sync.d.ts +104 -0
- package/dist/models-sync.js +413 -0
- package/dist/models-sync.js.map +1 -0
- package/dist/probe-cache.d.ts +58 -0
- package/dist/probe-cache.js +99 -0
- package/dist/probe-cache.js.map +1 -0
- package/dist/proxy.d.ts +0 -10
- package/dist/proxy.js +4 -33
- package/dist/proxy.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* model-probe.ts — Probe runner for model capabilities.
|
|
3
|
+
*
|
|
4
|
+
* Sends real API requests through the proxy's own endpoint (http://127.0.0.1:{port})
|
|
5
|
+
* to test liveness, reasoning, and tool-calling capabilities of each model.
|
|
6
|
+
*
|
|
7
|
+
* Uses the user's own proxy so results reflect the actual configured setup,
|
|
8
|
+
* including circuit breaker and key failover behavior.
|
|
9
|
+
*/
|
|
10
|
+
import { type ProxyConfig } from './config.js';
|
|
11
|
+
import { type ProbeResult, type ModelProbe } from './probe-cache.js';
|
|
12
|
+
/**
|
|
13
|
+
* Probe a model for basic liveness.
|
|
14
|
+
*
|
|
15
|
+
* Sends a simple prompt and expects a text response.
|
|
16
|
+
* Returns 'ok' if the response contains non-empty content.
|
|
17
|
+
*/
|
|
18
|
+
export declare function probeLiveness(config: ProxyConfig, modelId: string): Promise<ProbeResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Probe a model for reasoning (thinking) capability.
|
|
21
|
+
*
|
|
22
|
+
* Sends a prompt with `reasoning_effort: "low"` via `extra_body`.
|
|
23
|
+
* Models that do not support reasoning return 400/422 with an error
|
|
24
|
+
* referencing "reasoning_effort" — those are marked 'unsupported'.
|
|
25
|
+
* Models that accept the parameter but return reasoning_content are 'ok'.
|
|
26
|
+
*/
|
|
27
|
+
export declare function probeReasoning(config: ProxyConfig, modelId: string): Promise<ProbeResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Probe a model for tool-calling (function calling) capability.
|
|
30
|
+
*
|
|
31
|
+
* Sends a request with a tool definition and expects `tool_calls` in the response.
|
|
32
|
+
* Models that do not support tools return 400/422 with "tools" in the error.
|
|
33
|
+
*/
|
|
34
|
+
export declare function probeToolCalling(config: ProxyConfig, modelId: string): Promise<ProbeResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Run all three probes (liveness, reasoning, tool calling) for a single model.
|
|
37
|
+
*
|
|
38
|
+
* All probes run concurrently via Promise.all so one failure does not block others.
|
|
39
|
+
*/
|
|
40
|
+
export declare function probeModel(config: ProxyConfig, modelId: string): Promise<ModelProbe>;
|
|
41
|
+
/**
|
|
42
|
+
* Run probeModel for every model ID in the array.
|
|
43
|
+
*
|
|
44
|
+
* Models are probed sequentially (one at a time) to avoid overwhelming the proxy.
|
|
45
|
+
* Returns results in the same order as the input array.
|
|
46
|
+
* Individual failures are captured per-model and do not halt the batch.
|
|
47
|
+
*/
|
|
48
|
+
export declare function probeAllModels(config: ProxyConfig, modelIds: string[]): Promise<ModelProbe[]>;
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* model-probe.ts — Probe runner for model capabilities.
|
|
3
|
+
*
|
|
4
|
+
* Sends real API requests through the proxy's own endpoint (http://127.0.0.1:{port})
|
|
5
|
+
* to test liveness, reasoning, and tool-calling capabilities of each model.
|
|
6
|
+
*
|
|
7
|
+
* Uses the user's own proxy so results reflect the actual configured setup,
|
|
8
|
+
* including circuit breaker and key failover behavior.
|
|
9
|
+
*/
|
|
10
|
+
import { PROBE_REQUEST_TIMEOUT_MS, PROBE_LIVENESS_PROMPT, PROBE_REASONING_PROMPT, PROBE_TOOL_CALLING_PROMPT, } from './constants.js';
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Helpers
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
/** Build the proxy base URL from config. */
|
|
15
|
+
function buildBaseURL(config) {
|
|
16
|
+
return `http://127.0.0.1:${config.port}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Perform a chat completion request through the proxy.
|
|
20
|
+
*
|
|
21
|
+
* Handles HTTP errors, 429 rate limiting, and network/timeout errors uniformly.
|
|
22
|
+
* Returns a normalized FetchResult for the probe functions to interpret.
|
|
23
|
+
*/
|
|
24
|
+
async function fetchCompletion(baseURL, body) {
|
|
25
|
+
try {
|
|
26
|
+
const response = await fetch(`${baseURL}/v1/chat/completions`, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: { 'Content-Type': 'application/json' },
|
|
29
|
+
body: JSON.stringify(body),
|
|
30
|
+
signal: AbortSignal.timeout(PROBE_REQUEST_TIMEOUT_MS),
|
|
31
|
+
});
|
|
32
|
+
// 429 is handled specially
|
|
33
|
+
if (response.status === 429) {
|
|
34
|
+
return { ok: false, status: 429 };
|
|
35
|
+
}
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
const errorText = await response.text().catch(() => '');
|
|
38
|
+
return { ok: false, status: response.status, errorText };
|
|
39
|
+
}
|
|
40
|
+
const data = (await response.json());
|
|
41
|
+
return { ok: true, status: response.status, data };
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
45
|
+
return { ok: false, status: 0, errorText: message };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// Individual probe functions
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
/**
|
|
52
|
+
* Probe a model for basic liveness.
|
|
53
|
+
*
|
|
54
|
+
* Sends a simple prompt and expects a text response.
|
|
55
|
+
* Returns 'ok' if the response contains non-empty content.
|
|
56
|
+
*/
|
|
57
|
+
export async function probeLiveness(config, modelId) {
|
|
58
|
+
const baseURL = buildBaseURL(config);
|
|
59
|
+
const result = await fetchCompletion(baseURL, {
|
|
60
|
+
model: modelId,
|
|
61
|
+
messages: [{ role: 'user', content: PROBE_LIVENESS_PROMPT }],
|
|
62
|
+
max_tokens: 10,
|
|
63
|
+
stream: false,
|
|
64
|
+
});
|
|
65
|
+
if (result.status === 429) {
|
|
66
|
+
return { status: 'rate_limited', ts: Date.now() };
|
|
67
|
+
}
|
|
68
|
+
if (!result.ok) {
|
|
69
|
+
return {
|
|
70
|
+
status: 'error',
|
|
71
|
+
ts: Date.now(),
|
|
72
|
+
details: result.status > 0
|
|
73
|
+
? result.errorText
|
|
74
|
+
? `${result.status}: ${result.errorText}`
|
|
75
|
+
: `HTTP ${result.status}`
|
|
76
|
+
: result.errorText ?? 'Unknown error',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// Verify the response contains actual content
|
|
80
|
+
const content = result.data?.choices?.[0]?.message?.content;
|
|
81
|
+
if (!content || content.trim().length === 0) {
|
|
82
|
+
return { status: 'error', ts: Date.now(), details: 'No content in response' };
|
|
83
|
+
}
|
|
84
|
+
return { status: 'ok', ts: Date.now() };
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Probe a model for reasoning (thinking) capability.
|
|
88
|
+
*
|
|
89
|
+
* Sends a prompt with `reasoning_effort: "low"` via `extra_body`.
|
|
90
|
+
* Models that do not support reasoning return 400/422 with an error
|
|
91
|
+
* referencing "reasoning_effort" — those are marked 'unsupported'.
|
|
92
|
+
* Models that accept the parameter but return reasoning_content are 'ok'.
|
|
93
|
+
*/
|
|
94
|
+
export async function probeReasoning(config, modelId) {
|
|
95
|
+
const baseURL = buildBaseURL(config);
|
|
96
|
+
const result = await fetchCompletion(baseURL, {
|
|
97
|
+
model: modelId,
|
|
98
|
+
messages: [{ role: 'user', content: PROBE_REASONING_PROMPT }],
|
|
99
|
+
max_tokens: 200,
|
|
100
|
+
stream: false,
|
|
101
|
+
extra_body: { reasoning_effort: 'low' },
|
|
102
|
+
});
|
|
103
|
+
if (result.status === 429) {
|
|
104
|
+
return { status: 'rate_limited', ts: Date.now() };
|
|
105
|
+
}
|
|
106
|
+
if (!result.ok) {
|
|
107
|
+
// 400/422 with "reasoning_effort" in the error message → unsupported
|
|
108
|
+
const errorMsg = (result.errorText ?? '').toLowerCase();
|
|
109
|
+
if ((result.status === 400 || result.status === 422) &&
|
|
110
|
+
errorMsg.includes('reasoning_effort')) {
|
|
111
|
+
return {
|
|
112
|
+
status: 'unsupported',
|
|
113
|
+
ts: Date.now(),
|
|
114
|
+
details: (result.status === 400 ? '400: ' : '422: ') + (result.errorText ?? ''),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
status: 'error',
|
|
119
|
+
ts: Date.now(),
|
|
120
|
+
details: result.status > 0
|
|
121
|
+
? result.errorText
|
|
122
|
+
? `${result.status}: ${result.errorText}`
|
|
123
|
+
: `HTTP ${result.status}`
|
|
124
|
+
: result.errorText ?? 'Unknown error',
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// Call succeeded — some models accept reasoning_effort silently
|
|
128
|
+
// even if they don't return reasoning_content. That's still 'ok'.
|
|
129
|
+
return { status: 'ok', ts: Date.now() };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Probe a model for tool-calling (function calling) capability.
|
|
133
|
+
*
|
|
134
|
+
* Sends a request with a tool definition and expects `tool_calls` in the response.
|
|
135
|
+
* Models that do not support tools return 400/422 with "tools" in the error.
|
|
136
|
+
*/
|
|
137
|
+
export async function probeToolCalling(config, modelId) {
|
|
138
|
+
const baseURL = buildBaseURL(config);
|
|
139
|
+
const result = await fetchCompletion(baseURL, {
|
|
140
|
+
model: modelId,
|
|
141
|
+
messages: [{ role: 'user', content: PROBE_TOOL_CALLING_PROMPT }],
|
|
142
|
+
max_tokens: 100,
|
|
143
|
+
stream: false,
|
|
144
|
+
tools: [
|
|
145
|
+
{
|
|
146
|
+
type: 'function',
|
|
147
|
+
function: {
|
|
148
|
+
name: 'get_weather',
|
|
149
|
+
description: 'Get current weather',
|
|
150
|
+
parameters: {
|
|
151
|
+
type: 'object',
|
|
152
|
+
properties: { city: { type: 'string' } },
|
|
153
|
+
required: ['city'],
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
tool_choice: 'auto',
|
|
159
|
+
});
|
|
160
|
+
if (result.status === 429) {
|
|
161
|
+
return { status: 'rate_limited', ts: Date.now() };
|
|
162
|
+
}
|
|
163
|
+
if (!result.ok) {
|
|
164
|
+
// 400/422 with "tools" in the error message → unsupported
|
|
165
|
+
const errorMsg = (result.errorText ?? '').toLowerCase();
|
|
166
|
+
if ((result.status === 400 || result.status === 422) &&
|
|
167
|
+
errorMsg.includes('tools')) {
|
|
168
|
+
return {
|
|
169
|
+
status: 'unsupported',
|
|
170
|
+
ts: Date.now(),
|
|
171
|
+
details: (result.status === 400 ? '400: ' : '422: ') + (result.errorText ?? ''),
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
status: 'error',
|
|
176
|
+
ts: Date.now(),
|
|
177
|
+
details: result.status > 0
|
|
178
|
+
? result.errorText
|
|
179
|
+
? `${result.status}: ${result.errorText}`
|
|
180
|
+
: `HTTP ${result.status}`
|
|
181
|
+
: result.errorText ?? 'Unknown error',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
// Verify the response contains tool_calls
|
|
185
|
+
const toolCalls = result.data?.choices?.[0]?.message?.tool_calls;
|
|
186
|
+
if (!toolCalls || toolCalls.length === 0) {
|
|
187
|
+
return { status: 'error', ts: Date.now(), details: 'No tool_calls in response' };
|
|
188
|
+
}
|
|
189
|
+
return { status: 'ok', ts: Date.now() };
|
|
190
|
+
}
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
// Composite probes
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
/**
|
|
195
|
+
* Run all three probes (liveness, reasoning, tool calling) for a single model.
|
|
196
|
+
*
|
|
197
|
+
* All probes run concurrently via Promise.all so one failure does not block others.
|
|
198
|
+
*/
|
|
199
|
+
export async function probeModel(config, modelId) {
|
|
200
|
+
const [liveness, reasoning, toolCalling] = await Promise.all([
|
|
201
|
+
probeLiveness(config, modelId),
|
|
202
|
+
probeReasoning(config, modelId),
|
|
203
|
+
probeToolCalling(config, modelId),
|
|
204
|
+
]);
|
|
205
|
+
return { modelId, liveness, reasoning, toolCalling };
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Run probeModel for every model ID in the array.
|
|
209
|
+
*
|
|
210
|
+
* Models are probed sequentially (one at a time) to avoid overwhelming the proxy.
|
|
211
|
+
* Returns results in the same order as the input array.
|
|
212
|
+
* Individual failures are captured per-model and do not halt the batch.
|
|
213
|
+
*/
|
|
214
|
+
export async function probeAllModels(config, modelIds) {
|
|
215
|
+
const results = [];
|
|
216
|
+
for (const modelId of modelIds) {
|
|
217
|
+
try {
|
|
218
|
+
const probe = await probeModel(config, modelId);
|
|
219
|
+
results.push(probe);
|
|
220
|
+
}
|
|
221
|
+
catch (err) {
|
|
222
|
+
// Catastrophic failure (shouldn't happen since probeModel catches internally)
|
|
223
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
224
|
+
results.push({
|
|
225
|
+
modelId,
|
|
226
|
+
liveness: { status: 'error', ts: Date.now(), details: message },
|
|
227
|
+
reasoning: { status: 'error', ts: Date.now(), details: message },
|
|
228
|
+
toolCalling: { status: 'error', ts: Date.now(), details: message },
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return results;
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=model-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-probe.js","sourceRoot":"","sources":["../src/model-probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* models-fetcher.ts — Fetches model list from the upstream OpenCode-Go API
|
|
3
|
+
* and serves it to clients, with fallback to hardcoded model IDs.
|
|
4
|
+
*
|
|
5
|
+
* Public API:
|
|
6
|
+
* fetchModelsFromUpstream(config) — raw fetch + validation
|
|
7
|
+
* getModelsList(config) — orchestrator with warm buffer & in-flight dedup
|
|
8
|
+
* buildFallbackResponse() — minimal fallback from OPENCODE_MODELS
|
|
9
|
+
* resetModelsFetcherState() — test helper to clear module-level state
|
|
10
|
+
*/
|
|
11
|
+
import type { ProxyConfig } from './config.js';
|
|
12
|
+
/** Reset module-level state — used by tests to get a fresh state between runs. */
|
|
13
|
+
export declare function resetModelsFetcherState(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Fetch the model list from the upstream OpenCode-Go public endpoint.
|
|
16
|
+
*
|
|
17
|
+
* GETs `${config.upstreamBaseUrl}/zen/go/v1/models` without auth.
|
|
18
|
+
* Uses a 5-second timeout via AbortSignal.
|
|
19
|
+
*
|
|
20
|
+
* @returns Parsed `{ object, data }` on success, or `null` on any error or
|
|
21
|
+
* shape mismatch. An empty data array IS valid (passthrough).
|
|
22
|
+
*/
|
|
23
|
+
export declare function fetchModelsFromUpstream(config: ProxyConfig): Promise<{
|
|
24
|
+
object: string;
|
|
25
|
+
data: unknown[];
|
|
26
|
+
} | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Build a 200 JSON Response using the hardcoded OPENCODE_MODELS list.
|
|
29
|
+
* Used when the upstream endpoint is unreachable.
|
|
30
|
+
*
|
|
31
|
+
* Each entry gets `{ id, object: 'model', created: <unix ts>, owned_by: 'saros' }`.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildFallbackResponse(): Response;
|
|
34
|
+
/**
|
|
35
|
+
* Get the model list response, with:
|
|
36
|
+
* 1. Warm buffer — cached data served for up to 60 seconds.
|
|
37
|
+
* 2. In-flight dedup — concurrent calls share a single upstream request.
|
|
38
|
+
* 3. Fallback — hardcoded models when upstream is unreachable.
|
|
39
|
+
*
|
|
40
|
+
* @returns A 200 JSON Response with upstream data or fallback models.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getModelsList(config: ProxyConfig): Promise<Response>;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* models-fetcher.ts — Fetches model list from the upstream OpenCode-Go API
|
|
3
|
+
* and serves it to clients, with fallback to hardcoded model IDs.
|
|
4
|
+
*
|
|
5
|
+
* Public API:
|
|
6
|
+
* fetchModelsFromUpstream(config) — raw fetch + validation
|
|
7
|
+
* getModelsList(config) — orchestrator with warm buffer & in-flight dedup
|
|
8
|
+
* buildFallbackResponse() — minimal fallback from OPENCODE_MODELS
|
|
9
|
+
* resetModelsFetcherState() — test helper to clear module-level state
|
|
10
|
+
*/
|
|
11
|
+
import { MODELS_FETCH_TIMEOUT_MS, MODELS_WARM_BUFFER_MS } from './constants.js';
|
|
12
|
+
import { loadModelsFromJson } from './cli/opencode-config.js';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Module-level state (hidden from callers)
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
let lastGood = null;
|
|
17
|
+
let inFlightP = null;
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Test helper
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
/** Reset module-level state — used by tests to get a fresh state between runs. */
|
|
22
|
+
export function resetModelsFetcherState() {
|
|
23
|
+
lastGood = null;
|
|
24
|
+
inFlightP = null;
|
|
25
|
+
}
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Fetch from upstream
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/**
|
|
30
|
+
* Fetch the model list from the upstream OpenCode-Go public endpoint.
|
|
31
|
+
*
|
|
32
|
+
* GETs `${config.upstreamBaseUrl}/zen/go/v1/models` without auth.
|
|
33
|
+
* Uses a 5-second timeout via AbortSignal.
|
|
34
|
+
*
|
|
35
|
+
* @returns Parsed `{ object, data }` on success, or `null` on any error or
|
|
36
|
+
* shape mismatch. An empty data array IS valid (passthrough).
|
|
37
|
+
*/
|
|
38
|
+
export async function fetchModelsFromUpstream(config) {
|
|
39
|
+
try {
|
|
40
|
+
const response = await fetch(`${config.upstreamBaseUrl}/zen/go/v1/models`, {
|
|
41
|
+
method: 'GET',
|
|
42
|
+
signal: AbortSignal.timeout(MODELS_FETCH_TIMEOUT_MS),
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok)
|
|
45
|
+
return null;
|
|
46
|
+
const text = await response.text();
|
|
47
|
+
let parsed;
|
|
48
|
+
try {
|
|
49
|
+
parsed = JSON.parse(text);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
55
|
+
return null;
|
|
56
|
+
const obj = parsed;
|
|
57
|
+
if (obj.object !== 'list')
|
|
58
|
+
return null;
|
|
59
|
+
if (!Array.isArray(obj.data))
|
|
60
|
+
return null;
|
|
61
|
+
return { object: 'list', data: obj.data };
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// Response builders
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
/**
|
|
71
|
+
* Build a 200 JSON Response from upstream-shaped data.
|
|
72
|
+
* Private helper.
|
|
73
|
+
*/
|
|
74
|
+
function buildResponse(data) {
|
|
75
|
+
return new Response(JSON.stringify(data), {
|
|
76
|
+
status: 200,
|
|
77
|
+
headers: { 'content-type': 'application/json' },
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Build a 200 JSON Response using the hardcoded OPENCODE_MODELS list.
|
|
82
|
+
* Used when the upstream endpoint is unreachable.
|
|
83
|
+
*
|
|
84
|
+
* Each entry gets `{ id, object: 'model', created: <unix ts>, owned_by: 'saros' }`.
|
|
85
|
+
*/
|
|
86
|
+
export function buildFallbackResponse() {
|
|
87
|
+
const models = loadModelsFromJson();
|
|
88
|
+
const now = Math.floor(Date.now() / 1000);
|
|
89
|
+
const data = Object.keys(models).map((id) => ({
|
|
90
|
+
id,
|
|
91
|
+
object: 'model',
|
|
92
|
+
created: now,
|
|
93
|
+
owned_by: 'saros',
|
|
94
|
+
}));
|
|
95
|
+
return new Response(JSON.stringify({ object: 'list', data }), {
|
|
96
|
+
status: 200,
|
|
97
|
+
headers: { 'content-type': 'application/json' },
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// Orchestrator
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
/**
|
|
104
|
+
* Get the model list response, with:
|
|
105
|
+
* 1. Warm buffer — cached data served for up to 60 seconds.
|
|
106
|
+
* 2. In-flight dedup — concurrent calls share a single upstream request.
|
|
107
|
+
* 3. Fallback — hardcoded models when upstream is unreachable.
|
|
108
|
+
*
|
|
109
|
+
* @returns A 200 JSON Response with upstream data or fallback models.
|
|
110
|
+
*/
|
|
111
|
+
export async function getModelsList(config) {
|
|
112
|
+
// 1. Warm buffer: serve cached response if within 60s.
|
|
113
|
+
// lastGood is intentionally NOT cleared on upstream failure — a
|
|
114
|
+
// server outage shouldn't reset the cache to nothing.
|
|
115
|
+
if (lastGood && Date.now() - lastGood.ts < MODELS_WARM_BUFFER_MS) {
|
|
116
|
+
return buildResponse(lastGood.data);
|
|
117
|
+
}
|
|
118
|
+
// 2. In-flight dedup: reuse an existing upstream request
|
|
119
|
+
if (inFlightP) {
|
|
120
|
+
const result = await inFlightP;
|
|
121
|
+
return result ? buildResponse(result) : buildFallbackResponse();
|
|
122
|
+
}
|
|
123
|
+
// 3. Start a new upstream request
|
|
124
|
+
inFlightP = fetchModelsFromUpstream(config)
|
|
125
|
+
.then((result) => {
|
|
126
|
+
if (result) {
|
|
127
|
+
lastGood = { ts: Date.now(), data: result };
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
})
|
|
131
|
+
.finally(() => {
|
|
132
|
+
inFlightP = null;
|
|
133
|
+
});
|
|
134
|
+
const result = await inFlightP;
|
|
135
|
+
return result ? buildResponse(result) : buildFallbackResponse();
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=models-fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models-fetcher.js","sourceRoot":"","sources":["../src/models-fetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* models-sync.ts — Auto-sync models from upstream to opencode.json.
|
|
3
|
+
*
|
|
4
|
+
* Tier 1 of the auto model discovery plan.
|
|
5
|
+
* Fetches upstream model IDs, diffs against opencode.json, and adds
|
|
6
|
+
* any missing models with minimal stubs.
|
|
7
|
+
*/
|
|
8
|
+
import type { ProxyConfig } from './config.js';
|
|
9
|
+
import type { OpencodeConfigResult } from './cli/opencode-config.js';
|
|
10
|
+
/**
|
|
11
|
+
* Fetch model IDs from the upstream OpenCode-Go API.
|
|
12
|
+
*
|
|
13
|
+
* Calls `getModelsList(config)` to obtain the /v1/models response,
|
|
14
|
+
* then extracts `data[].id` values.
|
|
15
|
+
*
|
|
16
|
+
* @param config — Proxy configuration
|
|
17
|
+
* @returns Array of model ID strings, or empty array on any failure
|
|
18
|
+
*/
|
|
19
|
+
export declare function fetchUpstreamModelIds(config: ProxyConfig): Promise<string[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Return model IDs from `upstream` that are NOT present in `current`.
|
|
22
|
+
*
|
|
23
|
+
* Preserves upstream order and deduplicates the result.
|
|
24
|
+
*
|
|
25
|
+
* @param current — Currently configured model IDs
|
|
26
|
+
* @param upstream — Model IDs from the upstream API
|
|
27
|
+
* @returns Missing model IDs (ordered and deduplicated)
|
|
28
|
+
*/
|
|
29
|
+
export declare function getMissingModels(current: string[], upstream: string[]): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Build a minimal model stub for use in opencode.json.
|
|
32
|
+
*
|
|
33
|
+
* Priority (first match wins):
|
|
34
|
+
* 1. models.dev metadata (if provided and found for modelId)
|
|
35
|
+
* 2. OPENCODE_MODELS bundled constants
|
|
36
|
+
* 3. Heuristic title-case of the ID with default limits
|
|
37
|
+
*
|
|
38
|
+
* @param modelId — The upstream model ID (e.g. "glm-5", "kimi-k2.7-code")
|
|
39
|
+
* @param modelsDevMetadata — Optional map from models.dev (takes precedence)
|
|
40
|
+
* @returns A stub object with `id`, `name`, `tool_call`, and `reasoning`
|
|
41
|
+
*/
|
|
42
|
+
export declare function buildMinimalStub(modelId: string, modelsDevMetadata?: Record<string, Record<string, unknown>>): Record<string, unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* Read the set of currently configured model IDs from opencode.json.
|
|
45
|
+
*
|
|
46
|
+
* Extracts the keys of `provider["saros-proxy"].models`.
|
|
47
|
+
*
|
|
48
|
+
* @param configPath — Path to opencode.json
|
|
49
|
+
* @returns Array of model ID strings, or empty array on any failure
|
|
50
|
+
*/
|
|
51
|
+
export declare function getModelsFromOpencodeConfig(configPath: string): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Add missing model stubs to the saros-proxy.models map in opencode.json.
|
|
54
|
+
*
|
|
55
|
+
* 1. Reads the config file.
|
|
56
|
+
* 2. Ensures `saros-proxy` provider exists.
|
|
57
|
+
* 3. Creates a `.backup` copy.
|
|
58
|
+
* 4. Merges `buildMinimalStub(id)` for each missing ID.
|
|
59
|
+
* 5. Writes the updated JSON.
|
|
60
|
+
* 6. Validates the written file — restores from backup on failure.
|
|
61
|
+
*
|
|
62
|
+
* @param configPath — Path to opencode.json
|
|
63
|
+
* @param missingIds — Model IDs to add
|
|
64
|
+
* @param modelsDevMetadata — Optional models.dev metadata (passed to buildMinimalStub)
|
|
65
|
+
* @returns Result with success status and optional error message
|
|
66
|
+
*/
|
|
67
|
+
export declare function addMissingModelsToOpencodeConfig(configPath: string, missingIds: string[], modelsDevMetadata?: Record<string, Record<string, unknown>>): OpencodeConfigResult;
|
|
68
|
+
/**
|
|
69
|
+
* Orchestrator: sync opencode.json models with upstream.
|
|
70
|
+
*
|
|
71
|
+
* Flow:
|
|
72
|
+
* fetchModelsDevMetadata()
|
|
73
|
+
* → fetchUpstreamModelIds(config)
|
|
74
|
+
* → getModelsFromOpencodeConfig(configPath)
|
|
75
|
+
* → getMissingModels(current, upstream)
|
|
76
|
+
* → addMissingModelsToOpencodeConfig(configPath, missing, devMetadata)
|
|
77
|
+
*
|
|
78
|
+
* @param config — Proxy configuration for upstream fetch
|
|
79
|
+
* @param configPath — Path to opencode.json (defaults to platform default)
|
|
80
|
+
* @returns Result with success status and optional error message
|
|
81
|
+
*/
|
|
82
|
+
export declare function syncOpencodeModelsWithUpstream(config: ProxyConfig, configPath?: string): Promise<OpencodeConfigResult>;
|
|
83
|
+
/**
|
|
84
|
+
* Extract the opencode-go provider's models from a models.dev API response.
|
|
85
|
+
*
|
|
86
|
+
* Pure function — callers handle JSON parsing and error recovery.
|
|
87
|
+
*
|
|
88
|
+
* @param parsed — Parsed models.dev JSON object (result of `JSON.parse`)
|
|
89
|
+
* @returns Model ID → metadata map, or empty object if provider not found
|
|
90
|
+
*/
|
|
91
|
+
export declare function extractOpencodeGoModels(parsed: Record<string, unknown>): Record<string, Record<string, unknown>>;
|
|
92
|
+
/**
|
|
93
|
+
* Fetch and cache models.dev metadata for opencode-go models.
|
|
94
|
+
*
|
|
95
|
+
* Caches in memory with TTL. Never throws — returns null on any failure.
|
|
96
|
+
* Skips in-flight deduplication (YAGNI — single orchestrator path).
|
|
97
|
+
*
|
|
98
|
+
* @returns Model ID → metadata map, null on failure, empty on missing provider
|
|
99
|
+
*/
|
|
100
|
+
export declare function fetchModelsDevMetadata(): Promise<Record<string, Record<string, unknown>> | null>;
|
|
101
|
+
/**
|
|
102
|
+
* Clear the models.dev in-memory cache (test helper).
|
|
103
|
+
*/
|
|
104
|
+
export declare function resetModelsDevCacheState(): void;
|