p14-space / src /triage_llm /api /audit.py
perachon's picture
Deploy CPU FastAPI stub
c9dcc3b
from __future__ import annotations
import json
import sqlite3
import uuid
from datetime import datetime, timezone
from pathlib import Path
from typing import Any
from triage_llm.utils import ensure_dir
class AuditStore:
def __init__(self, db_path: str = "runs/audit/audit.db") -> None:
self.db_path = Path(db_path)
ensure_dir(self.db_path.parent)
self._init_db()
def _init_db(self) -> None:
with sqlite3.connect(self.db_path) as conn:
conn.execute(
"""
CREATE TABLE IF NOT EXISTS interactions (
id TEXT PRIMARY KEY,
created_at TEXT NOT NULL,
request_json TEXT NOT NULL,
response_json TEXT NOT NULL
)
"""
)
def save(self, request: dict[str, Any], response: dict[str, Any]) -> str:
interaction_id = str(uuid.uuid4())
created_at = datetime.now(timezone.utc).isoformat()
with sqlite3.connect(self.db_path) as conn:
conn.execute(
(
"INSERT INTO interactions (id, created_at, request_json, response_json) "
"VALUES (?, ?, ?, ?)"
),
(
interaction_id,
created_at,
json.dumps(request, ensure_ascii=False),
json.dumps(response, ensure_ascii=False),
),
)
return interaction_id
def get(self, interaction_id: str) -> dict[str, Any] | None:
with sqlite3.connect(self.db_path) as conn:
row = conn.execute(
"SELECT id, created_at, request_json, response_json FROM interactions WHERE id = ?",
(interaction_id,),
).fetchone()
if row is None:
return None
return {
"id": row[0],
"created_at": row[1],
"request": json.loads(row[2]),
"response": json.loads(row[3]),
}