Commit b2b2f898 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Merge branch 'feat/428-cttc-link-webui-with-agentic-component' into 'develop'

Resolve "(CTTC) Link WebUI with Agentic component"

See merge request !487
parents 8b2672a5 fc94e604
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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/\_/-/")
+16 −0
Original line number Diff line number Diff line
@@ -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"
+20 −9
Original line number Diff line number Diff line
@@ -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: ""
@@ -58,6 +59,8 @@ kind: Deployment
metadata:
  name: agenticservice
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: agenticservice
@@ -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"
@@ -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
@@ -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
@@ -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
@@ -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:
@@ -154,4 +165,4 @@ spec:
              service:
                name: agenticservice
                port:
                  number: 8800
                  number: 8000
+1 −1
Original line number Diff line number Diff line
@@ -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
+14 −1
Original line number Diff line number Diff line
@@ -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"
@@ -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"
@@ -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