34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, Field, model_validator
|
|
|
|
|
|
class IntentTask(BaseModel):
|
|
task_id: str = Field(min_length=1)
|
|
title: str = Field(min_length=1)
|
|
objective: str = Field(min_length=1)
|
|
|
|
|
|
class IntentOutput(BaseModel):
|
|
route: Literal["DIRECT_RESPONSE", "TASK_EXECUTION"]
|
|
intent_summary: str = Field(min_length=1)
|
|
direct_response: str | None = None
|
|
tasks: list[IntentTask] = Field(default_factory=list)
|
|
complexity: Literal["simple", "complex"]
|
|
response_metadata: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
@model_validator(mode="after")
|
|
def validate_route(self) -> "IntentOutput":
|
|
if self.route == "DIRECT_RESPONSE":
|
|
if not self.direct_response:
|
|
raise ValueError("direct_response is required for DIRECT_RESPONSE")
|
|
if self.tasks:
|
|
raise ValueError("tasks must be empty for DIRECT_RESPONSE")
|
|
if self.route == "TASK_EXECUTION":
|
|
if not self.tasks:
|
|
raise ValueError("tasks is required for TASK_EXECUTION")
|
|
return self
|