import os import json from dotenv import load_dotenv from llama_index.core.tools import FunctionTool from llama_index.tools.google import GoogleSearchToolSpec from llama_index.tools.wikipedia import WikipediaToolSpec load_dotenv() google_key = os.getenv("GOOGLE_SECRET_KEY") my_search_engine = os.getenv("Google_WebSearch_Engine") g_search = GoogleSearchToolSpec(key=google_key, engine=my_search_engine, num=3) #Wikipedia Search Tool wikipedia_tool = WikipediaToolSpec() wikipedia_search_tool = FunctionTool.from_defaults(wikipedia_tool.search_data) def google_web_search(query : str) -> str: """ Searches the web and returns the most accurate response for a user query. Args: query (str): The query string to search for. Returns: str: The snippet of the first search result along with its source link. """ result = g_search.google_search(query) # data = result.content if isinstance(result, str): import ast result = ast.literal_eval(result) first = result[0] snippet = first["snippet"] link = first["link"] return f"Result: {snippet} Source: {link}" google_web_search_tool = FunctionTool.from_defaults(google_web_search) def round_to_two_decimals(value): """ Round a number to two decimal places. Args: value (float): The value to be round to 2 decimal places. Raises: ValueError: If the 'value' is not an integer or a float. """ return round(float(value), 2) round_to_two_decimals_tool = FunctionTool.from_defaults(round_to_two_decimals) def text_inverter(text: str) -> str: """ Handles sentence writen backward: - Reverses it and returns the reverse version - Ignore if text is not written backwords Args: text (str): The text writen backwards to be reversed """ decoded = text[::-1] print(decoded) text_inverter_tool = FunctionTool.from_defaults(text_inverter)