@@ -14,6 +14,7 @@ class GeminiProvider implements Provider {
1414 private systemMessage ?: string ;
1515 private responseFormat ! : 'stream' | 'json' ;
1616 private messageParser ?: ( messages : Message [ ] ) => GeminiProviderMessage [ ] ;
17+ private debug : boolean = false ;
1718
1819 /**
1920 * Sets default values for the provider based on given configuration. Configuration guide here:
@@ -27,6 +28,7 @@ class GeminiProvider implements Provider {
2728 this . systemMessage = config . systemMessage ;
2829 this . responseFormat = config . responseFormat ?? 'stream' ;
2930 this . messageParser = config . messageParser ;
31+ this . debug = config . debug ?? false ;
3032 this . headers = {
3133 'Content-Type' : 'application/json' ,
3234 Accept : this . responseFormat === 'stream' ? 'text/event-stream' : 'application/json' ,
@@ -52,6 +54,20 @@ class GeminiProvider implements Provider {
5254 * @param messages messages to include in the request
5355 */
5456 public async * sendMessages ( messages : Message [ ] ) : AsyncGenerator < string > {
57+ if ( this . debug ) {
58+ const sanitizedEndpoint = this . endpoint . replace ( / \? k e y = ( [ ^ & ] + ) / , '?key=[REDACTED]' ) ;
59+ // Headers in Gemini usually don't contain sensitive info like 'Authorization'
60+ // as the API key is in the URL, but we'll keep a general sanitization pattern.
61+ const sanitizedHeaders = { ...this . headers } ;
62+ // If any sensitive header were to be added in the future, it should be removed here.
63+ // delete sanitizedHeaders['Some-Sensitive-Header'];
64+ console . log ( '[GeminiProvider] Request:' , {
65+ method : this . method ,
66+ endpoint : sanitizedEndpoint ,
67+ headers : sanitizedHeaders ,
68+ body : this . constructBodyWithMessages ( messages ) ,
69+ } ) ;
70+ }
5571 const res = await fetch ( this . endpoint , {
5672 method : this . method ,
5773 headers : this . headers as HeadersInit ,
0 commit comments