Spaces:
Paused
Paused
| import json | |
| import os | |
| from datetime import datetime | |
| from pathlib import Path | |
| import uuid | |
| from typing import Literal, Dict | |
| import logging | |
| from .provider_urls import get_provider_endpoint | |
| LOGS_DIR = Path(__file__).resolve().parent.parent.parent / "logs" | |
| COMPLETIONS_LOGS_DIR = LOGS_DIR / "completions" | |
| EMBEDDINGS_LOGS_DIR = LOGS_DIR / "embeddings" | |
| # Create directories if they don't exist | |
| LOGS_DIR.mkdir(exist_ok=True) | |
| COMPLETIONS_LOGS_DIR.mkdir(exist_ok=True) | |
| EMBEDDINGS_LOGS_DIR.mkdir(exist_ok=True) | |
| def log_request_to_console(url: str, headers: dict, client_info: tuple, request_data: dict): | |
| """ | |
| Logs a concise, single-line summary of an incoming request to the console. | |
| """ | |
| time_str = datetime.now().strftime("%H:%M") | |
| model_full = request_data.get("model", "N/A") | |
| provider = "N/A" | |
| model_name = model_full | |
| endpoint_url = "N/A" | |
| if '/' in model_full: | |
| parts = model_full.split('/', 1) | |
| provider = parts[0] | |
| model_name = parts[1] | |
| # Use the helper function to get the full endpoint URL | |
| endpoint_url = get_provider_endpoint(provider, model_name, url) or "N/A" | |
| log_message = f"{time_str} - {client_info[0]}:{client_info[1]} - provider: {provider}, model: {model_name} - {endpoint_url}" | |
| logging.info(log_message) | |
| def log_request_response( | |
| request_data: dict, | |
| response_data: dict, | |
| is_streaming: bool, | |
| log_type: Literal["completion", "embedding"] | |
| ): | |
| """ | |
| Logs the request and response data to a file in the appropriate log directory. | |
| """ | |
| try: | |
| timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
| unique_id = uuid.uuid4() | |
| if log_type == "completion": | |
| target_dir = COMPLETIONS_LOGS_DIR | |
| elif log_type == "embedding": | |
| target_dir = EMBEDDINGS_LOGS_DIR | |
| else: | |
| # Fallback to the main logs directory if log_type is invalid | |
| target_dir = LOGS_DIR | |
| filename = target_dir / f"{timestamp}_{unique_id}.json" | |
| log_content = { | |
| "request": request_data, | |
| "response": response_data, | |
| "is_streaming": is_streaming | |
| } | |
| with open(filename, "w", encoding="utf-8") as f: | |
| json.dump(log_content, f, indent=4, ensure_ascii=False) | |
| except Exception as e: | |
| # In case of logging failure, we don't want to crash the main application | |
| # Use the root logger to log the error to the file. | |
| logging.error(f"Error logging request/response to file: {e}") | |