Spaces:
Build error
Build error
| from bs4 import BeautifulSoup | |
| import requests | |
| import re | |
| from urllib.parse import urljoin | |
| import datetime | |
| import traceback | |
| try: | |
| from .tooler import tool | |
| from .top_bar_wrapper import wrapper | |
| except: | |
| from tooler import tool | |
| from top_bar_wrapper import wrapper | |
| _standard_tools_ = {} | |
| def register_tool(func): | |
| if func.__name__ not in _standard_tools_: | |
| _standard_tools_[func.__name__] = tool(func) | |
| return func | |
| def read_website(url: str, max_content_length: int = 5000) -> dict: | |
| """ | |
| Read the content of a website and return the title, meta data, content, and sub-links. | |
| """ | |
| try: | |
| response = requests.get(url) | |
| response.raise_for_status() | |
| html = response.text | |
| except requests.RequestException as e: | |
| return {"error": f"Failed to retrieve the website content: {e}"} | |
| soup = BeautifulSoup(html, "html.parser") | |
| meta_properties = [ | |
| "og:description", | |
| "og:site_name", | |
| "og:title", | |
| "og:type", | |
| "og:url", | |
| "description", | |
| "keywords", | |
| "author", | |
| ] | |
| meta = {} | |
| for property_name in meta_properties: | |
| tag = soup.find("meta", property=property_name) or soup.find( | |
| "meta", attrs={"name": property_name} | |
| ) | |
| if tag: | |
| meta[property_name] = tag.get("content", "") | |
| for ignore_tag in soup(["script", "style"]): | |
| ignore_tag.decompose() | |
| title = soup.title.string.strip() if soup.title else "" | |
| content = soup.body.get_text(separator="\n") if soup.body else "" | |
| links = [] | |
| for a in soup.find_all("a", href=True): | |
| link_url = urljoin(url, a["href"]) | |
| links.append({"title": a.text.strip(), "link": link_url}) | |
| content = re.sub(r"[\n\r\t]+", "\n", content) | |
| content = re.sub(r" +", " ", content) | |
| content = re.sub(r"[\n ]{3,}", "\n\n", content) | |
| content = content.strip() | |
| if len(content) > max_content_length: | |
| content = content[:max_content_length].rsplit(" ", 1)[0] + "..." | |
| return {"meta": meta, "title": title, "content": content, "sub_links": links} | |
| def google(query: str, max_number: int = 20) -> list: | |
| """ | |
| Search the query on Google and return the results. | |
| """ | |
| try: | |
| from googlesearch import search as gsearch | |
| return list(gsearch(query, stop=max_number)) | |
| except: | |
| return "An exception occurred" | |
| def duckduckgo(query: str, max_number: int = 20) -> list: | |
| """ | |
| Search the query on DuckDuckGo and return the results. | |
| """ | |
| try: | |
| from duckduckgo_search import DDGS | |
| return [result["href"] for result in DDGS().text(query, max_results=max_number)] | |
| except: | |
| return "An exception occurred" | |
| def copy(text: str): | |
| """ | |
| Copy the text to the clipboard. | |
| """ | |
| import pyperclip | |
| pyperclip.copy(text) | |
| pyperclip.copy(text) | |
| def open_url(url) -> bool: | |
| """ | |
| Open the URL in the default web browser. | |
| :param url: str: | |
| """ | |
| import webbrowser | |
| try: | |
| webbrowser.open(url) | |
| return True | |
| except: | |
| return False | |
| return False | |
| def sleep(seconds: int): | |
| """ | |
| Sleep for the given number of seconds. | |
| """ | |
| import time | |
| time.sleep(seconds) | |
| def keyboard_write(text: str): | |
| """ | |
| Write the text using the keyboard. | |
| """ | |
| import pyautogui | |
| pyautogui.write(text) | |
| def keyboard_press(key: str): | |
| """ | |
| Press the key using the keyboard. | |
| """ | |
| import pyautogui | |
| pyautogui.press(key) | |
| pyautogui.press(key) | |
| from langchain_experimental.utilities import PythonREPL | |
| the_py_client = PythonREPL() | |
| def python_repl(code: str) -> str: | |
| """ | |
| Run and return the given python code in python repl | |
| """ | |
| return the_py_client.run(code) | |
| def app_open(app_name: str) -> bool: | |
| """ | |
| Opens the native apps. | |
| """ | |
| try: | |
| from AppOpener import open | |
| open(app_name, throw_error=True) | |
| return True | |
| except: | |
| try: | |
| from MacAppOpener import open | |
| open(app_name) | |
| except: | |
| return False | |
| def app_close(app_name: str) -> bool: | |
| """ | |
| Closes the native apps. | |
| """ | |
| try: | |
| from AppOpener import close | |
| close(app_name, throw_error=True) | |
| return True | |
| except: | |
| try: | |
| close(app_name) | |
| except: | |
| return False | |
| def get_current_time() -> str: | |
| """ | |
| Get the current time in ISO format. | |
| """ | |
| return datetime.datetime.now().isoformat() | |
| def turn_off_wifi() -> bool: | |
| """ | |
| Turn off the wifi. | |
| """ | |
| try: | |
| from pywifi import ControlPeripheral | |
| wifi = ControlPeripheral() | |
| wifi.disable() | |
| return True | |
| except: | |
| return False | |
| def turn_on_wifi() -> bool: | |
| """ | |
| Turn on the wifi. | |
| """ | |
| try: | |
| from pywifi import ControlPeripheral | |
| wifi = ControlPeripheral() | |
| wifi.enable() | |
| return True | |
| except: | |
| return False | |
| def connect_wifi(ssid: str, password: str) -> bool: | |
| """ | |
| Connect to the wifi with the given ssid and password. | |
| """ | |
| try: | |
| from pywifi import ControlConnection | |
| # Arguments passed during object instantiation | |
| controller = ControlConnection(wifi_ssid=ssid, wifi_password=password) | |
| controller.wifi_connector() | |
| return True | |
| except: | |
| return False | |
| def ask_to_user(question: str, wait_for_answer: str = None) -> str: | |
| """ | |
| Its ask to the user for your question and return the answer | |
| """ | |
| try: | |
| try: | |
| from .agent.process import tts_if_you_can | |
| from .audio.record import quick_speech_to_text | |
| except: | |
| from agent.process import tts_if_you_can | |
| from audio.record import quick_speech_to_text | |
| print("TTS") | |
| tts_if_you_can(question, bypass_other_settings=True, not_threaded=True) | |
| print("TTS END") | |
| if wait_for_answer: | |
| return quick_speech_to_text(wait_for_answer) | |
| else: | |
| return quick_speech_to_text() | |
| except: | |
| traceback.print_exc() | |
| return False | |
| def get_standard_tools(): | |
| print("Tool len", len(_standard_tools_)) | |
| last_list = [_standard_tools_[each] for each in _standard_tools_] | |
| return last_list | |
| if __name__ == "__main__": | |
| print(ask_to_user("What is your age")) | |