61 lines
1.4 KiB
Python
61 lines
1.4 KiB
Python
from typing import Any, Dict, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class CurrentState(BaseModel):
|
|
last_action_code: str = "desconhecido"
|
|
last_route: str = "desconhecido"
|
|
last_task_status: str = "desconhecido"
|
|
metadata: Dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class AnalyzeRequest(BaseModel):
|
|
last_customer_message: str = Field(..., min_length=1)
|
|
previous_context: str = ""
|
|
current_state: CurrentState = Field(default_factory=CurrentState)
|
|
|
|
source: Optional[str] = "manual"
|
|
conversation_id: Optional[str] = None
|
|
contact_id: Optional[str] = None
|
|
|
|
|
|
class ActionDecision(BaseModel):
|
|
action_code: str
|
|
note: str = ""
|
|
confidence: float = Field(ge=0.0, le=1.0, default=0.0)
|
|
|
|
|
|
class ActionResult(BaseModel):
|
|
action_code: str
|
|
route: str
|
|
action_required: bool = False
|
|
action: str
|
|
note: str = ""
|
|
safe_to_post: bool = False
|
|
|
|
|
|
class UsageInfo(BaseModel):
|
|
id: Optional[str] = None
|
|
model: Optional[str] = None
|
|
provider: Optional[str] = None
|
|
prompt_tokens: int = 0
|
|
completion_tokens: int = 0
|
|
total_tokens: int = 0
|
|
cost: float = 0.0
|
|
|
|
|
|
class AnalyzeResponse(BaseModel):
|
|
app: str = "ClientFlow"
|
|
model: str
|
|
|
|
action_decision: ActionDecision
|
|
action_result: ActionResult
|
|
|
|
usage: UsageInfo
|
|
needs_review: bool = False
|
|
|
|
action_run_id: Optional[str] = None
|
|
message_id: Optional[str] = None
|
|
task_id: Optional[str] = None
|