fix: preserve tool_use stop reason from being overwritten by finishReason
When a tool call is made, stopReason is set to 'tool_use'. However, when finishReason: STOP arrives later, it was overwriting stopReason back to 'end_turn', breaking multi-turn tool conversations in clients like OpenCode. Fix: Initialize stopReason to null and only set it from finishReason if not already set. This ensures tool_use is preserved once detected. Fixes #96 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -27,7 +27,7 @@ export async function* streamSSEResponse(response, originalModel) {
|
|||||||
let inputTokens = 0;
|
let inputTokens = 0;
|
||||||
let outputTokens = 0;
|
let outputTokens = 0;
|
||||||
let cacheReadTokens = 0;
|
let cacheReadTokens = 0;
|
||||||
let stopReason = 'end_turn';
|
let stopReason = null;
|
||||||
|
|
||||||
const reader = response.body.getReader();
|
const reader = response.body.getReader();
|
||||||
const decoder = new TextDecoder();
|
const decoder = new TextDecoder();
|
||||||
@@ -212,8 +212,8 @@ export async function* streamSSEResponse(response, originalModel) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check finish reason
|
// Check finish reason (only if not already set by tool_use)
|
||||||
if (firstCandidate.finishReason) {
|
if (firstCandidate.finishReason && !stopReason) {
|
||||||
if (firstCandidate.finishReason === 'MAX_TOKENS') {
|
if (firstCandidate.finishReason === 'MAX_TOKENS') {
|
||||||
stopReason = 'max_tokens';
|
stopReason = 'max_tokens';
|
||||||
} else if (firstCandidate.finishReason === 'STOP') {
|
} else if (firstCandidate.finishReason === 'STOP') {
|
||||||
@@ -248,7 +248,7 @@ export async function* streamSSEResponse(response, originalModel) {
|
|||||||
// Emit message_delta and message_stop
|
// Emit message_delta and message_stop
|
||||||
yield {
|
yield {
|
||||||
type: 'message_delta',
|
type: 'message_delta',
|
||||||
delta: { stop_reason: stopReason, stop_sequence: null },
|
delta: { stop_reason: stopReason || 'end_turn', stop_sequence: null },
|
||||||
usage: {
|
usage: {
|
||||||
output_tokens: outputTokens,
|
output_tokens: outputTokens,
|
||||||
cache_read_input_tokens: cacheReadTokens,
|
cache_read_input_tokens: cacheReadTokens,
|
||||||
|
|||||||
Reference in New Issue
Block a user