launch_scientist.py
code:why and how are these LLM picked up?.py
try:
print_time()
print(f"*Starting idea: {idea_name}*")
## PERFORM EXPERIMENTS
fnames = exp_file, vis_file, notes
io = InputOutput(yes=True, chat_history_file=f"{folder_name}/{idea_name}_aider.txt")
⭐if model == "hybrid":
main_model = Model("claude-3-5-sonnet-20240620")
elif model == "deepseek-coder-v2-0724":
main_model = Model("deepseek/deepseek-coder")
elif model == "llama3.1-405b":
main_model = Model("openrouter/meta-llama/llama-3.1-405b-instruct")
else:
main_model = Model(model)
coder = Coder.create(
main_model=main_model, fnames=fnames, io=io, stream=False, use_git=False, edit_format="diff"
)
coder is Aider's API?
code:coder.py
coder = Coder.create(
main_model=main_model, fnames=fnames, io=io, stream=False, use_git=False,
edit_format="diff"
)
generate_idea
code:.py
if __name__ == "__main__":
args = parse_arguments()
# Check available GPUs and adjust parallel processes if necessary
available_gpus = get_available_gpus(args.gpus)
if args.parallel > len(available_gpus):
print(
f"Warning: Requested {args.parallel} parallel processes, but only {len(available_gpus)} GPUs available. Adjusting to {len(available_gpus)}."
)
args.parallel = len(available_gpus)
print(f"Using GPUs: {available_gpus}")
# Create client
if args.model == "claude-3-5-sonnet-20240620":
import anthropic
print(f"Using Anthropic API with model {args.model}.")
client_model = "claude-3-5-sonnet-20240620"
client = anthropic.Anthropic()
elif args.model == "gpt-4o-2024-05-13" or args.model == "hybrid":
import openai
print(f"Using OpenAI API with model {args.model}.")
client_model = "gpt-4o-2024-05-13"
client = openai.OpenAI()
elif args.model == "deepseek-coder-v2-0724":
import openai
print(f"Using OpenAI API with {args.model}.")
client_model = "deepseek-coder-v2-0724"
client = openai.OpenAI(
api_key=os.environ"DEEPSEEK_API_KEY",
base_url="https://api.deepseek.com"
)
elif args.model == "llama3.1-405b":
import openai
print(f"Using OpenAI API with {args.model}.")
client_model = "meta-llama/llama-3.1-405b-instruct"
client = openai.OpenAI(
api_key=os.environ"OPENROUTER_API_KEY",
base_url="https://openrouter.ai/api/v1"
)
else:
raise ValueError(f"Model {args.model} not supported.")
base_dir = osp.join("templates", args.experiment)
results_dir = osp.join("results", args.experiment)
ideas = ⭐️generate_ideas(
base_dir,
client=client,
model=client_model,
skip_generation=args.skip_idea_generation,
max_num_generations=args.num_ideas,
num_reflections=NUM_REFLECTIONS,
)
ideas = ⭐️check_idea_novelty(
ideas,
base_dir=base_dir,
client=client,
model=client_model,
)
with open(osp.join(base_dir, "ideas.json"), "w") as f:
json.dump(ideas, f, indent=4)
novel_ideas = [idea for idea in ideas if idea"novel"]
# novel_ideas = list(reversed(novel_ideas))
if args.parallel > 0:
print(f"Running {args.parallel} parallel processes")
queue = multiprocessing.Queue()
for idea in novel_ideas:
queue.put(idea)
processes = []
for i in range(args.parallel):
gpu_id = available_gpusi % len(available_gpus)
p = multiprocessing.Process(
target=worker,
args=(
queue,
base_dir,
results_dir,
args.model,
client,
client_model,
args.writeup,
args.improvement,
gpu_id,
)
)
p.start()
time.sleep(150)
processes.append(p)
# Signal workers to exit
for _ in range(args.parallel):
queue.put(None)
for p in processes:
p.join()
print("All parallel processes completed.")
else:
for idea in novel_ideas:
print(f"Processing idea: {idea'Name'}")
try:
success = ⭐️do_idea(
base_dir,
results_dir,
idea,
args.model,
client,
client_model,
args.writeup,
args.improvement,
)
print(f"Completed idea: {idea'Name'}, Success: {success}")
except Exception as e:
print(f"Failed to evaluate idea {idea'Name'}: {str(e)}")
print("All ideas evaluated.")