Skip to content

fix: correct finishReason in Google streaming#109

Merged
suhaibbinyounis merged 2 commits into
mainfrom
fix/100-google-streaming-finish-reason
May 10, 2026
Merged

fix: correct finishReason in Google streaming#109
suhaibbinyounis merged 2 commits into
mainfrom
fix/100-google-streaming-finish-reason

Conversation

@suhaibbinyounis

Copy link
Copy Markdown
Owner

Fixes #100

Copilot AI review requested due to automatic review settings May 10, 2026 06:44

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the API gateway’s streaming behavior to better match upstream provider specs—most notably Google’s streamGenerateContent finish semantics—while also adjusting several streaming-related concerns (cancellation, error mapping, token counting) across endpoints.

Changes:

  • Google streaming: stop emitting finishReason: 'STOP' on every chunk and instead emit the stop reason only at the end of the stream.
  • OpenAI-compatible streaming: add early request cancellation on client disconnect, map LanguageModelError to more appropriate HTTP statuses, and reuse token counts for usage + logging.
  • Internal refactors: ensure CancellationTokenSource instances are disposed; align WebSocket enablement default with configuration schema.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/CopilotApiGateway.ts
parts: [{ text: textValue }]
},
finishReason: 'STOP',
finishReason: null,
Comment thread src/CopilotApiGateway.ts
Comment on lines 2961 to 2967
} catch (error) {
const errorChunk = {
error: {
message: error instanceof Error ? error.message : 'Unknown error',
type: 'server_error'
type: error instanceof ApiError ? error.type : 'server_error',
code: error instanceof ApiError ? error.code : undefined
}
Comment thread src/CopilotApiGateway.ts
Comment on lines +2747 to +2753
// Create CTS early so client-disconnect cancels the model request (#98)
const cts = new vscode.CancellationTokenSource();
req.on('close', () => {
cts.cancel();
this.logInfo(`[OpenAI] Client disconnected, cancelling request ${logRequestId || ''}`);
});

@suhaibbinyounis suhaibbinyounis merged commit e75e27c into main May 10, 2026
5 checks passed
@suhaibbinyounis suhaibbinyounis deleted the fix/100-google-streaming-finish-reason branch May 10, 2026 06:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: Google streaming sets finishReason: 'STOP' on every chunk instead of only the last

2 participants