Mixbot en dos fases: publicar el texto pronto (--parte1) para adelantar traducciones + audios sin esperar a la multimedia de Carmenchu #181
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Motivo
Hoy la carta no se cierra hasta tenerlo TODO, y eso incluye la multimedia de Carmenchu (voluntaria, elige el material cuando puede). Esperar a la multimedia retrasa el arranque de los audios de toda la semana.
Pero hay una asimetría que podemos aprovechar:
O sea: justo lo que retrasa la carta es lo que no necesita audio. Si publicamos el texto antes, Hermes puede empezar a traducir + locutar sin esperar a la multimedia. Cero retraso en los audios.
Lo que ya está hecho (lado Mixbot)
Implementado
mixbot.py <carpeta> --parte1(FASE 1):--vivo(status=publish, autor real, alta de autores nuevos con/crear-autor).--vivo).00mix_parte1_ids.txtcon la lista de IDs de posts ES publicados, separando los de texto (para TTS) de la multimedia (no necesita TTS), y una líneaIDs de texto (para TTS): 55001,55002,…lista para copiar.FASE 2 (
--vivo) no cambia: compone la carta entera, actualiza los posts de la fase 1 (idempotente, no duplica), añade la multimedia, rota categorías y genera el máster de BREVO.Lo que pedimos coordinar (lado Hermes)
Hoy el pipeline de Hermes descubre qué locutar a partir de la carta (
fea_parse_carta_sectionsnecesita la carta compuesta). En la FASE 1 todavía no hay carta.La pregunta: ¿puede Hermes arrancar traducciones (EN/FR/IT/PT) + TTS a partir de una lista de IDs de posts que le pasamos, en vez de descubrir el cluster desde la carta? Sus scripts de traducción/TTS ya trabajan por post, así que debería ser un cambio pequeño: alimentar la lista de IDs en lugar del paso de descubrimiento.
Flujo propuesto, de punta a punta:
--parte1→ publica y saca los IDs.--vivo→ compone la carta entera y rota. Los audios del texto ya están hechos.Encaja con
#172 (autosuficiencia), #174 (cierre autónomo de la carta), #173 (entonación TTS). Como Rafa está descansando, Inma le ordena a Hermes el arranque por WhatsApp; este issue queda como referencia del flujo para cuando Rafa lo revise.
Gate obligatorio de calidad multilingüe antes de TTS/publicación (añadido 22-jul)
El estado
0 erroresdetranslate_post.pysolo confirma que el proceso técnico terminó: no equivale a una traducción editorialmente aprobada. En la primera ejecución de--parte1se detectaron errores semánticos reales pese a que las 64 traducciones se crearon sin fallo (por ejemplo, cizaña acabó comocevada/espigaen PT yseme di mostoen IT).A partir de ahora, el flujo de Hermes para cada lote
00mix_parte1_ids.txtqueda así, sin publicar ni sincronizar nada a prod hasta el cierre explícito de Mixbot/Inma/Rafa:draftlocal con Gemma.|||FIN>>>, caracteres de alfabetos ajenos, etc.).claude-haiku-4-5) en modo solo lectura: por cada artículo compara el ES íntegro con EN/FR/IT/PT y devuelve por idiomaapprove,needs_revieworewrite, con cita exacta y reemplazo propuesto. Verifica especialmente terminología bíblica:cizaña → ivraie / zizzania / joio.needs_review/rewrite; repetir el control de calidad hasta que no queden bloqueantes.Evidencia de la primera corrida
logs/issue-181-translation-quality-review.md.logs/issue-181-haiku-review.jsonl.Esto convierte la revisión de calidad en parte fija del pipeline y evita que una traducción técnicamente generada llegue a producción sin una segunda lectura multilingüe.
Resultado del piloto Haiku — auditoría completa de FASE 1 (22-jul)
La revisión multilingüe ya terminó para los 16 artículos / 64 borradores. Un resultado salió inicialmente con JSON inválido (
#54867), se reintentó con formato compacto y quedó auditado correctamente: 16/16 cubiertos.Triage de Haiku (no son correcciones aplicadas todavía)
rewrite: 3 artículosneeds_review: 13 artículosapproveglobal: 0 artículosDesglose por idioma:
Los hallazgos son sustantivos, no solo preferencias de estilo. Ejemplos verificables:
#54903IT: grano de mostaza →seme di mosto(debe serseme/granello di senape);sediento→sedioso.#54903PT: cizaña →cevada/espiga; debe ser solojoio.#54868EN: ministerio petrino →priestly ministry; debe serPetrine ministry.#54875IT:egliaciuto di gioia, forma inexistente; debe serpieno di gioia.#54902FR:notre perle est la fée; debe sernotre perle est la foi.Decisión operativa que confirma el gate
Los borradores se mantienen solo en local. No se publicará ni sincronizará ninguna traducción hasta:
rewrite/needs_reviewgraves.Artefactos locales de trazabilidad:
logs/issue-181-haiku-review.jsonllogs/issue-181-haiku-review-54867-retry.jsonlogs/issue-181-translation-quality-review.mdEl TTS ES puede continuar en paralelo porque no depende de las traducciones, pero tampoco se subirá a producción hasta el cierre explícito de la FASE 2.
TTS FASE 1 — bloqueado por cuota MiniMax; comportamiento de reintento corregido (22-jul)
Al iniciar el TTS local de los 16 textos ES, MiniMax devolvió en el primer post (
#54875) el código explícito:2056 — Token Plan usage limit reached: Upgrade your Token Plan or purchase Credits for more usage.Resultado: 0/16 audios generados. No se subió ningún MP3 ni se tocó producción.
Corrección aplicada y probada en local
El orquestador
scripts/tts_produce.pyreintentaba tres veces cada 30 minutos incluso ante2056, desperdiciando una hora cuando la cuota ya estaba agotada. Ahora2056(cuota) y1039(rate limit) hacen que el proceso pare en el primer intento, registrefea_audio_errory quede reanudable para un relanzamiento posterior.Prueba aislada sin MiniMax ni escritura WP:
fast_fail_test=PASS | attempts=1 | sleep=0 | setflag=2056.No hay cron TTS activo. El lote queda preparado y pendiente de que vuelva cuota/créditos; al relanzarlo respetará el orden de IDs de Mixbot y omitirá todo audio ya generado.
Diagnóstico de cuota MiniMax — causa confirmada (22-jul)
Se verificó en vivo la misma API key que usa
scripts/minimax_tts.pyy el medidor de cuota (/home/rafa/Feadulta/minimax.txt). Ambos endpoints de MiniMax responden HTTP 200 pero con:base_resp.status_code: 2062base_resp.status_msg: no active token plan subscriptionmodel_remains: []Esto significa que el TTS no consumió la cuota ni falló por cola/rate limit: la key es válida, pero no tiene un Token Plan activo asociado (posible plan caducado, cancelado o key de otra cuenta sin plan). Por eso la primera solicitud TTS recibió
2056y se rechazó antes de generar audio.También se corrigió el medidor
ytsummaries/scripts/quota.py: antes ocultaba elbase_respy mostraba el ambiguosin model_remains; ahora informa el diagnóstico real:API 2062: no active token plan subscription(prueba real: PASS).No se relanzará TTS hasta que Rafa confirme que el plan/créditos de MiniMax están activos. Sigue sin haber audio generado ni cambios en producción.
TTS FASE 1 — completado en local (16/16)
Tras activar el Token Plan MiniMax y verificar
status_code=0, se ejecutó la cola explícita de Mixbot en este orden:54875, 54902, 54903, 54883, 54884, 54885, 54886, 54866, 54867, 54868, 54869, 54870, 54871, 54872, 54873, 54880Resultado: 16/16 MP3 generados correctamente con
speech-2.8-hdy las voces por autor configuradas.Verificación local posterior:
wp-content/uploads/tts/<ID>.mp3existen y tienen tamaño > 0;fea_audio_done=1yfea_audio_urlconfigurado;sync_audio_to_prod.py: los audios siguen solo en WordPress local, como exige--parte1hasta la Fase 2 y autorización expresa.Preview local de revisión — traducciones publicadas solo en local
Por indicación de Rafa se publicó el lote exclusivamente en WordPress local para revisión visual/editorial:
64/64traducciones EN/FR/IT/PT (16 textos × 4 idiomas) pasaron dedraftapublishlocal;logs/issue-181-local-preview-backup-20260722T190808Z.json;64publicaciones previstas,0fechas futuras;Rotación
No se aplicó
rotate_cartas.php, deliberadamente: los 16 IDs de--parte1son textos sueltos (sin_carta_idni categoría Carta de la Semana), no una carta madre. Ejecutar rotación ahora usaría un artículo como si fuera carta y alteraría categorías de forma incorrecta. Queda pendiente hasta que Mixbot entregue el ID de la carta de Fase 2.El preview no equivale a aprobación editorial: siguen pendientes las correcciones del gate Haiku (por ejemplo, en FR aparece
Que vivons la foi..., que necesita revisión).