Verimed-AI / db.py
Dipika Bhadane
Initial project upload
fc70237
Raw
History Blame Contribute Delete
2.61 kB
"""
PHASE 5a: SQLite storage for claim history.
Zero-setup local database -- creates verimed.db automatically on first run.
"""
import sqlite3
import json
from datetime import datetime
DB_FILE = "verimed.db"
def init_db():
conn = sqlite3.connect(DB_FILE)
cur = conn.cursor()
cur.execute("""
CREATE TABLE IF NOT EXISTS history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
claim_text TEXT NOT NULL,
verdict TEXT NOT NULL,
confidence INTEGER,
explanation TEXT,
sources TEXT,
entities TEXT,
timestamp TEXT NOT NULL
)
""")
conn.commit()
conn.close()
def save_result(claim_text: str, result: dict):
conn = sqlite3.connect(DB_FILE)
cur = conn.cursor()
cur.execute(
"""INSERT INTO history
(claim_text, verdict, confidence, explanation, sources, entities, timestamp)
VALUES (?, ?, ?, ?, ?, ?, ?)""",
(
claim_text,
result.get("verdict", "Unknown"),
result.get("confidence", 0),
result.get("explanation", ""),
json.dumps(result.get("sources", [])),
json.dumps([e["text"] for e in result.get("entities", [])]),
datetime.now().isoformat(timespec="seconds"),
),
)
conn.commit()
conn.close()
def get_history(limit: int = 50) -> list[dict]:
conn = sqlite3.connect(DB_FILE)
conn.row_factory = sqlite3.Row
cur = conn.cursor()
cur.execute(
"SELECT * FROM history ORDER BY id DESC LIMIT ?", (limit,)
)
rows = [dict(row) for row in cur.fetchall()]
conn.close()
return rows
def get_trending_verdicts(limit: int = 5) -> list[dict]:
"""Most frequently checked claims (approximate, groups by exact text match)."""
conn = sqlite3.connect(DB_FILE)
conn.row_factory = sqlite3.Row
cur = conn.cursor()
cur.execute("""
SELECT claim_text, verdict, COUNT(*) as check_count, MAX(timestamp) as last_checked
FROM history
GROUP BY claim_text
ORDER BY check_count DESC, last_checked DESC
LIMIT ?
""", (limit,))
rows = [dict(row) for row in cur.fetchall()]
conn.close()
return rows
def get_stats() -> dict:
conn = sqlite3.connect(DB_FILE)
cur = conn.cursor()
cur.execute("SELECT COUNT(*) FROM history")
total = cur.fetchone()[0]
cur.execute("SELECT verdict, COUNT(*) FROM history GROUP BY verdict")
by_verdict = dict(cur.fetchall())
conn.close()
return {"total_checked": total, "by_verdict": by_verdict}