Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/providers/GeminiProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class GeminiProvider implements Provider {
private systemMessage?: string;
private responseFormat!: 'stream' | 'json';
private messageParser?: (messages: Message[]) => GeminiProviderMessage[];
private debug: boolean = false;

/**
* Sets default values for the provider based on given configuration. Configuration guide here:
Expand All @@ -27,6 +28,7 @@ class GeminiProvider implements Provider {
this.systemMessage = config.systemMessage;
this.responseFormat = config.responseFormat ?? 'stream';
this.messageParser = config.messageParser;
this.debug = config.debug ?? false;
this.headers = {
'Content-Type': 'application/json',
Accept: this.responseFormat === 'stream' ? 'text/event-stream' : 'application/json',
Expand All @@ -52,6 +54,20 @@ class GeminiProvider implements Provider {
* @param messages messages to include in the request
*/
public async *sendMessages(messages: Message[]): AsyncGenerator<string> {
if (this.debug) {
const sanitizedEndpoint = this.endpoint.replace(/\?key=([^&]+)/, '?key=[REDACTED]');
// Headers in Gemini usually don't contain sensitive info like 'Authorization'
// as the API key is in the URL, but we'll keep a general sanitization pattern.
const sanitizedHeaders = { ...this.headers };
// If any sensitive header were to be added in the future, it should be removed here.
// delete sanitizedHeaders['Some-Sensitive-Header'];
console.log('[GeminiProvider] Request:', {
method: this.method,
endpoint: sanitizedEndpoint,
headers: sanitizedHeaders,
body: this.constructBodyWithMessages(messages),
});
}
const res = await fetch(this.endpoint, {
method: this.method,
headers: this.headers as HeadersInit,
Expand Down
12 changes: 12 additions & 0 deletions src/providers/OpenaiProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class OpenaiProvider implements Provider {
private systemMessage?: string;
private responseFormat!: 'stream' | 'json';
private messageParser?: (messages: Message[]) => OpenaiProviderMessage[];
private debug: boolean = false;

/**
* Sets default values for the provider based on given configuration. Configuration guide here:
Expand All @@ -27,6 +28,7 @@ class OpenaiProvider implements Provider {
this.systemMessage = config.systemMessage;
this.responseFormat = config.responseFormat ?? 'stream';
this.messageParser = config.messageParser;
this.debug = config.debug ?? false;
this.headers = {
'Content-Type': 'application/json',
Accept: this.responseFormat === 'stream' ? 'text/event-stream' : 'application/json',
Expand Down Expand Up @@ -54,6 +56,16 @@ class OpenaiProvider implements Provider {
* @param messages messages to include in the request
*/
public async *sendMessages(messages: Message[]): AsyncGenerator<string> {
if (this.debug) {
const sanitizedHeaders = { ...this.headers };
delete sanitizedHeaders['Authorization'];
console.log('[OpenaiProvider] Request:', {
method: this.method,
endpoint: this.endpoint,
headers: sanitizedHeaders,
body: this.constructBodyWithMessages(messages),
});
}
const res = await fetch(this.endpoint, {
method: this.method,
headers: this.headers as HeadersInit,
Expand Down
13 changes: 13 additions & 0 deletions src/providers/WebLlmProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class WebLlmProvider implements Provider {
private chatCompletionOptions: Record<string, unknown>;
private messageParser?: (messages: Message[]) => WebLlmProviderMessage[];
private engine?: MLCEngine;
private debug: boolean = false;

/**
* Sets default values for the provider based on given configuration. Configuration guide here:
Expand All @@ -29,6 +30,7 @@ class WebLlmProvider implements Provider {
this.messageParser = config.messageParser;
this.engineConfig = config.engineConfig ?? {};
this.chatCompletionOptions = config.chatCompletionOptions ?? {};
this.debug = config.debug ?? false;
this.createEngine();
}

Expand All @@ -52,6 +54,17 @@ class WebLlmProvider implements Provider {
await this.createEngine();
}

if (this.debug) {
console.log('[WebLlmProvider] Request:', {
model: this.model,
systemMessage: this.systemMessage,
responseFormat: this.responseFormat,
engineConfig: this.engineConfig,
chatCompletionOptions: this.chatCompletionOptions,
messages: this.constructBodyWithMessages(messages).messages, // Log messages being sent
});
}

const result = await this.engine?.chat.completions.create(this.constructBodyWithMessages(messages));
if (result && Symbol.asyncIterator in result) {
for await (const chunk of result as AsyncIterable<ChatCompletionChunk>) {
Expand Down
2 changes: 2 additions & 0 deletions src/types/provider-config/GeminiProviderConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ type DirectConfig = {
headers?: Record<string, string>;
body?: Record<string, string>;
messageParser?: (messages: Message[]) => GeminiProviderMessage[];
debug?: boolean;
};

/**
Expand All @@ -30,6 +31,7 @@ type ProxyConfig = {
headers?: Record<string, string>;
body?: Record<string, string>;
messageParser?: (messages: Message[]) => GeminiProviderMessage[];
debug?: boolean;
};

/**
Expand Down
2 changes: 2 additions & 0 deletions src/types/provider-config/OpenaiProviderConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ type DirectConfig = {
headers?: Record<string, string>;
body?: Record<string, string>;
messageParser?: (messages: Message[]) => OpenaiProviderMessage[];
debug?: boolean;
};

/**
Expand All @@ -30,6 +31,7 @@ type ProxyConfig = {
headers?: Record<string, string>;
body?: Record<string, string>;
messageParser?: (messages: Message[]) => OpenaiProviderMessage[];
debug?: boolean;
};

/**
Expand Down
1 change: 1 addition & 0 deletions src/types/provider-config/WebLlmProviderConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ type WebLlmProviderConfig = {
engineConfig?: MLCEngineConfig;
chatCompletionOptions?: Record<string, unknown>;
messageParser?: (messages: Message[]) => WebLlmProviderMessage[];
debug?: boolean;
};

export type { WebLlmProviderConfig };