Epic_2_Sprint_2 Implement a plugin for Google AI Studio conversation files - robbiemu/aclarai GitHub Wiki
Tarea: Implementar un plugin para los ficheros de conversación de Google AI Studio
Descripción
Desarrollar un plugin dedicado para el sistema de importación de aclarai que pueda parsear el formato de fichero .json
generado por Google AI Studio. El plugin debe entender la estructura específica de estos ficheros, extraer la conversación principal de la sección chunkedPrompt
, y convertirla a un MarkdownOutput
, asegurando que se genere un identificador único para la trazabilidad.
Recursos de Referencia
- Guía del Sistema de Plugins (
docs/guides/plugin_system_guide.md
): El plugin debe seguir los patrones de desarrollo y registro descritos en esta guía.
Alcance
Incluido
- Creación del Fichero del Plugin:
- Crear un nuevo fichero de plugin en
shared/aclarai_shared/plugins/google_ai_studio_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 un objeto JSON de nivel superior con claves como
runSettings
,systemInstruction
, ychunkedPrompt
. La conversación principal se encuentra dentro dechunkedPrompt.chunks
.{ "chunkedPrompt": { "chunks": [ { "role": "user" | "model", "text": "string" // Contenido del mensaje } ] }, ... }
can_accept(raw_input: str) -> bool
: La lógica debe verificar que elraw_input
es un objeto JSON que contiene las claves de nivel superiorrunSettings
ychunkedPrompt
, y quechunkedPrompt
contiene una clavechunks
que es una lista.convert(raw_input: str, path: Path) -> List[MarkdownOutput]
: La lógica de conversión debe:- Parsear el objeto JSON.
- Acceder a la lista de mensajes en
chunkedPrompt.chunks
. - Iterar sobre cada "chunk" en la lista para reconstruir el flujo de la conversación.
- Mapear el campo
role
(user
,model
) a los nombres de los hablantes. - Extraer el contenido del mensaje del campo
text
de cada chunk. - Generar un
source_id
único para la conversación basado en un hash del contenido del fichero, ya que el formato no proporciona un ID de conversación de nivel superior. - Almacenar este
source_id
en elplugin_metadata
delMarkdownOutput
. - Extraer metadatos relevantes, como el
model
derunSettings
, y almacenarlos también enplugin_metadata
.
- Estructura del Fichero de Origen: El plugin debe estar diseñado para manejar un objeto JSON de nivel superior con claves como
- Registro del Plugin para Descubrimiento Automático:
- Modificar el fichero
shared/pyproject.toml
para registrar el nuevoGoogleAIStudioPlugin
bajo el grupo deentry_points
aclarai.plugins
.
- Modificar el fichero
- Tests Unitarios:
- Crear tests unitarios para el nuevo plugin.
- Validar que
can_accept()
yconvert()
funcionen como se espera, y que elsource_id
se genere y almacene correctamente.
Excluido
- El manejo de
attachments
odriveDocument
dentro de los chunks. El foco inicial es el contenido de texto. - El parseo de
systemInstruction
como un mensaje separado. - La creación de una interfaz de usuario específica; se utilizará el panel de importación existente.
Criterios de Aceptación
- El nuevo plugin
GoogleAIStudioPlugin
está implementado y registrado correctamente a través deentry_points
. - Al importar un fichero
.json
de Google AI Studio, elGoogleAIStudioPlugin
es seleccionado automáticamente por elImportOrchestrator
. - El plugin extrae correctamente la conversación de la sección
chunkedPrompt.chunks
. - El
MarkdownOutput
generado contiene unsource_id
basado en hash dentro de suplugin_metadata
. - 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/google_ai_studio_plugin.py
. - Nuevos tests unitarios para el plugin.
- Fichero modificado:
shared/pyproject.toml
con la nueva entrada de registro del plugin.
Estimación de Esfuerzo (en días)
- 1 día
Riesgos y Mitigaciones
- Riesgo: El formato de exportación de Google AI Studio podría cambiar en el futuro.
- Mitigación: La lógica de
can_accept()
se basará en varias claves estructurales (runSettings
,chunkedPrompt
,chunks
) para ser más resiliente a cambios menores.
- Mitigación: La lógica de
- Riesgo: El campo
text
podría no estar presente en todos los tipos de "chunks" (e.g., si hay undriveDocument
).- Mitigación: El plugin se diseñará para ignorar de forma segura los chunks que no contengan un campo
text
, asegurando que no falle si encuentra contenido no textual. Se añadirá logging para advertir sobre chunks ignorados.
- Mitigación: El plugin se diseñará para ignorar de forma segura los chunks que no contengan un campo