Download ankahi_bundle/backend/training_buffer.py from bhriguverma/ankahi: direct link, hf CLI and curl.
- Browser
- Download file 3.4 kB
-
https://huggingface.co/bhriguverma/ankahi/resolve/main/ankahi_bundle/backend/training_buffer.py
- Command line
-
hf download hf://bhriguverma/ankahi/ankahi_bundle/backend/training_buffer.py
-
curl -L -o training_buffer.py https://huggingface.co/bhriguverma/ankahi/resolve/main/ankahi_bundle/backend/training_buffer.py
3.4 kB
| import sqlite3 | |
| import threading | |
| from datetime import datetime | |
| import json | |
| from .config import SQLITE_DB_PATH | |
| class TrainingBuffer: | |
| def __init__(self): | |
| self.db_path = SQLITE_DB_PATH | |
| self.lock = threading.Lock() | |
| self._init_db() | |
| def _init_db(self): | |
| with self.lock: | |
| conn = sqlite3.connect(self.db_path) | |
| cursor = conn.cursor() | |
| cursor.execute(''' | |
| CREATE TABLE IF NOT EXISTS utterances ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| timestamp TEXT NOT NULL, | |
| pictogram_seq TEXT NOT NULL, | |
| confirmed_sentence TEXT NOT NULL, | |
| persona_id TEXT NOT NULL, | |
| context TEXT, | |
| was_first_alternative INTEGER DEFAULT 1, | |
| session_id TEXT | |
| ) | |
| ''') | |
| conn.commit() | |
| conn.close() | |
| def log(self, pictogram_seq, confirmed_sentence, persona_id, context=None, was_first_alternative=True, session_id=None): | |
| with self.lock: | |
| conn = sqlite3.connect(self.db_path) | |
| cursor = conn.cursor() | |
| timestamp = datetime.now().isoformat() | |
| pictogram_seq_str = json.dumps(pictogram_seq) | |
| cursor.execute(''' | |
| INSERT INTO utterances (timestamp, pictogram_seq, confirmed_sentence, persona_id, context, was_first_alternative, session_id) | |
| VALUES (?, ?, ?, ?, ?, ?, ?) | |
| ''', (timestamp, pictogram_seq_str, confirmed_sentence, persona_id, context, 1 if was_first_alternative else 0, session_id)) | |
| conn.commit() | |
| conn.close() | |
| def get_for_persona(self, persona_id): | |
| with self.lock: | |
| conn = sqlite3.connect(self.db_path) | |
| conn.row_factory = sqlite3.Row | |
| cursor = conn.cursor() | |
| cursor.execute('SELECT * FROM utterances WHERE persona_id = ?', (persona_id,)) | |
| rows = cursor.fetchall() | |
| conn.close() | |
| return [dict(row) for row in rows] | |
| def count(self, persona_id=None): | |
| with self.lock: | |
| conn = sqlite3.connect(self.db_path) | |
| cursor = conn.cursor() | |
| if persona_id: | |
| cursor.execute('SELECT COUNT(*) FROM utterances WHERE persona_id = ?', (persona_id,)) | |
| else: | |
| cursor.execute('SELECT COUNT(*) FROM utterances') | |
| count = cursor.fetchone()[0] | |
| conn.close() | |
| return count | |
| def export_jsonl(self, persona_id): | |
| utterances = self.get_for_persona(persona_id) | |
| return "\n".join([json.dumps(u) for u in utterances]) | |
| def clear(self, persona_id): | |
| with self.lock: | |
| conn = sqlite3.connect(self.db_path) | |
| cursor = conn.cursor() | |
| cursor.execute('DELETE FROM utterances WHERE persona_id = ?', (persona_id,)) | |
| conn.commit() | |
| count = conn.total_changes | |
| conn.close() | |
| return count | |
| def get_stats(self): | |
| with self.lock: | |
| conn = sqlite3.connect(self.db_path) | |
| cursor = conn.cursor() | |
| cursor.execute('SELECT persona_id, COUNT(*) FROM utterances GROUP BY persona_id') | |
| stats = dict(cursor.fetchall()) | |
| conn.close() | |
| return stats | |
| training_buffer = TrainingBuffer() | |