Skip to content

Commit

Permalink
Switched to using click
Browse files Browse the repository at this point in the history
  • Loading branch information
Swiftyos committed Apr 18, 2023
1 parent 4c2a566 commit b537817
Show file tree
Hide file tree
Showing 4 changed files with 135 additions and 88 deletions.
14 changes: 9 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,11 +132,15 @@ _To execute the following commands, open a CMD, Bash, or Powershell window by na

## 🔧 Usage

1. Run `autogpt` Python module in your terminal

```
python -m autogpt
```
1. Run `autogpt` Python module in your terminal.
On linux or mac:
```bash
# On Linux of Mac:
./run.sh start
# On Windows:
./run.bat start
```
Running with `--help` after `start` lists all the possible command line arguments you can pass.

2. After each action, choose from options to authorize command(s),
exit the program, or provide feedback to the AI.
Expand Down
85 changes: 78 additions & 7 deletions autogpt/__main__.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,95 @@
"""Main script for the autogpt package."""
import logging

import click
from colorama import Fore

from autogpt.agent.agent import Agent
from autogpt.args import parse_arguments
from autogpt.config import Config, check_openai_api_key
from autogpt.configurator import create_config
from autogpt.logs import logger
from autogpt.memory import get_memory
from autogpt.prompt import construct_prompt

# Load environment variables from .env file


@click.group()
def main() -> None:
"""Main function for the script"""
"""
Welcome to AutoGPT an experimental open-source application showcasing the capabilities of the GPT-4 pushing the boundaries of AI.
"""
pass


