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
32 lines
1.2 KiB
Docker
32 lines
1.2 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
#
|
|
# Build a partir da raiz do monorepo (context: .), só com os pacotes que
|
|
# este serviço realmente usa. Roda via `tsx` direto (sem etapa de `tsc build`
|
|
# nem dist/): os pacotes internos (@b2bcall/shared, @b2bcall/telephony) ainda
|
|
# não tem pipeline de build próprio — ver docs/EVENT_SOCKET.md.
|
|
FROM node:22-slim
|
|
|
|
RUN corepack enable && corepack prepare pnpm@11.24.0 --activate
|
|
|
|
WORKDIR /repo
|
|
|
|
COPY pnpm-workspace.yaml package.json pnpm-lock.yaml tsconfig.base.json ./
|
|
COPY packages/types packages/types
|
|
COPY packages/shared packages/shared
|
|
COPY packages/telephony packages/telephony
|
|
COPY packages/database packages/database
|
|
COPY packages/storage packages/storage
|
|
COPY packages/entitlements packages/entitlements
|
|
COPY packages/ai packages/ai
|
|
COPY apps/freeswitch-events apps/freeswitch-events
|
|
|
|
RUN pnpm install --frozen-lockfile --filter @b2bcall/freeswitch-events...
|
|
|
|
# `prisma generate` só precisa do schema, não de uma conexão real.
|
|
ENV DATABASE_URL="postgresql://placeholder:placeholder@localhost:5432/placeholder"
|
|
RUN pnpm --filter @b2bcall/database exec prisma generate
|
|
|
|
WORKDIR /repo/apps/freeswitch-events
|
|
|
|
CMD ["pnpm", "exec", "tsx", "src/main.ts"]
|