88ggg commited on
Commit
e8dba54
verified
1 Parent(s): e4adaa2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -39
app.py CHANGED
@@ -1,68 +1,88 @@
1
  import torch
2
  from transformers import AutoModelForCausalLM, AutoTokenizer
3
  import gradio as gr
 
4
 
5
- # 1. Configuraci贸n mejorada
6
- MODEL_NAME = "HuggingFaceH4/zephyr-7b-beta"
7
  DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
8
 
9
- # 2. Carga del modelo con seguridad mejorada
 
 
 
 
10
  try:
11
- tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
12
-
13
- # Ajustamos el dtype seg煤n el dispositivo
14
- torch_dtype = torch.float16 if DEVICE == "cuda" else torch.float32
15
 
 
16
  model = AutoModelForCausalLM.from_pretrained(
17
  MODEL_NAME,
18
- torch_dtype=torch_dtype,
19
  device_map="auto"
20
  )
21
 
22
- # Forzamos el modelo al dispositivo correcto
23
- model.to(DEVICE)
24
-
 
 
 
 
25
  except Exception as e:
26
- raise gr.Error(f"Error al cargar el modelo: {str(e)}")
 
27
 
28
- # 3. Funci贸n de generaci贸n robusta
29
  def generate_response(message, history):
30
  try:
31
- # Preparamos el input
32
- messages = [{"role": "user", "content": message}]
33
- prompt = tokenizer.apply_chat_template(
34
- messages,
35
- tokenize=False,
36
- add_generation_prompt=True
37
- )
38
 
39
  inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE)
40
 
41
- # Generaci贸n con par谩metros seguros
42
- outputs = model.generate(
43
- **inputs,
44
- max_new_tokens=256,
45
- temperature=0.7,
46
- do_sample=True,
47
- pad_token_id=tokenizer.eos_token_id
48
- )
 
 
 
49
 
50
- # Decodificamos la respuesta
51
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
52
- return response.split("assistant\n")[-1].strip()
 
 
 
53
 
54
  except Exception as e:
55
- return f"鈿狅笍 Error en la generaci贸n: {str(e)}"
 
56
 
57
- # 4. Interfaz mejorada
58
- with gr.Blocks(theme=gr.themes.Soft()) as demo:
59
- gr.Markdown("## 馃殌 Chatbot Gerardo - Versi贸n Estable")
60
- gr.ChatInterface(
 
 
 
 
61
  fn=generate_response,
62
- examples=["Hola", "驴C贸mo funciona esto?"],
63
- title="Chatbot de Gerardo",
64
- description="Asistente IA sin errores de CPU/GPU"
65
  )
66
 
 
67
  if __name__ == "__main__":
68
- demo.launch()
 
 
 
 
 
1
  import torch
2
  from transformers import AutoModelForCausalLM, AutoTokenizer
3
  import gradio as gr
4
+ import logging
5
 
6
+ # 1. Configuraci贸n robusta
7
+ MODEL_NAME = "microsoft/phi-2" # Modelo liviano y estable
8
  DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
9
 
10
+ # Configurar logging
11
+ logging.basicConfig(level=logging.INFO)
12
+ logger = logging.getLogger(__name__)
13
+
14
+ # 2. Carga del modelo mejorada
15
  try:
16
+ logger.info("Cargando tokenizer...")
17
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, trust_remote_code=True)
 
 
18
 
19
+ logger.info("Cargando modelo...")
20
  model = AutoModelForCausalLM.from_pretrained(
21
  MODEL_NAME,
22
+ torch_dtype=torch.float32 if DEVICE == "cpu" else torch.float16,
23
  device_map="auto"
24
  )
25
 
26
+ # Forzar dispositivo si es necesario
27
+ if hasattr(model, "device"):
28
+ logger.info(f"Modelo cargado en: {model.device}")
29
+ else:
30
+ model.to(DEVICE)
31
+ logger.info(f"Modelo movido a: {DEVICE}")
32
+
33
  except Exception as e:
34
+ logger.error(f"Error de carga: {str(e)}")
35
+ raise gr.Error(f"Error al iniciar el modelo: {str(e)}")
36
 
37
+ # 3. Funci贸n de generaci贸n a prueba de fallos
38
  def generate_response(message, history):
39
  try:
40
+ logger.info(f"Generando respuesta para: {message}")
41
+
42
+ # Construir prompt manualmente
43
+ prompt = f"Usuario: {message}\nAsistente:"
 
 
 
44
 
45
  inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE)
46
 
47
+ # Configuraci贸n de generaci贸n
48
+ generation_config = {
49
+ "max_new_tokens": 150,
50
+ "temperature": 0.7,
51
+ "do_sample": True,
52
+ "pad_token_id": tokenizer.eos_token_id
53
+ }
54
+
55
+ # Generaci贸n segura
56
+ with torch.no_grad():
57
+ outputs = model.generate(**inputs, **generation_config)
58
 
 
59
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
60
+ clean_response = response.split("Asistente:")[-1].strip()
61
+
62
+ logger.info(f"Respuesta generada: {clean_response[:50]}...")
63
+ return clean_response
64
 
65
  except Exception as e:
66
+ logger.error(f"Error en generaci贸n: {str(e)}")
67
+ return f"鈿狅笍 Error: {str(e)}"
68
 
69
+ # 4. Interfaz reforzada
70
+ with gr.Blocks(title="Chatbot Gerardo HD") as demo:
71
+ gr.Markdown("""
72
+ ## 馃 Chatbot de Gerardo
73
+ Versi贸n estable sin errores de runtime
74
+ """)
75
+
76
+ chat_interface = gr.ChatInterface(
77
  fn=generate_response,
78
+ examples=["Hola", "驴Qu茅 es IA?"],
79
+ cache_examples=False
 
80
  )
81
 
82
+ # 5. Lanzamiento optimizado
83
  if __name__ == "__main__":
84
+ demo.launch(
85
+ server_name="0.0.0.0",
86
+ server_port=7860,
87
+ show_error=True
88
+ )