Spaces:
Runtime error
Runtime error
File size: 2,244 Bytes
9c07fea |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
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
@app.post("/send_message", response_model=MessageResponse)
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))
@app.get("/")
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)
|