61 lines
3.1 KiB
Python
61 lines
3.1 KiB
Python
from typing import Any
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
from api.domain.task_status import TaskStatus
|
||
|
||
|
||
class BrowserTaskRequest(BaseModel):
|
||
"""Запрос на запуск задачи в browser-use агенте."""
|
||
|
||
task: str = Field(..., description="Текстовая задача для browser-use агента")
|
||
timeout: int = Field(300, description="Максимальное время выполнения задачи в секундах")
|
||
metadata: dict[str, Any] | None = Field(default=None, description="Дополнительные метаданные клиента")
|
||
|
||
|
||
class BrowserTaskAcceptedResponse(BaseModel):
|
||
"""Ответ о том, что задача принята в обработку."""
|
||
|
||
task_id: str
|
||
status: TaskStatus
|
||
|
||
|
||
class BrowserTaskStatusResponse(BaseModel):
|
||
"""Текущий статус задачи и временные отметки ее выполнения."""
|
||
|
||
task_id: str
|
||
status: TaskStatus
|
||
create_at: float = Field(..., description="Время создания задачи в Unix timestamp")
|
||
started_at: float | None = Field(default=None, description="Время начала выполнения в Unix timestamp")
|
||
finished_at: float | None = Field(default=None, description="Время завершения выполнения в Unix timestamp")
|
||
error: str | None = Field(default=None, description="Текст ошибки, если задача завершилась с ошибкой")
|
||
|
||
|
||
class BrowserTaskResultResponse(BaseModel):
|
||
"""Финальный результат выполнения задачи в browser-use."""
|
||
|
||
task_id: str
|
||
status: TaskStatus
|
||
success: bool = Field(..., description="Успешно ли выполнена задача")
|
||
execution_time: float = Field(..., description="Фактическое время выполнения в секундах")
|
||
result: str | None = Field(default=None, description="Итоговый текстовый результат")
|
||
error: str | None = Field(default=None, description="Текст ошибки, если выполнение не удалось")
|
||
raw_response: dict[str, Any] | None = Field(default=None, description="Сырой ответ от browser-use RPC")
|
||
|
||
|
||
class TaskHistoryEvent(BaseModel):
|
||
"""Одно действие/шаг в истории выполнения browser-use агента."""
|
||
|
||
step: int = Field(..., description="Порядковый номер события в истории")
|
||
kind: str = Field(..., description="Тип события (thought/action/error/system)")
|
||
content: str | None = Field(default=None, description="Краткое текстовое описание события")
|
||
data: dict[str, Any] = Field(default_factory=dict, description="Дополнительные структурированные данные")
|
||
|
||
|
||
class BrowserTaskHistoryResponse(BaseModel):
|
||
"""История действий агента для конкретной задачи."""
|
||
|
||
task_id: str
|
||
status: TaskStatus
|
||
history: list[TaskHistoryEvent] = Field(default_factory=list)
|
||
|