feat(media): transcrição de áudio + descrição de imagem no motor (via Gemini)

Move a transcrição para o motor (genérica p/ todos os tenants/satélites):
- media-transcribe.ts: Gemini 2.0 Flash (áudio→texto, imagem→descrição) a partir
  do buffer já baixado; limite inline 18MB; fallback silencioso.
- MessageHandler.processMedia: após salvar a mídia, transcreve fire-and-forget e
  grava em messages.transcription, emitindo 'message:transcription' p/ a UI.
- schema: campo Message.transcription (coluna aplicada nos bancos).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Deploy Agent
2026-06-28 08:33:42 +02:00
parent 734b250238
commit 7893a05f63
3 changed files with 78 additions and 0 deletions
@@ -229,6 +229,7 @@ model Message {
type MessageType @default(TEXT)
body String?
caption String?
transcription String? // transcrição (áudio) ou descrição (imagem) via IA
mediaUrl String?
mediaPath String?
mimeType String?