회기 연속성과 멀티 케이스 계약을 영속화

This commit is contained in:
Yun Chan 2026-09-01 11:45:16 +09:00
parent be08c0b573
commit 72353ecd82
26 changed files with 2170 additions and 127 deletions

View file

@ -30,9 +30,11 @@ def _turn_context() -> orchestrator.TurnContext:
class CaptureEvaluatorEngine:
def __init__(self) -> None:
self.requests: list[Any] = []
self.timeouts: list[float | None] = []
async def generate(self, req: Any) -> GenerateResponse:
async def generate(self, req: Any, *, timeout: float | None = None) -> GenerateResponse:
self.requests.append(req)
self.timeouts.append(timeout)
loop = req.metadata.get("loop")
if loop == "fast":
structured = {
@ -61,7 +63,7 @@ class FailingEvaluatorEngine:
def __init__(self) -> None:
self.requests: list[Any] = []
async def generate(self, req: Any) -> GenerateResponse:
async def generate(self, req: Any, *, timeout: float | None = None) -> GenerateResponse:
self.requests.append(req)
raise EngineError("synthetic evaluator failure")
@ -122,6 +124,23 @@ class EvaluatorModelRoutingTest(unittest.IsolatedAsyncioTestCase):
self.assertEqual(engine.requests[0].ai_role, "evaluator")
self.assertEqual(engine.requests[0].model, "cheap-deep")
async def test_deep_evaluator_forwards_explicit_timeout(self) -> None:
engine = CaptureEvaluatorEngine()
result = await evaluator.evaluate_session(
session_id="evaluator-model-session",
stage="라포",
masked_turns=[
{"speaker": "counselor", "text": "천천히 이야기해줘도 괜찮아요."},
{"speaker": "client", "text": "잘 모르겠어요."},
],
engine=engine, # type: ignore[arg-type]
timeout=300.0,
)
self.assertIsNone(result.error)
self.assertEqual(engine.timeouts, [300.0])
async def test_blank_model_settings_keep_gateway_default_routing(self) -> None:
settings.evaluator_fast_model = " "
settings.evaluator_deep_model = ""