Source code for agent_framework_evaluator.session_manager
from __future__ import annotations
from dataclasses import dataclass
from typing import Any
from uuid import uuid4
from agent_framework.agent_event_publisher import agent_events
from agent_framework.tracing import CompositeRuntimeTracer
from agent_framework.web_communication import WebUserCommunication
from agent_framework_evaluator.runtime.debug_subscriber import DebuggerSubscriber
from agent_framework_evaluator.runtime.session_runner import SessionRunner
from agent_framework_evaluator.usage import EvaluatorUsageTracker
[docs]
@dataclass(slots=True)
class SessionRecord:
session_id: str
comm: WebUserCommunication
tracer: CompositeRuntimeTracer
debugger: DebuggerSubscriber
env_path: str
runner: SessionRunner
last_run_prompts: dict[str, Any] | None = None
last_run_result: dict[str, Any] | None = None
last_usage_summary: dict[str, Any] | None = None
usage_tracker: EvaluatorUsageTracker | None = None
#: From WebSocket ``run`` message: ``standard`` (auto-answer confirmations/permissions) vs
#: ``no_callbacks`` (only auto-answer text prompts; user handles confirm/permission).
case_run_mode: str = "standard"
[docs]
class SessionManager:
def __init__(self) -> None:
self._sessions: dict[str, SessionRecord] = {}
[docs]
def create_session(self, *, env_path: str = ".env") -> SessionRecord:
session_id = str(uuid4())
comm = WebUserCommunication(session_id=session_id)
tracer = CompositeRuntimeTracer()
debugger = DebuggerSubscriber()
tracer.subscribe(debugger)
agent_events.attach_log_sources()
runner = SessionRunner(env_path)
rec = SessionRecord(
session_id=session_id,
comm=comm,
tracer=tracer,
debugger=debugger,
env_path=env_path,
runner=runner,
usage_tracker=EvaluatorUsageTracker(),
)
self._sessions[session_id] = rec
return rec
[docs]
def get(self, session_id: str) -> SessionRecord | None:
return self._sessions.get(session_id)
[docs]
def pop(self, session_id: str) -> SessionRecord | None:
return self._sessions.pop(session_id, None)
session_manager = SessionManager()