Epic_2_Sprint_2 Implement a plugin for ChatGPT JSON exports - robbiemu/aclarai GitHub Wiki

Tarea: Implementar un plugin para las exportaciones JSON de ChatGPT

Descripción

Desarrollar un plugin dedicado para el sistema de importación de aclarai que pueda parsear el fichero conversations.json exportado desde ChatGPT. El plugin debe entender la estructura de fichero de alto nivel, iterar sobre la lista de conversaciones contenida en él, y convertir cada conversación individual en un MarkdownOutput separado, preservando el id único de cada conversación en los metadatos del fichero Tier 1 resultante.

Recursos de Referencia

Esta tarea debe seguir los patrones de desarrollo y registro descritos en la guía principal del sistema de plugins:

Alcance

Incluido

  • Creación del Fichero del Plugin:
    • Crear un nuevo fichero de plugin en shared/aclarai_shared/plugins/chatgpt_plugin.py.
  • Implementación de la Interfaz Plugin:
    • Estructura del Fichero de Origen: El plugin debe estar diseñado para manejar la siguiente estructura JSON de alto nivel:
      {
        "conversations": [
          {
            "id": "unique-conversation-id",
            "title": "Conversation Title",
            "create_time": 1672549200,
            "mapping": { ... },
            ...
          },
          ...
        ],
        ...
      }
      
    • can_accept(raw_input: str) -> bool: Implementar la lógica para identificar de manera fiable este formato. Debe verificar que el raw_input es un objeto JSON que contiene una clave de nivel superior llamada conversations cuyo valor es una lista.
    • convert(raw_input: str, path: Path) -> List[MarkdownOutput]: Implementar la lógica de conversión que:
      • Parsea el objeto JSON de nivel superior.
      • Accede a la lista en la clave conversations.
      • Itera sobre cada objeto de conversación en esa lista.
      • Para cada conversación, genera un MarkdownOutput separado.
      • Extrae el id de la conversación del objeto JSON y lo almacena en el plugin_metadata del MarkdownOutput bajo la clave conversation_id.
      • Reconstruye el flujo de mensajes a partir del mapping de la conversación.
      • Mapea los roles (user, assistant) y extrae los metadatos relevantes (title, create_time).
  • Registro del Plugin para Descubrimiento Automático:
    • Modificar el fichero shared/pyproject.toml para registrar el nuevo plugin bajo el grupo de entry_points aclarai.plugins.
  • Tests Unitarios:
    • Crear tests para el nuevo plugin usando el fichero de ejemplo tests/fixtures/tier1_conversion_examples/inputs/chatgpt_export.json.
    • Validar que can_accept() y convert() funcionen como se espera, y que el conversation_id se extraiga y almacene correctamente en el plugin_metadata.

Excluido

  • Archivos Adjuntos (ahorita)
  • La modificación de la dataclass MarkdownOutput o del Tier1ImportSystem. Se utilizará la infraestructura existente.
  • La implementación de la importación de ficheros ZIP; el plugin operará sobre el fichero conversations.json ya extraído.
  • La creación de una interfaz de usuario específica; se utilizará el panel de importación existente.
  • El manejo de ramas de conversación complejas o alternativas en el mapping de ChatGPT; el foco es la ruta de conversación principal.

Criterios de Aceptación

  • El nuevo plugin de ChatGPT está implementado y registrado correctamente a través de entry_points.
  • Al importar un fichero conversations.json de ChatGPT, el plugin de ChatGPT es seleccionado automáticamente por el ImportOrchestrator.
  • El plugin extrae correctamente cada objeto de la lista conversations en el JSON como un MarkdownOutput separado.
  • Cada MarkdownOutput generado contiene el conversation_id original dentro de su plugin_metadata.
  • El fichero Tier 1 final escrito en el vault contiene el comentario <!-- aclarai:plugin_metadata={"conversation_id": "...", ...} -->.
  • Todos los tests unitarios para el nuevo plugin pasan.

Dependencias (estas son particularmente las cosas en este EPIC que necesitan ser hechas)

  • Ninguna. Esta tarea es autocontenida y se basa en la arquitectura del sistema de plugins existente.

Entregables

  • Nuevo fichero de plugin: shared/aclarai_shared/plugins/chatgpt_plugin.py.
  • Nuevos tests unitarios para el plugin de ChatGPT.
  • Fichero modificado: shared/pyproject.toml con la nueva entrada de registro del plugin.

Estimación de Esfuerzo (en días)

  • 1.5 días

Riesgos y Mitigaciones

  • Riesgo: El formato de exportación de ChatGPT podría cambiar en el futuro.
    • Mitigación: La lógica de can_accept() se basará en varias claves estructurales (conversations, id, mapping) para ser más resiliente a cambios menores. La documentación del plugin incluirá una nota sobre la versión del formato de exportación con la que fue probado.
  • Riesgo: Las conversaciones con estructuras de mapping muy complejas (múltiples ramas) podrían no ser parseadas correctamente.
    • Mitigación: El alcance inicial se limita a la rama principal de la conversación. Se añadirá logging claro para advertir sobre estructuras no soportadas y se documentará esta limitación.