llm-eval / runner.py
poemsforaphrodite's picture
Update runner.py
10ba055 verified
raw
history blame
5.79 kB
import os
from openai import OpenAI
from dotenv import load_dotenv
import openai
import io
from PIL import Image
import base64 # {{ edit_add: Import base64 for image conversion }}
import requests # Add this import for making HTTP requests to Hugging Face
# Load environment variables
load_dotenv()
# Initialize OpenAI client with API key from .env
openai_client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))
def run_gpt4o_mini(question):
try:
# Check if the question is a dictionary and extract the prompt
if isinstance(question, dict) and 'prompt' in question:
question_text = question['prompt']
else:
question_text = str(question)
response = openai_client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant. Answer the question to the best of your ability."},
{"role": "user", "content": question_text}
]
)
return response.choices[0].message.content
except Exception as e:
print(f"Error running GPT-4o-mini: {str(e)}")
return None
def run_gpt4o(question):
try:
# Check if the question is a dictionary and extract the prompt
if isinstance(question, dict) and 'prompt' in question:
question_text = question['prompt']
else:
question_text = str(question)
response = openai_client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant. Answer the question to the best of your ability."},
{"role": "user", "content": question_text}
]
)
return response.choices[0].message.content
except Exception as e:
print(f"Error running GPT-4o-mini: {str(e)}")
return None
def run_custom_model(model_name, question):
# Placeholder for custom model logic
# You'll need to implement this based on how your custom models work
return f"Custom model {model_name} response: This is a placeholder answer for the question provided."
def run_huggingface_model(endpoint, token, prompt, context):
"""
Runs the Hugging Face model with the provided prompt and context.
Args:
endpoint (str): The Hugging Face model endpoint URL.
token (str): The Hugging Face API token.
prompt (str): The user's prompt.
context (str): The context related to the prompt.
Returns:
str: The generated response from the Hugging Face model.
"""
import os
import requests
import json
headers = {"Authorization": f"Bearer {token}"}
combined_input = f"{context}\n\n{prompt}" if context else prompt
payload = {"inputs": combined_input}
try:
response = requests.post(endpoint, headers=headers, json=payload)
response.raise_for_status()
generated_text = response.json()[0]['generated_text']
return generated_text
except requests.exceptions.RequestException as e:
print(f"Error calling Hugging Face API: {e}")
return None
def run_model(model_name, prompt, context=""):
"""
Runs the specified model with the given prompt and context.
Args:
model_name (str): The name of the model to run.
prompt (str): The user's prompt.
context (str, optional): The context related to the prompt. Defaults to "".
Returns:
str: The generated response from the model.
"""
from pymongo import MongoClient
from dotenv import load_dotenv
import os
# Load environment variables
load_dotenv()
# MongoDB connection
mongodb_uri = os.getenv('MONGODB_URI')
mongo_client = MongoClient(mongodb_uri)
db = mongo_client['llm_evaluation_system']
users_collection = db['users']
if model_name == "gpt-4o-mini":
return run_gpt4o_mini(prompt)
elif model_name == "gpt-4o":
return run_gpt4o(prompt)
elif model_name.startswith("HF_"):
# Fetch model details from the database
user = users_collection.find_one({"models.model_name": model_name})
if user:
model = next((m for m in user['models'] if m['model_name'] == model_name), None)
if model:
return run_huggingface_model(model['model_link'], model['model_api_token'], prompt, context)
print(f"Hugging Face model {model_name} not found")
return None
else:
return run_custom_model(model_name, prompt)
# {{ edit_final: Add function to summarize images }}
def summarize_image(image_bytes: bytes) -> str:
try:
# Convert bytes to base64
base64_image = base64.b64encode(image_bytes).decode('utf-8')
payload = {
"model": "gpt-4o-mini",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Please describe and summarize this image."
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
"max_tokens": 300
}
response = openai_client.chat.completions.create(**payload)
summary = response.choices[0].message.content.strip()
return summary
except Exception as e:
print(f"Error in summarize_image: {e}")
return "Failed to summarize the image."