Files
odysseus/tests/test_misfenced_media_tool_call.py
T

128 lines
3.6 KiB
Python

"""Recover unambiguous media calls from textual fallback fences."""
import json
import src.agent_tools # noqa: F401 (break agent_tools<->tool_parsing import cycle)
from src.tool_parsing import parse_tool_blocks, strip_tool_blocks
def test_python_fenced_inspect_media_function_call_runs_as_media_tool():
blocks = parse_tool_blocks(
"```python\ninspect_media('/workspace/fixtures/video.webm')\n```"
)
assert len(blocks) == 1
assert blocks[0].tool_type == "inspect_media"
assert json.loads(blocks[0].content) == {
"path": "/workspace/fixtures/video.webm",
}
def test_bash_fenced_inspect_media_command_runs_as_media_tool():
blocks = parse_tool_blocks(
"```bash\n#!bg\ninspect_media /workspace/fixtures/video.webm\n```"
)
assert len(blocks) == 1
assert blocks[0].tool_type == "inspect_media"
assert json.loads(blocks[0].content) == {
"path": "/workspace/fixtures/video.webm",
}
def test_bash_fenced_json_media_command_runs_as_media_tool():
blocks = parse_tool_blocks(
"```bash\n"
'transcribe_media {"path":"/workspace/fixtures/video.mp4",'
'"transcription_type":"video_analysis"}\n'
"```"
)
assert len(blocks) == 1
assert blocks[0].tool_type == "transcribe_media"
assert json.loads(blocks[0].content) == {
"path": "/workspace/fixtures/video.mp4",
"transcription_type": "video_analysis",
}
def test_misfenced_json_media_command_rejects_extra_shell_text():
blocks = parse_tool_blocks(
'```bash\ninspect_media {"path":"/workspace/fixtures/video.mp4"} && echo nope\n```'
)
assert len(blocks) == 1
assert blocks[0].tool_type == "bash"
def test_media_function_call_preserves_literal_options_and_aliases_path():
blocks = parse_tool_blocks(
"```python\n"
"inspect_media(file='/workspace/fixtures/video.mp4', frames=8, start='10%')\n"
"```"
)
assert len(blocks) == 1
assert json.loads(blocks[0].content) == {
"path": "/workspace/fixtures/video.mp4",
"frames": 8,
"start": "10%",
}
def test_media_function_call_normalizes_common_frame_count_alias():
blocks = parse_tool_blocks(
"```bash\n"
"inspect_media(\"/workspace/fixtures/video.mp4\", "
"frame_count=16, exports=[{\"timestamp\": \"00:00:10\", "
"\"output_path\": \"/workspace/frame.png\"}])\n"
"```"
)
assert len(blocks) == 1
assert blocks[0].tool_type == "inspect_media"
assert json.loads(blocks[0].content) == {
"path": "/workspace/fixtures/video.mp4",
"frames": 16,
"exports": [{
"timestamp": "00:00:10",
"output_path": "/workspace/frame.png",
}],
}
def test_translate_media_alias_routes_to_inspect_media():
blocks = parse_tool_blocks(
"```python\ntranslate_media('/workspace/fixtures/video.mp4')\n```"
)
assert len(blocks) == 1
assert blocks[0].tool_type == "inspect_media"
def test_multiline_media_fence_stays_code():
blocks = parse_tool_blocks(
"```python\n"
"path = '/workspace/fixtures/video.mp4'\n"
"inspect_media(path)\n"
"```"
)
assert len(blocks) == 1
assert blocks[0].tool_type == "python"
def test_strip_tool_blocks_removes_rescued_media_fence():
text = (
"Inspecting now.\n"
"```python\ninspect_media('/workspace/fixtures/video.mp4')\n```\n"
"Done."
)
cleaned = strip_tool_blocks(text)
assert "inspect_media" not in cleaned
assert "```" not in cleaned
assert "Inspecting now." in cleaned
assert "Done." in cleaned