Spaces:
Running
Running
import os | |
SYSTEM_PROMPT = "You are a programming assistant. You are solving the 2024 advent of code challenge." | |
PROMPT_TEMPLATE = """You are solving the 2024 advent of code challenge. | |
You will be provided the description of each challenge. You are to provide the solution to each given challenge. | |
1) You can reason and explain your logic before writing the code. | |
2) You must write the code such that it can be parsed into an actual python file. | |
3) It will be parsed by the evaluator, so it must be valid python code. | |
4) All of the code must be in a single code block, delimited by ```python and ```. | |
5) To count as a proper submission, the code must print the result to each question asked. | |
6) Each question will have a single string as an answer. Make sure to print it that string, and nothing else. | |
7) The actual input to the question will be provided in a file relative to the python file, e.g. "./input.txt". You must read and parse from the file accordingly. You can safely assume the file will always be relative to the python file. | |
Here is an example of a proper submission: | |
You reasoning goes here ... | |
```python | |
file = "input.txt" | |
def your_function(...) | |
... | |
... | |
print(result1) | |
def your_other_function(...) | |
... | |
... | |
print(result2) | |
``` | |
Here is today's challenge description: | |
{problem_description} | |
""" | |
def build_prompt( | |
problem_description: str, prompt_template: str = PROMPT_TEMPLATE | |
) -> str: | |
return prompt_template.format(problem_description=problem_description) | |
def get_completion( | |
provider: str, | |
user_prompt: str, | |
system_prompt: str, | |
model: str, | |
temperature: float, | |
) -> str: | |
""" | |
Unified function to get completions from various LLM providers. | |
""" | |
if provider == "openai": | |
from openai import OpenAI | |
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") | |
assert ( | |
OPENAI_API_KEY | |
), "OPENAI_API_KEY is not set, please set it in your environment variables." | |
openai_client = OpenAI(api_key=OPENAI_API_KEY) | |
completion = openai_client.chat.completions.create( | |
model=model, | |
messages=[ | |
{"role": "system", "content": system_prompt}, | |
{"role": "user", "content": user_prompt}, | |
], | |
temperature=temperature, | |
) | |
# logger.info("Completion: %s", completion) | |
return completion.choices[0].message.content | |
elif provider == "gemini": | |
# Setup | |
import google.generativeai as genai | |
AI_STUDIO_API_KEY = os.getenv("AI_STUDIO_API_KEY") | |
assert ( | |
AI_STUDIO_API_KEY | |
), "AI_STUDIO_API_KEY is not set, please set it in your environment variables." | |
genai.configure(api_key=AI_STUDIO_API_KEY) | |
model = genai.GenerativeModel( | |
model_name=model, | |
system_instruction=system_prompt, | |
) | |
response = model.generate_content( | |
user_prompt, | |
generation_config=genai.types.GenerationConfig(temperature=temperature), | |
) | |
# logger.info("reponse: %s", response) | |
return response.text | |
elif provider == "anthropic": | |
# Setup | |
import anthropic | |
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY") | |
assert ( | |
ANTHROPIC_API_KEY | |
), "ANTHROPIC_API_KEY is not set, please set it in your environment variables." | |
anthropic_client = anthropic.Anthropic(api_key=ANTHROPIC_API_KEY) | |
response = anthropic_client.messages.create( | |
model=model, | |
max_tokens=2048, | |
temperature=temperature, | |
system=system_prompt, | |
messages=[{"role": "user", "content": user_prompt}], | |
) | |
# logger.info("Response: %s", response) | |
return response.content[0].text | |
else: | |
raise ValueError(f"Unknown provider: {provider}") | |