108 lines
4.5 KiB
Python
108 lines
4.5 KiB
Python
|
||
#!/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()) |