From b4b534b54444b35cb0318998847ab9b30d9a306b Mon Sep 17 00:00:00 2001 From: leex279 Date: Sun, 9 Nov 2025 00:06:43 +0100 Subject: [PATCH] Add comprehensive API response validation in discoverModels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enhanced validation to catch malformed responses early: - Validate total_count is non-negative number - Verify total_count matches embedding_models.length - Validate first model has required fields (id, provider, dimensions) - Check dimensions are positive numbers - Validate provider names are from expected set - Provide specific error messages for each validation failure Prevents caching invalid data and provides better debugging information. Addresses CodeRabbit nitpick comment on PR #852 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../src/services/openrouterService.ts | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/archon-ui-main/src/services/openrouterService.ts b/archon-ui-main/src/services/openrouterService.ts index 083aa7b0..71cc94c3 100644 --- a/archon-ui-main/src/services/openrouterService.ts +++ b/archon-ui-main/src/services/openrouterService.ts @@ -183,7 +183,40 @@ class OpenRouterService { // Validate response structure if (!data.embedding_models || !Array.isArray(data.embedding_models)) { - throw new Error("Invalid response structure from OpenRouter API"); + throw new Error("Invalid response structure: missing or invalid embedding_models array"); + } + + if (typeof data.total_count !== "number" || data.total_count < 0) { + throw new Error("Invalid response structure: total_count must be a non-negative number"); + } + + if (data.total_count !== data.embedding_models.length) { + throw new Error( + `Response structure mismatch: total_count (${data.total_count}) does not match embedding_models length (${data.embedding_models.length})`, + ); + } + + // Validate at least one model has required fields + if (data.embedding_models.length > 0) { + const firstModel = data.embedding_models[0]; + if ( + !firstModel.id || + typeof firstModel.id !== "string" || + !firstModel.provider || + typeof firstModel.provider !== "string" || + typeof firstModel.dimensions !== "number" || + firstModel.dimensions <= 0 + ) { + throw new Error( + "Invalid model structure: models must have id (string), provider (string), and positive dimensions", + ); + } + + // Validate provider name is from expected set + const validProviders = ["openai", "google", "qwen", "mistralai"]; + if (!validProviders.includes(firstModel.provider)) { + throw new Error(`Invalid provider name: ${firstModel.provider}`); + } } // Cache the successful response