Spaces:
Paused
Paused
File size: 2,069 Bytes
39b5a26 84ab11b 39b5a26 b26704f fa720ef 39b5a26 84ab11b 39b5a26 cf00782 fa720ef be48726 84ab11b b26704f 84ab11b b26704f 84ab11b 4e469f4 b26704f 4e469f4 b26704f 4e469f4 84ab11b 39b5a26 84ab11b b26704f 39b5a26 84ab11b 39b5a26 84ab11b 39b5a26 84ab11b 39b5a26 84ab11b 39b5a26 84ab11b fa720ef cf00782 4e469f4 be48726 |
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 |
from fastapi import FastAPI
from pydantic import BaseModel
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from huggingface_hub import snapshot_download
import os
# ✅ Inicializar FastAPI
app = FastAPI()
# ✅ Definir un directorio de caché seguro
os.environ["HF_HOME"] = "/tmp/huggingface"
# ✅ Repositorio del modelo fusionado (actualizado)
HUGGING_FACE_REPO = "fcp2207/Fusion_modelo_Phi2" # ✅ Debe coincidir con el Space donde guardaste `phi2_full_model`
# ✅ Descargar el modelo fusionado desde Hugging Face
print("🔄 Descargando modelo fusionado...")
model_path = snapshot_download(repo_id=HUGGING_FACE_REPO, cache_dir=os.environ["HF_HOME"])
# ✅ Cargar el tokenizer desde el modelo fusionado
print("🔄 Cargando tokenizer...")
tokenizer = AutoTokenizer.from_pretrained(model_path)
# ✅ Cargar el modelo en modo optimizado para memoria
print("🔄 Cargando modelo...")
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype=torch.float16, # Reduce el tamaño del modelo
device_map="auto" # Optimiza la carga en CPU/GPU automáticamente
)
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 fusionado 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)
|