feat(ai): pipeline assincrono — transcricao, analise, prompts (fase 20)
Sub-fase B do modulo de IA: novo servico apps/ai-worker (poll + FOR UPDATE SKIP LOCKED) processa AIJob de TRANSCRIPTION/ANALYSIS disparados automaticamente apos uma gravacao ficar disponivel, respeitando a cascata de privacidade Tenant>Queue>Campaign e o entitlement do Plan. Transcricao separa o WAV estereo em 2 canais (parser proprio, sem ffmpeg) e transcreve cada perna independente; analise sempre redige dados sensiveis antes de sair pro provider e valida o resultado contra o schema antes de persistir. CRUD de AIPromptTemplate/AIPromptVersion em apps/api. Testado ponta a ponta contra o worker real em Docker e Postgres real com RLS (cascata de privacidade em 3 cenarios, WAV sintetico real no object storage, claim/retry/dead-letter reais) — chamada de rede contra OpenAI/Anthropic continua nunca exercitada (mesma restricao de rede desde o Provider Layer). Detalhes em docs/AI_PIPELINE.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1HxY46WGU4G1zmVDNKcWw
This commit is contained in:
@@ -162,6 +162,31 @@ services:
|
||||
# não precisa do volume montado aqui, só saber o path Docker-interno.
|
||||
RECORDINGS_SPOOL_DIR: /recordings
|
||||
|
||||
ai-worker:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: apps/ai-worker/Dockerfile
|
||||
container_name: b2bcall-ai-worker
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- postgres
|
||||
environment:
|
||||
APP_DATABASE_URL: postgresql://${POSTGRES_APP_USER}:${POSTGRES_APP_PASSWORD}@postgres:5432/${POSTGRES_DB}?schema=public
|
||||
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
|
||||
# Precisa ler as gravações que fs-events já subiu (agente.md secao
|
||||
# 104-108) — mesmo par de env vars/bind mount de fs-events, ver
|
||||
# docs/RECORDING.md e docs/AI_PIPELINE.md.
|
||||
STORAGE_PROVIDER: ${STORAGE_PROVIDER:-local}
|
||||
LOCAL_STORAGE_ROOT: /data/object-storage
|
||||
S3_BUCKET: ${S3_BUCKET:-}
|
||||
S3_REGION: ${S3_REGION:-}
|
||||
S3_ENDPOINT: ${S3_ENDPOINT:-}
|
||||
S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-}
|
||||
S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-}
|
||||
S3_FORCE_PATH_STYLE: ${S3_FORCE_PATH_STYLE:-}
|
||||
volumes:
|
||||
- ./data/object-storage-local:/data/object-storage
|
||||
|
||||
secrets:
|
||||
freeswitch_pat:
|
||||
environment: FREESWITCH_PAT
|
||||
|
||||
Reference in New Issue
Block a user