Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -5,6 +5,8 @@ import json
|
|
5 |
import tempfile
|
6 |
import os
|
7 |
from datetime import datetime
|
|
|
|
|
8 |
|
9 |
# Configuración de clientes
|
10 |
biotech_client = Client("C2MV/BiotechU4")
|
@@ -36,6 +38,45 @@ def process_biotech_data(file, models, component, use_de, maxfev, exp_names):
|
|
36 |
except Exception as e:
|
37 |
return None, None, f"Error en el análisis: {str(e)}"
|
38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
def download_results_as_csv(df_data):
|
40 |
"""Descarga los resultados como CSV desde BiotechU4"""
|
41 |
try:
|
@@ -65,7 +106,6 @@ def generate_claude_report(csv_file, model, detail_level, language, additional_s
|
|
65 |
def export_report(format_type, language, analysis, code):
|
66 |
"""Exporta el informe en el formato seleccionado"""
|
67 |
try:
|
68 |
-
# Primero procesamos y almacenamos
|
69 |
result = analysis_client.predict(
|
70 |
format=format_type,
|
71 |
language=language,
|
@@ -96,13 +136,16 @@ def process_complete_pipeline(
|
|
96 |
|
97 |
# Paso 1: Procesar con BiotechU4
|
98 |
progress_updates.append("🔄 Procesando datos biotecnológicos...")
|
99 |
-
|
100 |
file, models, component, use_de, maxfev, exp_names
|
101 |
)
|
102 |
|
103 |
-
if
|
104 |
return None, None, None, None, None, status
|
105 |
|
|
|
|
|
|
|
106 |
progress_updates.append("✅ Análisis biotecnológico completado")
|
107 |
|
108 |
# Paso 2: Descargar resultados como CSV
|
@@ -271,7 +314,8 @@ with gr.Blocks(theme=theme, title="BioTech Analysis & Report Generator", css=cus
|
|
271 |
additional_specs_input = gr.Textbox(
|
272 |
label="📝 Especificaciones adicionales",
|
273 |
placeholder="Añade contexto o requisitos específicos para el análisis...",
|
274 |
-
lines=3
|
|
|
275 |
)
|
276 |
|
277 |
export_format_input = gr.Radio(
|
@@ -367,8 +411,8 @@ with gr.Blocks(theme=theme, title="BioTech Analysis & Report Generator", css=cus
|
|
367 |
)
|
368 |
|
369 |
if __name__ == "__main__":
|
|
|
370 |
demo.launch(
|
371 |
-
share=
|
372 |
show_error=True
|
373 |
-
# Removido favicon_path que causaba el error
|
374 |
)
|
|
|
5 |
import tempfile
|
6 |
import os
|
7 |
from datetime import datetime
|
8 |
+
import plotly.graph_objects as go
|
9 |
+
import plotly.express as px
|
10 |
|
11 |
# Configuración de clientes
|
12 |
biotech_client = Client("C2MV/BiotechU4")
|
|
|
38 |
except Exception as e:
|
39 |
return None, None, f"Error en el análisis: {str(e)}"
|
40 |
|
41 |
+
def parse_plot_data(plot_dict):
|
42 |
+
"""Convierte el diccionario del plot en un objeto visualizable"""
|
43 |
+
if not plot_dict:
|
44 |
+
return None
|
45 |
+
|
46 |
+
try:
|
47 |
+
# Si es un diccionario con tipo y plot
|
48 |
+
if isinstance(plot_dict, dict) and 'type' in plot_dict and 'plot' in plot_dict:
|
49 |
+
plot_type = plot_dict['type']
|
50 |
+
plot_data = plot_dict['plot']
|
51 |
+
|
52 |
+
# Si es plotly, intentar deserializar
|
53 |
+
if plot_type == 'plotly':
|
54 |
+
if isinstance(plot_data, str):
|
55 |
+
# Intentar parsear como JSON
|
56 |
+
try:
|
57 |
+
import json
|
58 |
+
plot_obj = json.loads(plot_data)
|
59 |
+
return plot_obj
|
60 |
+
except:
|
61 |
+
pass
|
62 |
+
return plot_data
|
63 |
+
|
64 |
+
# Para otros tipos, devolver el plot_data directamente
|
65 |
+
return plot_data
|
66 |
+
|
67 |
+
# Si ya es un objeto de plot válido, devolverlo
|
68 |
+
return plot_dict
|
69 |
+
except Exception as e:
|
70 |
+
print(f"Error parsing plot: {str(e)}")
|
71 |
+
# Crear un plot vacío de emergencia
|
72 |
+
fig = go.Figure()
|
73 |
+
fig.add_annotation(
|
74 |
+
text="Error al cargar la visualización",
|
75 |
+
xref="paper", yref="paper",
|
76 |
+
x=0.5, y=0.5, showarrow=False
|
77 |
+
)
|
78 |
+
return fig
|
79 |
+
|
80 |
def download_results_as_csv(df_data):
|
81 |
"""Descarga los resultados como CSV desde BiotechU4"""
|
82 |
try:
|
|
|
106 |
def export_report(format_type, language, analysis, code):
|
107 |
"""Exporta el informe en el formato seleccionado"""
|
108 |
try:
|
|
|
109 |
result = analysis_client.predict(
|
110 |
format=format_type,
|
111 |
language=language,
|
|
|
136 |
|
137 |
# Paso 1: Procesar con BiotechU4
|
138 |
progress_updates.append("🔄 Procesando datos biotecnológicos...")
|
139 |
+
plot_data, df_data, status = process_biotech_data(
|
140 |
file, models, component, use_de, maxfev, exp_names
|
141 |
)
|
142 |
|
143 |
+
if plot_data is None or "Error" in str(status):
|
144 |
return None, None, None, None, None, status
|
145 |
|
146 |
+
# Parsear el plot correctamente
|
147 |
+
plot = parse_plot_data(plot_data)
|
148 |
+
|
149 |
progress_updates.append("✅ Análisis biotecnológico completado")
|
150 |
|
151 |
# Paso 2: Descargar resultados como CSV
|
|
|
314 |
additional_specs_input = gr.Textbox(
|
315 |
label="📝 Especificaciones adicionales",
|
316 |
placeholder="Añade contexto o requisitos específicos para el análisis...",
|
317 |
+
lines=3,
|
318 |
+
value="Proporciona un análisis detallado de los modelos ajustados, incluyendo métricas de bondad de ajuste, comparación entre modelos y recomendaciones prácticas."
|
319 |
)
|
320 |
|
321 |
export_format_input = gr.Radio(
|
|
|
411 |
)
|
412 |
|
413 |
if __name__ == "__main__":
|
414 |
+
# En Hugging Face Spaces, share=False es lo correcto
|
415 |
demo.launch(
|
416 |
+
share=False, # Cambiado a False para Hugging Face Spaces
|
417 |
show_error=True
|
|
|
418 |
)
|