Spaces:
Running
Running
| import json | |
| import os | |
| import logging | |
| import logging.handlers | |
| from datetime import datetime | |
| from pathlib import Path | |
| LOG_DIR = Path("logs") | |
| LOG_FILE = LOG_DIR / "evaluation.jsonl" | |
| MODEL_NAME = "gemma-2b" | |
| def setup_logger(): | |
| LOG_DIR.mkdir(parents=True, exist_ok=True) | |
| logger = logging.getLogger("evaluation") | |
| logger.setLevel(logging.INFO) | |
| if not logger.handlers: | |
| file_handler = logging.FileHandler(LOG_FILE, encoding="utf-8") | |
| file_handler.setLevel(logging.INFO) | |
| class JsonLinesFormatter(logging.Formatter): | |
| def format(self, record): | |
| return json.dumps(record.__dict__) | |
| file_handler.setFormatter(JsonLinesFormatter()) | |
| logger.addHandler(file_handler) | |
| return logger | |
| def log_evaluation_result( | |
| question: str, | |
| response: str, | |
| retrieved_chunks_ids: list, | |
| ground_truth_chunks_ids: list, | |
| latency_ms: float | |
| ): | |
| hit_rate = len(set(retrieved_chunks_ids) & set(ground_truth_chunks_ids)) > 0 | |
| log_entry = { | |
| "timestamp": datetime.utcnow().isoformat() + "Z", | |
| "question": question, | |
| "response": response[:500] if response else "", | |
| "retrieved_chunks_ids": retrieved_chunks_ids, | |
| "ground_truth_ids": ground_truth_chunks_ids, | |
| "hit_rate": hit_rate, | |
| "latency_ms": round(latency_ms, 2), | |
| "model_name": MODEL_NAME | |
| } | |
| logger = logging.getLogger("evaluation") | |
| if not logger.handlers: | |
| setup_logger() | |
| logger.info("", extra=log_entry) | |
| return log_entry |