askbyte commited on
Commit
4ad23c1
verified
1 Parent(s): 05b340c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -42
app.py CHANGED
@@ -1,51 +1,46 @@
1
- from flask import Flask, request, jsonify
2
  from transformers import AutoModelForCausalLM, AutoTokenizer
3
  import torch
4
  import os
5
 
6
- app = Flask(__name__)
7
-
8
- # Configuraci贸n CORS para permitir solicitudes desde tu dominio
9
- @app.after_request
10
- def after_request(response):
11
- response.headers.add('Access-Control-Allow-Origin', 'https://justbyte.es')
12
- response.headers.add('Access-Control-Allow-Headers', 'Content-Type')
13
- response.headers.add('Access-Control-Allow-Methods', 'POST')
14
- return response
15
-
16
- # Cargar el modelo y tokenizador (se carga una sola vez al iniciar)
17
- @app.before_first_request
18
- def load_model():
19
- global model, tokenizer
20
-
21
- print("Cargando modelo Zephyr-7B...")
22
-
23
- # Cargar el modelo y tokenizador
24
- model_name = "HuggingFaceH4/zephyr-7b-beta"
25
- tokenizer = AutoTokenizer.from_pretrained(model_name)
26
- model = AutoModelForCausalLM.from_pretrained(
27
- model_name,
28
- torch_dtype=torch.float16, # Usar precisi贸n reducida para ahorrar memoria
29
- device_map="auto", # Distribuir el modelo autom谩ticamente
30
- load_in_8bit=True # Cuantizaci贸n a 8 bits para reducir uso de memoria
31
- )
32
-
33
- print("Modelo cargado correctamente!")
34
 
35
  # Cargar el prompt desde el archivo
36
  def get_system_prompt():
37
  with open("prompt.txt", "r", encoding="utf-8") as f:
38
  return f.read().strip()
39
 
40
- @app.route('/generate', methods=['POST'])
41
- def generate_response():
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  try:
43
- # Obtener la pregunta del usuario
44
- data = request.json
45
- user_message = data.get('message', '')
46
 
47
- if not user_message:
48
- return jsonify({"error": "No se proporcion贸 ninguna pregunta"}), 400
49
 
50
  # Obtener el prompt del sistema
51
  system_prompt = get_system_prompt()
@@ -81,14 +76,31 @@ def generate_response():
81
  # Extraer solo la respuesta del asistente (despu茅s del 煤ltimo mensaje del usuario)
82
  assistant_response = full_response.split("assistant:")[-1].strip()
83
 
84
- return jsonify({"response": assistant_response})
85
 
86
  except Exception as e:
87
  print(f"Error: {str(e)}")
88
- return jsonify({"error": f"Error al generar respuesta: {str(e)}"}), 500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
 
90
- if __name__ == '__main__':
91
- # Puerto que Hugging Face Spaces utiliza
92
- port = int(os.environ.get('PORT', 7860))
93
- app.run(host='0.0.0.0', port=port)
94
 
 
1
+ import gradio as gr
2
  from transformers import AutoModelForCausalLM, AutoTokenizer
3
  import torch
4
  import os
5
 
6
+ # Variables globales para el modelo y tokenizador
7
+ model = None
8
+ tokenizer = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  # Cargar el prompt desde el archivo
11
  def get_system_prompt():
12
  with open("prompt.txt", "r", encoding="utf-8") as f:
13
  return f.read().strip()
14
 
15
+ # Funci贸n para cargar el modelo (se ejecutar谩 solo cuando sea necesario)
16
+ def load_model_if_needed():
17
+ global model, tokenizer
18
+
19
+ if model is None:
20
+ print("Cargando modelo Zephyr-7B...")
21
+
22
+ # Cargar el tokenizador
23
+ model_name = "HuggingFaceH4/zephyr-7b-beta"
24
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
25
+
26
+ # Cargar el modelo con configuraciones para ahorrar memoria
27
+ model = AutoModelForCausalLM.from_pretrained(
28
+ model_name,
29
+ torch_dtype=torch.float16, # Usar precisi贸n reducida
30
+ device_map="auto", # Distribuir el modelo autom谩ticamente
31
+ load_in_8bit=True, # Cuantizaci贸n a 8 bits
32
+ )
33
+
34
+ print("Modelo cargado correctamente!")
35
+
36
+ # Funci贸n principal que procesa las preguntas del usuario
37
+ def generate_response(user_message):
38
  try:
39
+ # Cargar el modelo si a煤n no est谩 cargado
40
+ load_model_if_needed()
 
41
 
42
+ if not user_message.strip():
43
+ return "Por favor, escribe una pregunta para que pueda ayudarte."
44
 
45
  # Obtener el prompt del sistema
46
  system_prompt = get_system_prompt()
 
76
  # Extraer solo la respuesta del asistente (despu茅s del 煤ltimo mensaje del usuario)
77
  assistant_response = full_response.split("assistant:")[-1].strip()
78
 
79
+ return assistant_response
80
 
81
  except Exception as e:
82
  print(f"Error: {str(e)}")
83
+ return f"Lo siento, ha ocurrido un error: {str(e)}"
84
+
85
+ # Crear la interfaz de Gradio
86
+ demo = gr.Interface(
87
+ fn=generate_response,
88
+ inputs=gr.Textbox(
89
+ placeholder="Escribe tu pregunta sobre emprendimiento aqu铆...",
90
+ label="Tu pregunta"
91
+ ),
92
+ outputs=gr.Textbox(label="Respuesta de BITER"),
93
+ title="BITER - Tu Mentor en Tiempo Real para Decisiones de Negocio",
94
+ description="BITER es un asistente de IA que responde dudas de emprendedores como si fuera un CEO experimentado.",
95
+ examples=[
96
+ ["驴C贸mo puedo validar mi idea de negocio con poco presupuesto?"],
97
+ ["驴Cu谩l es la mejor estrategia para conseguir mis primeros clientes?"],
98
+ ["驴Deber铆a invertir en publicidad en redes sociales o en SEO?"]
99
+ ],
100
+ allow_flagging="never"
101
+ )
102
 
103
+ # Lanzar la aplicaci贸n
104
+ if __name__ == "__main__":
105
+ demo.launch()
 
106