multiapi / api /endpoints.py
Juna190825's picture
Update api/endpoints.py
b0ce8a9 verified
Raw
History Blame Contribute Delete
1.93 kB
from fastapi import APIRouter, HTTPException, Query, status
from typing import Optional
import random
import logging
from .openrouter import OpenRouterClient
from .utils import get_openrouter_client
router = APIRouter()
logger = logging.getLogger(__name__)
FREE_MODELS = [
"openai/gpt-3.5-turbo",
"anthropic/claude-instant-v1",
"google/palm-2-chat-bison",
"meta-llama/llama-2-13b-chat",
"mistralai/mistral-7b-instruct"
]
@router.post("/chat")
async def chat_with_model(
message: str,
model: Optional[str] = None,
temperature: float = Query(0.7, ge=0, le=2),
max_tokens: int = Query(1024, ge=1, le=4096)
):
"""
Chat with a specified model or let the system choose one
"""
if not message.strip():
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Message cannot be empty"
)
client = get_openrouter_client()
if not model:
model = random.choice(FREE_MODELS)
elif model not in FREE_MODELS:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=f"Model not available in free tier. Available models: {', '.join(FREE_MODELS)}"
)
try:
logger.info(f"Processing chat request with model: {model}")
response = client.chat_completion(
model=model,
messages=[{"role": "user", "content": message}],
temperature=temperature,
max_tokens=max_tokens
)
return {
"model": model,
"response": response["choices"][0]["message"]["content"],
"usage": response.get("usage", {})
}
except Exception as e:
logger.error(f"Error processing chat request: {str(e)}")
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail="Error processing your request"
)