Skip to content

[F2-09] Proveedor Google AI Studio (texto, voz, música Lyria, imagen) con la clave del usuario #36

Open

Description

@JCCG-code

Fase: F2 · Tamaño: L · Depende de: #32 (F2-07)
Decisiones: D-03 y D-17 en #1

Objetivo

Mantener Gemini, Gemini TTS, Lyria e Imagen como una opción más, usando la clave de AI Studio de cada usuario y sin nada de Google Cloud.

Alcance

  • Text: generateJson con responseMimeType: 'application/json' + responseSchema derivado del zod.
  • TTS: listVoices (la lista que hoy está fija en el prompt, con rasgos de cada voz para @@voice_palette) y synthesize → PCM 24 kHz mono → pcmToMp3. Soporte de idioma de salida. Corrige que generateGeminiVoice ignore req.genAI y lea la clave global.
  • Music (Lyria realtime): cliente creado por llamada (apiVersion: 'v1alpha'), duración ≤ 120 s, timeout duro, session.close() en finally, sin executor async; PCM 48 kHz estéreo → mp3; onProgress según segundos recibidos.
  • Image (Imagen): relación 9:16, seed opcional.
  • Mapeo de errores del SDK a ProviderError (401/403 → auth, 429 → rate_limit con retryAfterMs, bloqueos de seguridad → safety, 5xx → unavailable).
  • Opciones específicas (personGeneration, addWatermark, bpm) dentro del adaptador, no en el núcleo.
  • Catálogo inicial a partir de los valores actuales de GEMINI_MODEL_*, con precios.
  • validateKey: llamada barata (listar modelos).

Criterios de aceptación

  • Pasa la suite de contrato ([F2-07] Interfaz de proveedores de IA, registro y suite de contrato #32) con fixtures grabados, incluido el actual test.json.
  • Test: una respuesta 429 simulada produce ProviderError('rate_limit') con retryAfterMs.
  • Test: un bloqueo de seguridad simulado en imagen produce ProviderError('safety').
  • Test opcional con clave real (GOOGLE_AI_STUDIO_TEST_KEY), excluido de CI por defecto: genera texto, 5 s de voz, 10 s de música y una imagen.
  • grep -rn "GOOGLE_API_KEY" apps packages no devuelve nada.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions