|
import os |
|
|
|
import requests |
|
import yaml |
|
from colorama import Fore |
|
from git import Repo |
|
|
|
|
|
def clean_input(prompt: str = ""): |
|
try: |
|
return input(prompt) |
|
except KeyboardInterrupt: |
|
print("You interrupted Auto-GPT") |
|
print("Quitting...") |
|
exit(0) |
|
|
|
|
|
def validate_yaml_file(file: str): |
|
try: |
|
with open(file, encoding="utf-8") as fp: |
|
yaml.load(fp.read(), Loader=yaml.FullLoader) |
|
except FileNotFoundError: |
|
return (False, f"The file {Fore.CYAN}`{file}`{Fore.RESET} wasn't found") |
|
except yaml.YAMLError as e: |
|
return ( |
|
False, |
|
f"There was an issue while trying to read with your AI Settings file: {e}", |
|
) |
|
|
|
return (True, f"Successfully validated {Fore.CYAN}`{file}`{Fore.RESET}!") |
|
|
|
|
|
def readable_file_size(size, decimal_places=2): |
|
"""Converts the given size in bytes to a readable format. |
|
Args: |
|
size: Size in bytes |
|
decimal_places (int): Number of decimal places to display |
|
""" |
|
for unit in ["B", "KB", "MB", "GB", "TB"]: |
|
if size < 1024.0: |
|
break |
|
size /= 1024.0 |
|
return f"{size:.{decimal_places}f} {unit}" |
|
|
|
|
|
def get_bulletin_from_web() -> str: |
|
try: |
|
response = requests.get( |
|
"https://raw.githubusercontent.com/Significant-Gravitas/Auto-GPT/master/BULLETIN.md" |
|
) |
|
if response.status_code == 200: |
|
return response.text |
|
except: |
|
return "" |
|
|
|
|
|
def get_current_git_branch() -> str: |
|
try: |
|
repo = Repo(search_parent_directories=True) |
|
branch = repo.active_branch |
|
return branch.name |
|
except: |
|
return "" |
|
|
|
|
|
def get_latest_bulletin() -> str: |
|
exists = os.path.exists("CURRENT_BULLETIN.md") |
|
current_bulletin = "" |
|
if exists: |
|
current_bulletin = open("CURRENT_BULLETIN.md", "r", encoding="utf-8").read() |
|
new_bulletin = get_bulletin_from_web() |
|
is_new_news = new_bulletin != current_bulletin |
|
|
|
if new_bulletin and is_new_news: |
|
open("CURRENT_BULLETIN.md", "w", encoding="utf-8").write(new_bulletin) |
|
return f" {Fore.RED}::UPDATED:: {Fore.CYAN}{new_bulletin}{Fore.RESET}" |
|
return current_bulletin |
|
|