from llama_index.core.agent.workflow import AgentWorkflow from llama_index.core.workflow import Context from llama_index.core.tools import FunctionTool from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI from llama_index.tools.duckduckgo import DuckDuckGoSearchToolSpec from llama_index.tools.wikipedia import WikipediaToolSpec from llama_index.core.tools.tool_spec.load_and_search import LoadAndSearchToolSpec from llama_index.readers.web import SimpleWebPageReader from llama_index.core.tools.ondemand_loader_tool import OnDemandLoaderTool class BasicAgent: def __init__(self): llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct") # Initialize tools tool_spec = DuckDuckGoSearchToolSpec() search_tool = FunctionTool.from_defaults(tool_spec.duckduckgo_full_search) wiki_spec = WikipediaToolSpec() wiki_search_tool = wiki_spec.to_tool_list()[1] # Convert into a LoadAndSearchToolSpec because the wikipedia search tool returns # entire Wikipedia pages and this can pollute the context window of the LLM wiki_spec = WikipediaToolSpec() wiki_search_tool = wiki_spec.to_tool_list()[1] # Convert into a LoadAndSearchToolSpec because the wikipedia search tool returns # entire Wikipedia pages and this can pollute the context window of the LLM wiki_search_tool_las = LoadAndSearchToolSpec.from_defaults(wiki_search_tool).to_tool_list() webpage_tool = OnDemandLoaderTool.from_defaults( SimpleWebPageReader(html_to_text=True), name="Webpage search tool", description="A tool for loading the content of a webpage and querying it for information", ) # Create Alfred with all the tools self.agent = AgentWorkflow.from_tools_or_functions( [search_tool, wiki_search_tool_las, webpage_tool], llm=llm, verbose=True ) # self.ctx = Context(self.agent) async def __call__(self, question: str) -> str: response = await self.agent.run(user_msg=question) # ctx=self.ctx) return response.response.content