Loading deploy/component.sh +8 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,14 @@ for COMPONENT in $TFS_COMPONENTS; do echo " Deploying '$COMPONENT' component to Kubernetes..." DEPLOY_LOG="$TMP_LOGS_FOLDER/deploy_${COMPONENT}.log" if [ "$COMPONENT" == "agentic" ]; then kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic --ignore-not-found >> "$DEPLOY_LOG" kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic-api --ignore-not-found >> "$DEPLOY_LOG" kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic-web --ignore-not-found >> "$DEPLOY_LOG" fi kubectl --namespace $TFS_K8S_NAMESPACE delete -f "$MANIFEST" > "$DEPLOY_LOG" kubectl --namespace $TFS_K8S_NAMESPACE apply -f "$MANIFEST" > "$DEPLOY_LOG" COMPONENT_OBJNAME=$(echo "${COMPONENT}" | sed "s/\_/-/") Loading deploy/tfs.sh +16 −0 Original line number Diff line number Diff line Loading @@ -340,12 +340,28 @@ for COMPONENT in $TFS_COMPONENTS; do sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:${VERSION}#image: $IMAGE_URL#g" "$MANIFEST" fi if [ "$COMPONENT" == "webui" ] && [[ "$TFS_COMPONENTS" == *"agentic"* ]]; then sed -E -i '/value: "\/webui\/"/ a\ - name: AGENTICSERVICE_SERVICE_HOST\ value: "agenticservice"\ - name: AGENTICSERVICE_SERVICE_PORT_HTTP\ value: "8000"' "$MANIFEST" fi sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Always#g" "$MANIFEST" # TODO: harmonize names of the monitoring component echo " Deploying '$COMPONENT' component to Kubernetes..." DEPLOY_LOG="$TMP_LOGS_FOLDER/deploy_${COMPONENT}.log" if [ "$COMPONENT" == "agentic" ]; then kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic --ignore-not-found > "$DEPLOY_LOG" kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic-api --ignore-not-found >> "$DEPLOY_LOG" kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic-web --ignore-not-found >> "$DEPLOY_LOG" fi kubectl --namespace $TFS_K8S_NAMESPACE apply -f "$MANIFEST" > "$DEPLOY_LOG" COMPONENT_OBJNAME=$(echo "${COMPONENT}" | sed "s/\_/-/g") #kubectl --namespace $TFS_K8S_NAMESPACE scale deployment --replicas=0 ${COMPONENT_OBJNAME}service >> "$DEPLOY_LOG" Loading manifests/agenticservice.yaml +20 −9 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ metadata: data: ADK_MODEL: "openai/gpt-4.1-mini" ADK_AGENT_GRAPH: "single" ADK_HTTP_ROOT_PATH: "/agentic" ADK_DOMAIN_ID: "A" ADK_DOMAIN_NAME: "domain-a" ADK_PEERS: "" Loading Loading @@ -58,6 +59,8 @@ kind: Deployment metadata: name: agenticservice spec: strategy: type: Recreate selector: matchLabels: app: agenticservice Loading @@ -72,8 +75,14 @@ spec: - name: server image: labs.etsi.org:5050/tfs/controller/agentic:latest imagePullPolicy: Always workingDir: /var/teraflow/adk_apps command: - python args: - -m - agentic.service.adk_web ports: - containerPort: 8800 - containerPort: 8000 env: - name: LOG_LEVEL value: "INFO" Loading @@ -83,6 +92,8 @@ spec: value: "" - name: ADK_DISABLE_JSON_SCHEMA_FOR_FUNC_DECL value: "1" - name: PYTHONPATH value: "/var/teraflow" envFrom: - configMapRef: name: agentic-config Loading @@ -93,15 +104,15 @@ spec: mountPath: /var/lib/tfs-agentic readinessProbe: httpGet: path: /health port: 8800 path: /agentic/dev-ui/ port: 8000 initialDelaySeconds: 10 periodSeconds: 10 failureThreshold: 12 livenessProbe: httpGet: path: /health port: 8800 path: /agentic/dev-ui/ port: 8000 initialDelaySeconds: 20 periodSeconds: 20 failureThreshold: 6 Loading Loading @@ -130,8 +141,8 @@ spec: ports: - name: http protocol: TCP port: 8800 targetPort: 8800 port: 8000 targetPort: 8000 --- apiVersion: networking.k8s.io/v1 kind: Ingress Loading @@ -143,7 +154,7 @@ metadata: nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/use-regex: "true" spec: rules: - http: Loading @@ -154,4 +165,4 @@ spec: service: name: agenticservice port: number: 8800 number: 8000 src/agentic/.gitlab-ci.yml +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ unit_test agentic: script: - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - > docker run --name $IMAGE_NAME -d -p 8800:8800 docker run --name $IMAGE_NAME -d -p 8000:8000 --env LOG_LEVEL=INFO --env ADK_MODEL=dummy-deterministic --env ADK_AGENT_STARTUP_WARMUP_ENABLED=0 Loading src/agentic/Config.py +14 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,8 @@ DEFAULT_AGENTIC_SESSION_DB_PATH = "/var/lib/tfs-agentic/adk_sessions.sqlite" DEFAULT_AGENTIC_SPECTRUM_DB_PATH = "/var/lib/tfs-agentic/adk_spectrum.sqlite" DEFAULT_AGENTIC_A2A_TIMEOUT_SECONDS = "180" DEFAULT_AGENTIC_DEFAULT_SLOT_WIDTH = "16" DEFAULT_AGENTIC_DOMAIN_API_PORT = "8800" DEFAULT_AGENTIC_DOMAIN_API_PORT = "8000" DEFAULT_AGENTIC_HTTP_ROOT_PATH = "/agentic" DEFAULT_AGENTIC_MCP_STARTUP_WARMUP_TIMEOUT_SECONDS = "10" DEFAULT_AGENTIC_MCP_TOOL_TIMEOUT_SECONDS = "30" DEFAULT_AGENTIC_RUN_TIMEOUT_SECONDS = "120" Loading @@ -50,6 +51,7 @@ ENVVAR_ADK_A2A_PUBLIC_URL = "ADK_A2A_PUBLIC_URL" ENVVAR_ADK_A2A_TIMEOUT_SECONDS = "ADK_A2A_TIMEOUT_SECONDS" ENVVAR_ADK_DEFAULT_SLOT_WIDTH = "ADK_DEFAULT_SLOT_WIDTH" ENVVAR_ADK_DOMAIN_API_PORT = "ADK_DOMAIN_API_PORT" ENVVAR_ADK_HTTP_ROOT_PATH = "ADK_HTTP_ROOT_PATH" ENVVAR_ADK_MODEL = "ADK_MODEL" ENVVAR_ADK_AGENT_GRAPH = "ADK_AGENT_GRAPH" ENVVAR_ADK_DOMAIN_ID = "ADK_DOMAIN_ID" Loading Loading @@ -201,6 +203,17 @@ def get_agentic_domain_api_port() -> int: ) def get_agentic_http_root_path() -> str: root_path = get_setting( ENVVAR_ADK_HTTP_ROOT_PATH, default=DEFAULT_AGENTIC_HTTP_ROOT_PATH, ) root_path = root_path.strip().rstrip("/") if not root_path: return "" return root_path if root_path.startswith("/") else f"/{root_path}" def get_agentic_graph_normalized() -> str: return get_agentic_graph().strip().lower() or DEFAULT_AGENTIC_GRAPH Loading Loading
deploy/component.sh +8 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,14 @@ for COMPONENT in $TFS_COMPONENTS; do echo " Deploying '$COMPONENT' component to Kubernetes..." DEPLOY_LOG="$TMP_LOGS_FOLDER/deploy_${COMPONENT}.log" if [ "$COMPONENT" == "agentic" ]; then kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic --ignore-not-found >> "$DEPLOY_LOG" kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic-api --ignore-not-found >> "$DEPLOY_LOG" kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic-web --ignore-not-found >> "$DEPLOY_LOG" fi kubectl --namespace $TFS_K8S_NAMESPACE delete -f "$MANIFEST" > "$DEPLOY_LOG" kubectl --namespace $TFS_K8S_NAMESPACE apply -f "$MANIFEST" > "$DEPLOY_LOG" COMPONENT_OBJNAME=$(echo "${COMPONENT}" | sed "s/\_/-/") Loading
deploy/tfs.sh +16 −0 Original line number Diff line number Diff line Loading @@ -340,12 +340,28 @@ for COMPONENT in $TFS_COMPONENTS; do sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:${VERSION}#image: $IMAGE_URL#g" "$MANIFEST" fi if [ "$COMPONENT" == "webui" ] && [[ "$TFS_COMPONENTS" == *"agentic"* ]]; then sed -E -i '/value: "\/webui\/"/ a\ - name: AGENTICSERVICE_SERVICE_HOST\ value: "agenticservice"\ - name: AGENTICSERVICE_SERVICE_PORT_HTTP\ value: "8000"' "$MANIFEST" fi sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Always#g" "$MANIFEST" # TODO: harmonize names of the monitoring component echo " Deploying '$COMPONENT' component to Kubernetes..." DEPLOY_LOG="$TMP_LOGS_FOLDER/deploy_${COMPONENT}.log" if [ "$COMPONENT" == "agentic" ]; then kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic --ignore-not-found > "$DEPLOY_LOG" kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic-api --ignore-not-found >> "$DEPLOY_LOG" kubectl --namespace $TFS_K8S_NAMESPACE delete ingress \ tfs-ingress-agentic-web --ignore-not-found >> "$DEPLOY_LOG" fi kubectl --namespace $TFS_K8S_NAMESPACE apply -f "$MANIFEST" > "$DEPLOY_LOG" COMPONENT_OBJNAME=$(echo "${COMPONENT}" | sed "s/\_/-/g") #kubectl --namespace $TFS_K8S_NAMESPACE scale deployment --replicas=0 ${COMPONENT_OBJNAME}service >> "$DEPLOY_LOG" Loading
manifests/agenticservice.yaml +20 −9 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ metadata: data: ADK_MODEL: "openai/gpt-4.1-mini" ADK_AGENT_GRAPH: "single" ADK_HTTP_ROOT_PATH: "/agentic" ADK_DOMAIN_ID: "A" ADK_DOMAIN_NAME: "domain-a" ADK_PEERS: "" Loading Loading @@ -58,6 +59,8 @@ kind: Deployment metadata: name: agenticservice spec: strategy: type: Recreate selector: matchLabels: app: agenticservice Loading @@ -72,8 +75,14 @@ spec: - name: server image: labs.etsi.org:5050/tfs/controller/agentic:latest imagePullPolicy: Always workingDir: /var/teraflow/adk_apps command: - python args: - -m - agentic.service.adk_web ports: - containerPort: 8800 - containerPort: 8000 env: - name: LOG_LEVEL value: "INFO" Loading @@ -83,6 +92,8 @@ spec: value: "" - name: ADK_DISABLE_JSON_SCHEMA_FOR_FUNC_DECL value: "1" - name: PYTHONPATH value: "/var/teraflow" envFrom: - configMapRef: name: agentic-config Loading @@ -93,15 +104,15 @@ spec: mountPath: /var/lib/tfs-agentic readinessProbe: httpGet: path: /health port: 8800 path: /agentic/dev-ui/ port: 8000 initialDelaySeconds: 10 periodSeconds: 10 failureThreshold: 12 livenessProbe: httpGet: path: /health port: 8800 path: /agentic/dev-ui/ port: 8000 initialDelaySeconds: 20 periodSeconds: 20 failureThreshold: 6 Loading Loading @@ -130,8 +141,8 @@ spec: ports: - name: http protocol: TCP port: 8800 targetPort: 8800 port: 8000 targetPort: 8000 --- apiVersion: networking.k8s.io/v1 kind: Ingress Loading @@ -143,7 +154,7 @@ metadata: nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/use-regex: "true" spec: rules: - http: Loading @@ -154,4 +165,4 @@ spec: service: name: agenticservice port: number: 8800 number: 8000
src/agentic/.gitlab-ci.yml +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ unit_test agentic: script: - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - > docker run --name $IMAGE_NAME -d -p 8800:8800 docker run --name $IMAGE_NAME -d -p 8000:8000 --env LOG_LEVEL=INFO --env ADK_MODEL=dummy-deterministic --env ADK_AGENT_STARTUP_WARMUP_ENABLED=0 Loading
src/agentic/Config.py +14 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,8 @@ DEFAULT_AGENTIC_SESSION_DB_PATH = "/var/lib/tfs-agentic/adk_sessions.sqlite" DEFAULT_AGENTIC_SPECTRUM_DB_PATH = "/var/lib/tfs-agentic/adk_spectrum.sqlite" DEFAULT_AGENTIC_A2A_TIMEOUT_SECONDS = "180" DEFAULT_AGENTIC_DEFAULT_SLOT_WIDTH = "16" DEFAULT_AGENTIC_DOMAIN_API_PORT = "8800" DEFAULT_AGENTIC_DOMAIN_API_PORT = "8000" DEFAULT_AGENTIC_HTTP_ROOT_PATH = "/agentic" DEFAULT_AGENTIC_MCP_STARTUP_WARMUP_TIMEOUT_SECONDS = "10" DEFAULT_AGENTIC_MCP_TOOL_TIMEOUT_SECONDS = "30" DEFAULT_AGENTIC_RUN_TIMEOUT_SECONDS = "120" Loading @@ -50,6 +51,7 @@ ENVVAR_ADK_A2A_PUBLIC_URL = "ADK_A2A_PUBLIC_URL" ENVVAR_ADK_A2A_TIMEOUT_SECONDS = "ADK_A2A_TIMEOUT_SECONDS" ENVVAR_ADK_DEFAULT_SLOT_WIDTH = "ADK_DEFAULT_SLOT_WIDTH" ENVVAR_ADK_DOMAIN_API_PORT = "ADK_DOMAIN_API_PORT" ENVVAR_ADK_HTTP_ROOT_PATH = "ADK_HTTP_ROOT_PATH" ENVVAR_ADK_MODEL = "ADK_MODEL" ENVVAR_ADK_AGENT_GRAPH = "ADK_AGENT_GRAPH" ENVVAR_ADK_DOMAIN_ID = "ADK_DOMAIN_ID" Loading Loading @@ -201,6 +203,17 @@ def get_agentic_domain_api_port() -> int: ) def get_agentic_http_root_path() -> str: root_path = get_setting( ENVVAR_ADK_HTTP_ROOT_PATH, default=DEFAULT_AGENTIC_HTTP_ROOT_PATH, ) root_path = root_path.strip().rstrip("/") if not root_path: return "" return root_path if root_path.startswith("/") else f"/{root_path}" def get_agentic_graph_normalized() -> str: return get_agentic_graph().strip().lower() or DEFAULT_AGENTIC_GRAPH Loading