53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
"""Pydantic schemas for the AI auto-fix feature."""
|
|
from typing import Any, Literal
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
# ── Requests ──
|
|
|
|
|
|
class ValidationErrorInput(BaseModel):
|
|
"""A single validation error to fix."""
|
|
|
|
node_id: str = Field(..., description="ID of the node with the error")
|
|
message: str = Field(..., description="The validation error message")
|
|
|
|
|
|
class AIFixTreeRequest(BaseModel):
|
|
"""Request to generate AI fixes for validation errors."""
|
|
|
|
tree_structure: dict[str, Any] = Field(..., description="Full tree structure")
|
|
tree_name: str = Field("", max_length=255, description="Name of the flow")
|
|
tree_type: Literal["troubleshooting", "procedural", "maintenance"] = Field(
|
|
"troubleshooting", description="Type of flow"
|
|
)
|
|
validation_errors: list[ValidationErrorInput] = Field(
|
|
..., min_length=1, max_length=10, description="Errors to fix"
|
|
)
|
|
|
|
|
|
# ── Responses ──
|
|
|
|
|
|
class AIFixProposal(BaseModel):
|
|
"""A single proposed fix from the AI."""
|
|
|
|
target_node_id: str
|
|
error_message: str
|
|
description: str
|
|
original_node: dict[str, Any]
|
|
fixed_node: dict[str, Any]
|
|
|
|
|
|
class AIFixTokenUsage(BaseModel):
|
|
input: int = 0
|
|
output: int = 0
|
|
|
|
|
|
class AIFixTreeResponse(BaseModel):
|
|
"""Response with proposed fixes."""
|
|
|
|
fixes: list[AIFixProposal]
|
|
tokens_used: AIFixTokenUsage
|