Spaces:
Running
Running
| from openai import OpenAI | |
| import anthropic | |
| from together import Together | |
| import json | |
| import re | |
| # Initialize clients | |
| anthropic_client = anthropic.Anthropic() | |
| openai_client = OpenAI() | |
| together_client = Together() | |
| SYSTEM_PROMPT = """Please act as an impartial judge and evaluate based on the user's instruction. Your output format should strictly adhere to JSON as follows: {"feedback": "<write feedback>", "result": <numerical score>}. Ensure the output is valid JSON, without additional formatting or explanations.""" | |
| def get_openai_response(model_name, prompt): | |
| """Get response from OpenAI API""" | |
| try: | |
| response = openai_client.chat.completions.create( | |
| model=model_name, | |
| messages=[ | |
| {"role": "system", "content": SYSTEM_PROMPT}, | |
| {"role": "user", "content": prompt}, | |
| ], | |
| ) | |
| return response.choices[0].message.content | |
| except Exception as e: | |
| return f"Error with OpenAI model {model_name}: {str(e)}" | |
| def get_anthropic_response(model_name, prompt): | |
| """Get response from Anthropic API""" | |
| try: | |
| response = anthropic_client.messages.create( | |
| model=model_name, | |
| max_tokens=1000, | |
| temperature=0, | |
| system=SYSTEM_PROMPT, | |
| messages=[{"role": "user", "content": [{"type": "text", "text": prompt}]}], | |
| ) | |
| return response.content[0].text | |
| except Exception as e: | |
| return f"Error with Anthropic model {model_name}: {str(e)}" | |
| def get_together_response(model_name, prompt): | |
| """Get response from Together API""" | |
| try: | |
| response = together_client.chat.completions.create( | |
| model=model_name, | |
| messages=[ | |
| {"role": "system", "content": SYSTEM_PROMPT}, | |
| {"role": "user", "content": prompt}, | |
| ], | |
| stream=False, | |
| ) | |
| return response.choices[0].message.content | |
| except Exception as e: | |
| return f"Error with Together model {model_name}: {str(e)}" | |
| def get_model_response(model_name, model_info, prompt): | |
| """Get response from appropriate API based on model organization""" | |
| if not model_info: | |
| return "Model not found or unsupported." | |
| api_model = model_info["api_model"] | |
| organization = model_info["organization"] | |
| try: | |
| if organization == "OpenAI": | |
| return get_openai_response(api_model, prompt) | |
| elif organization == "Anthropic": | |
| return get_anthropic_response(api_model, prompt) | |
| else: | |
| # All other organizations use Together API | |
| return get_together_response(api_model, prompt) | |
| except Exception as e: | |
| return f"Error with {organization} model {model_name}: {str(e)}" | |
| def parse_model_response(response): | |
| try: | |
| # Debug print | |
| print(f"Raw model response: {response}") | |
| # First try to parse the entire response as JSON | |
| try: | |
| data = json.loads(response) | |
| return str(data.get("result", "N/A")), data.get("feedback", "N/A") | |
| except json.JSONDecodeError: | |
| # If that fails (typically for smaller models), try to find JSON within the response | |
| json_match = re.search(r"{.*}", response) | |
| if json_match: | |
| data = json.loads(json_match.group(0)) | |
| return str(data.get("result", "N/A")), data.get("feedback", "N/A") | |
| else: | |
| return "Error", f"Failed to parse response: {response}" | |
| except Exception as e: | |
| # Debug print for error case | |
| print(f"Failed to parse response: {str(e)}") | |
| return "Error", f"Failed to parse response: {response}" | |