Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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) #
|
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
|
82 |
datos = obtener_datos_colmena()
|
83 |
if "error" in datos:
|
84 |
return datos["error"]
|
85 |
|
86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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=
|
99 |
-
temperature=0.
|
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
|
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
|
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()
|