multiapi / api /openrouter.py
Juna190825's picture
Update api/openrouter.py
e4dd88b verified
import os
import requests
import json
from typing import Dict, List, Optional
class OpenRouterClient:
def __init__(self, api_key: str = ""):
self.base_url = "https://openrouter.ai/api/v1"
self.api_key = api_key or os.getenv("OPENROUTER_API_KEY", "")
self.headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json",
"HTTP-Referer": "https://huggingface.co/spaces",
"X-Title": "OpenRouter AI Hub"
}
def chat_completion(
self,
model: str,
messages: List[Dict[str, str]],
temperature: Optional[float] = 0.7,
max_tokens: Optional[int] = 1024,
**kwargs
) -> Dict:
"""
Get chat completion from OpenRouter
Parameters:
- model: Model identifier (e.g., "openai/gpt-3.5-turbo")
- messages: List of message dictionaries with role and content
- temperature: Creativity parameter (0-2)
- max_tokens: Maximum length of response
"""
payload = {
"model": model,
"messages": messages,
"temperature": temperature,
"max_tokens": max_tokens,
**kwargs
}
try:
response = requests.post(
f"{self.base_url}/chat/completions",
headers=self.headers,
data=json.dumps(payload)
)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
raise Exception(f"OpenRouter API request failed: {str(e)}")
def list_models(self) -> List[Dict]:
"""
List all available models from OpenRouter
"""
try:
response = requests.get(
f"{self.base_url}/models",
headers=self.headers
)
response.raise_for_status()
return response.json().get("data", [])
except requests.exceptions.RequestException as e:
raise Exception(f"OpenRouter API request failed: {str(e)}")
def get_openrouter_client():
return OpenRouterClient()