Liva21's picture
feat: Financial Sentiment API — FinBERT fine-tuned, FastAPI, Docker, TR/EN multilingual
7701077
import sqlite3
import os
from datetime import datetime
DB_PATH = os.getenv("DB_PATH", "data/monitoring.db")
def _get_conn():
os.makedirs(os.path.dirname(DB_PATH), exist_ok=True)
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
return conn
get_connection = _get_conn
def init_db():
conn = _get_conn()
conn.execute("""
CREATE TABLE IF NOT EXISTS requests (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TEXT NOT NULL,
text TEXT NOT NULL,
sentiment TEXT NOT NULL,
confidence REAL NOT NULL,
latency_ms REAL NOT NULL,
endpoint TEXT NOT NULL,
batch_size INTEGER DEFAULT 1
)
""")
conn.commit()
conn.close()
def log_request(text, sentiment, confidence, latency_ms, endpoint="/predict", batch_size=1):
conn = _get_conn()
conn.execute("""
INSERT INTO requests
(timestamp, text, sentiment, confidence, latency_ms, endpoint, batch_size)
VALUES (?, ?, ?, ?, ?, ?, ?)
""", (
datetime.now().isoformat(),
text[:500],
sentiment,
confidence,
latency_ms,
endpoint,
batch_size,
))
conn.commit()
conn.close()
def get_stats():
conn = _get_conn()
total = conn.execute("SELECT COUNT(*) FROM requests").fetchone()[0]
if total == 0:
conn.close()
return {"total": 0}
dist = conn.execute("""
SELECT sentiment, COUNT(*) as count
FROM requests GROUP BY sentiment
""").fetchall()
hourly = conn.execute("""
SELECT strftime('%Y-%m-%dT%H:00:00', timestamp) as hour,
COUNT(*) as count
FROM requests
WHERE timestamp >= datetime('now', '-24 hours')
GROUP BY hour ORDER BY hour
""").fetchall()
latency = conn.execute("""
SELECT endpoint,
ROUND(AVG(latency_ms), 2) as avg_ms,
ROUND(MIN(latency_ms), 2) as min_ms,
ROUND(MAX(latency_ms), 2) as max_ms
FROM requests GROUP BY endpoint
""").fetchall()
recent = conn.execute("""
SELECT timestamp, text, sentiment, confidence, latency_ms
FROM requests ORDER BY id DESC LIMIT 10
""").fetchall()
conn.close()
return {
"total" : total,
"distribution": [dict(r) for r in dist],
"hourly" : [dict(r) for r in hourly],
"latency" : [dict(r) for r in latency],
"recent" : [dict(r) for r in recent],
}