Using virtual environments keeps project dependencies separate from the system Python and other projects. Create a virtual environment named venv
. You can use whatever name is appropriate for your project.
python -m venv venv
Activate the virtual environment.
source venv/bin/activate
# deactivate if you want to get out of the environment
Install Dependencies within the virtual environment
pip install fastapi uvicorn openai
This will install packages within the virtual environment, not contaminating your global package space. You can run pip list
to confirm the installed packages; it might display other packages on which the above packages depend.
from fastapi import FastAPI, HTTPException
from fastapi.staticfiles import StaticFiles
from starlette.responses import FileResponse
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from openai import OpenAI
import os
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
app = FastAPI()
# Mount the static directory
app.mount("/static", StaticFiles(directory="static"), name="static")
# Configure CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Adjust this to restrict allowed origins
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Load OpenAI API key from environment variable
client = OpenAI(
# This is the default and can be omitted
api_key=os.environ.get("OPENAI_API_KEY"),
)
# Define request and response models
class QueryRequest(BaseModel):
prompt: str
class QueryResponse(BaseModel):
response: str
# Endpoint to interact with OpenAI API via LangChain
@app.post("/query", response_model=QueryResponse)
async def query_openai(request: QueryRequest):
try:
# Set your OpenAI API key
# Call the OpenAI API via LangChain
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": "Say this is a test",
}
],
model="gpt-3.5-turbo",
)
return QueryResponse(response=chat_completion.choices[0].message.content)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
# Root endpoint
@app.get("/")
async def read_root():
return FileResponse('static/index.html')
.env
file in your project folder and save the key inside the file:OPENAI_API_KEY={{ Put Your API Key Here }}