new-1 / backend /models.py
eliason1's picture
Upload 100 files
fed4f1f verified
"""Pydantic models for API requests and responses."""
from enum import Enum
from typing import Any
from pydantic import BaseModel
class OpType(str, Enum):
"""Operation types matching agent/core/agent_loop.py."""
USER_INPUT = "user_input"
EXEC_APPROVAL = "exec_approval"
INTERRUPT = "interrupt"
UNDO = "undo"
COMPACT = "compact"
SHUTDOWN = "shutdown"
class Operation(BaseModel):
"""Operation to be submitted to the agent."""
op_type: OpType
data: dict[str, Any] | None = None
class Submission(BaseModel):
"""Submission wrapper with ID and operation."""
id: str
operation: Operation
class ToolApproval(BaseModel):
"""Approval decision for a single tool call."""
tool_call_id: str
approved: bool
feedback: str | None = None
class ApprovalRequest(BaseModel):
"""Request to approve/reject tool calls."""
session_id: str
approvals: list[ToolApproval]
class SubmitRequest(BaseModel):
"""Request to submit user input."""
session_id: str
text: str
class SessionResponse(BaseModel):
"""Response when creating a new session."""
session_id: str
ready: bool = True
class SessionInfo(BaseModel):
"""Session metadata."""
session_id: str
created_at: str
is_active: bool
message_count: int
user_id: str = "dev"
class HealthResponse(BaseModel):
"""Health check response."""
status: str = "ok"
active_sessions: int = 0
max_sessions: int = 0
class LLMHealthResponse(BaseModel):
"""LLM provider health check response."""
status: str # "ok" | "error"
model: str
error: str | None = None
error_type: str | None = None # "auth" | "credits" | "rate_limit" | "network" | "unknown"