Spaces:
Sleeping
Sleeping
| """Export handler for comparison results.""" | |
| import csv | |
| import json | |
| from datetime import datetime | |
| from io import StringIO | |
| from typing import Any, Dict, List | |
| class ExportHandler: | |
| """Handles exporting comparison results to various formats.""" | |
| def export_to_json( | |
| prompt: str, | |
| tools_enabled: List[str], | |
| comparisons: List[Dict[str, Any]], | |
| ) -> str: | |
| """Export comparison results to JSON format. | |
| Args: | |
| prompt: User prompt | |
| tools_enabled: List of enabled tool names | |
| comparisons: List of comparison results | |
| Returns: | |
| JSON string | |
| """ | |
| export_data = { | |
| "timestamp": datetime.now().isoformat(), | |
| "prompt": prompt, | |
| "tools_enabled": tools_enabled, | |
| "comparisons": [], | |
| } | |
| for comp in comparisons: | |
| metrics = comp.get("metrics") | |
| export_data["comparisons"].append( | |
| { | |
| "model": comp.get("model_name", "Unknown"), | |
| "output": comp.get("output", ""), | |
| "tools_called": comp.get("tools_used", []), | |
| "metrics": metrics.to_dict() if hasattr(metrics, "to_dict") else {}, | |
| } | |
| ) | |
| return json.dumps(export_data, indent=2) | |
| def export_to_csv( | |
| prompt: str, | |
| tools_enabled: List[str], | |
| comparisons: List[Dict[str, Any]], | |
| ) -> str: | |
| """Export comparison results to CSV format. | |
| Args: | |
| prompt: User prompt | |
| tools_enabled: List of enabled tool names | |
| comparisons: List of comparison results | |
| Returns: | |
| CSV string | |
| """ | |
| output = StringIO() | |
| writer = csv.writer(output) | |
| # Write header | |
| writer.writerow( | |
| [ | |
| "Timestamp", | |
| "Prompt", | |
| "Tools Enabled", | |
| "Model", | |
| "Total Time (s)", | |
| "Tokens/sec", | |
| "Tokens Generated", | |
| "Tool Calls", | |
| "Tool Exec Time (s)", | |
| "Success", | |
| "Output Preview", | |
| ] | |
| ) | |
| # Write data rows | |
| timestamp = datetime.now().isoformat() | |
| tools_str = ", ".join(tools_enabled) | |
| for comp in comparisons: | |
| metrics = comp.get("metrics") | |
| if hasattr(metrics, "to_dict"): | |
| metrics_dict = metrics.to_dict() | |
| else: | |
| metrics_dict = {} | |
| output_preview = comp.get("output", "")[:100] + "..." if len(comp.get("output", "")) > 100 else comp.get("output", "") | |
| writer.writerow( | |
| [ | |
| timestamp, | |
| prompt, | |
| tools_str, | |
| comp.get("model_name", "Unknown"), | |
| metrics_dict.get("total_time", 0), | |
| metrics_dict.get("tokens_per_second", 0), | |
| metrics_dict.get("tokens_generated", 0), | |
| metrics_dict.get("tool_calls_count", 0), | |
| metrics_dict.get("tool_execution_time", 0), | |
| metrics_dict.get("success", False), | |
| output_preview, | |
| ] | |
| ) | |
| return output.getvalue() | |
| def create_download_filename(format_type: str) -> str: | |
| """Create filename for download. | |
| Args: | |
| format_type: 'json' or 'csv' | |
| Returns: | |
| Filename with timestamp | |
| """ | |
| timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
| return f"model_comparison_{timestamp}.{format_type}" | |