Files
2026-07-13 13:12:33 +08:00

276 lines
8.8 KiB
Python

import json
from opensquilla.engine.runtime import _persisted_tool_result_segment
from opensquilla.engine.types import ToolResultEvent
def test_persisted_tool_result_keeps_oversized_json_parseable_with_provider() -> None:
result = json.dumps(
{
"query": "ClickUp pricing plans 2025 2026 per seat",
"provider": "brave",
"results": [
{
"title": f"Result {idx}",
"url": f"https://example.com/{idx}",
"snippet": "x" * 700,
}
for idx in range(5)
],
},
ensure_ascii=False,
indent=2,
)
assert len(result) > 2000
segment = _persisted_tool_result_segment(
ToolResultEvent(
tool_use_id="call_1",
tool_name="web_search",
result=result,
is_error=False,
)
)
assert segment["provider"] == "brave"
assert segment["query"] == "ClickUp pricing plans 2025 2026 per seat"
assert segment["result_truncated"] is True
assert segment["result_original_chars"] == len(result)
assert len(segment["result"]) <= 2000
preview = json.loads(segment["result"])
assert preview["provider"] == "brave"
assert preview["query"] == "ClickUp pricing plans 2025 2026 per seat"
assert preview["result_truncated"] is True
assert preview["result_original_chars"] == len(result)
def test_persisted_web_search_result_promotes_nested_diagnostics() -> None:
result = json.dumps(
{
"ok": True,
"query": "OpenSquilla search architecture",
"mode": "technical",
"provider_attempts": [
{"provider": "exa", "status": "error", "error_kind": "network"},
{"provider": "brave", "status": "success"},
],
"diagnostics": {
"selected_provider": "brave",
"fallback_from": "exa",
"fetched_count": 2,
"fetch_failed_count": 1,
"returned_chars": 2800,
"budget_clamped": True,
"recency_supported": False,
"recency_degraded": True,
"provider_attempts": [
{"provider": "exa", "status": "error", "error_kind": "network"},
{"provider": "brave", "status": "success"},
],
},
"results": [
{
"title": f"Result {idx}",
"url": f"https://example.com/{idx}",
"excerpt": "x" * 900,
}
for idx in range(5)
],
},
ensure_ascii=False,
indent=2,
)
assert len(result) > 2000
segment = _persisted_tool_result_segment(
ToolResultEvent(
tool_use_id="call_web_search_diagnostics",
tool_name="web_search",
result=result,
is_error=False,
)
)
assert segment["selected_provider"] == "brave"
assert segment["fallback_from"] == "exa"
assert segment["provider_attempt_count"] == 2
assert segment["fetched_count"] == 2
assert segment["fetch_failed_count"] == 1
assert segment["returned_chars"] == 2800
assert segment["budget_clamped"] is True
assert segment["recency_supported"] is False
assert segment["recency_degraded"] is True
def test_persisted_web_search_result_keeps_sources_with_complete_urls() -> None:
long_excerpt = "Long fetched article body. " * 120
result = json.dumps(
{
"ok": True,
"query": "Lionel Messi retirement 2026",
"mode": "auto",
"sources": [
{
"rank": 1,
"title": "Messi retirement dismissed with one condition clear",
"url": "https://thefootballfaithful.com/messi-retirement-dismissed-one-condition-clear/",
"canonical_url": "https://thefootballfaithful.com/messi-retirement-dismissed-one-condition-clear/",
"domain": "thefootballfaithful.com",
"provider": "duckduckgo",
"fetched": True,
}
],
"results": [
{
"rank": 1,
"title": "Messi retirement dismissed with one condition clear",
"url": "https://thefootballfaithful.com/messi-retirement-dismissed-one-condition-clear/",
"excerpt": long_excerpt,
"provider": "duckduckgo",
}
],
},
ensure_ascii=False,
indent=2,
)
assert len(result) > 2000
segment = _persisted_tool_result_segment(
ToolResultEvent(
tool_use_id="call_web_search_sources",
tool_name="web_search",
result=result,
is_error=False,
)
)
assert segment["result_truncated"] is True
assert segment["sources"] == [
{
"rank": 1,
"title": "Messi retirement dismissed with one condition clear",
"url": "https://thefootballfaithful.com/messi-retirement-dismissed-one-condition-clear/",
"canonical_url": "https://thefootballfaithful.com/messi-retirement-dismissed-one-condition-clear/",
"domain": "thefootballfaithful.com",
"provider": "duckduckgo",
"fetched": True,
}
]
assert not segment["sources"][0]["url"].endswith("…")
def test_persisted_web_search_result_derives_sources_from_results_when_missing() -> None:
result = json.dumps(
{
"ok": True,
"query": "source fallback",
"provider_attempts": [{"provider": "duckduckgo", "status": "success"}],
"results": [
{
"rank": 1,
"title": "Fallback source",
"url": "https://example.com/fallback-source?utm=tracking",
"canonical_url": "https://example.com/fallback-source",
"domain": "example.com",
"provider": "duckduckgo",
"fetched": False,
"excerpt": "x" * 3000,
}
],
},
ensure_ascii=False,
indent=2,
)
assert len(result) > 2000
segment = _persisted_tool_result_segment(
ToolResultEvent(
tool_use_id="call_web_search_sources_fallback",
tool_name="web_search",
result=result,
is_error=False,
)
)
assert segment["sources"] == [
{
"rank": 1,
"title": "Fallback source",
"url": "https://example.com/fallback-source?utm=tracking",
"canonical_url": "https://example.com/fallback-source",
"domain": "example.com",
"provider": "duckduckgo",
"fetched": False,
}
]
def test_persisted_tool_result_bounds_oversized_segment_metadata() -> None:
result = json.dumps(
{
"provider": "brave",
"query": "q" * 100_000,
"error": "e" * 100_000,
"results": [{"snippet": "x" * 700}],
},
ensure_ascii=False,
indent=2,
)
segment = _persisted_tool_result_segment(
ToolResultEvent(
tool_use_id="call_oversized_metadata",
tool_name="web_search",
result=result,
is_error=False,
)
)
assert segment["provider"] == "brave"
assert len(segment["query"]) == 256
assert segment["query"].endswith("…")
assert len(segment["error"]) == 256
assert segment["error"].endswith("…")
assert "fallback_from" not in segment
assert len(segment["result"]) <= 2000
assert len(json.dumps(segment, ensure_ascii=False)) < 3000
def test_persisted_tool_result_keeps_short_result_unchanged() -> None:
result = '{"provider": "brave", "results": []}'
segment = _persisted_tool_result_segment(
ToolResultEvent(
tool_use_id="call_2",
tool_name="web_search",
result=result,
is_error=False,
)
)
assert segment == {
"type": "tool_result",
"tool_use_id": "call_2",
"name": "web_search",
"result": result,
"is_error": False,
}
def test_persisted_tool_result_marks_oversized_non_json_prefix() -> None:
result = "abc" * 1000
segment = _persisted_tool_result_segment(
ToolResultEvent(
tool_use_id="call_3",
tool_name="exec_command",
result=result,
is_error=False,
)
)
assert segment["result"] == result[:2000]
assert segment["result_truncated"] is True
assert segment["result_original_chars"] == len(result)