Source code for dllmforge.openai_api

import os
from dotenv import load_dotenv

try:
    from openai import AzureOpenAI
    OPENAI_AVAILABLE = True
except ImportError:
    OPENAI_AVAILABLE = False
    AzureOpenAI = None


[docs] class OpenAIAPI: """Class to interact with Azure OpenAI API."""
[docs] def __init__(self, api_key=None, api_base=None, api_version=None, deployment_name="gpt-4o", embedding_deployment="text-embedding-3-large"): """Initialize the OpenAI API client with Azure configuration.""" # Load environment variables if not provided load_dotenv() self.api_key = api_key or os.getenv("AZURE_OPENAI_API_KEY") self.api_base = api_base or os.getenv("AZURE_OPENAI_API_BASE") self.api_version = api_version or os.getenv("AZURE_OPENAI_API_VERSION") self.deployment_name = deployment_name self.embedding_deployment = embedding_deployment # Initialize the Azure OpenAI client self.client = AzureOpenAI(api_key=self.api_key, api_version=self.api_version, azure_endpoint=self.api_base)
[docs] def check_server_status(self): """Check if the Azure OpenAI service is accessible.""" try: # Try to list models as a health check response = self.client.models.list() if response: print("Azure OpenAI service is up!") return True else: print("Azure OpenAI service is down!") return False except Exception as e: print(f"Error checking server status: {e}") return False
[docs] def list_available_models(self): """List available models from Azure OpenAI.""" try: response = self.client.models.list() return [model.id for model in response] except Exception as e: print(f"Error listing models: {e}") return None
[docs] def send_test_message(self, prompt="Hello, how are you?"): """Send a test message to the model and get a response.""" try: response = self.client.chat.completions.create(model=self.deployment_name, messages=[{ "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": prompt }]) return { "response": response.choices[0].message.content, "model": response.model, "usage": { "prompt_tokens": response.usage.prompt_tokens, "completion_tokens": response.usage.completion_tokens, "total_tokens": response.usage.total_tokens } } except Exception as e: print(f"Error sending test message: {e}") return None
[docs] def get_embeddings(self, text): """Get embeddings for the given text using Azure OpenAI.""" try: response = self.client.embeddings.create(model=self.embedding_deployment, input=text) return response.data[0].embedding except Exception as e: print(f"Error getting embeddings: {e}") return None
[docs] def chat_completion(self, messages, temperature=0.7, max_tokens=800): """Get a chat completion from the model.""" try: response = self.client.chat.completions.create(model=self.deployment_name, messages=messages, temperature=temperature, max_tokens=max_tokens) return { "response": response.choices[0].message.content, "model": response.model, "usage": { "prompt_tokens": response.usage.prompt_tokens, "completion_tokens": response.usage.completion_tokens, "total_tokens": response.usage.total_tokens } } except Exception as e: print(f"Error getting chat completion: {e}") return None