Files
opensquilla--opensquilla/tests/test_provider_execution_status_projection.py
2026-07-13 13:12:33 +08:00

68 lines
1.9 KiB
Python

from __future__ import annotations
import json
from opensquilla.provider.anthropic import _build_message_payload
from opensquilla.provider.openai import _build_openai_messages
from opensquilla.provider.types import ContentBlockToolResult, Message
def _failure_status() -> dict[str, object]:
return {
"version": 1,
"status": "error",
"exit_code": 1,
"timed_out": False,
"truncated": True,
"reason": "nonzero_exit",
"source": "adapter",
"preservation_class": "diagnostic",
}
def test_anthropic_projects_native_is_error_from_execution_status() -> None:
message = Message(
role="user",
content=[
ContentBlockToolResult(
tool_use_id="call_provider_1",
content="command failed",
is_error=False,
execution_status=_failure_status(),
)
],
)
payload = _build_message_payload(message)
assert payload["content"][0]["is_error"] is True
def test_openai_failure_tool_result_includes_bounded_execution_status_envelope() -> None:
large_output = "failure details\n" + ("x" * 20_000)
message = Message(
role="user",
content=[
ContentBlockToolResult(
tool_use_id="call_provider_2",
content=large_output,
is_error=True,
execution_status=_failure_status(),
)
],
)
payload = _build_openai_messages(message)
tool_content = json.loads(payload[0]["content"])
assert tool_content["execution_status"] == {
"version": 1,
"status": "error",
"exit_code": 1,
"timed_out": False,
"truncated": True,
"reason": "nonzero_exit",
}
assert tool_content["output"].startswith("failure details")
assert len(tool_content["output"]) < len(large_output)