@@ -19,7 +19,7 @@ def parse_args() -> argparse.Namespace:
1919 """Parse command-line arguments"""
2020 parser = argparse .ArgumentParser (description = "OpenEvolve - Evolutionary coding agent" )
2121
22- parser .add_argument ("initial_program" , help = "Path to the initial program file" )
22+ parser .add_argument ("initial_program" , help = "Path to the initial program file" , default = None )
2323
2424 parser .add_argument (
2525 "evaluation_file" , help = "Path to the evaluation file containing an 'evaluate' function"
@@ -57,6 +57,8 @@ def parse_args() -> argparse.Namespace:
5757
5858 parser .add_argument ("--secondary-model" , help = "Secondary LLM model name" , default = None )
5959
60+ parser .add_argument ("--initial-programs-dir" , help = "Path to initial programs directory" , default = None )
61+
6062 return parser .parse_args ()
6163
6264
@@ -69,9 +71,38 @@ async def main_async() -> int:
6971 """
7072 args = parse_args ()
7173
72- # Check if files exist
73- if not os .path .exists (args .initial_program ):
74- print (f"Error: Initial program file '{ args .initial_program } ' not found" )
74+ # Check if files exist.
75+ # If args.initial_program is present, it should be a file.
76+ # If args.initial_programs_dir is present, it should be a directory, and args.initial_program should be `None`.
77+ if args .initial_programs_dir :
78+ if args .initial_program :
79+ print ("Error: Cannot specify both initial-program and --initial-programs-dir" )
80+ return 1
81+ if not os .path .isdir (args .initial_programs_dir ):
82+ print (f"Error: Initial programs path '{ args .initial_programs_dir } ' is not a directory" )
83+ return 1
84+ elif args .initial_program :
85+ if args .initial_programs_dir :
86+ print ("Error: Cannot specify both --initial-programs-dir and initial_program" )
87+ return 1
88+ if not os .path .isfile (args .initial_program ):
89+ print (f"Error: Initial program file '{ args .initial_program } ' is not a file" )
90+ return 1
91+
92+ # Populate the initial_programs_paths vector.
93+ initial_programs_paths = []
94+ if args .initial_programs_dir :
95+ initial_programs_paths = [
96+ os .path .join (args .initial_programs_dir , f )
97+ for f in os .listdir (args .initial_programs_dir )
98+ if f .endswith (".py" )
99+ ]
100+ elif args .initial_program :
101+ initial_programs_paths = [args .initial_program ]
102+
103+ # Check that initial_programs_paths is not empty
104+ if not initial_programs_paths :
105+ print ("Error: No initial programs found. Please provide a valid initial program or directory." )
75106 return 1
76107
77108 if not os .path .exists (args .evaluation_file ):
@@ -100,7 +131,7 @@ async def main_async() -> int:
100131 # Initialize OpenEvolve
101132 try :
102133 openevolve = OpenEvolve (
103- initial_program_path = args . initial_program ,
134+ initial_programs_paths = initial_programs_paths ,
104135 evaluation_file = args .evaluation_file ,
105136 config = config ,
106137 config_path = args .config if config is None else None ,
0 commit comments