Spaces:
Sleeping
Sleeping
| 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." |