File size: 3,022 Bytes
964e368
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import asyncio
import argparse
import sys
import signal
import re
import logging
from autoagents.roles import Manager, ObserverAgents, ObserverPlans
from autoagents.explorer import Explorer
import startup
import cfg
import ws_service

# logging.basicConfig(level=logging.WARNING, format='%(asctime)s | %(levelname)-8s | %(module)s:%(funcName)s:%(lineno)d - %(message)s')
# logger = logging.getLogger(__name__)
from autoagents.system.logs import logger
import json
import os

def signal_handler(signal, frame):
    sys.exit(1)

async def commanline(investment: float = 10.0, n_round: int = 3, proxy: str = None, llm_api_key: str = None, serpapi_key: str=None, idea: str=None):
    # Prefer env/config values; prompt only if missing
    # if not llm_api_key:
    #     llm_api_key = cfg.LLM_API_KEY or None
    # if not serpapi_key:
    #     serpapi_key = cfg.SERPAPI_API_KEY or None
    # if llm_api_key is None:
    #     print("OpenAI API key:")
    #     llm_api_key = input().strip()
    # if serpapi_key is None:
    #     print("SerpAPI key:")
    #     serpapi_key = input().strip()
    
    with open(args.input_file, 'r') as f:
        tasks = [json.loads(line.strip()) for line in f]
    
    finished_tasks = []
    if os.path.exists(args.output_file):
        with open(args.output_file, 'r') as f:
            finished_tasks = [json.loads(line.strip())['id'] for line in f]
    
    cfg.OUTPUT_FILE = args.output_file
    
    for task in tasks:
        if task['id'] in finished_tasks:
            logger.info(f"######################### Task {task['id']} already finished, skip. #########################")
            continue
        logger.info(f"######################### Starting task {task['id']}: {task['question']} #########################")
        cfg.TASK_ID = task['id']
        await startup.startup(task['question'], investment, n_round, llm_api_key=llm_api_key, serpapi_key=serpapi_key, proxy=proxy)


if __name__ == "__main__":
    signal.signal(signal.SIGINT, signal_handler)

    parser = argparse.ArgumentParser(description="AutoAgents")
    ### TODO: Set default value of mode to commandline (already set)
    parser.add_argument("--proxy", default=None, type=str, help="http proxy, example: http://127.0.0.1:8080")
    parser.add_argument("--llm_api_key", default=None, type=str, help="OpenAI API key")
    parser.add_argument("--serpapi_key", default=None, type=str, help="SerpAPI key")
    parser.add_argument("--input_file", default=None, type=str, help="Input file with tasks in JSONL format")
    parser.add_argument("--output_file", default=None, type=str, help="output file with tasks in JSONL format")
    args = parser.parse_args()

    proxy = None
    proxy_regex = r'(http|https|socks|socks5):\/\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{2,5}'
    if args.proxy and re.match(proxy_regex, args.proxy):
        proxy = args.proxy

    asyncio.run(commanline(proxy=proxy, llm_api_key=args.llm_api_key, serpapi_key=args.serpapi_key))