Исправлен ридми в соответствии с изменениями в agent_api
This commit is contained in:
parent
f0986b6fd6
commit
c7a9d3446d
1 changed files with 39 additions and 30 deletions
|
|
@ -16,22 +16,24 @@ pip install .
|
||||||
import asyncio
|
import asyncio
|
||||||
from agent_api import AgentApi, OM
|
from agent_api import AgentApi, OM
|
||||||
|
|
||||||
|
def my_callback(message):
|
||||||
|
if isinstance(message, OM.Error):
|
||||||
|
print(f"\n[Ошибка: {message.code}] {message.details}")
|
||||||
|
elif isinstance(message, OM.Status):
|
||||||
|
print("✓ Agent status update")
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
# Автоматическое управление соединением через контекстный менеджер
|
# Автоматическое управление соединением через контекстный менеджер
|
||||||
async with AgentApi("ws://localhost:8000") as agent:
|
async with AgentApi("ws://localhost:8000", callback=my_callback) as api:
|
||||||
# Отправляем сообщение
|
# Отправляем сообщение и получаем итератор ответа
|
||||||
await agent.send_user_message("Привет, агент!")
|
response = await api.send_message("Привет, агент!")
|
||||||
|
|
||||||
# Читаем ответ потоком событий
|
# Читаем ответ потоком чанков
|
||||||
async for message in agent.listen():
|
async for chunk in response:
|
||||||
if isinstance(message, OM.EventTextChunk):
|
if isinstance(chunk, OM.EventTextChunk):
|
||||||
print(message.text, end="", flush=True)
|
print(chunk.text, end="", flush=True)
|
||||||
elif isinstance(message, OM.EventEnd):
|
|
||||||
print(f"\n[Завершено, использовано токенов: {message.tokens_used}]")
|
print(f"\n[Завершено, использовано токенов: {response.tokens}]")
|
||||||
break
|
|
||||||
elif isinstance(message, OM.Error):
|
|
||||||
print(f"\n[Ошибка: {message.code}] {message.details}")
|
|
||||||
break
|
|
||||||
|
|
||||||
asyncio.run(main())
|
asyncio.run(main())
|
||||||
```
|
```
|
||||||
|
|
@ -44,7 +46,8 @@ asyncio.run(main())
|
||||||
|
|
||||||
- ✅ **Асинхронный клиент** на основе `aiohttp`
|
- ✅ **Асинхронный клиент** на основе `aiohttp`
|
||||||
- ✅ **Контекстный менеджер** для управления соединением
|
- ✅ **Контекстный менеджер** для управления соединением
|
||||||
- ✅ **Асинхронный генератор** `listen()` для потокового получения сообщений
|
- ✅ **ResponseIterator** для асинхронной итерации по чанкам ответа
|
||||||
|
- ✅ **Callback** для обработки событий вне генерации ответа (ошибки, статусы)
|
||||||
- ✅ **Типизированные сообщения** через Pydantic с дискриминированными объединениями
|
- ✅ **Типизированные сообщения** через Pydantic с дискриминированными объединениями
|
||||||
- ✅ **Обработка ошибок** с кастомным исключением `AgentException`
|
- ✅ **Обработка ошибок** с кастомным исключением `AgentException`
|
||||||
- ✅ **Логирование** на всех уровнях операций
|
- ✅ **Логирование** на всех уровнях операций
|
||||||
|
|
@ -53,25 +56,31 @@ asyncio.run(main())
|
||||||
### Использование
|
### Использование
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from agent_api import AgentApi, AgentException, OM
|
from agent_api import AgentApi, OM
|
||||||
|
|
||||||
# Использование с контекстным менеджером
|
# Использование с контекстным менеджером
|
||||||
async with AgentApi("ws://localhost:8000") as agent:
|
async with AgentApi("ws://localhost:8000", callback=my_callback) as api:
|
||||||
# Отправка сообщения
|
# Отправка сообщения и получение итератора
|
||||||
await agent.send_user_message("Your question here")
|
response = await api.send_message("Your question here")
|
||||||
|
|
||||||
# Получение потока ответов
|
# Итерация по чанкам ответа
|
||||||
try:
|
async for chunk in response:
|
||||||
async for message in agent.listen():
|
if isinstance(chunk, OM.EventTextChunk):
|
||||||
if isinstance(message, OM.Status):
|
print(chunk.text, end="", flush=True)
|
||||||
print("✓ Agent is ready")
|
|
||||||
elif isinstance(message, OM.EventTextChunk):
|
print(f"\nDone! Tokens: {response.tokens}")
|
||||||
print(message.text, end="", flush=True)
|
```
|
||||||
elif isinstance(message, OM.EventEnd):
|
|
||||||
print(f"\nDone! Tokens: {message.tokens_used}")
|
Callback функция для обработки событий вне генерации:
|
||||||
break
|
|
||||||
except AgentException as e:
|
```python
|
||||||
print(f"Agent error ({e.code}): {e.details}")
|
def my_callback(message):
|
||||||
|
if isinstance(message, OM.Status):
|
||||||
|
print("Agent status update")
|
||||||
|
elif isinstance(message, OM.Error):
|
||||||
|
print(f"Agent error: {message.code} - {message.details}")
|
||||||
|
elif isinstance(message, OM.GracefulDisconnect):
|
||||||
|
print("Agent disconnecting gracefully")
|
||||||
```
|
```
|
||||||
|
|
||||||
## Классический подход (низкоуровневый)
|
## Классический подход (низкоуровневый)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue