test / src /agent_tools.py
mohamednaim's picture
first commit
3ccebd6 verified
import os
from langchain.tools import tool
import uuid
from teacher_assistant import teacher_assistant_agent
from planner import planner_agent
from composio import Composio
from composio_langchain import LangchainProvider
from langchain.agents import create_agent
from config import *
composio = Composio(provider=LangchainProvider(),api_key=COMPOSIO_API_KEY)
# Create a session for your user
session = composio.create(user_id="user_123")
tools = session.tools()
@tool
def ask_planner(query: str) -> str:
"""Delegate to Planner agent for roadmaps, schedules, and learning plans."""
config = {"configurable": {"thread_id": f"planner_{uuid.uuid4()}"}}
result = planner_agent.invoke(
{"messages": [{"role": "user", "content": query}]},
config=config
)
messages = result.get("messages", [])
for msg in reversed(messages):
if hasattr(msg, "content") and msg.content:
if not hasattr(msg, "tool_calls") or not msg.tool_calls:
return msg.content
return ""
@tool
def ask_teacher_assistant(query: str) -> str:
"""
Delegate to the Teacher Assistant agent for technical implementation,
code examples, troubleshooting, or practical hands-on guidance.
Use when the query needs technical depth beyond theory.
"""
config = {"configurable": {"thread_id": f"assistant_{uuid.uuid4()}"}}
result = teacher_assistant_agent.invoke(
{"messages": [{"role": "user", "content": query}]},
config=config
)
messages = result.get("messages", [])
for msg in reversed(messages):
if hasattr(msg, "content") and msg.content:
if not hasattr(msg, "tool_calls") or not msg.tool_calls:
return msg.content
return ""
@tool
def composio_agent_tool(task: str) -> str:
"""
Delegate tasks that require external tools and integrations via Composio.
Use for: creating forms, sending emails, managing files, calendar events,
spreadsheets, or any task requiring third-party service integration.
Args:
task: A detailed description of what to create or do
"""
session = composio.create(user_id="user_123")
tools = session.tools()
agent = create_agent(tools=tools, model=model)
result = agent.invoke({
"messages": [("user", task)]
})
messages = result.get("messages", [])
for msg in reversed(messages):
if hasattr(msg, "content") and msg.content:
if not hasattr(msg, "tool_calls") or not msg.tool_calls:
return msg.content
return ""
# @tool
# def composio_agent_tool(task: str) -> str:
# """
# Delegate tasks that require external tools and integrations via Composio.
# Use for: creating forms, sending emails, managing files, calendar events,
# spreadsheets, or any task requiring third-party service integration.
# Args:
# task: A detailed description of what to create or do
# """
# session = composio.create(user_id="user_123")
# tools = session.tools()
# agent = create_agent(tools=tools, model=llm)
# result = agent.invoke({
# "messages": [("user", task)]
# })
# messages = result.get("messages", [])
# for msg in reversed(messages):
# if hasattr(msg, "content") and msg.content:
# if not hasattr(msg, "tool_calls") or not msg.tool_calls:
# return msg.content
# return ""