/
alexefan136
/
flowstack
Обзор
Документация
Войти
/
alexefan136
/
flowstack
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
core/engine/src/schemas/agent.py
116 строк
4 KB
Alexander Efanov
upd fix
31 июл 2026, 19:17
31 июл 2026, 19:17
d146d86
Код
Авторство
О чём код?
"""Pydantic schemas для агентов.""" from __future__ import annotations from datetime import datetime from typing import Any, Literal from uuid import UUID from pydantic import BaseModel, ConfigDict, Field # ============================================================================ # Types # ============================================================================ AgentStatus = Literal["idle", "running", "paused", "error"] # ============================================================================ # Agent # ============================================================================ class AgentCreate(BaseModel): """ Запрос на создание агента. Note: ``system_prompt`` обязателен (в модели ``nullable=False``). ``temperature``/``max_tokens`` передаются через ``metadata``. """ name: str = Field(..., min_length=1, max_length=200) system_prompt: str = Field(..., min_length=1) description: str | None = Field(default=None, max_length=2000) model: str = Field(default="deepseek-ai/DeepSeek-V4-Pro", max_length=100) agent_type: str = Field(default="researcher", max_length=50) tools: list[str] = Field(default_factory=list) mcp_server_ids: list[str] = Field(default_factory=list) tags: list[str] = Field(default_factory=list) # Доп. настройки (temperature, max_tokens...) — хранятся в metadata_ metadata: dict[str, Any] = Field(default_factory=dict) class AgentUpdate(BaseModel): """Запрос на обновление агента (все поля опциональны).""" name: str | None = Field(default=None, min_length=1, max_length=200) system_prompt: str | None = Field(default=None, min_length=1) description: str | None = Field(default=None, max_length=2000) model: str | None = Field(default=None, max_length=100) agent_type: str | None = Field(default=None, max_length=50) tools: list[str] | None = None mcp_server_ids: list[str] | None = None tags: list[str] | None = None status: AgentStatus | None = None metadata: dict[str, Any] | None = None class AgentResponse(BaseModel): """Ответ с информацией об агенте.""" model_config = ConfigDict(from_attributes=True, populate_by_name=True) id: UUID workspace_id: str name: str description: str | None system_prompt: str model: str agent_type: str tools: list[str] mcp_server_ids: list[str] status: str current_task_id: UUID | None = None # Статистика использования tasks_count: int = 0 total_tokens_used: int = 0 total_cost_usd: float = 0.0 success_rate: float = 0.0 tags: list[str] # В модели атрибут metadata_ (колонка "metadata") metadata: dict[str, Any] = Field( default_factory=dict, validation_alias="metadata_", serialization_alias="metadata", ) created_at: datetime updated_at: datetime last_run_at: datetime | None = None # ============================================================================ # Agent Run # ============================================================================ class AgentRunRequest(BaseModel): """Запрос на запуск агента.""" input: str = Field(..., min_length=1) stream: bool = Field(default=False) session_id: UUID | None = None class AgentRunResponse(BaseModel): """Ответ с результатом запуска агента (non-streaming).""" agent_id: UUID status: str output: str reasoning: str | None = None tokens_used: int = 0 tool_calls: int = 0 duration_ms: float = 0.0