Spaces:
Runtime error
Runtime error
| import json | |
| import os | |
| from datetime import datetime | |
| from fastapi import APIRouter, Depends | |
| from configs.config import settings | |
| from configs.logging import get_logger | |
| from core.pipeline import run_pipeline | |
| from interfaces.api.dependencies import get_model_loader | |
| from interfaces.schemas.complaint import ComplaintRequest, ComplaintResponse | |
| logger = get_logger("predict_route") | |
| router = APIRouter(prefix="/predict", tags=["Prediction"]) | |
| LOGS_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "logs") | |
| LOGS_FILE = os.path.join(LOGS_DIR, "predictions.json") | |
| def save_prediction_log(input_text: str, response: ComplaintResponse): | |
| os.makedirs(LOGS_DIR, exist_ok=True) | |
| entries = [] | |
| if os.path.exists(LOGS_FILE): | |
| try: | |
| with open(LOGS_FILE, "r", encoding="utf-8") as f: | |
| entries = json.load(f) | |
| if not isinstance(entries, list): | |
| entries = [] | |
| except (json.JSONDecodeError, OSError): | |
| entries = [] | |
| entries.append({ | |
| "timestamp": datetime.now().isoformat(), | |
| "input_text": input_text, | |
| "response": response.model_dump(mode="json"), | |
| }) | |
| with open(LOGS_FILE, "w", encoding="utf-8") as f: | |
| json.dump(entries, f, ensure_ascii=False, indent=2) | |
| async def predict_complaint(request: ComplaintRequest, loader = Depends(get_model_loader)): | |
| result = run_pipeline(request.text, loader) | |
| if settings.ENABLE_PREDICTION_LOGGING: | |
| try: | |
| save_prediction_log(request.text, result) | |
| except Exception as exc: | |
| logger.warning( | |
| "prediction_log_failed", | |
| error=str(exc), | |
| ) | |
| return result | |