Spaces:
Sleeping
Sleeping
| import os | |
| from pydantic import BaseModel | |
| from openai import OpenAI | |
| client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) | |
| class EvaluationResult(BaseModel): | |
| result: str | |
| feedback: str | |
| def router_llm(user_input): | |
| messages = [ | |
| {"role": "system", "content": ( | |
| "You are a router. Decide which task the following input is for:\n" | |
| "- Math: If it's a math question.\n" | |
| "- Translate: If it's a translation request.\n" | |
| "- Summarize: If it's a request to summarize text.\n" | |
| "Reply with only one word: Math, Translate, or Summarize." | |
| )}, | |
| {"role": "user", "content": user_input} | |
| ] | |
| response = client.chat.completions.create( | |
| model="gpt-3.5-turbo", | |
| messages=messages, | |
| temperature=0 | |
| ) | |
| return response.choices[0].message.content.strip().lower() | |
| def math_llm(user_input): | |
| messages = [ | |
| {"role": "system", "content": "You are a helpful math assistant."}, | |
| {"role": "user", "content": f"Solve the following math problem: {user_input}"} | |
| ] | |
| response = client.chat.completions.create( | |
| model="gpt-3.5-turbo", | |
| messages=messages, | |
| temperature=0 | |
| ) | |
| return response.choices[0].message.content.strip() | |
| def translate_llm(user_input): | |
| messages = [ | |
| {"role": "system", "content": "You are a helpful translator from English to French."}, | |
| {"role": "user", "content": f"Translate this to French: {user_input}"} | |
| ] | |
| response = client.chat.completions.create( | |
| model="gpt-3.5-turbo", | |
| messages=messages, | |
| temperature=0 | |
| ) | |
| return response.choices[0].message.content.strip() | |
| def summarize_llm(user_input): | |
| messages = [ | |
| {"role": "system", "content": "You are a helpful summarizer."}, | |
| {"role": "user", "content": f"Summarize this: {user_input}"} | |
| ] | |
| response = client.chat.completions.create( | |
| model="gpt-3.5-turbo", | |
| messages=messages, | |
| temperature=0 | |
| ) | |
| return response.choices[0].message.content.strip() | |
| def evaluator_llm(task, user_input, solution): | |
| """ | |
| Evaluates the solution. Returns (result: bool, feedback: str) | |
| """ | |
| messages = [ | |
| {"role": "system", "content": ( | |
| f"You are an expert evaluator for the task: {task}.\n" | |
| "Given the user's request and the solution, decide if the solution is correct and helpful.\n" | |
| "Please evaluate the response, replying with whether it is right or wrong and your feedback for improvement." | |
| )}, | |
| {"role": "user", "content": f"User request: {user_input}\nSolution: {solution}"} | |
| ] | |
| response = client.beta.chat.completions.parse( | |
| model="gpt-4o-2024-08-06", | |
| messages=messages, | |
| response_format=EvaluationResult | |
| ) | |
| return response.choices[0].message.parsed | |
| def generate_solution(task, user_input, feedback=None): | |
| """ | |
| Calls the appropriate generator LLM, optionally with feedback. | |
| """ | |
| if feedback: | |
| user_input = f"{user_input}\n[Evaluator feedback: {feedback}]" | |
| if "math" in task: | |
| return math_llm(user_input) | |
| elif "translate" in task: | |
| return translate_llm(user_input) | |
| elif "summarize" in task: | |
| return summarize_llm(user_input) | |
| else: | |
| return "Sorry, I couldn't determine the task." | |
| def main(): | |
| user_input = input("Enter your request: ") | |
| task = router_llm(user_input) | |
| max_attempts = 3 | |
| feedback = None | |
| for attempt in range(max_attempts): | |
| solution = generate_solution(task, user_input, feedback) | |
| response = evaluator_llm(task, user_input, solution) | |
| if response.result.lower() == "right": | |
| print(f"Result (accepted on attempt {attempt+1}):\n{solution}") | |
| break | |
| else: | |
| print(f"Attempt {attempt+1} rejected. Feedback: {response.feedback}") | |
| else: | |
| print("Failed to generate an accepted solution after several attempts.") | |
| print(f"Last attempt:\n{solution}") | |
| if __name__ == "__main__": | |
| main() | |