Reverts PR #16919 (commitsdad10a78d,413ee1a28,b4a8031b2,afb958829) which was merged prematurely. Restoring the pre-merge state so #14817 and #15328 can be revisited as standing PRs. Reverted commits: -afb958829fix(computer-use): harden image-rejection fallback + AUTHOR_MAP -b4a8031b2fix(computer-use): unwrap _multimodal tool results -413ee1a28feat(computer-use): background focus-safe backend -dad10a78dfeat(computer-use): cua-driver backend, universal any-model schema Co-authored-by: teknium1 <teknium@users.noreply.github.com>
This commit is contained in:
@@ -148,31 +148,6 @@ def _append_text_to_content(content: Any, text: str, *, prepend: bool = False) -
|
||||
return text + rendered if prepend else rendered + text
|
||||
|
||||
|
||||
def _strip_image_parts_from_parts(parts: Any) -> Any:
|
||||
"""Strip image parts from an OpenAI-style content-parts list.
|
||||
|
||||
Returns a new list with image_url / image / input_image parts replaced
|
||||
by a text placeholder, or None if the list had no images (callers
|
||||
skip the replacement in that case). Used by the compressor to prune
|
||||
old computer_use screenshots.
|
||||
"""
|
||||
if not isinstance(parts, list):
|
||||
return None
|
||||
had_image = False
|
||||
out = []
|
||||
for part in parts:
|
||||
if not isinstance(part, dict):
|
||||
out.append(part)
|
||||
continue
|
||||
ptype = part.get("type")
|
||||
if ptype in ("image", "image_url", "input_image"):
|
||||
had_image = True
|
||||
out.append({"type": "text", "text": "[screenshot removed to save context]"})
|
||||
else:
|
||||
out.append(part)
|
||||
return out if had_image else None
|
||||
|
||||
|
||||
def _truncate_tool_call_args_json(args: str, head_chars: int = 200) -> str:
|
||||
"""Shrink long string values inside a tool-call arguments JSON blob while
|
||||
preserving JSON validity.
|
||||
@@ -591,11 +566,9 @@ class ContextCompressor(ContextEngine):
|
||||
if msg.get("role") != "tool":
|
||||
continue
|
||||
content = msg.get("content") or ""
|
||||
# Multimodal content — dedupe by the text summary if available.
|
||||
# Skip multimodal content (list of content blocks)
|
||||
if isinstance(content, list):
|
||||
continue
|
||||
if isinstance(content, dict) and content.get("_multimodal"):
|
||||
continue
|
||||
if len(content) < 200:
|
||||
continue
|
||||
h = hashlib.md5(content.encode("utf-8", errors="replace")).hexdigest()[:12]
|
||||
@@ -612,20 +585,8 @@ class ContextCompressor(ContextEngine):
|
||||
if msg.get("role") != "tool":
|
||||
continue
|
||||
content = msg.get("content", "")
|
||||
# Multimodal content (base64 screenshots etc.): strip the image
|
||||
# payload — keep a lightweight text placeholder in its place.
|
||||
# Without this, an old computer_use screenshot (~1MB base64 +
|
||||
# ~1500 real tokens) survives every compression pass forever.
|
||||
# Skip multimodal content (list of content blocks)
|
||||
if isinstance(content, list):
|
||||
stripped = _strip_image_parts_from_parts(content)
|
||||
if stripped is not None:
|
||||
result[i] = {**msg, "content": stripped}
|
||||
pruned += 1
|
||||
continue
|
||||
if isinstance(content, dict) and content.get("_multimodal"):
|
||||
summary = content.get("text_summary") or "[screenshot removed to save context]"
|
||||
result[i] = {**msg, "content": f"[screenshot removed] {summary[:200]}"}
|
||||
pruned += 1
|
||||
continue
|
||||
if not content or content == _PRUNED_TOOL_PLACEHOLDER:
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user