From 156cab8cbc1a7bd386d2d34abe988398f4cf524e Mon Sep 17 00:00:00 2001 From: Matt Rubens Date: Thu, 12 Dec 2024 08:52:08 -0500 Subject: [PATCH 1/2] Fix: Add checkbox for stream_options in OpenAI-compatible providers --- src/api/providers/openai.ts | 12 +++++++++--- src/shared/api.ts | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/api/providers/openai.ts b/src/api/providers/openai.ts index f1c576b..7af1dab 100644 --- a/src/api/providers/openai.ts +++ b/src/api/providers/openai.ts @@ -32,18 +32,24 @@ export class OpenAiHandler implements ApiHandler { } } + // Include stream_options for OpenAI Compatible providers if the checkbox is checked async *createMessage(systemPrompt: string, messages: Anthropic.Messages.MessageParam[]): ApiStream { const openAiMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [ { role: "system", content: systemPrompt }, ...convertToOpenAiMessages(messages), ] - const stream = await this.client.chat.completions.create({ + const requestOptions: OpenAI.Chat.ChatCompletionCreateParams = { model: this.options.openAiModelId ?? "", messages: openAiMessages, temperature: 0, stream: true, - stream_options: { include_usage: true }, - }) + } + + if (this.options.includeStreamOptions) { + requestOptions.stream_options = { include_usage: true } + } + + const stream = await this.client.chat.completions.create(requestOptions) for await (const chunk of stream) { const delta = chunk.choices[0]?.delta if (delta?.content) { diff --git a/src/shared/api.ts b/src/shared/api.ts index 94d0b18..545158d 100644 --- a/src/shared/api.ts +++ b/src/shared/api.ts @@ -34,6 +34,7 @@ export interface ApiHandlerOptions { openAiNativeApiKey?: string azureApiVersion?: string openRouterUseMiddleOutTransform?: boolean + includeStreamOptions?: boolean } export type ApiConfiguration = ApiHandlerOptions & { From 2cfd76c305b480b59e8bc0b1becd6c1397e65e19 Mon Sep 17 00:00:00 2001 From: Matt Rubens Date: Thu, 12 Dec 2024 09:14:06 -0500 Subject: [PATCH 2/2] Add 'Include stream options' checkbox for OpenAI-compatible providers --- src/api/providers/openai.ts | 2 +- src/shared/api.ts | 1 + .../src/components/settings/ApiOptions.tsx | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/api/providers/openai.ts b/src/api/providers/openai.ts index 7af1dab..71308ed 100644 --- a/src/api/providers/openai.ts +++ b/src/api/providers/openai.ts @@ -45,7 +45,7 @@ export class OpenAiHandler implements ApiHandler { stream: true, } - if (this.options.includeStreamOptions) { + if (this.options.includeStreamOptions ?? true) { requestOptions.stream_options = { include_usage: true } } diff --git a/src/shared/api.ts b/src/shared/api.ts index 545158d..b161d95 100644 --- a/src/shared/api.ts +++ b/src/shared/api.ts @@ -35,6 +35,7 @@ export interface ApiHandlerOptions { azureApiVersion?: string openRouterUseMiddleOutTransform?: boolean includeStreamOptions?: boolean + setAzureApiVersion?: boolean } export type ApiConfiguration = ApiHandlerOptions & { diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx index 06839c5..1e21999 100644 --- a/webview-ui/src/components/settings/ApiOptions.tsx +++ b/webview-ui/src/components/settings/ApiOptions.tsx @@ -445,6 +445,24 @@ const ApiOptions = ({ showModelOptions, apiErrorMessage, modelIdErrorMessage }: placeholder={"Enter Model ID..."}> Model ID +
+ { + const isChecked = e.target.checked + setApiConfiguration({ + ...apiConfiguration, + includeStreamOptions: isChecked + }) + }}> + Include stream options + + +
{