Llm_Bench / app /api.py
AravindS2006's picture
Update app/api.py
507fb5b verified
Raw
History Blame Contribute Delete
1.89 kB
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from app.llm_service import get_llm_response
import time
import psutil
import os
from fastapi.middleware.cors import CORSMiddleware
from typing import Dict, Any
app = FastAPI()
# CORS Middleware (Restrict Origins in Production!)
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"], # Allows all HTTP methods (GET, POST, PUT, DELETE, etc.)
allow_headers=["*"], # Allows all headers
)
class PromptRequest(BaseModel):
prompt: str
llm_name: str
class LLMResponse(BaseModel):
response: str
response_time: float
cost: float
memory_usage: float
@app.post("/generate", response_model=LLMResponse)
async def generate_text(request: PromptRequest) -> LLMResponse:
"""Generates text using the specified LLM."""
start_time = time.time()
process = psutil.Process(os.getpid())
initial_memory = process.memory_info().rss
try:
response_data: Dict[str, Any] = await get_llm_response(request.llm_name, request.prompt) #get_llm_response now returns a dictionary.
except ValueError as ve:
raise HTTPException(status_code=400, detail=str(ve)) #Value Error will give 400
except Exception as e:
print(f"Unexpected error: {e}")
raise HTTPException(status_code=500, detail=f"Internal Server Error: {str(e)}") #All other errors will give 500.
end_time = time.time()
response_time = end_time - start_time
final_memory = process.memory_info().rss
memory_usage = (final_memory - initial_memory) / (1024 * 1024) # Memory usage in MB
#Cost calculation is now taken from get_llm_response()
cost = response_data["cost"]
return LLMResponse(response=response_data["response"], response_time=response_time, cost=cost, memory_usage = memory_usage)