chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any, cast
|
||||
|
||||
import pytest
|
||||
|
||||
from agents.items import TResponseInputItem
|
||||
from agents.run_internal.session_persistence import _sanitize_openai_conversation_item
|
||||
|
||||
|
||||
def _sanitize(item: dict[str, Any]) -> dict[str, Any]:
|
||||
return cast(dict[str, Any], _sanitize_openai_conversation_item(cast(TResponseInputItem, item)))
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"item_type",
|
||||
[
|
||||
"file_search_call",
|
||||
"web_search_call",
|
||||
"computer_call",
|
||||
"code_interpreter_call",
|
||||
"image_generation_call",
|
||||
"local_shell_call",
|
||||
"local_shell_call_output",
|
||||
"mcp_list_tools",
|
||||
"mcp_approval_request",
|
||||
"mcp_call",
|
||||
"item_reference",
|
||||
],
|
||||
)
|
||||
def test_sanitize_preserves_ids_required_by_openai_conversation_items(item_type: str) -> None:
|
||||
item = {"type": item_type, "id": f"{item_type}_abc123", "status": "completed"}
|
||||
|
||||
sanitized = _sanitize(item)
|
||||
|
||||
assert sanitized["id"] == f"{item_type}_abc123"
|
||||
assert sanitized["type"] == item_type
|
||||
|
||||
|
||||
def test_sanitize_preserves_file_search_call_payload_id() -> None:
|
||||
item = {
|
||||
"type": "file_search_call",
|
||||
"id": "fs_call_abc",
|
||||
"queries": ["latest q3 revenue"],
|
||||
"status": "completed",
|
||||
"results": [{"file_id": "file_1", "filename": "q3.pdf", "score": 0.9, "text": "..."}],
|
||||
}
|
||||
|
||||
sanitized = _sanitize(item)
|
||||
|
||||
assert sanitized["id"] == "fs_call_abc"
|
||||
assert sanitized["queries"] == ["latest q3 revenue"]
|
||||
assert sanitized["status"] == "completed"
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"item",
|
||||
[
|
||||
{
|
||||
"type": "message",
|
||||
"id": "msg_abc",
|
||||
"role": "assistant",
|
||||
"content": [{"type": "output_text", "text": "hi"}],
|
||||
},
|
||||
{
|
||||
"type": "function_call",
|
||||
"id": "fc_abc",
|
||||
"call_id": "call_abc",
|
||||
"name": "get_weather",
|
||||
"arguments": "{}",
|
||||
},
|
||||
{"type": "function_call_output", "id": "out_abc", "call_id": "call_abc", "output": "{}"},
|
||||
{"type": "computer_call_output", "id": "ccout_abc", "call_id": "call_abc", "output": {}},
|
||||
{"type": "tool_search_call", "id": "ts_abc", "status": "completed"},
|
||||
{"type": "shell_call", "id": "sh_abc", "call_id": "call_abc", "action": {}},
|
||||
],
|
||||
)
|
||||
def test_sanitize_strips_optional_or_policy_controlled_ids(item: dict[str, Any]) -> None:
|
||||
sanitized = _sanitize(item)
|
||||
|
||||
assert "id" not in sanitized
|
||||
assert sanitized["type"] == item["type"]
|
||||
|
||||
|
||||
def test_sanitize_preserves_reasoning_id_for_openai_conversations() -> None:
|
||||
item = {
|
||||
"type": "reasoning",
|
||||
"id": "rs_abc",
|
||||
"summary": [],
|
||||
"content": [],
|
||||
"provider_data": {"server": "metadata"},
|
||||
}
|
||||
|
||||
sanitized = _sanitize(item)
|
||||
|
||||
assert sanitized["id"] == "rs_abc"
|
||||
assert "provider_data" not in sanitized
|
||||
|
||||
|
||||
def test_sanitize_preserves_reasoning_encrypted_content() -> None:
|
||||
item = {
|
||||
"type": "reasoning",
|
||||
"summary": [],
|
||||
"content": [],
|
||||
"encrypted_content": "encrypted",
|
||||
}
|
||||
|
||||
sanitized = _sanitize(item)
|
||||
|
||||
assert sanitized["encrypted_content"] == "encrypted"
|
||||
|
||||
|
||||
def test_sanitize_always_strips_provider_data() -> None:
|
||||
item = {
|
||||
"type": "file_search_call",
|
||||
"id": "fs_keep",
|
||||
"status": "completed",
|
||||
"provider_data": {"model": "gpt-4.1-mini"},
|
||||
}
|
||||
|
||||
sanitized = _sanitize(item)
|
||||
|
||||
assert sanitized["id"] == "fs_keep"
|
||||
assert "provider_data" not in sanitized
|
||||
|
||||
|
||||
def test_sanitize_passes_through_non_dict_items() -> None:
|
||||
class DummyItem:
|
||||
pass
|
||||
|
||||
item = DummyItem()
|
||||
|
||||
sanitized: Any = _sanitize_openai_conversation_item(cast(TResponseInputItem, item))
|
||||
|
||||
assert sanitized is item
|
||||
Reference in New Issue
Block a user