@quatcode/agent 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/models.js CHANGED
@@ -1,9 +1,15 @@
1
- import { createProviderFromEnv } from "@quatcode/core";
1
+ import { AnthropicProvider, OpenAiCompatProvider, ProviderError } from "@quatcode/core";
2
+ import { VERSION } from "./version.js";
3
+ /**
4
+ * Curated catalogs: only the most popular and newest models per provider.
5
+ * The full provider list is intentionally not shown — keep each list short.
6
+ */
2
7
  export const PROVIDERS = [
3
8
  {
4
9
  id: "anthropic",
5
10
  label: "anthropic",
6
11
  envKey: "ANTHROPIC_API_KEY",
12
+ kind: "anthropic",
7
13
  defaultModel: "claude-sonnet-5-5",
8
14
  models: [
9
15
  { id: "claude-opus-5-5", label: "Opus 5.5" },
@@ -11,13 +17,6 @@ export const PROVIDERS = [
11
17
  { id: "claude-fable-5-1", label: "Fable 5.1" },
12
18
  { id: "claude-opus-5", label: "Opus 5" },
13
19
  { id: "claude-sonnet-5", label: "Sonnet 5" },
14
- { id: "claude-fable-5", label: "Fable 5" },
15
- { id: "claude-opus-4-8", label: "Opus 4.8" },
16
- { id: "claude-opus-4-7", label: "Opus 4.7" },
17
- { id: "claude-opus-4-6", label: "Opus 4.6" },
18
- { id: "claude-sonnet-4-6", label: "Sonnet 4.6" },
19
- { id: "claude-opus-4-5", label: "Opus 4.5" },
20
- { id: "claude-sonnet-4-5", label: "Sonnet 4.5" },
21
20
  { id: "claude-haiku-4-5", label: "Haiku 4.5" },
22
21
  ],
23
22
  },
@@ -25,31 +24,24 @@ export const PROVIDERS = [
25
24
  id: "openai",
26
25
  label: "openai",
27
26
  envKey: "OPENAI_API_KEY",
27
+ kind: "openai",
28
+ baseUrl: "https://api.openai.com/v1",
28
29
  defaultModel: "gpt-6.1-sol",
29
30
  models: [
30
31
  { id: "gpt-6-astra", label: "GPT-6 Astra" },
31
32
  { id: "gpt-6.1-sol", label: "GPT-6.1 Sol" },
32
33
  { id: "gpt-6-luna", label: "GPT-6 Luna" },
33
34
  { id: "gpt-5.6-sol", label: "GPT-5.6 Sol" },
34
- { id: "gpt-5.6-terra", label: "GPT-5.6 Terra" },
35
- { id: "gpt-5.6-luna", label: "GPT-5.6 Luna" },
36
- { id: "gpt-5.5", label: "GPT-5.5" },
37
- { id: "gpt-5.4-mini", label: "GPT-5.4 Mini" },
38
- { id: "gpt-5.4-nano", label: "GPT-5.4 Nano" },
39
35
  { id: "gpt-5.3-codex", label: "GPT-5.3 Codex" },
40
- { id: "gpt-5.2", label: "GPT-5.2" },
41
- { id: "gpt-5.1", label: "GPT-5.1" },
42
- { id: "gpt-5", label: "GPT-5" },
43
- { id: "gpt-5-mini", label: "GPT-5 Mini" },
44
- { id: "gpt-5-nano", label: "GPT-5 Nano" },
45
- { id: "gpt-oss-120b", label: "GPT-OSS 120B" },
46
- { id: "gpt-oss-20b", label: "GPT-OSS 20B" },
36
+ { id: "gpt-5.4-mini", label: "GPT-5.4 Mini" },
47
37
  ],
48
38
  },
49
39
  {
50
40
  id: "gemini",
51
41
  label: "gemini",
52
42
  envKey: "GEMINI_API_KEY",
43
+ kind: "openai",
44
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
53
45
  defaultModel: "gemini-3.6-flash",
54
46
  models: [
55
47
  { id: "gemini-3.6-pro", label: "Gemini 3.6 Pro" },
@@ -57,11 +49,229 @@ export const PROVIDERS = [
57
49
  { id: "gemini-3.5-pro", label: "Gemini 3.5 Pro" },
58
50
  { id: "gemini-3.5-flash", label: "Gemini 3.5 Flash" },
59
51
  { id: "gemini-2.5-pro", label: "Gemini 2.5 Pro" },
60
- { id: "gemini-2.5-flash", label: "Gemini 2.5 Flash" },
52
+ ],
53
+ },
54
+ {
55
+ id: "deepseek",
56
+ label: "deepseek",
57
+ envKey: "DEEPSEEK_API_KEY",
58
+ kind: "openai",
59
+ baseUrl: "https://api.deepseek.com/v1",
60
+ defaultModel: "deepseek-v4",
61
+ models: [
62
+ { id: "deepseek-v4", label: "DeepSeek V4" },
63
+ { id: "deepseek-r2", label: "DeepSeek R2" },
64
+ { id: "deepseek-v3.2", label: "DeepSeek V3.2" },
65
+ ],
66
+ },
67
+ {
68
+ id: "xai",
69
+ label: "xai",
70
+ envKey: "XAI_API_KEY",
71
+ kind: "openai",
72
+ baseUrl: "https://api.x.ai/v1",
73
+ defaultModel: "grok-5",
74
+ models: [
75
+ { id: "grok-5", label: "Grok 5" },
76
+ { id: "grok-5-mini", label: "Grok 5 Mini" },
77
+ { id: "grok-4.1", label: "Grok 4.1" },
78
+ ],
79
+ },
80
+ {
81
+ id: "mistral",
82
+ label: "mistral",
83
+ envKey: "MISTRAL_API_KEY",
84
+ kind: "openai",
85
+ baseUrl: "https://api.mistral.ai/v1",
86
+ defaultModel: "mistral-large-4",
87
+ models: [
88
+ { id: "mistral-large-4", label: "Mistral Large 4" },
89
+ { id: "mistral-large-3", label: "Mistral Large 3" },
90
+ { id: "magistral-medium-2", label: "Magistral Medium 2" },
91
+ { id: "codestral-2", label: "Codestral 2" },
92
+ ],
93
+ },
94
+ {
95
+ id: "qwen",
96
+ label: "qwen",
97
+ envKey: "QWEN_API_KEY",
98
+ kind: "openai",
99
+ baseUrl: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
100
+ defaultModel: "qwen3.8-max",
101
+ models: [
102
+ { id: "qwen3.8-max", label: "Qwen3.8 Max" },
103
+ { id: "qwen3.8-flash", label: "Qwen3.8 Flash" },
104
+ { id: "qwen3.7-max", label: "Qwen3.7 Max" },
105
+ { id: "qwen3.7-plus", label: "Qwen3.7 Plus" },
106
+ { id: "qwen3-coder-plus", label: "Qwen3 Coder Plus" },
107
+ ],
108
+ },
109
+ {
110
+ id: "moonshot",
111
+ label: "moonshot · kimi",
112
+ envKey: "MOONSHOT_API_KEY",
113
+ kind: "openai",
114
+ baseUrl: "https://api.moonshot.ai/v1",
115
+ defaultModel: "kimi-k3",
116
+ models: [
117
+ { id: "kimi-k3", label: "Kimi K3" },
118
+ { id: "kimi-k2.7-code", label: "Kimi K2.7 Code" },
119
+ { id: "kimi-k2.6", label: "Kimi K2.6" },
120
+ { id: "kimi-k2.5", label: "Kimi K2.5" },
121
+ ],
122
+ },
123
+ {
124
+ id: "zai",
125
+ label: "z.ai · glm",
126
+ envKey: "ZAI_API_KEY",
127
+ kind: "openai",
128
+ baseUrl: "https://api.z.ai/api/paas/v4",
129
+ defaultModel: "glm-5.3",
130
+ models: [
131
+ { id: "glm-5.3", label: "GLM 5.3" },
132
+ { id: "glm-5.3-flash", label: "GLM 5.3 Flash" },
133
+ { id: "glm-5.2", label: "GLM 5.2" },
134
+ { id: "glm-5.1", label: "GLM 5.1" },
135
+ ],
136
+ },
137
+ {
138
+ id: "minimax",
139
+ label: "minimax",
140
+ envKey: "MINIMAX_API_KEY",
141
+ kind: "openai",
142
+ baseUrl: "https://api.minimax.io/v1",
143
+ defaultModel: "minimax-m3",
144
+ models: [
145
+ { id: "minimax-m3", label: "MiniMax M3" },
146
+ { id: "minimax-m2.7", label: "MiniMax M2.7" },
147
+ { id: "minimax-m2.5", label: "MiniMax M2.5" },
148
+ ],
149
+ },
150
+ {
151
+ id: "groq",
152
+ label: "groq",
153
+ envKey: "GROQ_API_KEY",
154
+ kind: "openai",
155
+ baseUrl: "https://api.groq.com/openai/v1",
156
+ defaultModel: "llama-4-maverick",
157
+ models: [
158
+ { id: "llama-4-maverick", label: "Llama 4 Maverick" },
159
+ { id: "llama-4-scout", label: "Llama 4 Scout" },
160
+ { id: "qwen3-32b", label: "Qwen3 32B" },
161
+ { id: "kimi-k2-instruct", label: "Kimi K2 Instruct" },
162
+ { id: "gpt-oss-120b", label: "GPT-OSS 120B" },
163
+ ],
164
+ },
165
+ {
166
+ id: "perplexity",
167
+ label: "perplexity",
168
+ envKey: "PERPLEXITY_API_KEY",
169
+ kind: "openai",
170
+ baseUrl: "https://api.perplexity.ai",
171
+ defaultModel: "sonar-pro",
172
+ models: [
173
+ { id: "sonar-pro", label: "Sonar Pro" },
174
+ { id: "sonar-reasoning-pro", label: "Sonar Reasoning Pro" },
175
+ { id: "sonar-deep-research", label: "Sonar Deep Research" },
176
+ { id: "sonar", label: "Sonar" },
177
+ ],
178
+ },
179
+ {
180
+ id: "openrouter",
181
+ label: "openrouter",
182
+ envKey: "OPENROUTER_API_KEY",
183
+ kind: "openai",
184
+ baseUrl: "https://openrouter.ai/api/v1",
185
+ defaultModel: "anthropic/claude-sonnet-5-5",
186
+ models: [
187
+ { id: "anthropic/claude-opus-5-5", label: "Claude Opus 5.5" },
188
+ { id: "anthropic/claude-sonnet-5-5", label: "Claude Sonnet 5.5" },
189
+ { id: "openai/gpt-6.1-sol", label: "GPT-6.1 Sol" },
190
+ { id: "google/gemini-3.8-flash", label: "Gemini 3.8 Flash" },
191
+ { id: "deepseek/deepseek-v4-pro", label: "DeepSeek V4 Pro" },
192
+ { id: "x-ai/grok-4.7", label: "Grok 4.7" },
193
+ ],
194
+ },
195
+ {
196
+ id: "zen",
197
+ label: "opencode zen",
198
+ envKey: "OPENCODE_API_KEY",
199
+ kind: "openai",
200
+ baseUrl: "https://opencode.ai/zen/v1",
201
+ defaultModel: "gpt-6.1-sol",
202
+ models: [
203
+ { id: "gpt-6.1-sol", label: "GPT-6.1 Sol" },
204
+ { id: "gpt-6-astra", label: "GPT-6 Astra" },
205
+ { id: "gpt-6-luna", label: "GPT-6 Luna" },
206
+ { id: "claude-opus-5-5", label: "Claude Opus 5.5" },
207
+ { id: "claude-sonnet-5-5", label: "Claude Sonnet 5.5" },
208
+ { id: "gemini-3.8-flash", label: "Gemini 3.8 Flash" },
209
+ { id: "grok-4.7", label: "Grok 4.7" },
210
+ { id: "deepseek-v4.1-flash", label: "DeepSeek V4.1 Flash" },
211
+ { id: "deepseek-v4-pro", label: "DeepSeek V4 Pro" },
212
+ { id: "qwen3.8-max", label: "Qwen3.8 Max" },
213
+ { id: "kimi-k3", label: "Kimi K3" },
214
+ { id: "glm-5.3", label: "GLM 5.3" },
215
+ { id: "minimax-m3", label: "MiniMax M3" },
216
+ { id: "mistral-large-4", label: "Mistral Large 4" },
217
+ ],
218
+ },
219
+ {
220
+ id: "go",
221
+ label: "opencode go",
222
+ envKey: "OPENCODE_GO_API_KEY",
223
+ kind: "openai",
224
+ baseUrl: "https://opencode.ai/zen/go/v1",
225
+ defaultModel: "deepseek-v4.1-flash",
226
+ models: [
227
+ { id: "deepseek-v4.1-flash", label: "DeepSeek V4.1 Flash" },
228
+ { id: "deepseek-v4-pro", label: "DeepSeek V4 Pro" },
229
+ { id: "glm-5.3", label: "GLM 5.3" },
230
+ { id: "glm-5.3-flash", label: "GLM 5.3 Flash" },
231
+ { id: "kimi-k3", label: "Kimi K3" },
232
+ { id: "kimi-k2.7-code", label: "Kimi K2.7 Code" },
233
+ { id: "minimax-m3", label: "MiniMax M3" },
234
+ { id: "qwen3.8-max", label: "Qwen3.8 Max" },
235
+ { id: "qwen3.8-flash", label: "Qwen3.8 Flash" },
236
+ { id: "longcat-2.0", label: "LongCat 2.0" },
61
237
  ],
62
238
  },
63
239
  ];
64
- export const CUSTOM_MODEL = "__custom__";
240
+ export const ADD_PROVIDER = "__add_provider__";
241
+ const registry = [...PROVIDERS];
242
+ export function allProviders() {
243
+ return [...registry];
244
+ }
245
+ export function registerCustomProvider(meta) {
246
+ const existing = registry.findIndex((provider) => provider.id === meta.id);
247
+ const entry = { ...meta, custom: true };
248
+ if (existing === -1)
249
+ registry.push(entry);
250
+ else
251
+ registry[existing] = entry;
252
+ }
253
+ export function removeCustomProvider(id) {
254
+ const index = registry.findIndex((provider) => provider.id === id && provider.custom);
255
+ if (index === -1)
256
+ return false;
257
+ registry.splice(index, 1);
258
+ return true;
259
+ }
260
+ export function providerMeta(id) {
261
+ return registry.find((provider) => provider.id === id);
262
+ }
263
+ export function providerSlug(name) {
264
+ return (name
265
+ .trim()
266
+ .toLowerCase()
267
+ .replace(/[^a-z0-9]+/g, "-")
268
+ .replace(/^-+|-+$/g, "")
269
+ .slice(0, 32) || "provider");
270
+ }
271
+ export function providerEnvKey(id) {
272
+ const upper = providerSlug(id).toUpperCase().replace(/-/g, "_");
273
+ return `QUATCODE_${upper}_API_KEY`;
274
+ }
65
275
  export function effortsForModel(model) {
66
276
  const id = model.toLowerCase();
67
277
  if (/^claude-/.test(id)) {
@@ -75,11 +285,20 @@ export function effortsForModel(model) {
75
285
  if (/^(o[1-9]|gpt-oss)/.test(id))
76
286
  return ["low", "medium", "high"];
77
287
  if (/^gemini-[23]/.test(id))
288
+ return ["low", "high"];
289
+ if (/^deepseek-v4\.[1-9]/.test(id))
290
+ return ["low", "high", "max"];
291
+ if (/^(deepseek-v4|deepseek-r2)/.test(id))
292
+ return ["low", "medium", "high"];
293
+ if (/(^|\/)(x-ai\/)?grok-[45]/.test(id))
78
294
  return ["low", "medium", "high"];
79
295
  return null;
80
296
  }
81
- export function providerMeta(id) {
82
- return PROVIDERS.find((provider) => provider.id === id);
297
+ export function providerHasModel(id, model) {
298
+ const meta = providerMeta(id);
299
+ if (!meta)
300
+ return false;
301
+ return meta.defaultModel === model || meta.models.some((entry) => entry.id === model);
83
302
  }
84
303
  export function resolveProviderForModel(model) {
85
304
  const id = model.toLowerCase();
@@ -95,6 +314,25 @@ export function resolveProviderForModel(model) {
95
314
  id.startsWith("o4")) {
96
315
  return "openai";
97
316
  }
317
+ if (id.startsWith("deepseek"))
318
+ return "deepseek";
319
+ if (id.startsWith("grok"))
320
+ return "xai";
321
+ if (id.startsWith("mistral") || id.startsWith("magistral") || id.startsWith("codestral")) {
322
+ return "mistral";
323
+ }
324
+ if (id.startsWith("qwen"))
325
+ return "qwen";
326
+ if (id.startsWith("kimi"))
327
+ return "moonshot";
328
+ if (id.startsWith("glm"))
329
+ return "zai";
330
+ if (id.startsWith("minimax"))
331
+ return "minimax";
332
+ if (id.startsWith("sonar"))
333
+ return "perplexity";
334
+ if (id.includes("/"))
335
+ return "openrouter";
98
336
  return null;
99
337
  }
100
338
  export function defaultModelFor(id) {
@@ -107,82 +345,192 @@ export function hasKey(id, env = process.env) {
107
345
  export function keyEnvFor(id) {
108
346
  return providerMeta(id)?.envKey ?? "ANTHROPIC_API_KEY";
109
347
  }
110
- export function buildProvider(id, model) {
111
- return createProviderFromEnv({ provider: id, defaultModel: model });
348
+ export function providerBaseUrl(id) {
349
+ const meta = providerMeta(id);
350
+ if (!meta)
351
+ return undefined;
352
+ const override = process.env[`${meta.envKey.replace(/_API_KEY$/, "")}_BASE_URL`];
353
+ return (override ?? meta.baseUrl)?.replace(/\/$/, "");
112
354
  }
113
- export async function fetchProviderModels(id, env = process.env) {
114
- try {
115
- if (id === "anthropic")
116
- return await fetchAnthropicModels(env);
117
- if (id === "openai")
118
- return await fetchOpenAiModels(env);
119
- return await fetchGeminiModels(env);
355
+ export function providerHeaders(id, sessionId) {
356
+ const headers = {
357
+ "user-agent": `quatcode-agent/${VERSION}`,
358
+ };
359
+ if (sessionId && (id === "go" || id === "zen")) {
360
+ headers["x-opencode-session"] = sessionId;
120
361
  }
121
- catch {
122
- return [];
362
+ return headers;
363
+ }
364
+ export function buildProvider(id, model, options = {}) {
365
+ const meta = providerMeta(id);
366
+ if (!meta)
367
+ throw new ProviderError(`Unknown provider: ${id}`);
368
+ const apiKey = process.env[meta.envKey];
369
+ if (meta.kind === "anthropic") {
370
+ return new AnthropicProvider({
371
+ apiKey,
372
+ baseUrl: process.env.ANTHROPIC_BASE_URL,
373
+ defaultModel: model,
374
+ });
123
375
  }
376
+ if (!apiKey) {
377
+ throw new ProviderError(`${meta.envKey} is missing.`);
378
+ }
379
+ return new OpenAiCompatProvider(id, {
380
+ apiKey,
381
+ baseUrl: providerBaseUrl(id),
382
+ defaultModel: model,
383
+ headers: providerHeaders(id, options.sessionId),
384
+ });
124
385
  }
125
- async function fetchAnthropicModels(env) {
126
- const key = env.ANTHROPIC_API_KEY;
127
- if (!key)
128
- return [];
129
- const base = (env.ANTHROPIC_BASE_URL ?? "https://api.anthropic.com").replace(/\/$/, "");
130
- const res = await fetch(`${base}/v1/models?limit=100`, {
131
- headers: { "x-api-key": key, "anthropic-version": "2023-06-01" },
132
- signal: AbortSignal.timeout(7000),
386
+ const MODEL_SKIP_RE = /(embedding|whisper|tts|dall-e|moderation|image|audio|realtime|transcribe|search|sora|guard|computer|deep-research|vision-preview)/i;
387
+ const MODEL_POPULARITY = [
388
+ { re: /gpt-6|gpt-5\.6|gpt-5\.5/, score: 60 },
389
+ { re: /gpt-5(?!\.)/, score: 50 },
390
+ { re: /o[34](?:-|$)/, score: 45 },
391
+ { re: /claude-(opus|sonnet)-(5|4-5)/, score: 60 },
392
+ { re: /claude-(opus|sonnet)/, score: 50 },
393
+ { re: /claude-haiku-4-5/, score: 35 },
394
+ { re: /gemini-3/, score: 55 },
395
+ { re: /gemini-2\.5/, score: 45 },
396
+ { re: /deepseek-(v4|r2)/, score: 55 },
397
+ { re: /deepseek/, score: 45 },
398
+ { re: /grok-5/, score: 55 },
399
+ { re: /grok/, score: 45 },
400
+ { re: /(mistral-large|mistral-medium|magistral|codestral)/, score: 50 },
401
+ { re: /llama-4|llama-3\.3|llama-3\.1/, score: 45 },
402
+ { re: /qwen3\.8/, score: 55 },
403
+ { re: /qwen3|qwen2\.5/, score: 45 },
404
+ { re: /kimi-k3/, score: 55 },
405
+ { re: /kimi-k2\.7/, score: 52 },
406
+ { re: /(kimi|moonshot)/, score: 40 },
407
+ { re: /glm-5\.3/, score: 55 },
408
+ { re: /glm-5/, score: 50 },
409
+ { re: /glm-4/, score: 40 },
410
+ { re: /minimax-m3/, score: 50 },
411
+ { re: /minimax/, score: 40 },
412
+ { re: /grok-4\.[5-9]/, score: 50 },
413
+ { re: /sonar/, score: 40 },
414
+ { re: /gpt-oss/, score: 40 },
415
+ { re: /phi-4/, score: 35 },
416
+ { re: /command-(a|r)/, score: 35 },
417
+ ];
418
+ const MODEL_PENALTY = [
419
+ {
420
+ re: /(preview|experimental|beta|alpha|test|deprecated|legacy|snapshot|-rc\d|-dev\b)/i,
421
+ score: -25,
422
+ },
423
+ { re: /-(mini|nano|micro|small)$/, score: -8 },
424
+ ];
425
+ export function modelPopularity(id) {
426
+ const lower = id.toLowerCase();
427
+ let score = 0;
428
+ for (const entry of MODEL_POPULARITY) {
429
+ if (entry.re.test(lower))
430
+ score = Math.max(score, entry.score);
431
+ }
432
+ for (const entry of MODEL_PENALTY) {
433
+ if (entry.re.test(lower))
434
+ score += entry.score;
435
+ }
436
+ return score;
437
+ }
438
+ export function curateModelEntries(entries, limit = 14) {
439
+ const seen = new Set();
440
+ const chat = entries.filter((entry) => {
441
+ if (typeof entry.id !== "string" || !entry.id.trim())
442
+ return false;
443
+ if (MODEL_SKIP_RE.test(entry.id))
444
+ return false;
445
+ if (seen.has(entry.id))
446
+ return false;
447
+ seen.add(entry.id);
448
+ return true;
133
449
  });
134
- if (!res.ok)
135
- return [];
136
- const body = (await res.json());
137
- return (body.data ?? [])
138
- .filter((model) => typeof model.id === "string")
139
- .map((model) => ({ id: model.id, label: model.display_name }));
450
+ chat.sort((a, b) => {
451
+ const scoreA = modelPopularity(a.id);
452
+ const scoreB = modelPopularity(b.id);
453
+ if (scoreA !== scoreB)
454
+ return scoreB - scoreA;
455
+ const createdA = a.created ?? 0;
456
+ const createdB = b.created ?? 0;
457
+ if (createdA !== createdB)
458
+ return createdB - createdA;
459
+ return 0;
460
+ });
461
+ return chat.slice(0, limit).map((entry) => ({ id: entry.id, label: entry.label }));
140
462
  }
141
- const OPENAI_CHAT_RE = /^(gpt-|chatgpt-|codex-|o[1-9])/i;
142
- const OPENAI_SKIP_RE = /(embedding|whisper|tts|dall-e|moderation|image|audio|realtime|transcribe|search|sora|guard|computer|deep-research)/i;
143
- async function fetchOpenAiModels(env) {
144
- const key = env.OPENAI_API_KEY;
145
- if (!key)
463
+ const KNOWN_API_BASES = {
464
+ "opencode.ai": "https://opencode.ai/zen/v1",
465
+ "www.opencode.ai": "https://opencode.ai/zen/v1",
466
+ };
467
+ export function probeCandidates(rawBaseUrl) {
468
+ let base = rawBaseUrl.trim().replace(/\/+$/, "");
469
+ if (!base)
146
470
  return [];
147
- const base = (env.OPENAI_BASE_URL ?? "https://api.openai.com/v1").replace(/\/$/, "");
148
- const official = /api\.openai\.com/.test(base);
471
+ if (!/^https?:\/\//i.test(base))
472
+ base = `https://${base}`;
473
+ const out = [];
474
+ try {
475
+ const url = new URL(base);
476
+ const known = KNOWN_API_BASES[url.hostname.toLowerCase()];
477
+ if (known && url.pathname.replace(/\/+$/, "") === "")
478
+ out.push(known);
479
+ }
480
+ catch {
481
+ // not a URL — candidates below will fail fast
482
+ }
483
+ out.push(base);
484
+ if (!/\/v\d+$/i.test(base))
485
+ out.push(`${base}/v1`);
486
+ return [...new Set(out)];
487
+ }
488
+ async function fetchModels(base, apiKey, timeoutMs) {
149
489
  const res = await fetch(`${base}/models`, {
150
- headers: { authorization: `Bearer ${key}` },
151
- signal: AbortSignal.timeout(7000),
490
+ headers: { authorization: `Bearer ${apiKey}` },
491
+ signal: AbortSignal.timeout(timeoutMs),
152
492
  });
153
- if (!res.ok)
154
- return [];
493
+ if (res.status === 404) {
494
+ throw new ProviderError(`No /models endpoint at ${base} (404). Use the API base URL, not the website.`, { status: 404 });
495
+ }
496
+ if (res.status === 401 || res.status === 403) {
497
+ throw new ProviderError(`The provider rejected the key (${res.status}).`, {
498
+ status: res.status,
499
+ });
500
+ }
501
+ if (!res.ok) {
502
+ throw new ProviderError(`Request failed: ${res.status} ${res.statusText}.`, {
503
+ status: res.status,
504
+ });
505
+ }
155
506
  const body = (await res.json());
156
- return (body.data ?? [])
507
+ const list = (body.data ?? [])
157
508
  .filter((model) => typeof model.id === "string")
158
- .filter((model) => {
159
- const id = model.id;
160
- if (!official)
161
- return true;
162
- return OPENAI_CHAT_RE.test(id) && !OPENAI_SKIP_RE.test(id);
163
- })
164
- .sort((a, b) => (b.created ?? 0) - (a.created ?? 0))
165
- .map((model) => ({ id: model.id }));
166
- }
167
- async function fetchGeminiModels(env) {
168
- const key = env.GEMINI_API_KEY;
169
- if (!key)
170
- return [];
171
- const base = (env.GEMINI_BASE_URL ?? "https://generativelanguage.googleapis.com/v1beta/openai")
172
- .replace(/\/openai\/?$/, "")
173
- .replace(/\/$/, "");
174
- const res = await fetch(`${base}/v1beta/models?key=${encodeURIComponent(key)}&pageSize=200`, {
175
- signal: AbortSignal.timeout(7000),
176
- });
177
- if (!res.ok)
178
- return [];
179
- const body = (await res.json());
180
- return (body.models ?? [])
181
- .filter((model) => (model.supportedGenerationMethods ?? []).includes("generateContent"))
182
- .filter((model) => typeof model.name === "string")
183
- .map((model) => ({
184
- id: model.name.replace(/^models\//, ""),
185
- label: model.displayName,
186
- }));
509
+ .map((model) => ({ id: model.id, created: model.created }));
510
+ return curateModelEntries(list);
511
+ }
512
+ export async function probeProviderModels(rawBaseUrl, apiKey, timeoutMs = 12000) {
513
+ const candidates = probeCandidates(rawBaseUrl);
514
+ if (candidates.length === 0) {
515
+ throw new ProviderError("Base URL is required.");
516
+ }
517
+ let lastError = null;
518
+ for (const base of candidates) {
519
+ try {
520
+ const models = await fetchModels(base, apiKey, timeoutMs);
521
+ if (models.length > 0)
522
+ return { baseUrl: base, models };
523
+ lastError = new ProviderError(`No chat models found at ${base}.`);
524
+ }
525
+ catch (err) {
526
+ lastError =
527
+ err instanceof ProviderError
528
+ ? err
529
+ : new ProviderError(err instanceof Error ? err.message : String(err));
530
+ if (lastError.status === 401 || lastError.status === 403)
531
+ break;
532
+ }
533
+ }
534
+ throw lastError ?? new ProviderError("Could not reach the provider.");
187
535
  }
188
536
  //# sourceMappingURL=models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}