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
.
- Crear un nuevo fichero de plugin en
- 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 elraw_input
es un objeto JSON que contiene una clave de nivel superior llamadaconversations
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 elplugin_metadata
delMarkdownOutput
bajo la claveconversation_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
).
- Estructura del Fichero de Origen: El plugin debe estar diseñado para manejar la siguiente estructura JSON de alto nivel:
- Registro del Plugin para Descubrimiento Automático:
- Modificar el fichero
shared/pyproject.toml
para registrar el nuevo plugin bajo el grupo deentry_points
aclarai.plugins
.
- Modificar el fichero
- 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()
yconvert()
funcionen como se espera, y que elconversation_id
se extraiga y almacene correctamente en elplugin_metadata
.
- Crear tests para el nuevo plugin usando el fichero de ejemplo
Excluido
- Archivos Adjuntos (ahorita)
- La modificación de la dataclass
MarkdownOutput
o delTier1ImportSystem
. 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 elImportOrchestrator
. - El plugin extrae correctamente cada objeto de la lista
conversations
en el JSON como unMarkdownOutput
separado. - Cada
MarkdownOutput
generado contiene elconversation_id
original dentro de suplugin_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.
- Mitigación: La lógica de
- 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.