Files
2026-07-13 12:39:17 +08:00

103 lines
3.4 KiB
Python

from __future__ import annotations
from typing import cast
import pytest
from agents.items import TResponseInputItem
from agents.sandbox.capabilities import Compaction, StaticCompactionPolicy
class TestCompactionCapability:
def test_sampling_params_uses_static_threshold(self) -> None:
"""Tests compaction emits Responses API context management settings."""
capability = Compaction(policy=StaticCompactionPolicy(threshold=123))
sampling_params = capability.sampling_params({})
assert sampling_params == {
"context_management": [
{
"type": "compaction",
"compact_threshold": 123,
}
]
}
assert isinstance(capability.policy, StaticCompactionPolicy)
def test_sampling_params_infers_hyphenated_model_threshold(self) -> None:
capability = Compaction()
sampling_params = capability.sampling_params({"model": "gpt-5-2"})
assert sampling_params == {
"context_management": [
{
"type": "compaction",
"compact_threshold": 360_000,
}
]
}
def test_sampling_params_infers_gpt_5_6_sol_dynamic_threshold(self) -> None:
capability = Compaction()
sampling_params = capability.sampling_params({"model": "gpt-5.6-sol"})
assert sampling_params == {
"context_management": [
{
"type": "compaction",
"compact_threshold": 942_818,
}
]
}
def test_sampling_params_falls_back_for_unknown_model(self) -> None:
capability = Compaction()
sampling_params = capability.sampling_params({"model": "azure-prod-deployment"})
assert sampling_params == {
"context_management": [
{
"type": "compaction",
"compact_threshold": 240_000,
}
]
}
def test_process_context_keeps_items_from_last_compaction(self) -> None:
"""Tests compaction truncates history to the last compaction item, inclusive."""
capability = Compaction()
context: list[TResponseInputItem] = [
{"type": "message", "role": "user", "content": "old-1"},
cast(TResponseInputItem, {"type": "compaction", "summary": "first"}),
{"type": "message", "role": "assistant", "content": "between"},
cast(TResponseInputItem, {"type": "compaction", "summary": "second"}),
{"type": "message", "role": "assistant", "content": "latest"},
]
processed = capability.process_context(context)
assert processed == context[3:]
def test_process_context_returns_original_when_no_compaction(self) -> None:
"""Tests compaction leaves context unchanged when no compaction item exists."""
capability = Compaction()
context: list[TResponseInputItem] = [
{"type": "message", "role": "user", "content": "hello"},
{"type": "message", "role": "assistant", "content": "world"},
]
processed = capability.process_context(context)
assert processed == context
def test_rejects_unsupported_policy_type(self) -> None:
with pytest.raises(ValueError, match="Unsupported compaction policy type: 'unknown'"):
Compaction.model_validate({"policy": {"type": "unknown"}})