v3.11.9: fix Antigravity — preserve functionCall/functionResponse (PR #10)

This commit is contained in:
Roman | RyzenAdvanced
2026-05-26 21:12:04 +04:00
Unverified
parent 532e7c7b05
commit f6827f6c84
6 changed files with 27 additions and 2 deletions

View File

@@ -1,5 +1,16 @@
# Changelog # Changelog
## v3.11.9 (2026-05-26)
**Antigravity Fix: Preserve functionCall/functionResponse in Gemini Sanitizer (PR #10)**
### Bug Fixes
- **Fix Antigravity multi-turn tool use**: The Gemini message sanitizer was incorrectly merging/dropping `functionCall` and `functionResponse` turns, causing Antigravity to think forever without responding. These turns are now always preserved as separate messages.
- **Merge PR #10**: `fix: preserve functionCall/functionResponse in Gemini sanitizer` (qwen-chat coder)
## v3.11.8 (2026-05-26)
## v3.11.8 (2026-05-26) ## v3.11.8 (2026-05-26)
**Vision Cache Persistence, PR #8 Merge** **Vision Cache Persistence, PR #8 Merge**

Binary file not shown.

Binary file not shown.

View File

@@ -27,6 +27,10 @@ model_catalog_json = ""
""" """
CHANGELOG = [ CHANGELOG = [
("3.11.9", "2026-05-26", [
"Fix Antigravity: preserve functionCall/functionResponse (PR #10)",
"Prevents tool responses from being dropped in multi-turn sessions",
]),
("3.11.8", "2026-05-26", [ ("3.11.8", "2026-05-26", [
"Vision cache persisted across requests (PR #8 merge)", "Vision cache persisted across requests (PR #8 merge)",
"No redundant vision API calls for same image URL", "No redundant vision API calls for same image URL",

View File

@@ -83,6 +83,10 @@ model_catalog_json = ""
""" """
CHANGELOG = [ CHANGELOG = [
("3.11.9", "2026-05-26", [
"Fix Antigravity: preserve functionCall/functionResponse in Gemini sanitizer (PR #10)",
"Prevents tool responses from being merged/dropped in multi-turn Antigravity sessions",
]),
("3.11.8", "2026-05-26", [ ("3.11.8", "2026-05-26", [
"Vision description cache persisted across requests (no redundant API calls for same image)", "Vision description cache persisted across requests (no redundant API calls for same image)",
"Merge PR #8: fix vision cache persistence across requests", "Merge PR #8: fix vision cache persistence across requests",

View File

@@ -5562,10 +5562,16 @@ class Handler(http.server.BaseHTTPRequestHandler):
parts = [p for p in content.get("parts", []) if isinstance(p, dict)] parts = [p for p in content.get("parts", []) if isinstance(p, dict)]
if not parts: if not parts:
continue continue
# Check if this content has functionCall or functionResponse - these must be preserved
has_function_call = any("functionCall" in p for p in parts)
has_function_response = any("functionResponse" in p for p in parts)
text_key = "\n".join([p.get("text", "") for p in parts if "text" in p]).strip() text_key = "\n".join([p.get("text", "") for p in parts if "text" in p]).strip()
if role == "user" and text_key and text_key == last_user_text: # Skip duplicate user text messages, but NEVER skip function responses
if role == "user" and text_key and text_key == last_user_text and not has_function_response:
continue continue
if role == last_role and role in ("user", "model") and sanitized: # Only merge same-role messages if they don't contain function calls/responses
# Function calls and responses must remain as separate turns
if role == last_role and role in ("user", "model") and sanitized and not has_function_call and not has_function_response:
sanitized[-1].setdefault("parts", []).extend(parts) sanitized[-1].setdefault("parts", []).extend(parts)
else: else:
sanitized.append({"role": role, "parts": parts}) sanitized.append({"role": role, "parts": parts})