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

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

@ -104,16 +104,17 @@ class SessionStore:
state: SessionState,
persona_id: str | None = None,
persona_version: int | None = None,
case_id: str | None = None,
session_no: int = 1,
carry_rapport: float = 0.0,
goal_stages: list[str] | None = None,
learner_feedback_enabled: bool = True,
) -> InProcSession:
session_id = uuid4().hex
case_id = uuid4().hex
stable_case_id = case_id or uuid4().hex
s = InProcSession(
session_id=session_id,
case_id=case_id,
case_id=stable_case_id,
learner_id=learner_id,
persona_code=persona.code,
theory_mode=theory_mode,
@ -138,6 +139,23 @@ class SessionStore:
def list(self) -> list[InProcSession]:
return list(self._sessions.values())
def find_active(
self,
*,
learner_id: str,
persona_id: str | None,
persona_code: str,
) -> Optional[InProcSession]:
"""Return the active session for one learner-persona continuity case."""
for session in self._sessions.values():
if session.ended or session.learner_id != learner_id:
continue
if persona_id is not None and session.persona_id == persona_id:
return session
if session.persona_id is None and session.persona_code == persona_code:
return session
return None
def append_turn(self, session_id: str, turn: TurnRecord) -> None:
s = self._sessions.get(session_id)
if s is not None: