AmsideAi / app.py
Hodely's picture
Update app.py
acceed5 verified
raw
history blame
2.6 kB
from flask import Flask, request, jsonify
from flask_cors import CORS
from transformers import pipeline
import os
app = Flask(__name__)
CORS(app) # Habilita CORS para permitir peticiones desde tu frontend
# Nombre del modelo de Hugging Face
MODEL_ID = "sarvamai/sarvam-m"
# Variable para almacenar el pipeline de la IA
pipe = None
# Función para cargar el modelo
def load_model():
global pipe
try:
print(f"Cargando modelo '{MODEL_ID}'. Esto puede tardar unos minutos...")
# El token de Hugging Face se obtiene automáticamente de la variable de entorno HF_TOKEN
# que configuras como un "Secret" en Hugging Face Spaces.
pipe = pipeline("text-generation", model=MODEL_ID, device=-1) # device=-1 usa CPU
print(f"Modelo '{MODEL_ID}' cargado con éxito.")
except Exception as e:
print(f"Error al cargar el modelo '{MODEL_ID}': {e}")
pipe = None
print("El servidor no podrá responder a las solicitudes de IA.")
# Cargar el modelo inmediatamente después de crear la aplicación Flask
# Esto se asegura de que el modelo se cargue al inicio del servidor
with app.app_context():
load_model()
@app.route('/chat', methods=['POST'])
def chat():
if pipe is None:
return jsonify({"error": "El modelo de IA no está cargado. Por favor, revisa el log del servidor."}), 503
data = request.json
messages = data.get('messages') # El frontend envía el historial completo
if not messages:
return jsonify({"error": "No se proporcionaron mensajes."}), 400
try:
prompt = ""
for msg in messages:
if msg['role'] == 'user':
prompt += f"Usuario: {msg['content']}\n"
elif msg['role'] == 'assistant':
prompt += f"Asistente: {msg['content']}\n"
prompt += "Asistente:"
response = pipe(prompt, max_new_tokens=250, temperature=0.7, do_sample=True, clean_up_tokenization_spaces=True)
generated_text = response[0]['generated_text']
ai_response_content = generated_text.split("Asistente:", 1)[-1].strip()
if not ai_response_content:
ai_response_content = "Lo siento, no pude generar una respuesta clara. ¿Puedes intentarlo de nuevo?"
return jsonify({"response": ai_response_content})
except Exception as e:
print(f"Error en la inferencia de la IA: {e}")
return jsonify({"error": f"Error interno del servidor: {str(e)}"}), 500
if __name__ == '__main__':
port = int(os.environ.get('PORT', 7860))
app.run(debug=False, host='0.0.0.0', port=port)