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 |