Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/user-guide/dine-in/get-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ cd ../dine-in

> **Note:** Only needed once. Model files are shared between Dine-In and Take-Away.

This downloads Qwen2.5-VL-7B-Instruct (~7 GB) and converts it to OpenVINO™ INT8 format. This is only needed once — the model files are shared with Take-Away.
This downloads MiniCPM-V-4.5 and converts it to OpenVINO™ INT4 format. This is only needed once — the model files are shared with Take-Away.

### Step 4: Prepare Test Data

Expand Down
2 changes: 1 addition & 1 deletion docs/user-guide/dine-in/get-started/system-requirements.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Hardware, software, and network requirements for deploying Dine-In Order Accurac
| GPU | Intel® Data Center GPU (for concurrent validation) |
| Storage | 200 GB NVMe SSD |

**GPU VRAM guidance:** The Qwen2.5-VL-7B INT8 model requires ~8 GB of VRAM.
**GPU VRAM guidance:** The MiniCPM-V-4.5 INT4 model requires ~5 GB of VRAM.
The default `cache_size=4` reserves an additional 4 GB VRAM for the KV cache. Total VRAM needed
is around 12 GB, which fits in an Intel® Arc™ A770 16 GB. On **integrated GPU** (iGPU)
platforms such as Wildcat Lake and Meteor Lake, the KV cache is drawn from **system RAM**
Expand Down
2 changes: 1 addition & 1 deletion docs/user-guide/dine-in/how-it-works.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ This document provides a comprehensive technical overview of the system architec
┌─────────────────┐ ┌─────────────────┐
│ │ │ │
│ OVMS VLM │ │ Semantic │
(Qwen2.5-VL) │ │ Service │
(MiniCPM-V4.5) │ │ Service │
│ Port 8000 │ │ Port 8080 │
│ │ │ │
└─────────────────┘ └─────────────────┘
Expand Down
2 changes: 1 addition & 1 deletion docs/user-guide/dine-in/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ In a full-service restaurant:

| Feature | Description |
| ---------------------------- | -------------------------------------------------------------------------------- |
| **Zero-Training Deployment** | Uses pre-trained Qwen2.5-VL-7B model - no fine-tuning required |
| **Zero-Training Deployment** | Uses pre-trained MiniCPM-V-4.5 model - no fine-tuning required |
| **Semantic Matching** | Fuzzy item matching handles naming variations (e.g., "Big Mac" ↔ "Maharaja Mac") |
| **Real-Time Validation** | Sub-15-second end-to-end latency for operational efficiency |
| **Circuit Breaker Pattern** | Fault-tolerant with automatic service recovery |
Expand Down
8 changes: 6 additions & 2 deletions docs/user-guide/get-started/advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ LOG_LEVEL=INFO
# Service Endpoints
# =============================================================================
OVMS_ENDPOINT=http://ovms-vlm:8000
OVMS_MODEL_NAME=Qwen/Qwen2.5-VL-7B-Instruct
OVMS_MODEL_NAME=openbmb/MiniCPM-V-4_5-int4
VLM_PRECISION=int4 # must match the -int4 suffix in OVMS_MODEL_NAME
SEMANTIC_SERVICE_ENDPOINT=http://semantic-service:8080
API_TIMEOUT=60
```
Expand Down Expand Up @@ -106,7 +107,10 @@ API_TIMEOUT=60
# =============================================================================
VLM_BACKEND=ovms
OVMS_ENDPOINT=http://ovms-vlm:8000
OVMS_MODEL_NAME=Qwen/Qwen2.5-VL-7B-Instruct
OVMS_MODEL_NAME=openbmb/MiniCPM-V-4_5-int4
VLM_PRECISION=int4 # must match the -int4 suffix in OVMS_MODEL_NAME
VLM_IMAGE_MAX_SIZE=448 # square canvas size submitted to the VLM
VLM_ENABLE_THINKING=false # keep MiniCPM's <think> reasoning off
OPENVINO_DEVICE=GPU # 'GPU', 'CPU', or 'AUTO'

# =============================================================================
Expand Down
4 changes: 2 additions & 2 deletions docs/user-guide/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Optimized for validating food trays at serving stations before delivery to table
- REST API for POS integration
- Gradio web interface for manual validation
- Hybrid semantic matching
- Zero-training deployment with pre-trained Qwen2.5-VL-7B model
- Zero-training deployment with pre-trained MiniCPM-V-4.5 model

#### Use Case

Expand Down Expand Up @@ -109,7 +109,7 @@ Optimized for high-throughput drive-through environments with multiple camera st

### VLM Backend (OVMS)

Both applications use OpenVINO™ Model Server with Qwen2.5-VL for vision-language inference.
Both applications use OpenVINO™ Model Server with MiniCPM-V-4.5 (INT4) for vision-language inference.

### Semantic Comparison Service

Expand Down
2 changes: 1 addition & 1 deletion docs/user-guide/oa-get-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
cd ../dine-in
```

This downloads and converts the Qwen2.5-VL-7B model (~7GB). This only needs to be done once.
This downloads and converts the MiniCPM-V-4.5 model to OpenVINO™ INT4. This only needs to be done once.

3. **Prepare Test Data**
- Add your food tray/plate images to the `images/` folder
Expand Down
16 changes: 8 additions & 8 deletions docs/user-guide/oa-how-it-works.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ The Order Accuracy platform is an enterprise AI vision system designed for real-

### Key Features

- **VLM-Powered Detection**: Uses Qwen2.5-VL-7B for accurate item identification
- **VLM-Powered Detection**: Uses MiniCPM-V-4.5 (INT4) for accurate item identification
- **Intel Hardware Optimization**: Optimized for Intel CPUs and GPUs via OpenVINO
- **Dual Application Support**: Dine-In (image-based) and Take-Away (video stream-based)
- **Semantic Matching**: Fuzzy matching for item name variations
Expand Down Expand Up @@ -44,7 +44,7 @@ graph TB
end

subgraph "Shared Services"
OVMS[OVMS VLM<br>Qwen2.5-VL-7B]
OVMS[OVMS VLM<br>MiniCPM-V-4.5]
SEM[Semantic Service]
MINIO[MinIO Storage]
end
Expand Down Expand Up @@ -76,7 +76,7 @@ flowchart TB
DVS --> DMET["Metrics Collector"]
end

DVLM --> OVMS["OVMS VLM<br/>(Qwen2.5-VL)"]
DVLM --> OVMS["OVMS VLM<br/>(MiniCPM-V-4.5)"]
DSEM --> SEM["Semantic Service"]
```

Expand All @@ -91,7 +91,7 @@ flowchart TB
minio --> selector["Frame Selector<br/>(YOLO11n-CPU)"]
selector -->|top 3 frames| scheduler["VLM Scheduler<br/>(ThreadPool)"]
selector -->|top 3 frames| validation["Validation Agent"]
scheduler --> ovms["OVMS VLM<br/>(Qwen2.5-VL, GPU-INT8)"]
scheduler --> ovms["OVMS VLM<br/>(MiniCPM-V-4.5, GPU-INT4)"]
validation --> semantic["Semantic Service"]
end

Expand All @@ -105,12 +105,12 @@ flowchart TB

#### 1. VLM Backend (OVMS)

OpenVINO™ Model Server hosting Qwen2.5-VL-7B for vision-language inference.
OpenVINO™ Model Server hosting MiniCPM-V-4.5 for vision-language inference.

**Features:**

- OpenAI-compatible API (`/v3/chat/completions`)
- INT8 quantization for optimized performance
- INT4 weight compression for optimized performance
- GPU acceleration via Intel/NVIDIA hardware
- Shared model instance for both applications

Expand All @@ -120,7 +120,7 @@ OpenVINO™ Model Server hosting Qwen2.5-VL-7B for vision-language inference.
response = requests.post(
f"{OVMS_ENDPOINT}/v3/chat/completions",
json={
"model": "Qwen/Qwen2.5-VL-7B-Instruct",
"model": "openbmb/MiniCPM-V-4_5-int4",
"messages": [
{
"role": "user",
Expand Down Expand Up @@ -235,7 +235,7 @@ Request batching scheduler optimizing OVMS throughput.
- Store selected frames in MinIO

3. **VLM Processing**:
- VLM Scheduler → OVMS (Qwen2.5-VL):
- VLM Scheduler → OVMS (MiniCPM-V-4.5):
- Batch frames by time window
- Send to OVMS with detection prompt
- Parse structured item response
Expand Down
20 changes: 18 additions & 2 deletions docs/user-guide/take-away/get-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ cd ../take-away

This downloads and exports:

- Qwen2.5-VL-7B-Instruct (OpenVINO™ format)
- MiniCPM-V-4_5 INT4 (OpenVINO™ format)
- YOLOv11 model (INT8 OpenVINO™)
- EasyOCR detection and recognition models

Expand Down Expand Up @@ -112,9 +112,16 @@ make up
# =============================================================================
VLM_BACKEND=ovms
OVMS_ENDPOINT=http://ovms-vlm:8000
OVMS_MODEL_NAME=Qwen/Qwen2.5-VL-7B-Instruct
OVMS_MODEL_NAME=openbmb/MiniCPM-V-4_5-int4
VLM_PRECISION=int4 # must match the -int4 suffix in OVMS_MODEL_NAME
TARGET_DEVICE=GPU # 'GPU' or 'CPU' — also set OPENVINO_DEVICE to match

# =============================================================================
# VLM Image / Decoding Options
# =============================================================================
VLM_IMAGE_MAX_SIZE=448 # frames are fitted into a 448x448 square canvas
VLM_ENABLE_THINKING=false # keep MiniCPM's <think> reasoning disabled

# =============================================================================
# Inference Device (must match TARGET_DEVICE)
# =============================================================================
Expand All @@ -138,6 +145,15 @@ MINIO_ENDPOINT=minio:9000

> **Changing the inference device:** Set both `TARGET_DEVICE` and `OPENVINO_DEVICE` to the same value (`GPU` or `CPU`), then re-run `./setup_models.sh --app take-away` to re-export the model for that device.

> **`VLM_ENABLE_THINKING`:** MiniCPM-V-4.5 is a hybrid reasoning model. Leave this
> `false`. When enabled, the model spends the whole token budget on a `<think>`
> reasoning block and the detected-item list is truncated, which shows up as
> missing items and ~4x higher latency.

> **`VLM_IMAGE_MAX_SIZE`:** Each selected frame is fitted into a square canvas of
> this size (aspect ratio preserved, white padding), matching the dine-in
> pipeline. Larger values increase detail but also prompt tokens and latency.

### Validate Configuration

```bash
Expand Down
2 changes: 1 addition & 1 deletion docs/user-guide/take-away/get-started/build-from-source.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ cd ../take-away

