writes the JSON to files in /tmp/

This commit is contained in:
Jeff Carr 2025-08-29 15:39:56 -05:00
parent 148201b5c5
commit d021fcadad
1 changed files with 16 additions and 0 deletions

View File

@ -4,6 +4,8 @@
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
import * as fs from 'fs';
import * as path from 'path';
import { import {
Content, Content,
CountTokensParameters, CountTokensParameters,
@ -37,6 +39,8 @@ interface StructuredError {
* A decorator that wraps a ContentGenerator to add logging to API calls. * A decorator that wraps a ContentGenerator to add logging to API calls.
*/ */
export class LoggingContentGenerator implements ContentGenerator { export class LoggingContentGenerator implements ContentGenerator {
private requestCounter = 1;
constructor( constructor(
private readonly wrapped: ContentGenerator, private readonly wrapped: ContentGenerator,
private readonly config: Config, private readonly config: Config,
@ -108,6 +112,12 @@ export class LoggingContentGenerator implements ContentGenerator {
const startTime = Date.now(); const startTime = Date.now();
this.logApiRequest(toContents(req.contents), req.model, userPromptId); this.logApiRequest(toContents(req.contents), req.model, userPromptId);
try { try {
const sessionId = this.config.getSessionId();
const fileName = `${sessionId}.gemini-api-request.${this.requestCounter}.json`;
const filePath = path.join('/tmp', fileName);
const jsonPayload = JSON.stringify(req, null, 2);
fs.writeFileSync(filePath, jsonPayload);
this.requestCounter++;
const response = await this.wrapped.generateContent(req, userPromptId); const response = await this.wrapped.generateContent(req, userPromptId);
const durationMs = Date.now() - startTime; const durationMs = Date.now() - startTime;
this._logApiResponse( this._logApiResponse(
@ -131,6 +141,12 @@ export class LoggingContentGenerator implements ContentGenerator {
const startTime = Date.now(); const startTime = Date.now();
this.logApiRequest(toContents(req.contents), req.model, userPromptId); this.logApiRequest(toContents(req.contents), req.model, userPromptId);
const sessionId = this.config.getSessionId();
const fileName = `${sessionId}.gemini-api-request.${this.requestCounter}.json`;
const filePath = path.join('/tmp', fileName);
const jsonPayload = JSON.stringify(req, null, 2);
fs.writeFileSync(filePath, jsonPayload);
this.requestCounter++;
let stream: AsyncGenerator<GenerateContentResponse>; let stream: AsyncGenerator<GenerateContentResponse>;
try { try {
stream = await this.wrapped.generateContentStream(req, userPromptId); stream = await this.wrapped.generateContentStream(req, userPromptId);