XA-vito commited on
Commit
3d5efae
·
verified ·
1 Parent(s): bfbfe6a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -38
app.py CHANGED
@@ -21,7 +21,7 @@ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, token=HF_TOKEN)
21
 
22
  model = AutoModelForCausalLM.from_pretrained(
23
  MODEL_NAME,
24
- torch_dtype=torch.float32,
25
  device_map="auto",
26
  token=HF_TOKEN
27
  )
@@ -40,7 +40,7 @@ def obtener_datos_colmena():
40
  respuesta = requests.get(NODE_RED_URL, auth=(USERNAME, PASSWORD), timeout=5)
41
  if respuesta.status_code == 200:
42
  datos = respuesta.json()
43
- print("🔍 Datos recibidos de Node-RED:", datos) # <-- Agregamos este print()
44
  if "data" in datos and isinstance(datos["data"], list) and datos["data"]:
45
  return datos["data"][-1] # Último registro
46
  return {"error": "No hay datos recientes en Node-RED."}
@@ -49,43 +49,27 @@ def obtener_datos_colmena():
49
  except Exception as e:
50
  return {"error": str(e)}
51
 
52
- def generar_recomendacion(datos):
53
- """Genera recomendaciones basadas en el estado de la colmena."""
54
-
55
- # ✅ Convertimos a float para evitar errores
56
- temperaturaInterior = float(datos.get("temperaturaInterior", 0))
57
- humedadInterior = float(datos.get("humedadInterior", 0))
58
- co2 = float(datos.get("co2", 0))
59
-
60
- recomendaciones = []
61
-
62
- if temperaturaInterior > 35:
63
- recomendaciones.append("🌡 La temperatura interior es alta. Podrías mejorar la ventilación para evitar el sobrecalentamiento de la colmena.")
64
- elif temperaturaInterior < 20:
65
- recomendaciones.append("❄ La temperatura interior es baja. Asegúrate de que la calefacción funcione correctamente para evitar estrés en las abejas.")
66
-
67
- if humedadInterior > 80:
68
- recomendaciones.append("💧 La humedad es alta. Esto puede favorecer hongos y enfermedades. Asegúrate de que la ventilación sea adecuada.")
69
- elif humedadInterior < 40:
70
- recomendaciones.append("🔥 La humedad es baja. Las abejas necesitan un nivel de humedad adecuado para la crianza, podrías aumentar la humedad si es necesario.")
71
-
72
- if co2 > 1000:
73
- recomendaciones.append("🌿 El nivel de CO₂ es alto. Esto puede indicar problemas de ventilación. Verifica que el sistema de ventilación esté activo.")
74
-
75
- if not recomendaciones:
76
- recomendaciones.append("✅ Todo parece estar en orden. Sigue monitoreando regularmente para asegurar el bienestar de la colmena.")
77
-
78
- return "\n".join(recomendaciones)
79
-
80
  def conversar_con_colmena(mensaje):
81
- """Genera una respuesta combinando el modelo de lenguaje con recomendaciones sobre la colmena."""
82
  datos = obtener_datos_colmena()
83
  if "error" in datos:
84
  return datos["error"]
85
 
86
- datos_relevantes = generar_recomendacion(datos)
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
- contexto = f"Datos actuales de la colmena: {datos_relevantes}\nUsuario: {mensaje}\nColmena:"
89
  inputs = tokenizer(contexto, return_tensors="pt").to(device)
90
 
91
  print(f"🔄 Enviando entrada al modelo: {contexto}")
@@ -93,10 +77,10 @@ def conversar_con_colmena(mensaje):
93
  with torch.no_grad():
94
  output = model.generate(
95
  **inputs,
96
- max_length=100,
97
  do_sample=True,
98
- top_k=50,
99
- temperature=0.7,
100
  pad_token_id=tokenizer.eos_token_id
101
  )
102
 
@@ -106,14 +90,14 @@ def conversar_con_colmena(mensaje):
106
  if not respuesta:
107
  return "🤖 No pude generar una respuesta. Inténtalo de nuevo con otra pregunta."
108
 
109
- return f"{datos_relevantes}\n\n🤖 Respuesta de la IA: {respuesta}"
110
 
111
  iface = gr.Interface(
112
  fn=conversar_con_colmena,
113
  inputs="text",
114
  outputs="text",
115
  title="🐝 Chat con la Colmena",
116
- description="Consulta el estado de la colmena y recibe recomendaciones."
117
  )
118
 
119
  iface.launch()
 
21
 
22
  model = AutoModelForCausalLM.from_pretrained(
23
  MODEL_NAME,
24
+ torch_dtype=torch.float32, # ⚠️ Float32 es mejor para CPU
25
  device_map="auto",
26
  token=HF_TOKEN
27
  )
 
40
  respuesta = requests.get(NODE_RED_URL, auth=(USERNAME, PASSWORD), timeout=5)
41
  if respuesta.status_code == 200:
42
  datos = respuesta.json()
43
+ print("🔍 Datos recibidos de Node-RED:", datos) # ⬅️ Muestra los datos en la terminal
44
  if "data" in datos and isinstance(datos["data"], list) and datos["data"]:
45
  return datos["data"][-1] # Último registro
46
  return {"error": "No hay datos recientes en Node-RED."}
 
49
  except Exception as e:
50
  return {"error": str(e)}
51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  def conversar_con_colmena(mensaje):
53
+ """Genera una respuesta basada en el estado de la colmena sin reglas fijas."""
54
  datos = obtener_datos_colmena()
55
  if "error" in datos:
56
  return datos["error"]
57
 
58
+ contexto = f"""
59
+ Datos actuales de la colmena:
60
+ - Temperatura interior: {datos.get("temperaturaInterior", "Desconocida")}°C
61
+ - Humedad interior: {datos.get("humedadInterior", "Desconocida")}%
62
+ - Nivel de CO₂: {datos.get("co2", "Desconocido")} ppm
63
+ - Estado del ventilador: {"Encendido" if datos.get("ver_ventilador") == "1" else "Apagado"}
64
+ - Estado del calefactor: {"Encendido" if datos.get("ver_calefactor") == "1" else "Apagado"}
65
+ - Estado del ultrasonido: {"Encendido" if datos.get("ver_ultrasonido") == "1" else "Apagado"}
66
+
67
+ Basándote en estos datos, responde como un experto en apicultura y monitoreo de colmenas. Explica cómo está la colmena y si hay algún problema que deba resolverse.
68
+
69
+ Usuario: {mensaje}
70
+ Colmena:
71
+ """
72
 
 
73
  inputs = tokenizer(contexto, return_tensors="pt").to(device)
74
 
75
  print(f"🔄 Enviando entrada al modelo: {contexto}")
 
77
  with torch.no_grad():
78
  output = model.generate(
79
  **inputs,
80
+ max_length=100, # 🔽 Limitamos la respuesta para que sea rápida
81
  do_sample=True,
82
+ top_k=40, # 🔽 Controla la aleatoriedad
83
+ temperature=0.6, # 🔽 Mantiene precisión en la respuesta
84
  pad_token_id=tokenizer.eos_token_id
85
  )
86
 
 
90
  if not respuesta:
91
  return "🤖 No pude generar una respuesta. Inténtalo de nuevo con otra pregunta."
92
 
93
+ return respuesta
94
 
95
  iface = gr.Interface(
96
  fn=conversar_con_colmena,
97
  inputs="text",
98
  outputs="text",
99
  title="🐝 Chat con la Colmena",
100
+ description="Consulta el estado de la colmena y recibe respuestas generadas por IA en tiempo real."
101
  )
102
 
103
  iface.launch()