mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 21:53:00 -06:00
feat: discover models from live provider catalogs (#112412)
* feat: discover models from live provider catalogs * fix(provider-catalog): satisfy current catalog contracts * fix(deps): update fast-uri past new advisory * fix(deps): refresh fast-uri shrinkwraps * fix(openrouter): satisfy provider catalog lint * fix(agents): preserve refreshable catalog metadata * test(agents): keep catalog fallback proof within lint budget * fix(provider-catalog): honor live model contracts * fix(minimax): type discovery headers explicitly * docs(plugin-sdk): define live model discovery contract
This commit is contained in:
@@ -94,7 +94,9 @@ describe("opencode provider plugin", () => {
|
||||
"claude-sonnet-4-5",
|
||||
"claude-sonnet-4",
|
||||
"claude-haiku-4-5",
|
||||
"gemini-3.6-flash",
|
||||
"gemini-3.5-flash",
|
||||
"gemini-3.5-flash-lite",
|
||||
"gemini-3.1-pro",
|
||||
"gemini-3-flash",
|
||||
"gpt-5.6-sol",
|
||||
@@ -209,6 +211,18 @@ describe("opencode provider plugin", () => {
|
||||
api: "google-generative-ai",
|
||||
baseUrl: "https://opencode.ai/zen/v1",
|
||||
});
|
||||
expect(requireMapEntry(models, "gemini-3.6-flash")).toMatchObject({
|
||||
name: "Gemini 3.6 Flash",
|
||||
contextWindow: 1_048_576,
|
||||
maxTokens: 65_536,
|
||||
cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 },
|
||||
});
|
||||
expect(requireMapEntry(models, "gemini-3.5-flash-lite")).toMatchObject({
|
||||
name: "Gemini 3.5 Flash-Lite",
|
||||
contextWindow: 1_048_576,
|
||||
maxTokens: 65_536,
|
||||
cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 },
|
||||
});
|
||||
expect(requireMapEntry(models, "minimax-m2.7")).toMatchObject({
|
||||
api: "openai-completions",
|
||||
baseUrl: "https://opencode.ai/zen/v1",
|
||||
@@ -459,7 +473,7 @@ describe("opencode provider plugin", () => {
|
||||
throw new Error("expected OpenCode Zen static provider");
|
||||
}
|
||||
|
||||
expect(result.provider.models).toHaveLength(55);
|
||||
expect(result.provider.models).toHaveLength(57);
|
||||
expect(result.provider.models.map((model) => model.id)).toContain("claude-opus-4-8");
|
||||
expect(result.provider.models.map((model) => model.id)).toContain("claude-sonnet-5");
|
||||
expect(result.provider.models.map((model) => model.id)).toContain("glm-5.2");
|
||||
@@ -483,7 +497,7 @@ describe("opencode provider plugin", () => {
|
||||
throw new Error("expected registered OpenCode Zen static provider");
|
||||
}
|
||||
|
||||
expect(result.provider.models).toHaveLength(55);
|
||||
expect(result.provider.models).toHaveLength(57);
|
||||
expect(result.provider.models.map((model) => model.id)).toContain("claude-sonnet-5");
|
||||
expect(result.provider.models.map((model) => model.id)).toContain("gpt-5.6-sol");
|
||||
expect(result.provider.models.map((model) => model.id)).toContain("minimax-m3");
|
||||
|
||||
@@ -92,6 +92,8 @@ const MODEL_COSTS: Record<string, ModelDefinitionConfig["cost"]> = {
|
||||
],
|
||||
},
|
||||
"gemini-3.5-flash": { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 },
|
||||
"gemini-3.5-flash-lite": { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 },
|
||||
"gemini-3.6-flash": { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 },
|
||||
"gpt-5.6-luna": {
|
||||
input: 1,
|
||||
output: 6,
|
||||
@@ -204,6 +206,8 @@ const MODEL_NAMES: Record<string, string> = {
|
||||
"gemini-3-flash": "Gemini 3 Flash",
|
||||
"gemini-3.1-pro": "Gemini 3.1 Pro",
|
||||
"gemini-3.5-flash": "Gemini 3.5 Flash",
|
||||
"gemini-3.5-flash-lite": "Gemini 3.5 Flash-Lite",
|
||||
"gemini-3.6-flash": "Gemini 3.6 Flash",
|
||||
"gpt-5.6-luna": "GPT-5.6 Luna",
|
||||
"gpt-5.6-sol": "GPT-5.6 Sol",
|
||||
"gpt-5.6-terra": "GPT-5.6 Terra",
|
||||
@@ -402,7 +406,9 @@ const OPENCODE_ZEN_MODELS = [
|
||||
"claude-sonnet-4-5",
|
||||
"claude-sonnet-4",
|
||||
"claude-haiku-4-5",
|
||||
"gemini-3.6-flash",
|
||||
"gemini-3.5-flash",
|
||||
"gemini-3.5-flash-lite",
|
||||
"gemini-3.1-pro",
|
||||
"gemini-3-flash",
|
||||
"gpt-5.6-sol",
|
||||
|
||||
Reference in New Issue
Block a user