File size: 3,454 Bytes
4ef118d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from pydantic import BaseModel, Field, field_validator


class TitleResponse(BaseModel):
    """Response model for title generation."""
    title: str = Field(..., description="A short, concise title (max 5 words).")


class EmojiResponse(BaseModel):
    """Response model for emoji generation."""
    emojis: list[str] = Field(..., description="An array containing exactly 1 emoji character.")

    @field_validator("emojis", mode="before")
    @classmethod
    def parse_emojis(cls, v):
        if isinstance(v, str):
            import json
            try:
                # Try to parse if it's a JSON string representation of a list
                return json.loads(v)
            except json.JSONDecodeError:
                # If it's just a raw emoji string, wrap it in a list
                return [v]
        return v


class TitleSpaceResponse(BaseModel):
    """Response model for title and space generation."""
    title: str = Field(..., description="A short, concise title (max 5 words).")
    space_label: str | None = Field(default=None, alias="spaceLabel", description="The label of the selected space, or null if none fit.")
    emojis: list[str] = Field(..., description="An array containing exactly 1 emoji character.")

    @field_validator("emojis", mode="before")
    @classmethod
    def parse_emojis(cls, v):
        if isinstance(v, str):
            import json
            try:
                return json.loads(v)
            except json.JSONDecodeError:
                return [v]
        return v


class TitleSpaceAgentResponse(BaseModel):
    """Response model for title, space and agent generation."""
    title: str = Field(..., description="A short, concise title (max 5 words).")
    space_label: str | None = Field(default=None, alias="spaceLabel", description="The label of the selected space, or null if none fit.")
    agent_name: str | None = Field(default=None, alias="agentName", description="The name of the selected agent, or null if none fit.")
    emojis: list[str] = Field(..., description="An array containing exactly 1 emoji character.")

    @field_validator("emojis", mode="before")
    @classmethod
    def parse_emojis(cls, v):
        if isinstance(v, str):
            import json
            try:
                return json.loads(v)
            except json.JSONDecodeError:
                return [v]
        return v


class RelatedQuestionsResponse(BaseModel):
    """Response model for related questions generation."""
    questions: list[str] = Field(..., description="A list of exactly 3 relevant follow-up questions.")


class SpaceAgentResponse(BaseModel):
    """Response model for space and agent selection."""
    space_label: str | None = Field(
        default=None,
        alias="spaceLabel",
        description="The label of the selected space, or null if none fit.",
    )
    agent_name: str | None = Field(
        default=None,
        alias="agentName",
        description="The name of the selected agent, or null if none fit.",
    )


class AgentNameResponse(BaseModel):
    """Response model for auto agent selection."""
    agent_name: str | None = Field(
        default=None,
        alias="agentName",
        description="The name of the selected agent, or null if none fit.",
    )


class DailyTipResponse(BaseModel):
    """Response model for daily tip generation."""
    tip: str = Field(..., description="A short, practical tip for today (1-2 sentences).")