# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. # # NVIDIA CORPORATION and its licensors retain all intellectual property # and proprietary rights in and to this software, related documentation # and any modifications thereto. Any use, reproduction, disclosure or # distribution of this software and related documentation without an express # license agreement from NVIDIA CORPORATION is strictly prohibited. type: msapplication specVersion: 2.5.0 name: ucf.svc.ace-controller chartName: ace-controller description: ACE Controller version: 1.0.2 displayName: "ACE Controller Microservice" category: functional: "Conversational AI" industry: "General" tags: [] keywords: [] nSpectId: NSPECT-XGIZ-EB0C publish: false egress-endpoints: - name: "redis" description: Redis message broker protocol: TCP scheme: asyncio mandatory: False data-flow: in-out - name: "riva-speech" description: Riva Speech Skills API scheme: grpc protocol: TCP mandatory: False data-flow: in-out - name: "animgraph-http" description: Animation Graph HTTP API scheme: http protocol: TCP mandatory: False data-flow: out - name: "animgraph-grpc" description: Animation Graph GRPC API scheme: grpc protocol: TCP mandatory: False data-flow: out - name: "a2f-grpc" description: Audio2Face service GRPC API scheme: grpc protocol: TCP mandatory: False data-flow: out ingress-endpoints: - name: http-api description: ACE Controller REST API scheme: http data-flow: in-out secrets: - name: nvidia-api-key-secret description: Secret for NVIDIA API key mandatory: False mountPath: /secrets fileName: nvidia_api_key.txt - name: openai-key-secret description: Secret for passing OpenAI key mandatory: False mountPath: /secrets fileName: openai_api_key.txt - name: elevenlabs-api-key-secret description: Secret for ElevenLabs API key mandatory: False mountPath: /secrets fileName: elevenlabs_api_key.txt - name: custom-env-secrets description: Secret for passing custom env variables and API keys mandatory: False mountPath: /secrets fileName: custom.env externalFiles: - name: config.yaml description: config mandatory: true isDirectory: false params: OTEL_SDK_DISABLED: 'false' #> description: when enabled, tracing data will be exported #> type: string OTEL_SERVICE_NAME: ace-controller #> description: protocol for exporting OTel data #> type: string OTEL_EXPORTER_OTLP_ENDPOINT: "" #> description: endpoint for Otel collector #> type: string OTEL_EXPORTER_OTLP_PROTOCOL: grpc #> description: protocol for exporting OTel data #> type: string DEV: "0" #> description: wether to activate dependencies hot reloading or not #> type: string image: "nvcr.io/nvidia/ace/tokkio-reference-ace-controller" #> description: pipeline image repo #> type: string tag: "5.0.0" #> description: pipeline image tag #> type: string tests: - name: dev-params1 app: tests/dev/app.yaml params: tests/dev/params1.yaml ciTrigger: false timeout: 10 duration: 10 installPreReqs: true # Wether to install foundational services namespace: default # Kubernetes namespace gpuNodeLabels: "" watchAllPods: true # OR set to false and set list of pods to watch below watchPods: - testerPods: # At least one tester pod is required - name: testpod1 # Name of the test pod startSignature: # Signature to look for in the logs indicating start of tests. Regex is accepted endSignature: # Signature to look for in the logs indicating end of tests. Regex is accepted errorSignatures: # Signatures that indicate test failures. Regex is accepted - - --- spec: - name: ace-controller-deployment type: ucf.k8s.app.deployment parameters: apptype: statefull statefulSetServiceName: ace-controller-service extraSpecs: podManagementPolicy: Parallel - name: "ace-controller-container" type: ucf.k8s.container parameters: image: repository: $params.image tag: $params.tag pullPolicy: Always command: ["/bin/bash", "-c"] args: ["source /opt/scripts/env.sh && /code/entrypoint.sh"] env: - name: ANIMGRAPH_URL value: "http://$egress.animgraph-http.address:$egress.animgraph-http.port" - name: ANIMGRAPH_GRPC_URL value: "$egress.animgraph-grpc.address:$egress.animgraph-grpc.port" - name: REDIS_URL value: "redis://$egress.redis.address:$egress.redis.port" - name: A2F_GRPC_URL value: "$egress.a2f-grpc.address:$egress.a2f-grpc.port" - name: RIVA_SERVER_URL value: "$egress.riva-speech.address:$egress.riva-speech.port" - name: DEV value: $params.DEV - name: OTEL_SDK_DISABLED value: $params.OTEL_SDK_DISABLED - name: OTEL_SERVICE_NAME value: $params.OTEL_SERVICE_NAME - name: OTEL_EXPORTER_OTLP_ENDPOINT value: $params.OTEL_EXPORTER_OTLP_ENDPOINT - name: OTEL_EXPORTER_OTLP_PROTOCOL value: $params.OTEL_EXPORTER_OTLP_PROTOCOL - name: OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED value: 'true' - name: IMAGE_NAME value: $params.image - name: IMAGE_TAG value: $params.tag ports: - containerPort: 8000 name: http startupProbe: tcpSocket: port: http initialDelaySeconds: 20 failureThreshold: 30 periodSeconds: 10 livenessProbe: tcpSocket: port: http initialDelaySeconds: 20 periodSeconds: 20 timeoutSeconds: 5 readinessProbe: tcpSocket: port: http initialDelaySeconds: 20 periodSeconds: 20 timeoutSeconds: 5 - name: app-storage type: ucf.k8s.pvc parameters: spec: storageClassName: mdx-local-path accessModes: [ReadWriteOnce] resources: requests: storage: 5Gi - name: app-storage-volume type: ucf.k8s.volume parameters: persistentVolumeClaim: claimName: ace-controller-app-storage - name: app-storage-mount type: ucf.appspec.defaultVolumeMount parameters: name: app-storage-volume mountPath: /code - name: restartPolicy type: ucf.k8s.restartPolicy parameters: policy: Always # Always / OnFailure / Never - name: podSecurityContext type: ucf.k8s.podSecurityContext parameters: runAsGroup: 1000 runAsUser: 1000 - name: ace-controller-service type: ucf.k8s.service parameters: ports: - port: 8000 protocol: TCP name: http-api type: ClusterIP - name: ace-controller-metrics type: ucf.crd.podMonitor parameters: portName: metrics path: /metrics - name: cm-dependencies type: ucf.appspec.restartPodOnConfigChanges parameters: # Add dependency on all configmaps detected in the microservice addAll: true