Files
opensquilla--opensquilla/tests/test_scripts/test_live_meta_soft_activation_e2e.py
2026-07-13 13:12:33 +08:00

108 lines
3.9 KiB
Python

from __future__ import annotations
from collections.abc import AsyncIterator
from pathlib import Path
def test_live_soft_activation_harness_observes_model_meta_invoke(tmp_path: Path) -> None:
from opensquilla.provider.types import DoneEvent as ProviderDoneEvent
from opensquilla.provider.types import ToolUseDeltaEvent as ProviderToolUseDelta
from opensquilla.provider.types import ToolUseEndEvent as ProviderToolUseEnd
from opensquilla.provider.types import ToolUseStartEvent as ProviderToolUseStart
from scripts.live_meta_soft_activation_e2e import (
run_live_meta_soft_activation_e2e,
)
class _StubProvider:
provider_name = "stub"
async def chat(
self,
messages,
tools=None,
config=None,
) -> AsyncIterator:
assert tools is not None
assert any(tool.name == "meta_invoke" for tool in tools)
yield ProviderToolUseStart(tool_use_id="tu_1", tool_name="meta_invoke")
yield ProviderToolUseDelta(
tool_use_id="tu_1",
json_fragment='{"name": "meta-live-soft-activation"}',
)
yield ProviderToolUseEnd(
tool_use_id="tu_1",
tool_name="meta_invoke",
arguments={"name": "meta-live-soft-activation"},
)
yield ProviderDoneEvent(stop_reason="tool_use")
async def list_models(self):
return []
result = run_live_meta_soft_activation_e2e(
home=tmp_path,
provider_instance=_StubProvider(),
model="stub",
classify_override="LIVE_OK",
)
assert result["ok"] is True
assert result["model_decision"]["meta_invoke_called"] is True
assert result["model_decision"]["selected_meta_skill"] == "meta-live-soft-activation"
assert "meta-step:classify" in result["observed_tool_results"]
assert result["expected_output"] in result["final_text"]
def test_live_soft_activation_harness_runs_multiple_model_decision_cases(
tmp_path: Path,
) -> None:
from opensquilla.provider.types import DoneEvent as ProviderDoneEvent
from opensquilla.provider.types import ToolUseEndEvent as ProviderToolUseEnd
from opensquilla.provider.types import ToolUseStartEvent as ProviderToolUseStart
from scripts.live_meta_soft_activation_e2e import run_live_meta_activation_cases
class _CaseProvider:
provider_name = "stub"
def __init__(self) -> None:
self.calls = 0
async def chat(self, messages, tools=None, config=None) -> AsyncIterator:
self.calls += 1
if self.calls == 1:
yield ProviderToolUseStart(tool_use_id="tu_1", tool_name="meta_invoke")
yield ProviderToolUseEnd(
tool_use_id="tu_1",
tool_name="meta_invoke",
arguments={"name": "meta-live-soft-activation"},
)
yield ProviderDoneEvent(stop_reason="tool_use")
else:
yield ProviderDoneEvent(stop_reason="end_turn")
async def list_models(self):
return []
result = run_live_meta_activation_cases(
home=tmp_path,
provider_instance=_CaseProvider(),
cases=[
{
"name": "positive",
"user_message": "Run the live soft activation workflow.",
"expected_meta_skill": "meta-live-soft-activation",
},
{
"name": "negative",
"user_message": "Answer normally without a meta-skill.",
"expected_meta_skill": None,
},
],
model="stub",
classify_override="LIVE_OK",
)
assert result["ok"] is True
assert [case["passed"] for case in result["cases"]] == [True, True]
assert result["summary"] == {"passed": 2, "failed": 0, "total": 2}