Spaces:
Sleeping
Sleeping
from fastapi import FastAPI, HTTPException, Depends | |
from fastapi.security import HTTPBasic, HTTPBasicCredentials | |
from pydantic import BaseModel | |
import openai | |
import uvicorn | |
from dotenv import load_dotenv | |
import os | |
import secrets | |
from starlette.status import HTTP_401_UNAUTHORIZED | |
# Cargar las credenciales de OpenAI desde un archivo .env | |
load_dotenv() | |
# Configura la clave API de OpenAI | |
openai.api_key = os.getenv("OPENAI_API_KEY") | |
# Variables de entorno para autenticación básica | |
BASIC_AUTH_USERNAME = os.getenv("BASIC_AUTH_USERNAME") | |
BASIC_AUTH_PASSWORD = os.getenv("BASIC_AUTH_PASSWORD") | |
app = FastAPI() | |
security = HTTPBasic() | |
class MessageRequest(BaseModel): | |
user_name: str | |
text: str | |
class MessageResponse(BaseModel): | |
response: str | |
def chatgpt(message: str) -> str: | |
model_engine = "gpt-3.5-turbo" | |
response = openai.ChatCompletion.create( | |
model=model_engine, | |
messages=[{"role": "user", "content": message}], | |
max_tokens=1024, | |
n=1, | |
stop=None, | |
temperature=0.5, | |
) | |
return response.choices[0].message["content"].strip() | |
def verify_credentials(credentials: HTTPBasicCredentials = Depends(security)): | |
correct_username = secrets.compare_digest(credentials.username, BASIC_AUTH_USERNAME) | |
correct_password = secrets.compare_digest(credentials.password, BASIC_AUTH_PASSWORD) | |
if not (correct_username and correct_password): | |
raise HTTPException( | |
status_code=HTTP_401_UNAUTHORIZED, | |
detail="Incorrect username or password", | |
headers={"WWW-Authenticate": "Basic"}, | |
) | |
return credentials | |
async def send_message( | |
request: MessageRequest, | |
credentials: HTTPBasicCredentials = Depends(verify_credentials), | |
): | |
try: | |
response_text = chatgpt(request.text) | |
return MessageResponse(response=response_text) | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |
def read_root(credentials: HTTPBasicCredentials = Depends(verify_credentials)): | |
return {"message": "Bienvenido a la API de ChatGPT."} | |
if __name__ == "__main__": | |
uvicorn.run(app, host="0.0.0.0", port=7860) | |