diff --git a/pkg/providers/openai_responses_common/responses_common.go b/pkg/providers/openai_responses_common/responses_common.go index 3d4946627..3e3f5c3ff 100644 --- a/pkg/providers/openai_responses_common/responses_common.go +++ b/pkg/providers/openai_responses_common/responses_common.go @@ -359,7 +359,7 @@ func parseResponseEnvelope(apiResp *responseEnvelope) (*protocoltypes.LLMRespons if len(toolCalls) > 0 { finishReason = "tool_calls" } else if status == "incomplete" { - finishReason = "length" + finishReason = "truncated" if apiResp.IncompleteDetails != nil && apiResp.IncompleteDetails.Reason != "" && apiResp.IncompleteDetails.Reason != "max_output_tokens" { @@ -438,7 +438,7 @@ func parseResponse(apiResp *responses.Response) *protocoltypes.LLMResponse { } switch apiResp.Status { case responses.ResponseStatusIncomplete: - finishReason = "length" + finishReason = "truncated" case responses.ResponseStatusFailed: finishReason = "error" case responses.ResponseStatusCancelled: diff --git a/pkg/providers/openai_responses_common/responses_common_test.go b/pkg/providers/openai_responses_common/responses_common_test.go index 3997bbc37..7a6d0168f 100644 --- a/pkg/providers/openai_responses_common/responses_common_test.go +++ b/pkg/providers/openai_responses_common/responses_common_test.go @@ -474,6 +474,32 @@ func TestParseResponseBody_IncompleteStatus(t *testing.T) { } } +func TestParseResponseBody_IncompleteStatusUsesTruncatedForMaxOutputTokens(t *testing.T) { + body := strings.NewReader(`{ + "id": "resp_inc_truncated", + "object": "response", + "status": "incomplete", + "output": [ + { + "type": "message", + "content": [{"type": "output_text", "text": "partial"}] + } + ], + "incomplete_details": {"reason": "max_output_tokens"}, + "usage": {"input_tokens": 5, "output_tokens": 2, "total_tokens": 7, + "input_tokens_details": {"cached_tokens": 0}, + "output_tokens_details": {"reasoning_tokens": 0}} + }`) + + result, err := ParseResponseBody(body) + if err != nil { + t.Fatalf("error: %v", err) + } + if result.FinishReason != "truncated" { + t.Fatalf("FinishReason = %q, want %q", result.FinishReason, "truncated") + } +} + func TestParseResponseBody_FailedStatus(t *testing.T) { body := strings.NewReader(`{ "id": "resp_fail",