Spaces:
Sleeping
Sleeping
| """ | |
| Result models for GEPA Optimizer | |
| """ | |
| from dataclasses import dataclass, field | |
| from datetime import datetime | |
| from typing import Dict, Any, Optional, List | |
| import uuid | |
| class OptimizationResult: | |
| """Complete optimization result with all metadata""" | |
| # Identifiers | |
| session_id: str = field(default_factory=lambda: str(uuid.uuid4())) | |
| # Core results | |
| original_prompt: str = "" | |
| optimized_prompt: str = "" | |
| # Performance metrics | |
| improvement_data: Dict[str, Any] = field(default_factory=dict) | |
| baseline_metrics: Dict[str, float] = field(default_factory=dict) | |
| final_metrics: Dict[str, float] = field(default_factory=dict) | |
| # Process metadata | |
| optimization_time: float = 0.0 | |
| dataset_size: int = 0 | |
| total_iterations: int = 0 | |
| # Status and error handling | |
| status: str = "pending" # pending, running, completed, failed | |
| error_message: Optional[str] = None | |
| # Timestamps | |
| created_at: datetime = field(default_factory=datetime.now) | |
| completed_at: Optional[datetime] = None | |
| # Reflection history | |
| reflection_history: List[Dict[str, Any]] = field(default_factory=list) | |
| # Cost and resource usage | |
| estimated_cost: Optional[float] = None | |
| api_calls_made: int = 0 | |
| def mark_completed(self): | |
| """Mark optimization as completed""" | |
| self.status = "completed" | |
| self.completed_at = datetime.now() | |
| def mark_failed(self, error: str): | |
| """Mark optimization as failed""" | |
| self.status = "failed" | |
| self.error_message = error | |
| self.completed_at = datetime.now() | |
| class OptimizedResult: | |
| """ | |
| User-facing result class that provides clean interface | |
| """ | |
| def __init__(self, | |
| original_prompt: str = "", | |
| optimized_prompt: str = "", | |
| improvement_data: Dict[str, Any] = None, | |
| optimization_time: float = 0.0, | |
| dataset_size: int = 0, | |
| total_iterations: int = 0, | |
| status: str = "pending", | |
| error_message: Optional[str] = None, | |
| detailed_result: Optional[OptimizationResult] = None, | |
| session_id: Optional[str] = None): | |
| """ | |
| Initialize OptimizedResult with individual parameters | |
| Args: | |
| original_prompt: Original seed prompt | |
| optimized_prompt: Optimized prompt | |
| improvement_data: Performance improvement data | |
| optimization_time: Time taken for optimization | |
| dataset_size: Size of dataset used | |
| total_iterations: Number of optimization iterations | |
| status: Optimization status | |
| error_message: Error message if failed | |
| detailed_result: Optional detailed OptimizationResult | |
| session_id: Optional session ID | |
| """ | |
| if improvement_data is None: | |
| improvement_data = {} | |
| # Create internal OptimizationResult | |
| self._result = OptimizationResult( | |
| session_id=session_id or str(uuid.uuid4()), | |
| original_prompt=original_prompt, | |
| optimized_prompt=optimized_prompt, | |
| improvement_data=improvement_data, | |
| optimization_time=optimization_time, | |
| dataset_size=dataset_size, | |
| total_iterations=total_iterations, | |
| status=status, | |
| error_message=error_message | |
| ) | |
| # If detailed_result is provided, use it instead | |
| if detailed_result is not None: | |
| self._result = detailed_result | |
| def prompt(self) -> str: | |
| """The optimized prompt ready for production use""" | |
| return self._result.optimized_prompt | |
| def original_prompt(self) -> str: | |
| """The original seed prompt for reference""" | |
| return self._result.original_prompt | |
| def session_id(self) -> str: | |
| """Unique session identifier""" | |
| return self._result.session_id | |
| def improvement_data(self) -> Dict[str, Any]: | |
| """Performance improvement data""" | |
| return self._result.improvement_data | |
| def status(self) -> str: | |
| """Optimization status""" | |
| return self._result.status | |
| def error_message(self) -> Optional[str]: | |
| """Error message if optimization failed""" | |
| return self._result.error_message | |
| def is_successful(self) -> bool: | |
| """Whether optimization completed successfully""" | |
| return ( | |
| self._result.status == "completed" and | |
| self._result.error_message is None | |
| ) | |
| def optimization_time(self) -> float: | |
| """Time taken for optimization in seconds""" | |
| return self._result.optimization_time | |
| def dataset_size(self) -> int: | |
| """Size of dataset used for optimization""" | |
| return self._result.dataset_size | |
| def total_iterations(self) -> int: | |
| """Total optimization iterations performed""" | |
| return self._result.total_iterations | |
| def estimated_cost(self) -> Optional[float]: | |
| """Estimated cost in USD""" | |
| return self._result.estimated_cost | |
| def get_improvement_summary(self) -> Dict[str, Any]: | |
| """Get summary of improvements made""" | |
| summary = { | |
| 'has_improvement': bool(self._result.improvement_data), | |
| 'optimization_time': self.optimization_time, | |
| 'iterations': self.total_iterations, | |
| 'dataset_size': self.dataset_size | |
| } | |
| # Add improvement percentage if available | |
| if 'improvement_percent' in self._result.improvement_data: | |
| summary['improvement_percent'] = self._result.improvement_data['improvement_percent'] | |
| return summary | |
| def get_reflection_summary(self) -> Dict[str, Any]: | |
| """Get summary of reflection process""" | |
| if not self._result.reflection_history: | |
| return {'total_reflections': 0} | |
| return { | |
| 'total_reflections': len(self._result.reflection_history), | |
| 'reflection_points': [ | |
| r.get('summary', 'No summary') | |
| for r in self._result.reflection_history[:3] # First 3 | |
| ] | |
| } | |
| def get_detailed_result(self) -> OptimizationResult: | |
| """Get the full detailed result for advanced users""" | |
| return self._result | |
| def __str__(self) -> str: | |
| """String representation""" | |
| status_emoji = "✅" if self.is_successful else "❌" if self.status == "failed" else "⏳" | |
| return f"OptimizedResult({status_emoji} {self.status}, time={self.optimization_time:.2f}s)" | |
| def __repr__(self) -> str: | |
| return self.__str__() | |