File size: 2,333 Bytes
45e9462
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from pydantic import BaseModel, Field
from typing import List,Literal, Optional

# Pydantic Models

class CreditCardRecommendation(BaseModel):
    """

    Structured response for credit card recommendations.

    Handles both successful recommendations and cases where no suitable card is found.

    """
    card_found: bool = Field(
        description="A boolean flag that MUST be `True` if a card is recommended, and `False` otherwise."
    )
    best_card: Optional[str] = Field(
        default=None,
        description="The name of the best credit card recommended. This MUST be null if card_found is false."
    )
    explanation: Optional[List[str]] = Field(
        default=None,
        description=("A numbered list explaining why the card is best: "
                    "1. Main benefit aligned to user query. "
                    "2-3. Additional perks. "
                    "4. Final justification tying everything to the query."
        )
    )
    reply_if_card_not_found: Optional[str] = Field(
        default=None,
        description=(
            "A user-facing message generated by rephrasing the AI agent's internal monologue when no exact card is found. "
            "This reply should politely explain and justify that no perfect match was found and present the alternative cards or information, if available, as helpful suggestions to explore. "
            "This field MUST be populated if and only if card_found is false."
        )
    )

class IntentClassification(BaseModel):
    """

    Classifies the user query into 'credit-card-recommendation', 

    'general-credit-related', or 'out-of-scope'.

    """
    intent: Literal["credit-card-recommendation", "general-credit-related", "out-of-scope"] = Field(
        description=(
            "The classification of the user's query. "
            "'credit-card-recommendation' for seeking card suggestions. "
            "'general-credit-related' for informational questions about credit cards. "
            "'out-of-scope' for all other cases."
        )
    )

#for Chain of Thoughts(CoT) prompting
class RouterResult(BaseModel):
    """The structured output from the router agent."""
    decision: Literal["call_tool", "answer_from_context"]
    card_names_to_fetch: Optional[List[str]] = None