fix(agent): skip empty multimodal user entries after runtime-context strip
This commit is contained in:
@@ -480,6 +480,8 @@ class AgentLoop:
|
|||||||
filtered.append({"type": "text", "text": "[image]"})
|
filtered.append({"type": "text", "text": "[image]"})
|
||||||
else:
|
else:
|
||||||
filtered.append(c)
|
filtered.append(c)
|
||||||
|
if not filtered:
|
||||||
|
continue
|
||||||
entry["content"] = filtered
|
entry["content"] = filtered
|
||||||
entry.setdefault("timestamp", datetime.now().isoformat())
|
entry.setdefault("timestamp", datetime.now().isoformat())
|
||||||
session.messages.append(entry)
|
session.messages.append(entry)
|
||||||
|
|||||||
41
tests/test_loop_save_turn.py
Normal file
41
tests/test_loop_save_turn.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
from nanobot.agent.context import ContextBuilder
|
||||||
|
from nanobot.agent.loop import AgentLoop
|
||||||
|
from nanobot.session.manager import Session
|
||||||
|
|
||||||
|
|
||||||
|
def _mk_loop() -> AgentLoop:
|
||||||
|
loop = AgentLoop.__new__(AgentLoop)
|
||||||
|
loop._TOOL_RESULT_MAX_CHARS = 500
|
||||||
|
return loop
|
||||||
|
|
||||||
|
|
||||||
|
def test_save_turn_skips_multimodal_user_when_only_runtime_context() -> None:
|
||||||
|
loop = _mk_loop()
|
||||||
|
session = Session(key="test:runtime-only")
|
||||||
|
runtime = ContextBuilder._RUNTIME_CONTEXT_TAG + "\nCurrent Time: now (UTC)"
|
||||||
|
|
||||||
|
loop._save_turn(
|
||||||
|
session,
|
||||||
|
[{"role": "user", "content": [{"type": "text", "text": runtime}]}],
|
||||||
|
skip=0,
|
||||||
|
)
|
||||||
|
assert session.messages == []
|
||||||
|
|
||||||
|
|
||||||
|
def test_save_turn_keeps_image_placeholder_after_runtime_strip() -> None:
|
||||||
|
loop = _mk_loop()
|
||||||
|
session = Session(key="test:image")
|
||||||
|
runtime = ContextBuilder._RUNTIME_CONTEXT_TAG + "\nCurrent Time: now (UTC)"
|
||||||
|
|
||||||
|
loop._save_turn(
|
||||||
|
session,
|
||||||
|
[{
|
||||||
|
"role": "user",
|
||||||
|
"content": [
|
||||||
|
{"type": "text", "text": runtime},
|
||||||
|
{"type": "image_url", "image_url": {"url": "data:image/png;base64,abc"}},
|
||||||
|
],
|
||||||
|
}],
|
||||||
|
skip=0,
|
||||||
|
)
|
||||||
|
assert session.messages[0]["content"] == [{"type": "text", "text": "[image]"}]
|
||||||
Reference in New Issue
Block a user