70 lines
1.7 KiB
Python
70 lines
1.7 KiB
Python
"""AI Copilot schemas — query, execute, history."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class CopilotQueryRequest(BaseModel):
|
|
"""Natural language query to the AI copilot."""
|
|
|
|
query: str = Field(..., min_length=1, max_length=2000)
|
|
conversation_id: str | None = None
|
|
context: dict = Field(default_factory=dict)
|
|
|
|
|
|
class CopilotAction(BaseModel):
|
|
"""A proposed API action derived from NL input."""
|
|
|
|
method: str = Field(..., pattern="^(GET|POST|PATCH|DELETE)$")
|
|
path: str = Field(..., min_length=1)
|
|
body: dict | None = None
|
|
description: str = ""
|
|
confidence: float = Field(0.0, ge=0.0, le=1.0)
|
|
|
|
|
|
class CopilotQueryResponse(BaseModel):
|
|
"""Response from copilot query — proposed actions for user confirmation."""
|
|
|
|
conversation_id: str
|
|
message: str
|
|
proposed_actions: list[CopilotAction] = Field(default_factory=list)
|
|
|
|
|
|
class CopilotExecuteRequest(BaseModel):
|
|
"""Execute a proposed action after user confirmation."""
|
|
|
|
conversation_id: str
|
|
action: CopilotAction
|
|
|
|
|
|
class CopilotExecuteResponse(BaseModel):
|
|
"""Result of executing a proposed action."""
|
|
|
|
conversation_id: str
|
|
success: bool
|
|
status_code: int
|
|
data: dict | list | None = None
|
|
error: str | None = None
|
|
|
|
|
|
class CopilotMessageResponse(BaseModel):
|
|
"""A single message in conversation history."""
|
|
|
|
id: str
|
|
role: str
|
|
content: str
|
|
proposed_actions: list[dict] | None = None
|
|
executed_action: dict | None = None
|
|
execution_result: dict | None = None
|
|
created_at: str | None = None
|
|
|
|
|
|
class CopilotHistoryResponse(BaseModel):
|
|
"""Paginated conversation history."""
|
|
|
|
items: list[CopilotMessageResponse]
|
|
total: int
|
|
page: int
|
|
page_size: int
|