chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
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"}})
|
||||
Reference in New Issue
Block a user