@main.command()
@click.option("-c", "--continuous", is_flag=True, help="Enable Continuous Mode")
@click.option(
"--skip-reprompt",
"-y",
is_flag=True,
help="Skips the re-prompting messages at the beginning of the script",
)
@click.option(
"--ai-settings",
"-C",
help="Specifies which ai_settings.yaml file to use, will also automatically skip the re-prompt.",
)
@click.option(
"-l",
"--continuous-limit",
type=int,
help="Defines the number of times to run in continuous mode",
)
@click.option("--speak", is_flag=True, help="Enable Speak Mode")
@click.option("--debug", is_flag=True, help="Enable Debug Mode")
@click.option("--gpt3only", is_flag=True, help="Enable GPT3.5 Only Mode")
@click.option("--gpt4only", is_flag=True, help="Enable GPT4 Only Mode")
@click.option(
"--use-memory",
"-m",
"memory_type",
type=str,
help="Defines which Memory backend to use",
)
@click.option(
"-b",
"--browser-name",
help="Specifies which web-browser to use when using selenium to scrape the web.",
)
@click.option(
"--allow-downloads",
is_flag=True,
help="Dangerous: Allows Auto-GPT to download files natively.",
)
def start(
continuous: bool,
continuous_limit: int,
ai_settings: str,
skip_reprompt: bool,
speak: bool,
debug: bool,
gpt3only: bool,
gpt4only: bool,
memory_type: str,
browser_name: str,
allow_downloads: bool,
) -> None:
"""Start an Auto-GPT assistant"""
cfg = Config()
# TODO: fill in llm values here
check_openai_api_key()
parse_arguments()
create_config(
continuous,
continuous_limit,
ai_settings,
skip_reprompt,
speak,
debug,
gpt3only,
gpt4only,
memory_type,
browser_name,
allow_downloads,
)
logger.set_level(logging.DEBUG if cfg.debug_mode else logging.INFO)
ai_name = ""
system_prompt = construct_prompt()
Expand All @@ -35,9 +106,9 @@ def main() -> None:
# this is particularly important for indexing and referencing pinecone memory
memory = get_memory(cfg, init=True)
logger.typewriter_log(
f"Using memory of type:", Fore.GREEN, f"{memory.__class__.__name__}"
"Using memory of type:", Fore.GREEN, f"{memory.__class__.__name__}"
)
logger.typewriter_log(f"Using Browser:", Fore.GREEN, cfg.selenium_web_browser)
logger.typewriter_log("Using Browser:", Fore.GREEN, cfg.selenium_web_browser)
agent = Agent(
ai_name=ai_name,
memory=memory,
Expand Down
123 changes: 47 additions & 76 deletions autogpt/args.py → autogpt/configurator.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
"""This module contains the argument parsing logic for the script."""
import argparse

"""Configurator module."""
import click
from colorama import Back, Fore, Style

from autogpt import utils
Expand All @@ -11,72 +10,44 @@
CFG = Config()


def parse_arguments() -> None:
"""Parses the arguments passed to the script
def create_config(
continuous: bool,
continuous_limit: int,
ai_settings_file: str,
skip_reprompt: bool,
speak: bool,
debug: bool,
gpt3only: bool,
gpt4only: bool,
memory_type: str,
browser_name: str,
allow_downloads: bool,
) -> None:
"""Updates the config object with the given arguments.
Args:
continuous (bool): Whether to run in continuous mode
continuous_limit (int): The number of times to run in continuous mode
ai_settings_file (str): The path to the ai_settings.yaml file
skip_reprompt (bool): Whether to skip the re-prompting messages at the beginning of the script
speak (bool): Whether to enable speak mode
debug (bool): Whether to enable debug mode
gpt3only (bool): Whether to enable GPT3.5 only mode
gpt4only (bool): Whether to enable GPT4 only mode
memory_type (str): The type of memory backend to use
browser_name (str): The name of the browser to use when using selenium to scrape the web
allow_downloads (bool): Whether to allow Auto-GPT to download files natively
Returns:
None
"""
CFG.set_debug_mode(False)
CFG.set_continuous_mode(False)
CFG.set_speak_mode(False)

parser = argparse.ArgumentParser(description="Process arguments.")
parser.add_argument(
"--continuous", "-c", action="store_true", help="Enable Continuous Mode"
)
parser.add_argument(
"--continuous-limit",
"-l",
type=int,
dest="continuous_limit",
help="Defines the number of times to run in continuous mode",
)
parser.add_argument("--speak", action="store_true", help="Enable Speak Mode")
parser.add_argument("--debug", action="store_true", help="Enable Debug Mode")
parser.add_argument(
"--gpt3only", action="store_true", help="Enable GPT3.5 Only Mode"
)
parser.add_argument("--gpt4only", action="store_true", help="Enable GPT4 Only Mode")
parser.add_argument(
"--use-memory",
"-m",
dest="memory_type",
help="Defines which Memory backend to use",
)
parser.add_argument(
"--skip-reprompt",
"-y",
dest="skip_reprompt",
action="store_true",
help="Skips the re-prompting messages at the beginning of the script",
)
parser.add_argument(
"--use-browser",
"-b",
dest="browser_name",
help="Specifies which web-browser to use when using selenium to scrape the web.",
)
parser.add_argument(
"--ai-settings",
"-C",
dest="ai_settings_file",
help="Specifies which ai_settings.yaml file to use, will also automatically"
" skip the re-prompt.",
)
parser.add_argument(
"--allow-downloads",
action="store_true",
dest="allow_downloads",
help="Dangerous: Allows Auto-GPT to download files natively.",
)
args = parser.parse_args()

if args.debug:
if debug:
logger.typewriter_log("Debug Mode: ", Fore.GREEN, "ENABLED")
CFG.set_debug_mode(True)

if args.continuous:
if continuous:
logger.typewriter_log("Continuous Mode: ", Fore.RED, "ENABLED")
logger.typewriter_log(
"WARNING: ",
Expand All @@ -87,31 +58,31 @@ def parse_arguments() -> None:
)
CFG.set_continuous_mode(True)

if args.continuous_limit:
if continuous_limit:
logger.typewriter_log(
"Continuous Limit: ", Fore.GREEN, f"{args.continuous_limit}"
"Continuous Limit: ", Fore.GREEN, f"{continuous_limit}"
)
CFG.set_continuous_limit(args.continuous_limit)
CFG.set_continuous_limit(continuous_limit)

# Check if continuous limit is used without continuous mode
if args.continuous_limit and not args.continuous:
parser.error("--continuous-limit can only be used with --continuous")
if continuous_limit and not continuous:
raise click.UsageError("--continuous-limit can only be used with --continuous")

if args.speak:
if speak:
logger.typewriter_log("Speak Mode: ", Fore.GREEN, "ENABLED")
CFG.set_speak_mode(True)

if args.gpt3only:
if gpt3only:
logger.typewriter_log("GPT3.5 Only Mode: ", Fore.GREEN, "ENABLED")
CFG.set_smart_llm_model(CFG.fast_llm_model)

if args.gpt4only:
if gpt4only:
logger.typewriter_log("GPT4 Only Mode: ", Fore.GREEN, "ENABLED")
CFG.set_fast_llm_model(CFG.smart_llm_model)

if args.memory_type:
if memory_type:
supported_memory = get_supported_memory_backends()
chosen = args.memory_type
chosen = memory_type
if chosen not in supported_memory:
logger.typewriter_log(
"ONLY THE FOLLOWING MEMORY BACKENDS ARE SUPPORTED: ",
Expand All @@ -122,12 +93,12 @@ def parse_arguments() -> None:
else:
CFG.memory_backend = chosen

if args.skip_reprompt:
if skip_reprompt:
logger.typewriter_log("Skip Re-prompt: ", Fore.GREEN, "ENABLED")
CFG.skip_reprompt = True

if args.ai_settings_file:
file = args.ai_settings_file
if ai_settings_file:
file = ai_settings_file

# Validate file
(validated, message) = utils.validate_yaml_file(file)
Expand All @@ -140,7 +111,7 @@ def parse_arguments() -> None:
CFG.ai_settings_file = file
CFG.skip_reprompt = True

if args.allow_downloads:
if allow_downloads:
logger.typewriter_log("Native Downloading:", Fore.GREEN, "ENABLED")
logger.typewriter_log(
"WARNING: ",
Expand All @@ -155,5 +126,5 @@ def parse_arguments() -> None:
)
CFG.allow_downloads = True

if args.browser_name:
CFG.selenium_web_browser = args.browser_name
if browser_name:
CFG.selenium_web_browser = browser_name
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ selenium
webdriver-manager
jsonschema
tweepy
click

##Dev
coverage
Expand Down

0 comments on commit b537817

Please sign in to comment.