diff --git a/cli.py b/cli.py new file mode 100755 index 0000000..281de84 --- /dev/null +++ b/cli.py @@ -0,0 +1,74 @@ +#!/usr/bin python3 + +import sys +import argparse +import configparser + +from sources.llm_provider import Provider +from sources.interaction import Interaction +from sources.agents import Agent, CoderAgent, CasualAgent, FileAgent, PlannerAgent, BrowserAgent +from sources.browser import Browser, create_driver +from sources.utility import pretty_print + +import warnings +warnings.filterwarnings("ignore") + +config = configparser.ConfigParser() +config.read('config.ini') + +def main(): + pretty_print("Initializing...", color="status") + stealth_mode = config.getboolean('BROWSER', 'stealth_mode') + personality_folder = "jarvis" if config.getboolean('MAIN', 'jarvis_personality') else "base" + languages = config["MAIN"]["languages"].split(' ') + + provider = Provider(provider_name=config["MAIN"]["provider_name"], + model=config["MAIN"]["provider_model"], + server_address=config["MAIN"]["provider_server_address"], + is_local=config.getboolean('MAIN', 'is_local')) + + browser = Browser( + create_driver(headless=config.getboolean('BROWSER', 'headless_browser'), stealth_mode=stealth_mode), + anticaptcha_manual_install=stealth_mode + ) + + agents = [ + CasualAgent(name=config["MAIN"]["agent_name"], + prompt_path=f"prompts/{personality_folder}/casual_agent.txt", + provider=provider, verbose=False), + CoderAgent(name="coder", + prompt_path=f"prompts/{personality_folder}/coder_agent.txt", + provider=provider, verbose=False), + FileAgent(name="File Agent", + prompt_path=f"prompts/{personality_folder}/file_agent.txt", + provider=provider, verbose=False), + BrowserAgent(name="Browser", + prompt_path=f"prompts/{personality_folder}/browser_agent.txt", + provider=provider, verbose=False, browser=browser), + PlannerAgent(name="Planner", + prompt_path=f"prompts/{personality_folder}/planner_agent.txt", + provider=provider, verbose=False, browser=browser) + ] + + interaction = Interaction(agents, + tts_enabled=config.getboolean('MAIN', 'speak'), + stt_enabled=config.getboolean('MAIN', 'listen'), + recover_last_session=config.getboolean('MAIN', 'recover_last_session'), + langs=languages + ) + try: + while interaction.is_active: + interaction.get_user() + if interaction.think(): + interaction.show_answer() + except Exception as e: + if config.getboolean('MAIN', 'save_session'): + interaction.save_session() + raise e + finally: + if config.getboolean('MAIN', 'save_session'): + interaction.save_session() + + +if __name__ == "__main__": + main()