From dcb67c32a5e246f9df64a18399c6a13051db7f30 Mon Sep 17 00:00:00 2001 From: Taylor Mullen Date: Sat, 10 May 2025 14:14:57 -0700 Subject: Log server information on error. - The goal of this is to enable us to better diagnose server issues when they occur. - Added tests because why not. --- packages/server/src/core/client.ts | 45 +++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) (limited to 'packages/server/src/core') diff --git a/packages/server/src/core/client.ts b/packages/server/src/core/client.ts index 4c20c0ad..b8d47476 100644 --- a/packages/server/src/core/client.ts +++ b/packages/server/src/core/client.ts @@ -22,6 +22,7 @@ import { getCoreSystemPrompt } from './prompts.js'; import { ReadManyFilesTool } from '../tools/read-many-files.js'; import { getResponseText } from '../utils/generateContentResponseUtilities.js'; import { checkNextSpeaker } from '../utils/nextSpeakerChecker.js'; +import { reportError } from '../utils/errorReporting.js'; export class GeminiClient { private client: GoogleGenAI; @@ -87,8 +88,8 @@ export class GeminiClient { ); } } catch (error) { + // Not using reportError here as it's a startup/config phase, not a chat/generation phase error. console.error('Error reading full file context:', error); - // Optionally add an error message part to the context initialParts.push({ text: '\n--- Error reading full file context ---', }); @@ -125,7 +126,12 @@ export class GeminiClient { history, }); } catch (error) { - console.error('Error initializing Gemini chat session:', error); + await reportError( + error, + 'Error initializing Gemini chat session.', + history, + 'startChat', + ); const message = error instanceof Error ? error.message : 'Unknown error.'; throw new Error(`Failed to initialize chat: ${message}`); } @@ -185,18 +191,47 @@ export class GeminiClient { }); const text = getResponseText(result); if (!text) { - throw new Error('API returned an empty response.'); + const error = new Error( + 'API returned an empty response for generateJson.', + ); + await reportError( + error, + 'Error in generateJson: API returned an empty response.', + contents, + 'generateJson-empty-response', + ); + throw error; } try { return JSON.parse(text); } catch (parseError) { - console.error('Failed to parse JSON response:', text); + await reportError( + parseError, + 'Failed to parse JSON response from generateJson.', + { + responseTextFailedToParse: text, + originalRequestContents: contents, + }, + 'generateJson-parse', + ); throw new Error( `Failed to parse API response as JSON: ${parseError instanceof Error ? parseError.message : String(parseError)}`, ); } } catch (error) { - console.error('Error generating JSON content:', error); + // Avoid double reporting for the empty response case handled above + if ( + error instanceof Error && + error.message === 'API returned an empty response for generateJson.' + ) { + throw error; + } + await reportError( + error, + 'Error generating JSON content via API.', + contents, + 'generateJson-api', + ); const message = error instanceof Error ? error.message : 'Unknown API error.'; throw new Error(`Failed to generate JSON content: ${message}`); -- cgit v1.2.3