Files

206 lines
6.7 KiB
YAML

---
name: agent-call
services:
rabbitmq:
image: >-
rabbitmq:4.1-management-alpine@sha256:eb6736723c5d0831ab12d29e7a2b8ee1082f744370c2a784b50b84b3b4d6d030
restart: unless-stopped
init: true
environment:
RABBITMQ_DEFAULT_USER: >-
${RABBITMQ_DEFAULT_USER:?Set RABBITMQ_DEFAULT_USER}
RABBITMQ_DEFAULT_PASS: >-
${RABBITMQ_DEFAULT_PASS:?Set RABBITMQ_DEFAULT_PASS}
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"]
interval: 5s
timeout: 3s
retries: 12
ports:
- "127.0.0.1:${RABBITMQ_PORT:-5672}:5672"
volumes:
- rabbitmq_data:/var/lib/rabbitmq
logging:
driver: json-file
options: {max-size: "10m", max-file: "3"}
agent-call:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
init: true
depends_on:
rabbitmq:
condition: service_healthy
ports:
- "127.0.0.1:${AGENT_CALL_PORT:-18080}:8080"
environment:
AGENT_CALL_MODE: "mock"
BROKER_MODE: "rabbit"
RABBITMQ_URL: "${RABBITMQ_URL:?Set RABBITMQ_URL}"
HTTP_TOKENS: "${HTTP_TOKENS:?Set HTTP_TOKENS}"
AI_CONFIG_ISSUER: "${AI_CONFIG_ISSUER:-}"
AI_CONFIG_AUDIENCE: "${AI_CONFIG_AUDIENCE:-}"
AGENT_CALL_SIP_READONLY_URL: "${AGENT_CALL_SIP_READONLY_URL:-}"
AGENT_CALL_SIP_READONLY_TOKEN: "${AGENT_CALL_SIP_READONLY_TOKEN:-}"
AGENT_CALL_SIP_READONLY_CA_FILE: >-
${AGENT_CALL_SIP_READONLY_CA_FILE:-}
AGENT_CALL_SIP_READONLY_TIMEOUT_SECONDS: >-
${AGENT_CALL_SIP_READONLY_TIMEOUT_SECONDS:-5}
volumes:
- agent_call_data:/data
read_only: false
cap_drop: [ALL]
security_opt: [no-new-privileges:true]
pids_limit: 256
mem_limit: 512m
cpus: 2
logging:
driver: json-file
options: {max-size: "10m", max-file: "3"}
cell-worker:
build:
context: .
dockerfile: Dockerfile
profiles: ["real-cell"]
restart: unless-stopped
init: true
entrypoint: ["python", "-m", "agent_call.cell_worker_main"]
network_mode: host
depends_on:
rabbitmq:
condition: service_healthy
environment:
AGENT_CALL_AI_PROFILE: >-
${AGENT_CALL_AI_PROFILE:-/app/configs/ai-test.bailian.example.yaml}
AGENT_CALL_PROMPT_FILE: >-
${AGENT_CALL_PROMPT_FILE:-/app/prompts/test-call.txt}
AGENT_CALL_TENANT_KEY: >-
${AGENT_CALL_TENANT_KEY:?Set AGENT_CALL_TENANT_KEY}
AGENT_CALL_EXECUTION_LEDGER: >-
${AGENT_CALL_EXECUTION_LEDGER:-/data/cell-executions.sqlite3}
RABBITMQ_URL: "${RABBITMQ_URL:?Set RABBITMQ_URL}"
BAILIAN_API_KEY: "${BAILIAN_API_KEY:?Set BAILIAN_API_KEY}"
BAILIAN_BASE_URL: "${BAILIAN_BASE_URL:?Set BAILIAN_BASE_URL}"
BAILIAN_WSS_BASE_URL: "${BAILIAN_WSS_BASE_URL:?Set BAILIAN_WSS_BASE_URL}"
BAILIAN_TTS_WSS_BASE_URL: "${BAILIAN_TTS_WSS_BASE_URL:-}"
BAILIAN_TTS_MODEL: "${BAILIAN_TTS_MODEL:-cosyvoice-v3.5-plus}"
BAILIAN_TTS_VOICE: "${BAILIAN_TTS_VOICE:?Set BAILIAN_TTS_VOICE}"
BAILIAN_ASR_MODEL: "${BAILIAN_ASR_MODEL:-fun-asr-realtime}"
CELL_ARI_URL: "${CELL_ARI_URL:-http://127.0.0.1:8088}"
CELL_ARI_USERNAME: "${CELL_ARI_USERNAME:-outbound}"
CELL_ARI_PASSWORD: "${CELL_ARI_PASSWORD:?Set CELL_ARI_PASSWORD}"
CELL_ARI_APP: "${CELL_ARI_APP:-agent-call}"
CELL_SIP_TRUNK_ID: "${CELL_SIP_TRUNK_ID:?Set CELL_SIP_TRUNK_ID}"
CELL_CALLER_ID: "${CELL_CALLER_ID:?Set CELL_CALLER_ID}"
CELL_DIAL_PREFIX: "${CELL_DIAL_PREFIX:-7089}"
CELL_ROUTE_MAP_JSON: "${CELL_ROUTE_MAP_JSON:-}"
CELL_RTP_BIND_HOST: "${CELL_RTP_BIND_HOST:-127.0.0.1}"
CELL_RECORDING_DIR: "${CELL_RECORDING_DIR:-/data/recordings}"
volumes:
- agent_call_data:/data
tmpfs:
- /tmp:rw,noexec,nosuid,size=64m
read_only: false
cap_drop: [ALL]
security_opt: [no-new-privileges:true]
pids_limit: 256
mem_limit: 1g
cpus: 2
logging:
driver: json-file
options: {max-size: "10m", max-file: "3"}
sip-management:
build:
context: .
dockerfile: Dockerfile
profiles: ["sip-management"]
restart: unless-stopped
init: true
entrypoint: ["python", "-m", "agent_call.sip_management_main"]
ports:
- "127.0.0.1:${SIP_MANAGEMENT_PORT:-18090}:8090"
environment:
SIP_MANAGEMENT_MODE: "${SIP_MANAGEMENT_MODE:-mock}"
SIP_MANAGEMENT_HOST: "0.0.0.0"
SIP_MANAGEMENT_PORT: "8090"
SIP_MANAGEMENT_DB: "/data/sip-management.sqlite3"
SIP_ADMIN_TOKENS: "${SIP_ADMIN_TOKENS:?Set SIP_ADMIN_TOKENS}"
SIP_READ_TOKENS: "${SIP_READ_TOKENS:?Set SIP_READ_TOKENS}"
SIP_CELL_TLS_CA_FILE: "${SIP_CELL_TLS_CA_FILE:-/run/sip-tls/ca.pem}"
SIP_CELL_TLS_CERT_FILE: >-
${SIP_CELL_TLS_CERT_FILE:-/run/sip-tls/client.pem}
SIP_CELL_TLS_KEY_FILE: >-
${SIP_CELL_TLS_KEY_FILE:-/run/sip-tls/client-key.pem}
SIP_CELL_PUBLISH_TIMEOUT_SECONDS: >-
${SIP_CELL_PUBLISH_TIMEOUT_SECONDS:-15}
PYTHONDONTWRITEBYTECODE: "1"
volumes:
- sip_management_data:/data
- "${SIP_CELL_TLS_DIR:-./secrets/sip-management}:/run/sip-tls:ro"
tmpfs:
- /tmp:rw,noexec,nosuid,size=16m
read_only: true
cap_drop: [ALL]
security_opt: [no-new-privileges:true]
pids_limit: 128
mem_limit: 256m
cpus: 1
healthcheck:
test:
- CMD
- python
- -c
- >-
import urllib.request;
urllib.request.urlopen(
'http://127.0.0.1:8090/healthz/live', timeout=2
)
interval: 5s
timeout: 3s
retries: 12
logging:
driver: json-file
options: {max-size: "10m", max-file: "3"}
asr-web:
build:
context: ./services/asr-web
restart: unless-stopped
init: true
read_only: true
cap_drop: [ALL]
security_opt: [no-new-privileges:true]
pids_limit: 128
mem_limit: 256m
cpus: 1
ports:
- "127.0.0.1:${ASR_WEB_PORT:-18088}:8080"
environment:
ASR_LISTEN: "0.0.0.0:8080"
ASR_WEB_TOKEN: "${ASR_WEB_TOKEN:?Set ASR_WEB_TOKEN}"
PUBLIC_ORIGIN: "${PUBLIC_ORIGIN:-}"
BAILIAN_API_KEY: "${BAILIAN_API_KEY:-}"
BAILIAN_WS: "${BAILIAN_WS:-}"
FUNASR_API_KEY: "${FUNASR_API_KEY:-}"
FUNASR_WS: "${FUNASR_WS:-}"
BAILIAN_ASR_MODELS: "${BAILIAN_ASR_MODELS:-fun-asr-realtime}"
VOLC_APP_KEY: "${VOLC_APP_KEY:-}"
VOLC_APP_ID: "${VOLC_APP_ID:-}"
VOLC_ACCESS_TOKEN: "${VOLC_ACCESS_TOKEN:-}"
VOLC_RESOURCE_ID: "${VOLC_RESOURCE_ID:-volc.bigasr.sauc.duration}"
VOLC_WS: "${VOLC_WS:-wss://openspeech.bytedance.com/api/v3/sauc/bigmodel}"
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
rabbitmq_data:
agent_call_data:
sip_management_data: