from pydantic import BaseModel, Field, field_validator from typing import List, Dict, Any class ProgressMeters(BaseModel): technical_detail: int = Field(default=0, ge=0, le=100) artistic_style: int = Field(default=0, ge=0, le=100) composition: int = Field(default=0, ge=0, le=100) context: int = Field(default=0, ge=0, le=100) class SubjectAnalysis(BaseModel): clarity: int = Field(default=0, ge=0, le=100) details_present: List[str] = [] details_missing: List[str] = [] class StyleEvaluation(BaseModel): defined_elements: List[str] = [] missing_elements: List[str] = [] style_score: int = Field(default=0, ge=0, le=100) class TechnicalAssessment(BaseModel): specified_elements: List[str] = [] missing_elements: List[str] = [] technical_score: int = Field(default=0, ge=0, le=100) class CompositionReview(BaseModel): strengths: List[str] = [] weaknesses: List[str] = [] composition_score: int = Field(default=0, ge=0, le=100) class InitialAnalysis(BaseModel): subject_analysis: SubjectAnalysis = SubjectAnalysis() style_evaluation: StyleEvaluation = StyleEvaluation() technical_assessment: TechnicalAssessment = TechnicalAssessment() composition_review: CompositionReview = CompositionReview() class EnhancedVersion(BaseModel): focus_area: str = "" enhanced_prompt: str = "" improvement_score: int = Field(default=0, ge=0, le=100) class PromptAnalysis(BaseModel): initial_analysis: InitialAnalysis = InitialAnalysis() enhanced_versions: List[EnhancedVersion] = [] session_state: Dict[str, Any] = {} @field_validator('enhanced_versions', mode='before') def validate_enhanced_versions(cls, v): if not isinstance(v, list): return [] return v