Files
aiturk-hermes-ide/tests/agent/test_fast_compression_lane.py
T

478 lines
16 KiB
Python

"""Contract tests for the opt-in non-reasoning compression fast lane."""
import time
from types import SimpleNamespace
from unittest.mock import MagicMock, patch
def _resolve(config, *, provider="ollama", model="qwen3:8b", requested_model=None):
from agent.auxiliary_client import resolve_compression_fast_lane
with patch(
"agent.auxiliary_client._get_auxiliary_task_config",
return_value=config,
):
return resolve_compression_fast_lane(
provider,
model,
requested_model=requested_model,
)
def test_explicit_non_reasoning_compression_route_is_certified_and_bounded():
lane = _resolve(
{
"provider": "ollama",
"model": "qwen3:8b",
"reasoning_effort": "none",
"max_output_tokens": 1400,
}
)
assert lane.certified_non_reasoning is True
assert lane.max_tokens == 1400
assert lane.reasoning_config == {"enabled": False, "effort": "none"}
def test_inherited_auto_or_uncertified_compression_routes_remain_uncapped():
inherited = _resolve({"provider": "auto", "model": "", "reasoning_effort": "none", "max_output_tokens": 1400})
unknown = _resolve({"provider": "ollama", "model": "qwen3:8b", "max_output_tokens": 1400})
reasoning = _resolve(
{
"provider": "ollama",
"model": "qwen3:8b",
"reasoning_effort": "low",
"max_output_tokens": 1400,
}
)
for lane in (inherited, unknown, reasoning):
assert lane.certified_non_reasoning is False
assert lane.max_tokens is None
assert lane.reasoning_config is None
def test_inherited_reasoning_control_is_preserved_without_enabling_a_cap():
from agent.auxiliary_client import _get_task_extra_body
certified = {
"provider": "ollama",
"model": "qwen3:8b",
"reasoning_effort": "none",
"max_output_tokens": 1400,
}
inherited = {
"provider": "auto",
"model": "",
"reasoning_effort": "none",
"max_output_tokens": 1400,
}
with patch("agent.auxiliary_client._get_auxiliary_task_config", return_value=certified):
assert _get_task_extra_body("compression")["reasoning"] == {
"enabled": False,
}
with patch("agent.auxiliary_client._get_auxiliary_task_config", return_value=inherited):
assert _get_task_extra_body("compression")["reasoning"] == {
"enabled": False,
}
def test_summary_model_override_is_certified_against_the_effective_model():
config = {
"provider": "ollama",
"model": "qwen3:8b",
"reasoning_effort": "none",
"max_output_tokens": 1400,
}
override = _resolve(
config,
provider="ollama",
model="qwen3:14b",
requested_model="qwen3:14b",
)
drifted = _resolve(
config,
provider="ollama",
model="server-selected-model",
requested_model="qwen3:14b",
)
assert override.max_tokens == 1400
assert drifted.max_tokens is None
def test_compression_latency_records_delayed_first_provider_chunk():
from agent.auxiliary_client import _notify_aux_progress, call_llm
class _DelayedSemaphore:
def acquire(self):
time.sleep(0.01)
def release(self):
pass
timings = {}
client = MagicMock()
client.base_url = "http://127.0.0.1:11434/v1"
def _chunks():
time.sleep(0.02)
yield SimpleNamespace(
id="chunk-1",
model="qwen3:8b",
usage=None,
choices=[
SimpleNamespace(
finish_reason="stop",
delta=SimpleNamespace(content="summary", tool_calls=None),
)
],
)
def _resolve_client(*_args, **_kwargs):
# Pre-dispatch liveness must not count as provider response progress.
_notify_aux_progress()
return client, "qwen3:8b"
client.chat.completions.create.side_effect = lambda **_kwargs: _chunks()
with (
patch("agent.auxiliary_client._acquire_sync_aux_semaphore", return_value=_DelayedSemaphore()),
patch("agent.auxiliary_client._get_cached_client", side_effect=_resolve_client),
):
response = call_llm(
task="compression",
messages=[{"role": "user", "content": "summary request"}],
latency_info=timings,
)
assert response.choices[0].message.content == "summary"
assert timings["queue_wait_ms"] >= 5
assert timings["provider_dispatch_ms"] >= 0
assert timings["time_to_first_progress_ms"] >= 15
assert timings["time_to_first_progress_ms"] >= timings["provider_dispatch_ms"]
assert timings["summary_generation_ms"] >= timings["time_to_first_progress_ms"]
def test_certified_fast_lane_sends_the_configured_cap_to_its_provider():
from agent.auxiliary_client import call_llm
config = {
"provider": "ollama",
"model": "qwen3:8b",
"reasoning_effort": "none",
"max_output_tokens": 1400,
}
client = MagicMock()
client.base_url = "http://127.0.0.1:11434/v1"
response = object()
client.chat.completions.create.return_value = response
with (
patch("agent.auxiliary_client._get_auxiliary_task_config", return_value=config),
patch("agent.auxiliary_client._get_cached_client", return_value=(client, "qwen3:8b")),
patch("agent.auxiliary_client._validate_llm_response", return_value=response),
):
assert call_llm(
task="compression",
messages=[{"role": "user", "content": "summary request"}],
) is response
request = client.chat.completions.create.call_args.kwargs
assert request["max_tokens"] == 1400
assert request["extra_body"]["reasoning"] == {"enabled": False}
def test_uncertified_effective_primary_route_does_not_receive_fast_cap():
from agent.auxiliary_client import call_llm
config = {
"provider": "ollama",
"model": "qwen3:8b",
"reasoning_effort": "none",
"max_output_tokens": 1400,
}
client = MagicMock()
client.base_url = "http://127.0.0.1:11434/v1"
response = object()
client.chat.completions.create.return_value = response
with (
patch("agent.auxiliary_client._get_auxiliary_task_config", return_value=config),
patch(
"agent.auxiliary_client._get_cached_client",
return_value=(client, "server-selected-model"),
),
patch("agent.auxiliary_client._validate_llm_response", return_value=response),
):
assert call_llm(
task="compression",
messages=[{"role": "user", "content": "summary request"}],
) is response
request = client.chat.completions.create.call_args.kwargs
assert "max_tokens" not in request
assert "max_completion_tokens" not in request
assert "reasoning" not in request.get("extra_body", {})
def test_boolean_cap_drift_stays_uncapped_and_preserves_existing_reasoning():
from agent.auxiliary_client import call_llm
config = {
"provider": "ollama",
"model": "qwen3:8b",
"reasoning_effort": "none",
"max_output_tokens": True,
}
client = MagicMock()
client.base_url = "http://127.0.0.1:11434/v1"
response = object()
client.chat.completions.create.return_value = response
with (
patch("agent.auxiliary_client._get_auxiliary_task_config", return_value=config),
patch(
"agent.auxiliary_client._get_cached_client",
return_value=(client, "server-selected-model"),
),
patch("agent.auxiliary_client._validate_llm_response", return_value=response),
):
assert call_llm(
task="compression",
messages=[{"role": "user", "content": "summary request"}],
) is response
request = client.chat.completions.create.call_args.kwargs
assert "max_tokens" not in request
assert "max_completion_tokens" not in request
assert request["extra_body"]["reasoning"] == {"enabled": False}
def test_bedrock_converse_ttfp_waits_for_the_nonstreaming_response():
from agent.auxiliary_client import BedrockAuxiliaryClient, call_llm
config = {
"provider": "auto",
"model": "",
"max_output_tokens": 0,
}
client = BedrockAuxiliaryClient("us-east-1", "amazon.nova-lite-v1:0")
response = SimpleNamespace(
choices=[
SimpleNamespace(
message=SimpleNamespace(content="summary"),
finish_reason="stop",
)
],
usage=None,
)
timings = {}
def _delayed_converse(**_kwargs):
time.sleep(0.02)
return response
with (
patch("agent.auxiliary_client._get_auxiliary_task_config", return_value=config),
patch(
"agent.auxiliary_client._get_cached_client",
return_value=(client, "amazon.nova-lite-v1:0"),
),
patch("agent.bedrock_adapter.call_converse", side_effect=_delayed_converse),
):
assert call_llm(
task="compression",
messages=[{"role": "user", "content": "summary request"}],
latency_info=timings,
) is response
assert timings["provider_dispatch_ms"] >= 0
assert timings["time_to_first_progress_ms"] >= 15
assert timings["time_to_first_progress_ms"] >= timings["provider_dispatch_ms"]
def test_summary_model_override_cap_uses_the_actual_primary_request():
from agent.auxiliary_client import call_llm
config = {
"provider": "ollama",
"model": "qwen3:8b",
"reasoning_effort": "none",
"max_output_tokens": 1400,
}
client = MagicMock()
client.base_url = "http://127.0.0.1:11434/v1"
response = object()
client.chat.completions.create.return_value = response
with (
patch("agent.auxiliary_client._get_auxiliary_task_config", return_value=config),
patch("agent.auxiliary_client._get_cached_client", return_value=(client, "qwen3:14b")),
patch("agent.auxiliary_client._validate_llm_response", return_value=response),
):
assert call_llm(
task="compression",
model="qwen3:14b",
messages=[{"role": "user", "content": "summary request"}],
) is response
request = client.chat.completions.create.call_args.kwargs
assert request["model"] == "qwen3:14b"
assert request["max_tokens"] == 1400
def test_fallback_cap_requires_independent_route_certification():
from agent.auxiliary_client import _call_fallback_candidate_sync
response = object()
def _request_for(entry):
config = {
"fallback_chain": [entry],
"provider": "ollama",
"model": "qwen3:8b",
"reasoning_effort": "none",
"max_output_tokens": 1400,
}
client = MagicMock()
client.base_url = "http://127.0.0.1:11434/v1"
client.chat.completions.create.return_value = response
with (
patch("agent.auxiliary_client._get_auxiliary_task_config", return_value=config),
patch("agent.auxiliary_client._validate_llm_response", return_value=response),
):
assert _call_fallback_candidate_sync(
client,
"qwen3:14b",
"fallback_chain[0](ollama)",
task="compression",
messages=[{"role": "user", "content": "summary request"}],
temperature=None,
max_tokens=None,
tools=None,
effective_timeout=300,
effective_extra_body={"reasoning": {"enabled": False, "effort": "none"}},
reasoning_config=None,
) is response
return client.chat.completions.create.call_args.kwargs
uncertified = _request_for({"provider": "ollama", "model": "qwen3:14b"})
certified = _request_for(
{
"provider": "ollama",
"model": "qwen3:14b",
"reasoning_effort": "none",
"max_output_tokens": 900,
}
)
assert "max_tokens" not in uncertified
assert "max_completion_tokens" not in uncertified
assert "reasoning" not in uncertified.get("extra_body", {})
assert certified["max_tokens"] == 900
assert certified["extra_body"]["reasoning"] == {
"enabled": False,
"effort": "none",
}
def test_reasoning_effort_aliases_certify_like_none():
"""Every spelling parse_reasoning_effort treats as disabled must certify.
_get_task_extra_body uses parse_reasoning_effort to disable reasoning for
"false"/"disabled"/YAML False exactly like "none"; the certification
predicate must agree or those users silently lose the fast lane.
"""
base = {"provider": "ollama", "model": "qwen3:8b", "max_output_tokens": 1400}
for alias in ("none", "false", "disabled", False):
lane = _resolve({**base, "reasoning_effort": alias})
assert lane.certified_non_reasoning is True, alias
assert lane.max_tokens == 1400, alias
# Empty/unset (provider default) and real efforts must NOT certify.
for not_disabled in ("", None, "low", "high", True):
lane = _resolve({**base, "reasoning_effort": not_disabled})
assert lane.certified_non_reasoning is False, not_disabled
assert lane.max_tokens is None, not_disabled
def test_timing_hooks_propagate_to_protected_call_worker_thread():
"""The protected daemon path must carry the timing hooks across threads.
_run_protected_sync_provider_call runs the provider callback on a daemon
worker. The dispatch/provider-response hooks are threading.local, so
without explicit propagation provider_dispatch_ms and
time_to_first_progress_ms silently vanish whenever compression takes the
protected path (the common case: aux_interrupt_protection + hard-cancel
source both active).
"""
from agent.auxiliary_client import (
_aux_timing_hook,
_aux_dispatch,
_aux_provider_response,
_notify_aux_dispatch,
_notify_aux_provider_response,
_run_protected_sync_provider_call,
aux_interrupt_protection,
)
seen = []
def _callback(_kwargs):
# Runs on the daemon worker thread — both notifies must reach the
# hooks installed on the owner thread.
_notify_aux_dispatch()
_notify_aux_provider_response()
return "ok"
with (
_aux_timing_hook(_aux_dispatch, lambda: seen.append("dispatch")),
_aux_timing_hook(_aux_provider_response, lambda: seen.append("response")),
aux_interrupt_protection(cancel_check=lambda: False),
):
result = _run_protected_sync_provider_call(_callback, {})
assert result == "ok"
assert "dispatch" in seen
assert "response" in seen
def test_explicit_caller_max_tokens_keeps_provider_quirk_handling():
"""An explicit caller cap must NOT be force-injected as a wire param.
_build_call_kwargs deliberately omits max_tokens for most
OpenAI-compatible providers (ZAI vision 400s on it; GPT-5/Copilot need
max_completion_tokens). Only a cap the certified lane itself produced may
bypass that handling. Before this guard, a caller-passed max_tokens on
the compression task flowed through _compression_fast_lane_controls as a
passthrough and was misread as a lane cap — forcing the param onto
providers where the omission was intentional (pre-fast-lane behavior).
"""
from agent.auxiliary_client import call_llm
config = {"provider": "auto", "model": "", "max_output_tokens": 0}
client = MagicMock()
client.base_url = "http://127.0.0.1:11434/v1"
response = object()
client.chat.completions.create.return_value = response
with (
patch("agent.auxiliary_client._get_auxiliary_task_config", return_value=config),
patch("agent.auxiliary_client._get_cached_client", return_value=(client, "qwen3:8b")),
patch("agent.auxiliary_client._validate_llm_response", return_value=response),
):
assert call_llm(
task="compression",
messages=[{"role": "user", "content": "summary request"}],
max_tokens=1500,
) is response
request = client.chat.completions.create.call_args.kwargs
assert "max_tokens" not in request
assert "max_completion_tokens" not in request