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.
  • 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, y chunkedPrompt. La conversación principal se encuentra dentro de chunkedPrompt.chunks.
      {
        "chunkedPrompt": {
          "chunks": [
            {
              "role": "user" | "model",
              "text": "string" // Contenido del mensaje
            }
          ]
        },
        ...
      }
      
    • can_accept(raw_input: str) -> bool: La lógica debe verificar que el raw_input es un objeto JSON que contiene las claves de nivel superior runSettings y chunkedPrompt, y que chunkedPrompt contiene una clave chunks 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 el plugin_metadata del MarkdownOutput.
      • Extraer metadatos relevantes, como el model de runSettings, y almacenarlos también en plugin_metadata.
  • Registro del Plugin para Descubrimiento Automático:
    • Modificar el fichero shared/pyproject.toml para registrar el nuevo GoogleAIStudioPlugin bajo el grupo de entry_points aclarai.plugins.
  • Tests Unitarios:
    • Crear tests unitarios para el nuevo plugin.
    • Validar que can_accept() y convert() funcionen como se espera, y que el source_id se genere y almacene correctamente.

Excluido

  • El manejo de attachments o driveDocument 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 de entry_points.
  • Al importar un fichero .json de Google AI Studio, el GoogleAIStudioPlugin es seleccionado automáticamente por el ImportOrchestrator.
  • El plugin extrae correctamente la conversación de la sección chunkedPrompt.chunks.
  • El MarkdownOutput generado contiene un source_id basado en hash dentro de su plugin_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.
  • Riesgo: El campo text podría no estar presente en todos los tipos de "chunks" (e.g., si hay un driveDocument).
    • 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.