From 2d12949a088b4cfae70cb93e1a75c871725451bf Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Thu, 30 Jan 2025 15:40:10 -0500 Subject: [PATCH] dev: improve user request error detection --- .../src/modules/puterai/AIChatService.js | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/backend/src/modules/puterai/AIChatService.js b/src/backend/src/modules/puterai/AIChatService.js index 40c606cd8..8d2118e36 100644 --- a/src/backend/src/modules/puterai/AIChatService.js +++ b/src/backend/src/modules/puterai/AIChatService.js @@ -407,7 +407,29 @@ class AIChatService extends BaseService { tried.push(model); error = e; - if ( e.type === 'invalid_request_error' ) { + + // Distinguishing between user errors and service errors + // is very messy because of different conventions between + // services. This is a best-effort attempt to catch user + // errors and throw them as 400s. + const is_request_error = (() => { + if ( e instanceof APIError ) { + return true; + } + if ( e.type === 'invalid_request_error' ) { + return true; + } + let some_error = e; + while ( some_error ) { + if ( some_error.type === 'invalid_request_error' ) { + return true; + } + some_error = some_error.error ?? some_error.cause; + } + return false; + })(); + + if ( is_request_error ) { throw APIError.create('error_400_from_delegate', null, { delegate: intended_service, message: e.message,