Merge branch '#9-интеграция-composIO'

This commit is contained in:
Егор Кандрушин 2026-04-22 10:06:39 +03:00
commit 5c3f63b039
6 changed files with 104 additions and 5 deletions

View file

@ -1,8 +1,9 @@
import os
from deepagents import create_deep_agent
from langchain_openai import ChatOpenAI
from langgraph.checkpoint.memory import MemorySaver
from composio import Composio
from composio_langchain import LangchainProvider
from src.agent.backends import IsolatedShellBackend
from src.agent.tools import send_file
@ -15,6 +16,11 @@ def create_agent():
api_key=os.environ["PROVIDER_API_KEY"],
)
composio_user_id = os.environ["AGENT_ID"]
composio = Composio(provider=LangchainProvider())
session = composio.create(user_id=composio_user_id)
tools = session.tools()
workspace_dir = os.environ["WORKSPACE_DIR"]
agent_user = os.environ.get("AGENT_USER", "agent")
@ -26,8 +32,8 @@ def create_agent():
return create_deep_agent(
model=model,
tools=[send_file],
system_prompt="You are a helpful assistant.",
system_prompt="You are a helpful assistant. Use Composio tools to take action when needed.",
checkpointer=MemorySaver(),
tools=tools + [send_file],
backend=backend,
)

View file

@ -114,8 +114,16 @@ class AgentService:
# 2. Инструмент завершил работу и вернул результат
elif kind == "on_tool_end":
result = event["data"].get("output")
"""# Перехватываем ссылку на авторизацию Composio v3
if result and "connect.composio.dev" in str(result):
yield MsgEventTextChunk(
text=f"\n⚠️ Для выполнения действия требуется авторизация. Перейдите по ссылке: {result}\n")
else:"""
yield MsgEventToolResult(
tool_name=event["name"], result=event["data"].get("output")
tool_name=event["name"],
result=str(result) # Страховка от ошибки сериализации JSON
)
# 3. Кастомные события (send_file и др.)

View file

@ -45,4 +45,3 @@ async def process_message(ws: WebSocket, chat: AgentChat, msg):
case MsgUserMessage():
async for chunk in chat.astream(msg.text):
await ws.send_text(chunk.model_dump_json())
await ws.send_text(MsgEventEnd(tokens_used=0).model_dump_json())