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

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

@ -820,6 +820,7 @@ async def evaluate_session(
theory_mode: Optional[str] = None,
scope: str = "session_end",
audit_hook: Optional["LlmAuditHook"] = None,
timeout: float | None = None,
) -> SessionEvaluation:
"""deep-loop 정밀 평가 — 단계전환/회기말. 전체 축어록 + 코드 집계 분포 + LLM 정성 평가.
@ -859,7 +860,7 @@ async def evaluate_session(
cached = _evaluator_cache_get(cache_key)
if cached is not None:
return SessionEvaluation.model_validate(cached)
resp = await generate_with_audit(engine, req, audit_hook)
resp = await generate_with_audit(engine, req, audit_hook, timeout=timeout)
except EngineError as e:
base.error = f"engine_error: {e}"
return base

View file

@ -28,10 +28,18 @@ async def generate_with_audit(
engine: EngineClient,
request: GenerateRequest,
audit_hook: LlmAuditHook | None,
*,
timeout: float | None = None,
) -> GenerateResponse:
"""비스트리밍 LLM 호출의 지연·토큰·비용 기록을 한 계약으로 고정한다."""
started = time.perf_counter()
response = await engine.generate(request)
# deep-loop처럼 호출별 deadline이 필요한 경로가 audit 경계를 지나도 사라지지
# 않게 한다. 기본(None)은 기존 엔진 client deadline을 그대로 쓴다.
response = (
await engine.generate(request, timeout=timeout)
if timeout is not None
else await engine.generate(request)
)
latency_ms = int((time.perf_counter() - started) * 1000)
await record_llm_audit(
audit_hook,