infra/stacks/portal-realtime/terragrunt.hcl
Viktor Barzin 53117b193a
All checks were successful
ci/woodpecker/push/default Pipeline was successful
portal-realtime: deploy the v2 full-duplex voice agent (Pipecat)
New stack for the realtime voice agent — v2 of the portal-assistant brain
path. One persistent WebSocket per conversation: continuous mic audio ->
Silero VAD turn-taking -> Whisper STT (portal-stt) -> streaming Claude brain
(claude-agent-service) -> edge-tts (portal-tts) -> audio out, with barge-in.
Reuses all three upstream cluster services; nothing new is spun up.

Public Cloudflare ingress (proxied, WebSocket) at portal-realtime.viktorbarzin.me
with the app's own DEVICE_TOKEN as the edge gate (auth="app" — Authentik would
break the native Portal client). No buffering middleware: it would break the
streaming WebSocket. Image ghcr.io/viktorbarzin/portal-assistant-realtime
(private ghcr, pulled with ghcr_pull_token). Sibling to the v1 portal-assistant
gateway, which stays live.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 08:23:17 +00:00

17 lines
703 B
HCL

include "root" {
path = find_in_parent_folders()
}
dependency "platform" {
config_path = "../platform"
skip_outputs = true
}
# portal-realtime — the v2 full-duplex voice agent (Pipecat). One persistent
# WebSocket per conversation: continuous mic audio -> Silero VAD turn-taking ->
# Whisper STT (portal-stt) -> streaming Claude brain (claude-agent-service) ->
# edge-tts (portal-tts) -> audio out, with barge-in. Reuses all three upstream
# cluster services; nothing new is spun up. Public Cloudflare ingress (proxied,
# WebSocket) with the app's own DEVICE_TOKEN as the edge gate. Sibling to
# portal-assistant (the v1 tap-to-talk gateway, still live). portal-assistant
# realtime Phase 3.