This downloads and exports:

- **Qwen2.5-VL-7B-Instruct** (OpenVINO™ INT8) → `ovms-service/models/`
- **MiniCPM-V-4_5** (OpenVINO™ INT4) → `ovms-service/models/`
- **EasyOCR** models → `take-away/models/easyocr/`
- **YOLO11n** (FP32 + INT8 OpenVINO) → `take-away/models/`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Hardware, software, and network requirements for deploying Take-Away Order Accur
| **GPU** | Intel® Data Center GPU Max (48 GB) — for 4+ concurrent stations |
| **Storage** | 200 GB NVMe SSD |

**GPU VRAM guidance:** The Qwen2.5-VL-7B INT8 model requires ~8 GB of VRAM.
**GPU VRAM guidance:** The MiniCPM-V-4_5 INT4 model requires ~5 GB of VRAM.
The default `cache_size=4` reserves an additional 4 GB VRAM for the KV cache. Total VRAM needed
is around 12 GB, which fits in an Intel® Arc™ A770 16 GB. On **integrated GPU** (iGPU)
platforms such as Wildcat Lake and Meteor Lake, the KV cache is drawn from **system RAM**
Expand Down
23 changes: 15 additions & 8 deletions docs/user-guide/take-away/how-it-works.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ flowchart TB
minio --> selector["Frame Selector<br/>(YOLO11n-CPU)"]
selector -->|top 3 frames| scheduler["VLM Scheduler<br/>(ThreadPool)"]
selector -->|top 3 frames| validation["Validation Agent"]
scheduler --> ovms["OVMS VLM<br/>(Qwen2.5-VL, GPU-INT8)"]
scheduler --> ovms["OVMS VLM<br/>(MiniCPM-V-4.5, GPU-INT4)"]
validation --> semantic["Semantic Service"]
end

