Przeglądaj źródła

Merge pull request #86 from RooVetGit/fix-openai-compatible-streaming

Add 'Include stream options' checkbox for OpenAI-compatible providers
Matt Rubens 1 rok temu
rodzic
commit
6ee118e0a2

+ 9 - 3
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 ?? true) {
+			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) {

+ 2 - 0
src/shared/api.ts

@@ -34,6 +34,8 @@ export interface ApiHandlerOptions {
 	openAiNativeApiKey?: string
 	azureApiVersion?: string
 	openRouterUseMiddleOutTransform?: boolean
+	includeStreamOptions?: boolean
+	setAzureApiVersion?: boolean
 }
 
 export type ApiConfiguration = ApiHandlerOptions & {

+ 18 - 0
webview-ui/src/components/settings/ApiOptions.tsx

@@ -445,6 +445,24 @@ const ApiOptions = ({ showModelOptions, apiErrorMessage, modelIdErrorMessage }:
 						placeholder={"Enter Model ID..."}>
 						<span style={{ fontWeight: 500 }}>Model ID</span>
 					</VSCodeTextField>
+					<div style={{ display: 'flex', alignItems: 'center' }}>
+						<VSCodeCheckbox
+							checked={apiConfiguration?.includeStreamOptions ?? true}
+							onChange={(e: any) => {
+								const isChecked = e.target.checked
+								setApiConfiguration({
+									...apiConfiguration,
+									includeStreamOptions: isChecked
+								})
+							}}>
+							Include stream options
+						</VSCodeCheckbox>
+						<span
+							className="codicon codicon-info"
+							title="Stream options are for { include_usage: true }. Some providers may not support this option."
+							style={{ marginLeft: '5px', cursor: 'help' }}
+						></span>
+					</div>
 					<VSCodeCheckbox
 						checked={azureApiVersionSelected}
 						onChange={(e: any) => {