advent24-llm / generate.py
jerpint's picture
fix small bug
49c830d
raw
history blame
2.79 kB
import os
import re
from typing import Optional, Union
from llms import build_prompt, get_completion, PROMPT_TEMPLATE, SYSTEM_PROMPT
def generate_code(problem_description: str, prompt_template: str, system_prompt: str, model: str, temperature: float):
prompt = build_prompt(problem_description, prompt_template)
completion = get_completion(prompt, system_prompt, model, temperature)
return completion
def load_txt_file(file_path: str):
with open(file_path, "r") as file:
return file.read()
def load_problem_description(day: int):
day_str = f"{day:02d}"
file_path = f"day{day_str}/problem.txt"
return load_txt_file(file_path)
def extract_code(completion: str) -> str:
"""Extracts the code from the completion, should be contained in ```python ...``` code block."""
code_block = re.search(r"```python\s*([\s\S]*?)\s*```", completion)
if code_block:
return code_block.group(1)
def get_solution_file_path(model: str, day: Optional[Union[str, int]] = None):
"""Returns the path to the solution file for the given day and model. If day is None, returns the path to the solution file only."""
if day is None:
return f"solution_{model}.py"
# We want it formatted properly, so we convert to int and back if its already a string for convenience
if isinstance(day, str):
day = int(day)
day_str = f"{day:02d}"
return f"day{day_str}/solution_{model}.py"
def save_code(day: int, code: str, model: str):
"""Saves the code to the solution file for the given day and model."""
file_path = get_solution_file_path(day, model)
with open(file_path, "w") as file:
file.write(code)
print(f"Saved code to {file_path}")
all_models = {
"openai": ["gpt-4o"],
"gemini": ["gemini-1.5-pro"],
"anthropic": ["claude-3-5-sonnet-20241022"],
}
if __name__ == "__main__":
for day in range(1, 26):
problem_description = load_problem_description(day)
print(f"***Generating code for day {day}***")
for provider in all_models:
for model in all_models[provider]:
print("-" * 80)
print(f"Generating code for {provider} {model}")
if os.path.exists(get_solution_file_path(model=model, day=day)):
print(f"Skipping {provider} {model} for day {day} because it already exists")
continue
prompt = build_prompt(problem_description, PROMPT_TEMPLATE)
completion = get_completion(provider=provider, user_prompt=prompt, system_prompt=SYSTEM_PROMPT, model=model, temperature=0)
code = extract_code(completion)
save_code(day, code, model)
print("-" * 80)
print("*" * 80)