Skip to content

Commit fb01901

Browse files
committed
Merge branch 'main' into feature/pooja/added_tests
2 parents a9b7802 + 7ebc20d commit fb01901

File tree

5 files changed

+122
-23
lines changed

5 files changed

+122
-23
lines changed

health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/helm/README.md

Lines changed: 102 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,35 @@ This Helm chart deploys the **Multi modal patient monitoring app** on Kubernetes
99
- `kubectl`
1010
- `helm` (v3+)
1111
- A working PersistentVolume provisioner (required for PVC binding)
12+
- **NGINX Ingress Controller** (required when `ingress.enabled: true`, which is the default)
13+
14+
### Ingress Controller prerequisite (required for default configuration)
15+
16+
This chart creates Ingress resources that use `ingressClassName: nginx`. You must have the
17+
NGINX Ingress Controller running in your cluster before installing the chart with ingress enabled.
18+
19+
```bash
20+
# Install NGINX Ingress Controller via Helm
21+
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
22+
helm repo update
23+
helm install ingress-nginx ingress-nginx/ingress-nginx \
24+
--namespace ingress-nginx --create-namespace
25+
26+
# Wait for the controller to be ready
27+
kubectl wait --namespace ingress-nginx \
28+
--for=condition=ready pod \
29+
--selector=app.kubernetes.io/component=controller \
30+
--timeout=120s
31+
```
32+
33+
For **Minikube**, enable the built-in ingress addon instead:
34+
```bash
35+
minikube addons enable ingress
36+
```
37+
38+
If you do not have an ingress controller and do not wish to install one, set
39+
`ingress.enabled: false` in `values.yaml` and use port-forwarding to access the
40+
application (see [Access without Ingress](#access-without-ingress-controller) below).
1241

1342
### Storage prerequisite (required)
1443

@@ -118,8 +147,30 @@ Healthy services will show:
118147
- No crash loops
119148

120149

150+
## Ingress Configuration
151+
152+
The chart creates two Ingress resources when `ingress.enabled: true` (default):
153+
154+
| Value | Default | Description |
155+
|---|---|---|
156+
| `ingress.enabled` | `true` | Create Ingress resources for external access |
157+
| `ingress.className` | `nginx` | IngressClass to use (requires a matching controller) |
158+
| `ingress.annotations` | *(nginx-specific)* | Annotations applied to the main ingress |
159+
| `ingress.hosts` | `multi-modal-patient-monitoring.local` | Hostname and path routing rules |
160+
161+
To disable ingress (e.g., for environments without an ingress controller):
162+
163+
```bash
164+
helm install multi-modal-patient-monitoring . \
165+
--namespace multi-modal-patient-monitoring \
166+
--create-namespace \
167+
--set ingress.enabled=false
168+
```
169+
121170
## Access the Frontend UI
122-
### 1. Check the Ingress Resource
171+
172+
### With Ingress (default)
173+
#### 1. Check the Ingress Resource
123174

124175
Run the following command to view the ingress configuration:
125176

@@ -133,15 +184,15 @@ Example output:
133184
NAME HOSTS PATHS ADDRESS PORTS
134185
multi-modal-patient-monitoring multi-modal-patient-monitoring.local / xx.xx.xx.xx 80
135186
```
136-
### 2. If an IP Address Appears in ADDRESS
187+
#### 2. If an IP Address Appears in ADDRESS
137188

138189
Add the hostname mapping to your local machine:
139190
```bash
140191
echo "<IP> multi-modal-patient-monitoring.local" | sudo tee -a /etc/hosts
141192
```
142193
Replace <IP> with the value shown in the ADDRESS column.
143194

144-
### 3. If the ADDRESS Field is Empty (Common in Minikube)
195+
#### 3. If the ADDRESS Field is Empty (Common in Minikube)
145196
Some local Kubernetes environments (such as Minikube) do not automatically populate the ingress IP.
146197

147198
Retrieve the Minikube cluster IP:
@@ -153,13 +204,13 @@ Then map the hostname to the IP:
153204
echo "$(minikube ip) multi-modal-patient-monitoring.local" | sudo tee -a /etc/hosts
154205
```
155206

156-
### 4. Enable Ingress in Minikube (if not already enabled)
207+
#### 4. Enable Ingress in Minikube (if not already enabled)
157208
```bash
158209
minikube addons enable ingress
159210
```
160211
Wait a few moments for the ingress controller to start.
161212

162-
### 5.Open the Application
213+
#### 5.Open the Application
163214
Open your browser and navigate to:
164215
```bash
165216
http://<host-or-ip>/
@@ -183,6 +234,52 @@ From here you can access:
183234

184235
- Metrics Dashboard
185236

237+
### Access without Ingress Controller
238+
239+
If you deployed with `ingress.enabled: false` or do not have an NGINX Ingress Controller,
240+
you can access the application using `kubectl port-forward`.
241+
242+
#### Forward the UI service
243+
```bash
244+
kubectl port-forward -n multi-modal-patient-monitoring svc/ui 8080:80
245+
```
246+
Then open http://localhost:8080 in your browser.
247+
248+
#### Forward the Aggregator API (video streams and API)
249+
```bash
250+
kubectl port-forward -n multi-modal-patient-monitoring svc/aggregator 8081:80
251+
```
252+
The aggregator API is then available at http://localhost:8081.
253+
254+
#### Forward the Pose Estimation stream
255+
```bash
256+
kubectl port-forward -n multi-modal-patient-monitoring svc/pose 8085:8085
257+
```
258+
The pose video feed is then available at http://localhost:8085/video_feed and
259+
http://localhost:8085/pose-video.
260+
261+
> **Tip:** You can run all three `port-forward` commands in separate terminal windows
262+
> to access the full application simultaneously.
263+
264+
#### Alternative: NodePort access
265+
266+
You can also switch the services to NodePort type by overriding the service type:
267+
268+
```bash
269+
helm install multi-modal-patient-monitoring . \
270+
--namespace multi-modal-patient-monitoring \
271+
--create-namespace \
272+
--set ingress.enabled=false \
273+
--set service.type=NodePort
274+
```
275+
276+
Then find the assigned node ports:
277+
```bash
278+
kubectl get svc -n multi-modal-patient-monitoring
279+
```
280+
281+
Access the services at `http://<node-ip>:<node-port>`.
282+
186283

187284
## Uninstall
188285
```bash

health-and-life-sciences-ai-suite/multi_modal_patient_monitoring/helm/multi_modal_patient_monitoring/templates/pose-ingress.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{{- if .Values.ingress.enabled }}
12
apiVersion: networking.k8s.io/v1
23
kind: Ingress
34
metadata:
@@ -31,4 +32,5 @@ spec:
3132
service:
3233
name: pose
3334
port:
34-
number: 8085
35+
number: 8085
36+
{{- end }}

metro-ai-suite/metro-sdk-manager/docs/user-guide/metro-gen-ai-sdk/get-started.md

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,14 @@ curl https://raw.githubusercontent.com/open-edge-platform/edge-ai-suites/refs/he
3535

3636
This section demonstrates a complete RAG (Retrieval-Augmented Generation) application workflow using the installed Gen AI components.
3737

38-
### Step 1: Navigate to Sample Application
39-
40-
Navigate to the pre-installed question-answering application directory:
41-
42-
```bash
43-
cd $HOME/metro/edge-ai-libraries/sample-applications/chat-question-and-answer
44-
```
45-
46-
### Step 2: Setup Model Download Service
38+
### Step 1: Setup Model Download Service
4739

4840
Configure and start the Model Download service to manage LLM and embedding model downloads:
4941

5042
```bash
5143
cd $HOME/metro/edge-ai-libraries/microservices/model-download
5244
export REGISTRY="intel/"
53-
export TAG=latest
45+
export TAG=1.2.0
5446
export HUGGINGFACEHUB_API_TOKEN=<your-huggingface-token>
5547
source scripts/run_service.sh up --plugins openvino --model-path $HOME/metro/models/
5648
```
@@ -59,7 +51,7 @@ source scripts/run_service.sh up --plugins openvino --model-path $HOME/metro/mod
5951
6052
Update the `<your-huggingface-token>` to your Access Token from Hugging Face. To learn more, follow this [guide](https://huggingface.co/docs/hub/en/security-tokens).
6153

62-
### Step 3: Configure Environment and Dependencies
54+
### Step 2: Configure Environment and Dependencies
6355

6456
Set up the Python virtual environment and install required dependencies:
6557

@@ -72,13 +64,13 @@ export EMBEDDING_MODEL_NAME=Alibaba-NLP/gte-large-en-v1.5
7264
export RERANKER_MODEL=BAAI/bge-reranker-base
7365
export DEVICE="CPU"
7466
export REGISTRY="intel/"
75-
export TAG=latest
67+
export TAG=2.1.0-rc2
7668
export MODEL_DOWNLOAD_HOST=localhost
7769
export MODEL_DOWNLOAD_PORT=8200
7870
source setup.sh llm=OVMS embed=OVMS
7971
```
8072

81-
### Step 4: Deploy the Application
73+
### Step 3: Deploy the Application
8274

8375
Start the complete Gen AI application stack using Docker Compose:
8476

@@ -87,15 +79,15 @@ export ALLOWED_HOSTS="*.intel.com,en.wikipedia.org,*.wikipedia.org,*.github.com"
8779
docker compose up
8880
```
8981

90-
### Step 5: Verify Deployment Status
82+
### Step 4: Verify Deployment Status
9183

9284
Run below command in another terminal to check that all application components are running correctly:
9385

9486
```bash
9587
docker ps
9688
```
9789

98-
### Step 6: Access the Application Interface
90+
### Step 5: Access the Application Interface
9991

10092
Open a web browser and navigate to the application dashboard:
10193

metro-ai-suite/metro-sdk-manager/docs/user-guide/metro-vision-ai-sdk/tutorial-3.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ mkdir -p ~/metro/metro-vision-tutorial-3
6464
cd ~/metro/metro-vision-tutorial-3
6565

6666
# Download sample city intersection video for object detection
67-
wget -O intersection.mp4 https://www.pexels.com/download/video/34505889/?fps=29.97&h=360&w=640
67+
wget -O intersection.mp4 https://www.pexels.com/download/video/34505889?fps=29.97&h=360&w=640
6868

6969
```
7070

@@ -100,7 +100,7 @@ cat > inference.py << 'EOF'
100100
101101
import cv2
102102
import numpy as np
103-
from openvino.runtime import Core
103+
from openvino import Core
104104
105105
# --- Configuration ---
106106
model_path = "/home/openvino/public/yolov10s/FP16/yolov10s.xml"
@@ -128,6 +128,11 @@ class_names = [
128128
# --- Initialize OpenVINO Core and Load Model ---
129129
ie = Core()
130130
model = ie.read_model(model=model_path)
131+
132+
# Reshape model to static input shape if dynamic (YOLOv10s expects 640x640)
133+
if model.inputs[0].partial_shape.is_dynamic:
134+
model.reshape({model.inputs[0].any_name: [1, 3, 640, 640]})
135+
131136
compiled_model = ie.compile_model(model=model, device_name="CPU")
132137
133138
# Get model input and output information

metro-ai-suite/metro-sdk-manager/scripts/metro-gen-ai-sdk.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ images=(
2828
"intel/multimodal-embedding-serving:1.3.2-rc1"
2929
"intel/vdms-dataprep:1.3.2-rc1"
3030
"intel/vlm-openvino-serving:1.3.2-rc1"
31+
"intel/model-download:1.2.0"
32+
"intel/chatqna:2.1.0-rc2"
33+
"intel/chatqna-ui:2.1.0-rc2"
3134
)
3235
NAME="Metro Gen AI SDK"
3336

0 commit comments

Comments
 (0)