Spaces:
Sleeping
Sleeping
import gradio as gr | |
import json | |
import pandas as pd | |
import os | |
import zipfile | |
import re | |
def procesar_conversaciones(archivo_json): | |
# Crear carpeta temporal para almacenar archivos JSON individuales | |
carpeta_salida = "conversaciones" | |
os.makedirs(carpeta_salida, exist_ok=True) | |
# Procesar el archivo JSON | |
with open(archivo_json.name, 'r', encoding='utf-8') as file: | |
data = json.load(file) | |
archivos_creados = [] | |
nombres_existentes = set() # Para rastrear nombres duplicados | |
for idx, conversation in enumerate(data['conversations']): | |
# Filtrar mensajes del 'user' y obtener el contenido del primer mensaje | |
primer_mensaje = next((msg['content'] for msg in conversation['messages'] if msg['role'] == 'user'), None) | |
if primer_mensaje: | |
# Limpiar el nombre para evitar caracteres inválidos | |
nombre_archivo_base = re.sub(r'[<>:"/\\|?*]', '_', primer_mensaje[:50]) # Limitar longitud a 50 caracteres | |
nombre_archivo = nombre_archivo_base | |
# Asegurarse de que el nombre sea único | |
if nombre_archivo in nombres_existentes: | |
nombre_archivo = f"{nombre_archivo_base}_{idx}" | |
nombres_existentes.add(nombre_archivo) | |
nombre_archivo = os.path.join(carpeta_salida, f"{nombre_archivo}.json") | |
else: | |
# Si no hay mensaje del 'user', usamos el ID como último recurso | |
nombre_archivo = os.path.join(carpeta_salida, f"{conversation['id']}.json") | |
# Crear DataFrame de mensajes | |
df = pd.DataFrame(conversation['messages'])[['role', 'content']] | |
df['role'] = df['role'].replace({'assistant': 'paciente', 'user': 'fisioterapeuta'}) | |
# Guardar el DataFrame como JSON con el nombre ajustado | |
df.to_json(nombre_archivo, orient='records', force_ascii=False, indent=2) | |
archivos_creados.append(nombre_archivo) | |
# Crear el archivo ZIP | |
zip_path = "conversaciones_separadas.zip" | |
with zipfile.ZipFile(zip_path, 'w') as zipf: | |
for archivo in archivos_creados: | |
zipf.write(archivo, os.path.basename(archivo)) | |
return zip_path | |
# Interfaz de Gradio sin `share=True` | |
if __name__ == "__main__": | |
interfaz = gr.Interface( | |
fn=procesar_conversaciones, | |
inputs=gr.File(label="Sube el archivo JSON"), | |
outputs=gr.File(label="Descargar ZIP") | |
) | |
interfaz.launch() | |