File size: 3,876 Bytes
05f2374
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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()