--- 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: