Spaces:
Runtime error
Runtime error
from langchain_tavily import TavilySearch | |
from langchain_community.document_loaders import WikipediaLoader | |
from langchain_ollama import ChatOllama | |
from langgraph.prebuilt import create_react_agent | |
from langgraph_supervisor import create_supervisor | |
llm_model=ChatOllama(model="qwen2:7b", temperature=0.0, max_tokens=1000, base_url="http://localhost:11434") | |
# Tool for searching wikipedia and returning the content | |
def search_wikipedia(query: str) -> str: | |
"""Searches Wikipedia for the given query and returns the first result's content. | |
Args: | |
query (str): The search query to use for Wikipedia. Should be a simple keyword or phrase. Do not enter the URL or any other complex query. | |
""" | |
loader = WikipediaLoader(query=query, load_max_docs=1) | |
docs = loader.load() | |
if docs: | |
return "From: " + docs[0].metadata['source'] + "\n\nContent: " + docs[0].page_content | |
return "No content found." | |
# Tool for searching the web using Tavily | |
def search_web(query: str) -> str: | |
"""Searches the web for the given query and returns the first result's content. | |
Args: | |
query (str): The search query to use for web search. Should be a simple keyword or phrase. Do not enter the URL or any other complex query. | |
""" | |
results = TavilySearch(max_results=1).invoke(input=query) | |
if results: | |
return "From: " + results['results'][0]['url'] + "\n\nContent: " + results['results'][0]['content'] | |
return "No content found." | |
research_agent = create_react_agent( | |
model=llm_model, | |
tools=[search_wikipedia, search_web], | |
prompt=( | |
"You are a research agent.\n\n" | |
"INSTRUCTIONS:\n" | |
"- Assist ONLY with research-related tasks, DO NOT do any math\n" | |
"- After you're done with your tasks, respond to the supervisor directly\n" | |
"- Respond ONLY with the results of your work, do NOT include ANY other text." | |
), | |
name="research_agent", | |
) | |
def add(a: int, b: int) -> int: | |
""" | |
Add two integers and return the result. | |
Inputs: | |
a: first integer | |
b: second integer | |
""" | |
return a + b | |
def subtract(a: int, b: int) -> int: | |
""" | |
Subtract two integers and return the result. | |
Inputs: | |
a: first integer | |
b: second integer | |
""" | |
return a - b | |
def multiply(a: int, b: int) -> int: | |
""" | |
Multiply two integers and return the result. | |
Inputs: | |
a: first integer | |
b: second integer | |
""" | |
return a * b | |
def divide(a: int, b: int) -> float: | |
""" | |
Divide two integers and return the result. | |
Inputs: | |
a: first integer | |
b: second integer | |
Note: If b is 0, return "Error: Division by zero is not allowed." | |
""" | |
if b == 0: | |
return "Error: Division by zero is not allowed." | |
return a / b | |
def modulo(a: int, b: int) -> int: | |
""" | |
Calculate the modulo of two integers and return the result. | |
Inputs: | |
a: first integer | |
b: second integer | |
Note: If b is 0, return "Error: Division by zero is not allowed." | |
""" | |
if b == 0: | |
return "Error: Division by zero is not allowed." | |
return a % b | |
math_agent = create_react_agent( | |
model=llm_model, | |
tools=[add, subtract, multiply, divide, modulo], | |
prompt=( | |
"You are a math agent.\n\n" | |
"INSTRUCTIONS:\n" | |
"- Assist ONLY with math-related tasks\n" | |
"- After you're done with your tasks, respond to the supervisor directly\n" | |
"- Respond ONLY with the results of your work, do NOT include ANY other text." | |
), | |
name="math_agent", | |
) | |
def create_agent(): | |
supervisor = create_supervisor( | |
model=llm_model, | |
agents=[research_agent, math_agent], | |
prompt=( | |
"You are a supervisor managing two agents:\n" | |
"- a research agent. Assign research-related tasks to this agent\n" | |
"- a math agent. Assign math-related tasks to this agent\n" | |
"Assign work to one agent at a time, do not call agents in parallel.\n" | |
"Do not do any work yourself. When you are ready to give the final answer, do so as simply as possible.If the answer is a number, write only the number do not use commas or any special characters or any other text. \n" | |
"If the answer is a string, write only the string without any additional text.\n" | |
"If the answer is a list, write the items in the list separated by commas while following the above rules for numbers and string where appropriate.\n" | |
"Preface your answer with FINAL ANSWER: {answer}\n" | |
"Example: How many planets are in the solar system?\n Answer: 8\n" | |
"Example: What is the capital of France?\n Answer: Paris\n" | |
"Example: What is 2 + 2?\n Answer: 4\n" | |
), | |
add_handoff_back_messages=True, | |
output_mode="full_history", | |
).compile() | |
return supervisor |