From a1650abe06ec775363e7a68a54529969e5dddc4c Mon Sep 17 00:00:00 2001 From: mawkone Date: Wed, 3 Jun 2026 16:10:48 -0700 Subject: [PATCH] feat(frontend): add structured gemini API request/response logging --- vibn-frontend/lib/ai/gemini-chat.ts | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/vibn-frontend/lib/ai/gemini-chat.ts b/vibn-frontend/lib/ai/gemini-chat.ts index c3387cf7..0c0b46a3 100644 --- a/vibn-frontend/lib/ai/gemini-chat.ts +++ b/vibn-frontend/lib/ai/gemini-chat.ts @@ -128,12 +128,33 @@ export async function callGeminiChat(opts: { const fns = toGeminiFunctions(opts.tools ?? []); if (fns) config.tools = fns; + console.log("\n========================================================"); + console.log("➡️ [GEMINI API REQUEST]"); + console.log("========================================================"); + console.log( + `System Prompt: ${typeof config.systemInstruction === "string" ? config.systemInstruction.slice(0, 1000) + "..." : "None"}`, + ); + console.log( + "Contents Payload:", + JSON.stringify(toGeminiContents(opts.messages), null, 2), + ); + console.log("========================================================\n"); + const response = await ai.models.generateContent({ model: GEMINI_MODEL, contents: toGeminiContents(opts.messages), config, }); + console.log("\n========================================================"); + console.log("⬅️ [GEMINI API RESPONSE]"); + console.log("========================================================"); + console.log( + "Raw Candidates:", + JSON.stringify(response.candidates, null, 2), + ); + console.log("========================================================\n"); + console.log( "[GeminiChat] Raw Response:", JSON.stringify(response, null, 2), @@ -218,6 +239,18 @@ export async function* streamGeminiChat(opts: { const fns = toGeminiFunctions(opts.tools ?? []); if (fns) config.tools = fns; + console.log("\n========================================================"); + console.log("➡️ [GEMINI STREAM REQUEST]"); + console.log("========================================================"); + console.log( + `System Prompt: ${typeof config.systemInstruction === "string" ? config.systemInstruction.slice(0, 1000) + "..." : "None"}`, + ); + console.log( + "Contents Payload:", + JSON.stringify(toGeminiContents(opts.messages), null, 2), + ); + console.log("========================================================\n"); + const streamResult = await ai.models.generateContentStream({ model: GEMINI_MODEL, contents: toGeminiContents(opts.messages),