diff --git a/lambda_agent_api/agent_api.py b/lambda_agent_api/agent_api.py index 9dd4608..a999429 100644 --- a/lambda_agent_api/agent_api.py +++ b/lambda_agent_api/agent_api.py @@ -164,11 +164,17 @@ class AgentApi: except Exception as e: logger.error(f"Error in on_disconnect: {e}") - async def send_message(self, text: str) -> AsyncIterator[AgentEventUnion]: + async def send_message( + self, text: str, attachments: list[str] | None = None + ) -> AsyncIterator[AgentEventUnion]: """ Нативный асинхронный генератор. Не требует отдельного класса ResponseIterator. Гарантированно освобождает блокировку. + + Args: + text: Текст сообщения. + attachments: Список путей к файлам относительно /workspace. """ if not self._connected or not self._ws: raise AgentException( @@ -185,7 +191,11 @@ class AgentApi: try: self._current_queue = asyncio.Queue() - message = MsgUserMessage(type=EClientMessage.USER_MESSAGE, text=text) + message = MsgUserMessage( + type=EClientMessage.USER_MESSAGE, + text=text, + attachments=attachments or [], + ) await self._ws.send_str(message.model_dump_json()) logger.debug(f"[{self.id}] Sent message: {text[:50]}...") @@ -248,7 +258,7 @@ class AgentApi: self._request_lock.release() async def _listen(self): - """" + """ Прослушивание вебсокета. """ try: diff --git a/lambda_agent_api/client.py b/lambda_agent_api/client.py index df672c0..ca41435 100644 --- a/lambda_agent_api/client.py +++ b/lambda_agent_api/client.py @@ -19,6 +19,12 @@ class MsgUserMessage(BaseModel): """ Текст сообщения. """ + attachments: list[str] = Field(default_factory=list) + """ + Список вложений (файлов) к сообщению. + Передается путь до файла относительно /workspace . + Файлы уже должны быть загружены в директорию. + """ ClientMessage = TypeAdapter(Annotated[