| from typing import List, Optional, Dict, Union | |
| from pydantic import BaseModel, Field | |
| from enum import Enum | |
| class SentimentEnum(str, Enum): | |
| FRUSTRATED = "Frustrated" | |
| CURIOUS = "Curious" | |
| ANGRY = "Angry" | |
| NEUTRAL = "Neutral" | |
| class PriorityEnum(str, Enum): | |
| P0 = "P0 (High)" | |
| P1 = "P1 (Medium)" | |
| P2 = "P2 (Low)" | |
| class TopicTagEnum(str, Enum): | |
| HOW_TO = "How-to" | |
| PRODUCT = "Product" | |
| CONNECTOR = "Connector" | |
| LINEAGE = "Lineage" | |
| API_SDK = "API/SDK" | |
| SSO = "SSO" | |
| GLOSSARY = "Glossary" | |
| BEST_PRACTICES = "Best practices" | |
| SENSITIVE_DATA = "Sensitive data" | |
| SECURITY = "Security" | |
| RBAC = "RBAC" | |
| AUTOMATION = "Automation" | |
| TROUBLESHOOTING = "Troubleshooting" | |
| INTEGRATION = "Integration" | |
| class Ticket(BaseModel): | |
| id: str = Field(..., description="Unique ticket identifier") | |
| subject: str = Field(..., description="Ticket subject line") | |
| body: str = Field(..., description="Ticket body content") | |
| class TicketClassification(BaseModel): | |
| topic_tags: List[TopicTagEnum] = Field(..., description="Relevant topic tags for the ticket") | |
| sentiment: SentimentEnum = Field(..., description="Customer sentiment") | |
| priority: PriorityEnum = Field(..., description="Ticket priority level") | |
| reasoning: Optional[str] = Field(None, description="AI reasoning for the classification") | |
| class ClassifiedTicket(BaseModel): | |
| ticket: Ticket | |
| classification: TicketClassification | |
| class SingleTicketRequest(BaseModel): | |
| ticket: Ticket | |
| class BulkTicketRequest(BaseModel): | |
| tickets: List[Ticket] | |
| class ClassificationResponse(BaseModel): | |
| success: bool | |
| data: Optional[List[ClassifiedTicket]] = None | |
| error: Optional[str] = None | |
| total_processed: int = 0 | |
| class InteractiveAnalysis(BaseModel): | |
| topic_tags: List[str] | |
| sentiment: str | |
| priority: str | |
| reasoning: str | |
| class DirectAnswerResponse(BaseModel): | |
| type: str = "direct_answer" | |
| answer: str | |
| sources: List[str] = [] | |
| class RoutingResponse(BaseModel): | |
| type: str = "routing" | |
| message: str | |
| class InteractiveAgentResponse(BaseModel): | |
| internal_analysis: InteractiveAnalysis | |
| final_response: Dict | |