import openai from fastapi import FastAPI, HTTPException from pydantic import BaseModel from fastapi import FastAPI, HTTPException, Depends, Request, Response from fastapi.security import OAuth2PasswordBearer from tinydb import TinyDB from tinydb import Query from datetime import datetime from utils import generate_token query = Query() db = TinyDB(".token.json") app = FastAPI() oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") REF_KEY = "F0eeQ419wvoCSPH7KBmsd9OiVkF0W0DxK1XE9T3BlbkFJ0" model_name = "" def verify_token(token: str = Depends(oauth2_scheme)): expiry = -1 res = db.get(query.token == token) if res: expiry = (datetime.strptime(res["expiry_date"], '%Y-%m-%d') - datetime.strptime(res["created_at"], '%Y-%m-%d')).days if expiry < 0: return {"message": "Token is not Valid"} return token class ChatInput(BaseModel): message: str openAI_token: str model_name: str class RefToken(BaseModel): expiry_date: str ref_key: str @app.post("/create") async def create(data: RefToken): token = "Reference Key is incorrect" try: if data.ref_key == REF_KEY: token = generate_token(data.expiry_date, db) return {"TOKEN": token} except Exception as e: raise HTTPException(status_code=500, detail="An error occurred while processing the request." + str(e)) @app.get("/list") async def create(token: str = Depends(verify_token)): token = "Reference Key is incorrect" try: data = db.all() return {"data": data} except Exception as e: raise HTTPException(status_code=500, detail="An error occurred while processing the request." + str(e)) @app.post("/chat") async def chat_with_gpt(chat_input: ChatInput, token: str = Depends(verify_token)): openai.api_key = chat_input.openAI_token prompt = f"User: {chat_input.message}\nAI:" model_name = chat_input.model_name try: if model_name == "text-davinci-002": response = openai.Completion.create( engine="text-davinci-002", prompt=prompt, max_tokens=50, n=1, stop=None, temperature=0.7, ) message = response.choices[0].text.strip() usages = response["usage"] if model_name == "gpt-3.5-turbo": response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": prompt} ]) message = response.choices[0]["message"]["content"] usages = response["usage"] if model_name == "": message = "Plase select the model" usages = "" return { "message": message, "usages" : usages } except Exception as e: raise HTTPException(status_code=500, detail="An error occurred while processing the request." + str(e))