fix: fail on dropped manifest catalog rows · openclaw/openclaw@a3ad272
shakkernerd
·
2026-04-28
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -217,4 +217,27 @@ describe("provider-catalog-shared manifest provider configs", () => {
|
217 | 217 | }), |
218 | 218 | ).toThrow("unsupported runtime input document"); |
219 | 219 | }); |
| 220 | + |
| 221 | +it("rejects manifest catalogs when normalization drops a model row", () => { |
| 222 | +expect(() => |
| 223 | +buildManifestModelProviderConfig({ |
| 224 | +providerId: "example", |
| 225 | +catalog: { |
| 226 | +baseUrl: "https://api.example.test/v1", |
| 227 | +models: [ |
| 228 | +{ |
| 229 | +id: "valid", |
| 230 | +contextWindow: 1024, |
| 231 | +maxTokens: 1024, |
| 232 | +}, |
| 233 | +{ |
| 234 | +id: "", |
| 235 | +contextWindow: 1024, |
| 236 | +maxTokens: 1024, |
| 237 | +}, |
| 238 | +], |
| 239 | +}, |
| 240 | +}), |
| 241 | +).toThrow("providers.example.models"); |
| 242 | +}); |
220 | 243 | }); |
| Original file line number | Diff line number | Diff line change |
|---|
@@ -32,6 +32,14 @@ export type ConfiguredProviderCatalogEntry = {
|
32 | 32 | input?: Array<"text" | "image" | "audio" | "video" | "document">; |
33 | 33 | }; |
34 | 34 | |
| 35 | +function countRawManifestCatalogModels(catalog: unknown): number | undefined { |
| 36 | +if (!catalog || typeof catalog !== "object") { |
| 37 | +return undefined; |
| 38 | +} |
| 39 | +const models = (catalog as { models?: unknown }).models; |
| 40 | +return Array.isArray(models) ? models.length : undefined; |
| 41 | +} |
| 42 | + |
35 | 43 | function cloneManifestCatalogTieredCost( |
36 | 44 | tier: ModelCatalogTieredCost, |
37 | 45 | ): NonNullable<ModelDefinitionConfig["cost"]["tieredPricing"]>[number] { |
@@ -102,6 +110,10 @@ export function buildManifestModelProviderConfig(params: {
|
102 | 110 | if (!catalog.baseUrl) { |
103 | 111 | throw new Error(`Missing modelCatalog.providers.${params.providerId}.baseUrl`); |
104 | 112 | } |
| 113 | +const rawModelCount = countRawManifestCatalogModels(params.catalog); |
| 114 | +if (rawModelCount !== undefined && rawModelCount !== catalog.models.length) { |
| 115 | +throw new Error(`Invalid modelCatalog.providers.${params.providerId}.models`); |
| 116 | +} |
105 | 117 | return { |
106 | 118 | baseUrl: catalog.baseUrl, |
107 | 119 | ...(catalog.api ? { api: catalog.api } : {}), |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。