From aee86854c63cffc37b1450bf83397c051399341f Mon Sep 17 00:00:00 2001 From: dawn <90008@klbr.net> Date: Sun, 28 Jun 2026 02:12:00 +0300 Subject: [PATCH] fix finish reason thingy --- antigravity-bridge/src/routes.rs | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/antigravity-bridge/src/routes.rs b/antigravity-bridge/src/routes.rs index 8d05487..d602e5a 100644 --- a/antigravity-bridge/src/routes.rs +++ b/antigravity-bridge/src/routes.rs @@ -407,6 +407,25 @@ pub async fn chat_completions( if let Some(candidates) = response_part["candidates"].as_array() { if !candidates.is_empty() { let candidate = &candidates[0]; + + let mut finish_reason = serde_json::Value::Null; + if let Some(fr) = candidate.get("finishReason").and_then(|v| v.as_str()) { + let mapped = match fr { + "STOP" => { + if tool_call_index > 0 { + "tool_calls" + } else { + "stop" + } + } + "MAX_TOKENS" => "length", + "SAFETY" => "content_filter", + "RECITATION" => "content_filter", + _ => "stop", + }; + finish_reason = serde_json::json!(mapped); + } + if let Some(parts) = candidate["content"]["parts"].as_array() { for part in parts { let text = part["text"].as_str().unwrap_or(""); @@ -499,6 +518,21 @@ pub async fn chat_completions( } } } + + if finish_reason != serde_json::Value::Null { + let out = serde_json::json!({ + "id": request_id, + "object": "chat.completion.chunk", + "created": SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs(), + "model": model_id, + "choices": [{ + "index": 0, + "delta": {}, + "finish_reason": finish_reason + }] + }); + yield Ok(Event::default().data(out.to_string())); + } } } } -- 2.51.2