Expand Down Expand Up @@ -107,7 +107,7 @@ WORKERS=0
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ OVMS VLM (GPU) │ │
│ │ Qwen2.5-VL-7B / Continuous Batching │ │
│ │ MiniCPM-V-4.5 INT4 / Continuous Batching │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
│ Characteristics: │
Expand Down Expand Up @@ -317,7 +317,7 @@ response = requests.post(
- Store selected frames in MinIO

3. **VLM Processing**:
- VLM Scheduler → OVMS (Qwen2.5-VL):
- VLM Scheduler → OVMS (MiniCPM-V-4.5):
- Batch frames by time window
- Send to OVMS with detection prompt
- Parse structured item response
Expand Down Expand Up @@ -387,20 +387,20 @@ rtspsrc location=<url> latency=0 buffer-mode=0 protocols=tcp ntp-sync=false do-r
┌─────────────────────────────────────────────────────────────────────────────────┐
│ OVMS VLM INTEGRATION │
│ │
│ Model: Qwen/Qwen2.5-VL-7B-Instruct
│ Model: openbmb/MiniCPM-V-4_5-int4
│ │
│ ┌────────────────────────────────────────────────────────────────────────┐ │
│ │ OVMS Model Server │ │
│ │ │ │
│ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ │
│ │ │ Vision │ │ Language │ │ Output │ │ │
│ │ │ Encoder │───▶│ Model │───▶│ Decoder │ │ │
│ │ │ (ViT-based) │ │ (Qwen2.5) │ │ (JSON) │ │ │
│ │ │ (SigLIP) │ │ (MiniCPM) │ │ (JSON) │ │ │
│ │ └────────────────┘ └────────────────┘ └────────────────┘ │ │
│ │ │ │
│ │ API: OpenAI-compatible /v3/chat/completions │ │
│ │ Port: 8001 (configurable) │ │
│ │ Precision: INT8 (optimized for inference) │ │
│ │ Precision: INT4 (optimized for inference) │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────┘
Expand All @@ -412,7 +412,7 @@ rtspsrc location=<url> latency=0 buffer-mode=0 protocols=tcp ntp-sync=false do-r

```json
{
"model": "Qwen/Qwen2.5-VL-7B-Instruct",
"model": "openbmb/MiniCPM-V-4_5-int4",
"messages": [
{
"role": "user",
Expand All @@ -426,10 +426,17 @@ rtspsrc location=<url> latency=0 buffer-mode=0 protocols=tcp ntp-sync=false do-r
}
],
"max_completion_tokens": 100,
"temperature": 0.2
"temperature": 0.2,
"chat_template_kwargs": { "enable_thinking": false }
}
```

> **`enable_thinking`:** MiniCPM-V-4.5 is a hybrid reasoning model. Unless
> thinking is explicitly disabled, its chat template opens a `<think>` block and
> the entire `max_completion_tokens` budget is spent on reasoning, leaving the
> item list truncated. The service always sends `enable_thinking: false`
> (configurable via `VLM_ENABLE_THINKING`).

**Response:**

```json
Expand Down
30 changes: 30 additions & 0 deletions docs/user-guide/take-away/release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,36 @@ Version history and changelog for Take-Away Order Accuracy.

---

## Version 2026.1.0 (Unreleased)

### What's New

- **VLM switched to MiniCPM-V-4.5 (INT4)** — Take-Away now uses
`openbmb/MiniCPM-V-4_5-int4` instead of `Qwen/Qwen2.5-VL-7B-Instruct`, aligning it
with Dine-In so both applications share a single OVMS model instance.
`VLM_PRECISION` defaults to `int4`.
- **`setup_models.sh` per-app defaults** — `--app take-away` and `--app dine-in` both
default to MiniCPM-V-4.5 INT4. `VLM_PRECISION` is now derived from the precision
suffix of `OVMS_MODEL_NAME`, and a mismatch between the two emits a warning.
- **Reasoning disabled by default** — MiniCPM-V-4.5 is a hybrid reasoning model; the
service now sends `chat_template_kwargs.enable_thinking=false` (configurable via
`VLM_ENABLE_THINKING`) so the token budget is spent on the answer instead of a
`<think>` block. Any stray `<think>` output is stripped before parsing.
- **Aspect-preserving image preprocessing** — frames are fitted into a 448x448 square
canvas (LANCZOS downscale, white padding, light contrast/sharpening) matching the
Dine-In pipeline, configurable via `VLM_IMAGE_MAX_SIZE`. This replaces the previous
fixed 512x512 resize, which distorted the aspect ratio.

### Fixed

- Frames are no longer stretched to 512x512, which distorted product shapes.
- Detections are no longer truncated by reasoning output, which previously caused
missing items and roughly 4x higher VLM latency.
- `setup_models.sh` no longer migrates legacy Qwen weights into a directory named
after a different model.

---

## Version 2026.0.0 (March 2026)

**General Availability Release**
Expand Down
7 changes: 7 additions & 0 deletions docs/user-guide/take-away/ta-benchmarking.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@ make up
> make download-sample-video
> ```

> **Order manifests:** The benchmark validates the orders detected in the video
> against `config/orders.json`. Order IDs must match the order numbers shown in
> the video, and each order's expected items must match what is actually visible.
> A stale manifest reports correct detections as mismatches; an unparseable one
> (for example a trailing comma) makes every order fail and the benchmark reports
> zero transactions.

## Benchmark Commands

### Fixed Workers Benchmark
Expand Down
Loading
Loading