No description
Find a file
2026-04-19 15:12:07 +03:00
docs адаптация для установки пакетом 2026-04-01 23:30:00 +03:00
lambda_agent_api корректная обработка ошибки, когда чат занят другим клиентом 2026-04-19 14:58:49 +03:00
tests актуализация документации и manual теста 2026-04-19 15:12:07 +03:00
.gitignore файлы проекта 2026-03-25 16:31:31 +03:00
.python-version адаптация для установки пакетом 2026-04-01 23:30:00 +03:00
pyproject.toml корректные pydantic модели для автоматического определения класса по полю type 2026-04-02 00:40:30 +03:00
README.md актуализация документации и manual теста 2026-04-19 15:12:07 +03:00
uv.lock корректные pydantic модели для автоматического определения класса по полю type 2026-04-02 00:40:30 +03:00

from lambda_agent_api import AgentApi

Lambda Agent API

WebSocket API SDK для взаимодействия с AI-агентом.

Release Notes

v1.1

  • Добавлен параметр chat_id в конструктор AgentAPI. Нужен для разделения истории сообщений по чатам/веткам.
  • AgentAPI.connect() вызывает AgentBusyException, если выбранный чат уже занят другим API клиентом.

Установка

В master всегда будет актуальная рабочая версия.

pip install git+https://git.lambda.coredump.ru/platform/agent_api.git

Требуется Python 3.14+.

Быстрый старт (с использованием AgentApi)

Рабочий REPL пример: tests/manual.py.

Предполагаемое управление подключениями

from lambda_agent_api.agent_api import AgentApi

connected_agents: dict[str, AgentApi] = {}


# агент автоматически выключится после нескольких минут бездействия
# этот колбек вызовется при разрыве соединения
def on_agent_disconnect(agent: AgentApi):
    del connected_agents[agent.id]


async def on_telegram_message(from_user: int, text: str):
    agent_id = get_agent_id_by_user(user_id)

    agent = connected_agents.get(agent_id, None)
    if not agent:
        agent = AgentApi(agent_id, get_agent_url(agent_id), on_disconnect=on_agent_disconnect)
        await agent.connect()
        connected_agents[agent_id] = agent

    async for event in agent.send_message(text):
        ...

Обработка ошибок

  • AgentBusyException возникает, если отправить send_message пока предыдущий запрос ещё в процессе.
  • AgentException возникает, если агент возвращает ERROR или есть проблемы с подключением.
  • on_disconnect callback вызывается один раз при закрытии/разрыве соединения.

Протокол

Клиент → Сервер

USER_MESSAGE

Полное сообщение от пользователя.

{
  "type": "USER_MESSAGE",
  "text": "Текст сообщения"
}
Поле Тип Описание
type string Всегда USER_MESSAGE
text string Текст сообщения

Сервер → Клиент

STATUS

Отправляется сервером при открытии соединения с клиентом. Будет дополнен информацией о готовности агента принимать сообщения.

{
  "type": "STATUS"
}

AGENT_EVENT_TEXT_CHUNK

Чанк текста ответа агента.

{
  "type": "AGENT_EVENT_TEXT_CHUNK",
  "text": "Фрагмент текста",
  "source": "main"
}
Поле Тип Описание
type string Всегда AGENT_EVENT_TEXT_CHUNK
text string Фрагмент текста ответа агента
source string Источник события (по умолчанию "main")

AGENT_EVENT_TOOL_CALL_CHUNK

Агент решил использовать инструмент и генерирует аргументы.

{
  "type": "AGENT_EVENT_TOOL_CALL_CHUNK",
  "tool_name": "имя_инструмента",
  "args_chunk": "{\"key\": \"value\"}",
  "source": "main"
}
Поле Тип Описание
type string Всегда AGENT_EVENT_TOOL_CALL_CHUNK
tool_name string Имя инструмента (может быть null в первом чанке)
args_chunk string Кусок JSON-аргументов (может быть null)
source string Источник события (по умолчанию "main")

AGENT_EVENT_TOOL_RESULT

Инструмент отработал и вернул результат.

{
  "type": "AGENT_EVENT_TOOL_RESULT",
  "tool_name": "имя_инструмента",
  "result": "результат выполнения",
  "source": "main"
}
Поле Тип Описание
type string Всегда AGENT_EVENT_TOOL_RESULT
tool_name string Имя инструмента
result any Результат выполнения (строка, объект или массив)
source string Источник события (по умолчанию "main")

AGENT_EVENT_CUSTOM_UPDATE

Кастомный прогресс (например, скачивание файла) изнутри инструмента.

{
  "type": "AGENT_EVENT_CUSTOM_UPDATE",
  "payload": {"status": "in_progress", "progress": 50},
  "source": "main"
}
Поле Тип Описание
type string Всегда AGENT_EVENT_CUSTOM_UPDATE
payload object Любые данные о прогрессе
source string Источник события (по умолчанию "main")

AGENT_EVENT_END

Агент закончил генерацию ответа.

{
  "type": "AGENT_EVENT_END",
  "tokens_used": 42
}
Поле Тип Описание
type string Всегда AGENT_EVENT_END
tokens_used int Количество использованных токенов

ERROR

Неопределенная ошибка в работе агента.

{
  "type": "ERROR",
  "code": "error_code",
  "details": "Описание ошибки"
}
Поле Тип Описание
code string Код ошибки
details string Подробности

GRACEFUL_DISCONNECT

Отправляется перед завершением работы контейнера с агентом. Например, при долгом бездействии. Нужно, чтобы отделять обрыв соединения из-за ошибки с необходимостью повторного подключения. Приход этого сообщения означает, что агент осознанно завершает работу с клиентом по какой-то причине. Для дальнейшего взаимодействия нужно снова обратиться к мастеру.

{
  "type": "GRACEFUL_DISCONNECT"
}

Неопределенная ошибка в работе агента.

{
  "type": "ERROR",
  "code": "error_code",
  "details": "Описание ошибки"
}
Поле Тип Описание
code string Код ошибки
details string Подробности

GRACEFUL_DISCONNECT

Отправляется перед завершением работы контейнера с агентом. Например, при долгом бездействии. Нужно, чтобы отделять обрыв соединения из-за ошибки с необходимостью повторного подключения. Приход этого сообщения означает, что агент осознанно завершает работу с клиентом по какой-то причине. Для дальнейшего взаимодействия нужно снова обратиться к мастеру.

{
  "type": "GRACEFUL_DISCONNECT"
}

Схема взаимодействия