|
|
import os |
|
|
from linkup_utils import LinkupSearchTool |
|
|
from youtube_utils import YouTubeTranscriptTool |
|
|
from text_inspector_tool import TextInspectorTool |
|
|
from langchain_community.document_loaders import WikipediaLoader |
|
|
from text_web_browser import ( |
|
|
ArchiveSearchTool, |
|
|
FinderTool, |
|
|
FindNextTool, |
|
|
PageDownTool, |
|
|
PageUpTool, |
|
|
SimpleTextBrowser, |
|
|
VisitTool, |
|
|
) |
|
|
from visual_qa import visualizer |
|
|
|
|
|
from smolagents import ( |
|
|
CodeAgent, |
|
|
LiteLLMModel, |
|
|
ToolCallingAgent, |
|
|
) |
|
|
import threading |
|
|
|
|
|
|
|
|
|
|
|
AUTHORIZED_IMPORTS = [ |
|
|
"requests", |
|
|
"zipfile", |
|
|
"os", |
|
|
"pandas", |
|
|
"numpy", |
|
|
"sympy", |
|
|
"json", |
|
|
"bs4", |
|
|
"pubchempy", |
|
|
"xml", |
|
|
"yahoo_finance", |
|
|
"Bio", |
|
|
"sklearn", |
|
|
"scipy", |
|
|
"pydub", |
|
|
"io", |
|
|
"PIL", |
|
|
"chess", |
|
|
"PyPDF2", |
|
|
"pptx", |
|
|
"torch", |
|
|
"datetime", |
|
|
"fractions", |
|
|
"csv", |
|
|
"wiki", |
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
append_answer_lock = threading.Lock() |
|
|
|
|
|
custom_role_conversions = {"tool-call": "assistant", "tool-response": "user"} |
|
|
|
|
|
user_agent = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " |
|
|
"Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0") |
|
|
|
|
|
BROWSER_CONFIG = { |
|
|
"viewport_size": 1024 * 5, |
|
|
"downloads_folder": "downloads_folder", |
|
|
"request_kwargs": { |
|
|
"headers": {"User-Agent": user_agent}, |
|
|
"timeout": 300, |
|
|
}, |
|
|
"serpapi_key": os.getenv("SERPAPI_API_KEY"), |
|
|
} |
|
|
|
|
|
os.makedirs(f"./{BROWSER_CONFIG['downloads_folder']}", exist_ok=True) |
|
|
|
|
|
|
|
|
def create_agent(model_id="gpt-4o-mini"): |
|
|
model_params = { |
|
|
"model_id": model_id, |
|
|
"custom_role_conversions": custom_role_conversions, |
|
|
"max_completion_tokens": 8192, |
|
|
} |
|
|
if model_id == "o1": |
|
|
model_params["reasoning_effort"] = "high" |
|
|
model = LiteLLMModel(**model_params) |
|
|
|
|
|
text_limit = 100000 |
|
|
browser = SimpleTextBrowser(**BROWSER_CONFIG) |
|
|
text_inspection_tool = TextInspectorTool(model, text_limit) |
|
|
WEB_TOOLS = [ |
|
|
LinkupSearchTool(), |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
text_inspection_tool, |
|
|
YouTubeTranscriptTool(), |
|
|
] |
|
|
search_agent = ToolCallingAgent( |
|
|
model=model, |
|
|
tools=WEB_TOOLS, |
|
|
max_steps=5, |
|
|
verbosity_level=1, |
|
|
planning_interval=4, |
|
|
name="search_agent", |
|
|
description="""A team member that will search the internet to answer your question. |
|
|
Ask him for all your questions that require browsing the web. |
|
|
Note that this agent is using a powerful language model and it can do the search and analyse |
|
|
the results. |
|
|
You should ask question in a way to let the language model to perform the best, i.e. provide |
|
|
as much context as possible and ask in a clear way. |
|
|
Provide him as much context as possible, in particular if you need to search on a specific |
|
|
timeframe! |
|
|
And don't hesitate to provide him with a complex search task, like finding a difference |
|
|
between two webpages. |
|
|
Your request must be a real sentence, not a google search! Like "Find me this information ( |
|
|
...)" rather than a few keywords. |
|
|
""", |
|
|
provide_run_summary=True, |
|
|
) |
|
|
search_agent.prompt_templates["managed_agent"]["task"] += """You can navigate to |
|
|
.txt online files. |
|
|
If a non-html page is in another format, especially .pdf or a Youtube video, use tool |
|
|
'inspect_file_as_text' to inspect it. |
|
|
Additionally, if after some searching you find out that you need more information to answer |
|
|
the question, you can use `final_answer` with your request for clarification as argument to |
|
|
request for more information.""" |
|
|
|
|
|
manager_agent = CodeAgent( |
|
|
model=model, |
|
|
tools=[visualizer, TextInspectorTool(model, text_limit)], |
|
|
max_steps=5, |
|
|
verbosity_level=1, |
|
|
additional_authorized_imports=AUTHORIZED_IMPORTS, |
|
|
planning_interval=4, |
|
|
managed_agents=[search_agent], |
|
|
) |
|
|
|
|
|
return {"agent": manager_agent, "text_inspection_tool": text_inspection_tool, "visualizer": visualizer, "model": model} |
|
|
|