diff --git a/self_run.py b/self_run.py new file mode 100644 index 0000000..09817f8 --- /dev/null +++ b/self_run.py @@ -0,0 +1,108 @@ + +#!/usr/bin python3 + +""" +self_run.py is a script for automatically creating prompts, and saving history as training data. +""" + +import sys +import argparse +import configparser +import asyncio + +from sources.llm_provider import Provider +from sources.interaction import Interaction +from sources.agents import Agent, CoderAgent, CasualAgent, FileAgent, PlannerAgent, BrowserAgent, McpAgent +from sources.browser import Browser, create_driver + +import warnings +warnings.filterwarnings("ignore") + +config = configparser.ConfigParser() +config.read('config.ini') + +def copy_conversations_folder(): + source_path = "conversations/" + destination_path = "training_data/" + if not os.path.exists(destination_path): + os.makedirs(destination_path) + for filename in os.listdir(source_path): + source_file = os.path.join(source_path, filename) + destination_file = os.path.join(destination_path, filename) + shutil.copy2(source_file, destination_file) + print(f"Copied {source_file} to {destination_file}") + +def get_random_query(provider): + prompt = """ +You are an expert in crafting queries for AgenticSeek, a AI assistant that autonomously browses the web, writes code, plans tasks, and manages files. It supports tasks like web searches, coding in Python/C/Go/Java, file operations, task planning. +Queries must be explicit, specifying actions like "search the web," "write code," or "save to a file," as AgenticSeek's agent routing may not infer vague intents. + +Generate a single realistic user query for AgenticSeek. The query should: + +Be concise and explicit about the desired action (e.g., web search, coding, file management). +Align with AgenticSeek’s capabilities (web browsing, coding, task planning, file operations). +Include a specific output where relevant (e.g., save to a file with a clear name and path). +Reflect a practical use case (e.g., research, programming, personal tasks). +Be formatted as a single sentence. +Example Query: +Search the web for the best hiking trails in Colorado and save a list of three trails with their locations in hiking_trails.txt in /home/project + """ + history = [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt}] + thought = provider.respond(history) + return thought + +async def self_runner(): + 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=True, stealth_mode=False), + anticaptcha_manual_install=False + ) + + agents = [ + CasualAgent(name=config["MAIN"]["agent_name"], + prompt_path=f"prompts/base/casual_agent.txt", + provider=provider, verbose=False), + CoderAgent(name="coder", + prompt_path=f"prompts/base/coder_agent.txt", + provider=provider, verbose=False), + FileAgent(name="File Agent", + prompt_path=f"prompts/base/file_agent.txt", + provider=provider, verbose=False), + BrowserAgent(name="Browser", + prompt_path=f"prompts/base/browser_agent.txt", + provider=provider, verbose=False, browser=browser), + PlannerAgent(name="Planner", + prompt_path=f"prompts/base/planner_agent.txt", + provider=provider, verbose=False, browser=browser) + ] + + interaction = Interaction(agents, + tts_enabled=False, + stt_enabled=False, + recover_last_session=False, + langs=['en'] + ) + print("Start self-running for training data generation...") + try: + while interaction.is_active: + query = get_random_query(provider) + print(f"Generated query: {query}") + interaction.set_query(query) + if await interaction.think(): + interaction.show_answer() + except Exception as e: + if config.getboolean('MAIN', 'save_session'): + interaction.save_session() + copy_conversations_folder() + raise e + finally: + if config.getboolean('MAIN', 'save_session'): + interaction.save_session() + copy_conversations_folder() + +if __name__ == "__main__": + asyncio.run(self_runner()) \ No newline at end of file