from pydantic import BaseModel
from openai import OpenAI
import os
from typing import Elective
from dotenv import load_dotenv
# Load atmosphere variables from .env file
load_dotenv()
app = FastAPI(title=”OpenAI Agent API”, description=”Easy FastAPI software for AI Brokers”)
def get_openai_client():
“””Get OpenAI consumer with correct error dealing with”””
api_key = os.getenv(“OPENAI_API_KEY”)
if not api_key:
elevate HTTPException(
status_code=500,
element=”OpenAI API key not configured. Please set the OPENAI_API_KEY atmosphere variable.”
)
return OpenAI(api_key=api_key)
class QueryRequest(BaseModel):
question: str
mannequin: Elective[str] = “gpt-4.1-mini”
max_tokens: Elective[int] = 1000
class QueryResponse(BaseModel):
response: str
model_used: str
@app.get(“/”)
async def root():
return {“message”: “Welcome to OpenAI Agent API”}
@app.get(“/well being”)
async def health_check():
# Verify if API secret’s configured
api_key_status = “configured” if os.getenv(“OPENAI_API_KEY”) else “not configured”
return {
“standing”: “wholesome”,
“openai_api_key”: api_key_status
}
@app.put up(“/chat”, response_model=QueryResponse)
async def chat_with_agent(request: QueryRequest):
“””
Ship a question to the OpenAI agent and get a response
“””
attempt:
# Get consumer with error dealing with
consumer = get_openai_client()
response = consumer.chat.completions.create(
mannequin=request.mannequin,
messages=[
{“role”: “system”, “content”: “You are a helpful assistant.”},
{“role”: “user”, “content”: request.query}
],
max_tokens=request.max_tokens
)
return QueryResponse(
response=response.selections[0].message.content material,
model_used=request.mannequin
)
besides HTTPException:
# Re-raise HTTP exceptions (like lacking API key)
elevate
besides Exception as e:
elevate HTTPException(status_code=500, element=f”Error processing request: {str(e)}”)
if __name__ == “__main__”:
import uvicorn
uvicorn.run(app, host=”0.0.0.0″, port=8090)