Skip to content

← Back to YouLab

Pydantic models for API requests and responses.

  • Main schemas: src/youlab_server/server/schemas.py
  • Strategy schemas: src/youlab_server/server/strategy/schemas.py

class CreateAgentRequest(BaseModel):
user_id: str
agent_type: str = "tutor"
user_name: str | None = None
class AgentResponse(BaseModel):
agent_id: str
user_id: str
agent_type: str
agent_name: str
created_at: datetime | int | None = None
class AgentListResponse(BaseModel):
agents: list[AgentResponse]

class ChatRequest(BaseModel):
agent_id: str
message: str
chat_id: str | None = None
chat_title: str | None = None
class ChatResponse(BaseModel):
response: str
agent_id: str
class StreamChatRequest(BaseModel):
agent_id: str
message: str
chat_id: str | None = None
chat_title: str | None = None
enable_thinking: bool = True

class HealthResponse(BaseModel):
status: str
letta_connected: bool
honcho_connected: bool = False
version: str = "0.1.0"

class UploadDocumentRequest(BaseModel):
content: str
tags: list[str] = Field(default_factory=list)
class UploadDocumentResponse(BaseModel):
success: bool
class AskRequest(BaseModel):
question: str
class AskResponse(BaseModel):
response: str
class SearchDocumentsResponse(BaseModel):
documents: list[str]
class HealthResponse(BaseModel):
status: str
agent_exists: bool

class PersonaBlock(BaseModel):
name: str = "Assistant"
role: str
capabilities: list[str] = Field(default_factory=list)
tone: str = "professional"
verbosity: str = "concise"
constraints: list[str] = Field(default_factory=list)
expertise: list[str] = Field(default_factory=list)
class HumanBlock(BaseModel):
name: str | None = None
role: str | None = None
current_task: str | None = None
session_state: SessionState = SessionState.IDLE
preferences: list[str] = Field(default_factory=list)
context_notes: list[str] = Field(default_factory=list)
facts: list[str] = Field(default_factory=list)
class SessionState(str, Enum):
IDLE = "idle"
ACTIVE_TASK = "active_task"
WAITING_INPUT = "waiting_input"
THINKING = "thinking"
ERROR_RECOVERY = "error_recovery"

class AgentTemplate(BaseModel):
type_id: str
display_name: str
description: str = ""
persona: PersonaBlock
human: HumanBlock = Field(default_factory=HumanBlock)

@dataclass
class ContextMetrics:
persona_chars: int
human_chars: int
persona_max: int
human_max: int
@property
def persona_usage(self) -> float
@property
def human_usage(self) -> float
@property
def total_usage(self) -> float
@dataclass
class LLMMetrics:
prompt_tokens: int = 0
completion_tokens: int = 0
total_tokens: int = 0
latency_ms: float = 0
model: str = ""