Skip to content

Commit 286a70a

Browse files
committed
change cli
1 parent 352ee33 commit 286a70a

File tree

1 file changed

+36
-5
lines changed

1 file changed

+36
-5
lines changed

openevolve/cli.py

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)