from typing import List, Optional, Dict, Any from pydantic import BaseModel, Field, ConfigDict class DirectiveImpactAssessment(BaseModel): feasibility: str = Field(default="Not assessed") integration_approach: str = Field(default="Not determined") potential_conflicts: List[str] = Field(default_factory=lambda: ["None identified"]) resolution_strategy: str = Field(default="Not required") class AnalysisScore(BaseModel): score: int = Field(default=0, ge=0, le=100) strengths: List[str] = Field(default_factory=lambda: ["Not analyzed"]) weaknesses: List[str] = Field(default_factory=lambda: ["Not analyzed"]) class ImprovementAxis(BaseModel): axis_name: str = Field(default="Default") focus_area: str = Field(default="Not specified") version: int = Field(default=1) score: int = Field(default=0, ge=0, le=100) current_state: str = Field(default="Not evaluated") directive_alignment: str = Field(default="Not aligned") recommended_additions: List[str] = Field(default_factory=lambda: ["No recommendations"]) expected_impact: str = Field(default="Not determined") technical_considerations: List[str] = Field(default_factory=lambda: ["None specified"]) enhanced_prompt: str = Field(default="") expected_improvements: List[str] = Field(default_factory=lambda: ["None specified"]) class TechnicalRecommendations(BaseModel): style_keywords: List[str] = Field(default_factory=lambda: ["None"]) composition_tips: List[str] = Field(default_factory=lambda: ["None"]) negative_prompt_suggestions: List[str] = Field(default_factory=lambda: ["None"]) directive_specific_adjustments: List[str] = Field(default_factory=lambda: ["None"]) class InitialAnalysis(BaseModel): initial_prompt: str user_directive: str = Field(default="") directive_impact_assessment: DirectiveImpactAssessment = Field(default_factory=DirectiveImpactAssessment) subject_analysis: AnalysisScore = Field(default_factory=AnalysisScore) style_evaluation: AnalysisScore = Field(default_factory=AnalysisScore) technical_assessment: AnalysisScore = Field(default_factory=AnalysisScore) composition_review: AnalysisScore = Field(default_factory=AnalysisScore) context_evaluation: AnalysisScore = Field(default_factory=AnalysisScore) mood_assessment: AnalysisScore = Field(default_factory=AnalysisScore) class APIResponse(BaseModel): model_config = ConfigDict(populate_by_name=True) initial_analysis: InitialAnalysis improvement_axes: List[ImprovementAxis] = Field(default_factory=list) technical_recommendations: TechnicalRecommendations = Field(default_factory=TechnicalRecommendations) def create_error_response(user_prompt: str, user_directive: str = "") -> Dict[str, Any]: """Create a standardized error response that complies with APIResponse model""" return APIResponse( initial_analysis=InitialAnalysis( initial_prompt=user_prompt, user_directive=user_directive ), improvement_axes=[ ImprovementAxis( axis_name="Error", focus_area="Error occurred", version=1, score=0, current_state="Failed", directive_alignment="Failed to assess", recommended_additions=["Error processing prompt"], expected_impact="None", technical_considerations=["Error occurred"], enhanced_prompt=user_prompt, expected_improvements=["Error processing prompt"] ) ], technical_recommendations=TechnicalRecommendations( style_keywords=["Error"], composition_tips=["Error"], negative_prompt_suggestions=["Error"], directive_specific_adjustments=["Error"] ) ).model_dump()