Spaces:
Paused
Paused
File size: 2,260 Bytes
39b5a26 84ab11b 39b5a26 84ab11b fa720ef 39b5a26 84ab11b 39b5a26 cf00782 fa720ef 84ab11b cf00782 84ab11b 4e469f4 84ab11b fa720ef cf00782 84ab11b 4e469f4 cf00782 84ab11b 4e469f4 84ab11b 39b5a26 84ab11b 39b5a26 84ab11b 39b5a26 84ab11b 39b5a26 84ab11b 39b5a26 84ab11b 39b5a26 84ab11b fa720ef cf00782 4e469f4 | 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
from pydantic import BaseModel
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from huggingface_hub import hf_hub_download
import os
# ✅ Inicializar FastAPI
app = FastAPI()
# ✅ Definir un directorio de caché seguro
os.environ["HF_HOME"] = "/tmp/huggingface"
# ✅ Nombre del modelo en Hugging Face Hub
HUGGING_FACE_REPO = "fcp2207/Phi-2" # Reemplaza con tu usuario y nombre correcto del modelo en Hugging Face
MODEL_FILENAME = "phi2_finetuned.pth" # Nombre del archivo en Hugging Face
# ✅ Descargar el modelo desde Hugging Face con caché segura
model_path = hf_hub_download(
repo_id=HUGGING_FACE_REPO,
filename=MODEL_FILENAME,
cache_dir=os.environ["HF_HOME"] # Directorio seguro en Hugging Face Spaces
)
# ✅ Cargar el tokenizer
tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-2", cache_dir=os.environ["HF_HOME"])
# ✅ Cargar el modelo en modo optimizado para memoria
model = AutoModelForCausalLM.from_pretrained(
"microsoft/phi-2",
cache_dir=os.environ["HF_HOME"],
torch_dtype=torch.float16, # Reduce el tamaño del modelo
device_map="auto" # Optimiza la carga en CPU/GPU automáticamente
)
# ✅ Cargar los pesos del modelo entrenado
model.load_state_dict(torch.load(model_path, map_location="cpu"))
model.eval() # Poner el modelo en modo inferencia
# ✅ Definir la estructura de la solicitud para la API
class InputText(BaseModel):
input_text: str
@app.get("/")
def home():
"""Endpoint de prueba para verificar que la API está activa"""
return {"message": "API de Chatbot con Phi-2 está en funcionamiento 🚀"}
@app.post("/predict/")
def predict(request: InputText):
"""Genera una respuesta basada en el input del usuario."""
inputs = tokenizer(request.input_text, return_tensors="pt", padding=True, truncation=True, max_length=512)
with torch.no_grad():
outputs = model.generate(**inputs, max_length=150)
response_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
return {"response": response_text}
# ✅ Ejecución en modo local (opcional, no necesario en Hugging Face)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
|