| from ollie_assistants.analytics.pricing import PricingMethod |
| from ollie_assistants.observability.recorder import SqliteTraceRecorder |
| from ollie_assistants.observability.types import ConversationTrace, TraceEvent, TraceEventType |
|
|
|
|
| def test_sqlite_trace_recorder_records_lists_and_fetches_run(tmp_path) -> None: |
| recorder = SqliteTraceRecorder(tmp_path / "runs.sqlite") |
| trace = ConversationTrace( |
| run_id="run-1", |
| session_id="session-1", |
| assistant_id="oss", |
| provider_id="openai_compatible", |
| total_latency_ms=123.4, |
| input_tokens=10, |
| output_tokens=5, |
| estimated_cost_usd=0.001, |
| pricing_method=PricingMethod.TOKEN_PRICING, |
| events=( |
| TraceEvent( |
| event_type=TraceEventType.SAFETY, |
| name="input_check", |
| latency_ms=1.0, |
| metadata={"action": "allow"}, |
| ), |
| TraceEvent( |
| event_type=TraceEventType.TOOL, |
| name="search_memory", |
| latency_ms=2.0, |
| metadata={"content": "memory hit"}, |
| ), |
| ), |
| ) |
|
|
| recorder.record(trace) |
|
|
| runs = recorder.list_runs() |
| detail = recorder.get_run("run-1") |
|
|
| assert runs[0]["run_id"] == "run-1" |
| assert runs[0]["tool_calls"] == "search_memory" |
| assert detail is not None |
| assert detail["trace"]["run_id"] == "run-1" |
| assert recorder.list_runs(query="memory hit")[0]["run_id"] == "run-1" |
|
|
|
|
| def test_sqlite_trace_recorder_records_eval_runs(tmp_path) -> None: |
| recorder = SqliteTraceRecorder(tmp_path / "runs.sqlite") |
| summary = { |
| "case_count": 3, |
| "required_metrics": { |
| "hallucination_rate": {"oss_failure_rate": 0.0, "frontier_failure_rate": 0.0}, |
| "bias_harmful_output_rate": { |
| "oss_failure_rate": 0.5, |
| "frontier_failure_rate": 0.0, |
| }, |
| "content_safety_failure_rate": { |
| "oss_failure_rate": 0.25, |
| "frontier_failure_rate": 0.0, |
| }, |
| }, |
| "assistants": { |
| "oss": { |
| "average_latency_ms": 100.0, |
| "estimated_cost_usd": 0.01, |
| "input_tokens": 10, |
| "output_tokens": 5, |
| }, |
| "frontier": { |
| "average_latency_ms": 200.0, |
| "estimated_cost_usd": 0.02, |
| "input_tokens": 11, |
| "output_tokens": 6, |
| }, |
| }, |
| "benchmark_rows": [{"provider": "OSS Modal"}], |
| } |
|
|
| recorder.record_eval_run( |
| eval_run_id="eval-1", |
| created_at="2026-05-26T00:00:00+00:00", |
| include_benchmark=True, |
| use_llm_judge=False, |
| report_markdown="# Report", |
| summary=summary, |
| ) |
|
|
| runs = recorder.list_eval_runs() |
| detail = recorder.get_eval_run("eval-1") |
|
|
| assert runs[0]["eval_run_id"] == "eval-1" |
| assert runs[0]["status"] == "completed" |
| assert runs[0]["benchmark_count"] == 1 |
| assert detail is not None |
| assert detail["summary"]["case_count"] == 3 |
| assert detail["report_markdown"] == "# Report" |
|
|
|
|
| def test_sqlite_trace_recorder_tracks_running_eval_run(tmp_path) -> None: |
| recorder = SqliteTraceRecorder(tmp_path / "runs.sqlite") |
|
|
| recorder.start_eval_run( |
| eval_run_id="eval-running", |
| created_at="2026-05-26T00:00:00+00:00", |
| include_benchmark=True, |
| use_llm_judge=True, |
| ) |
|
|
| run = recorder.get_eval_run("eval-running") |
|
|
| assert run is not None |
| assert run["status"] == "running" |
| assert run["case_count"] == 0 |
|
|