diff --git a/AI-Documentation/aidocapp/model.py b/AI-Documentation/aidocapp/model.py
index a3a14d3f..52b356f9 100644
--- a/AI-Documentation/aidocapp/model.py
+++ b/AI-Documentation/aidocapp/model.py
@@ -20,7 +20,16 @@ def __init__(
self.template = [{
"role": "user",
- "content": "Add a detailed docstring in the style of PEP 257 to the following {} method {}. The docstring should include: - A concise summary of the method's purpose.- A detailed description of each argument (name and type). - A description of the return value (if any). Add inline comments within the method body to explain complex logic or non-obvious steps. Return the method implementation with the docstring and inline comments as a single markdown code block. Do not modify the code. Do not add any chat-like comments."
+ "content": (
+ "Add a detailed docstring in the style of PEP 257 to the following "
+ "{} method {}. The docstring should include: - A concise summary of "
+ "the method's purpose.- A detailed description of each argument "
+ "(name and type). - A description of the return value (if any). "
+ " Add inline comments within the method body to explain complex "
+ "logic or non-obvious steps. Return the method implementation with "
+ "the docstring and inline comments as a single markdown code block. "
+ "Do not modify the code. Do not add any chat-like comments."
+ ),
}]
def generate_comments(self, code, language):
diff --git a/openvino_notebooks/auto-device/.gitignore b/openvino_notebooks/auto-device/.gitignore
new file mode 100644
index 00000000..41983444
--- /dev/null
+++ b/openvino_notebooks/auto-device/.gitignore
@@ -0,0 +1,5 @@
+.venv/
+.uv-cache/
+__pycache__/
+.ipynb_checkpoints/
+model/
diff --git a/openvino_notebooks/auto-device/.python-version b/openvino_notebooks/auto-device/.python-version
new file mode 100644
index 00000000..e4fba218
--- /dev/null
+++ b/openvino_notebooks/auto-device/.python-version
@@ -0,0 +1 @@
+3.12
diff --git a/openvino_notebooks/auto-device/README.md b/openvino_notebooks/auto-device/README.md
new file mode 100644
index 00000000..f98c95fe
--- /dev/null
+++ b/openvino_notebooks/auto-device/README.md
@@ -0,0 +1,91 @@
+# What this notebook does
+
+This notebook shows how to do inference with Automatic Device Selection (AUTO) in OpenVINO and gives a high-level overview of how AUTO chooses the most suitable execution device based on model and hardware availability.
+
+It demonstrates how to compile a model with AUTO, compare first inference latency (model compilation time + first inference time) between GPU and AUTO, and show the difference between THROUGHPUT and LATENCY performance hints.
+
+This notebook provides a practical, engineering-focused introduction to deploying one application across heterogeneous systems (CPU/GPU/NPU) with minimal device-specific branching. It includes explicit device discovery, deterministic fallback behavior, idempotent model preparation/loading, and repeatable runtime measurements for first-inference and steady-state execution.
+
+# Hardware & device support
+
+This notebook supports the following devices:
+
+- CPU — **supported (fallback)**
+- GPU — **supported if available**
+- NPU — **supported if available**
+- AUTO — **primary execution mode**
+
+# Setup
+
+Make sure that **uv** is installed.
+
+## Windows
+irm https://astral.sh/uv/install.ps1 | iex
+
+## macOS / Linux
+curl -LsSf https://astral.sh/uv/install.sh | sh
+
+Verify installation:
+uv --version
+
+From the auto-device notebook folder:
+
+uv sync
+
+uv run jupyter lab auto-device.ipynb
+
+The sample image is included with the notebook. An internet connection is required only on the first run to download the pretrained ResNet-50 weights and create model/resnet50.xml.
+
+# Expected output
+
+When the notebook runs successfully, you should see:
+
+- **Device discovery and selection output**, e.g.
+ `Available devices: ['CPU', 'GPU.0']`
+ `Selected device: GPU`
+
+- **Idempotent model preparation logs**, e.g.
+ `IR model saved to model/resnet50.xml` on first run, then
+ `Read IR model from model/resnet50.xml` on subsequent runs.
+
+- **Compilation and first-inference timing output**, e.g.
+ `Time to load model on GPU device and get first inference: 0.15 seconds.`
+
+- **Performance-hint measurements**, with throughput/latency metrics printed over multiple intervals.
+
+For systems without accelerator devices, CPU fallback output is expected and valid.
+
+# Tested-on
+
+| OS | Python | OpenVINO | Device(s) | Status |
+|----|--------|----------|-----------|--------|
+| Windows 11 | 3.12 | 2026.2 | CPU, GPU | Pass |
+
+# Troubleshooting
+
+### AUTO always selects CPU
+**Cause:** GPU/NPU plugin not available, unsupported hardware, or driver/runtime mismatch.
+**Fix:** Verify `ov.Core().available_devices`, then update Intel GPU/NPU drivers and confirm execution inside the correct uv environment.
+
+### First inference is much slower than later runs
+**Cause:** Model compilation and backend warm-up overhead during first execution.
+**Fix:** Compare first-run timing to repeated runs; use multiple iterations for steady-state performance analysis.
+
+### Notebook import errors (openvino/torchvision/notebook utils)
+**Cause:** Environment not synced or wrong interpreter selected.
+**Fix:** Run `uv sync` in this directory and launch with `uv run jupyter lab auto-device.ipynb`.
+
+### AUTO behavior differs across machines
+**Cause:** Different available hardware backends or plugin versions.
+**Fix:** Log `core.available_devices` at startup and keep OpenVINO/runtime stack consistent across systems.
+
+# References
+
+- Upstream OpenVINO auto-device notebook:
+ https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/auto-device/auto-device.ipynb
+
+- OpenVINO AUTO device documentation:
+ https://docs.openvino.ai/2024/openvino-workflow/running-inference/inference-devices-and-modes/auto-device-selection.html
+
+- OpenVINO performance hints:
+ https://docs.openvino.ai/2024/openvino-workflow/running-inference/performance-hints.html
diff --git a/openvino_notebooks/auto-device/auto-device.ipynb b/openvino_notebooks/auto-device/auto-device.ipynb
new file mode 100644
index 00000000..61c2735f
--- /dev/null
+++ b/openvino_notebooks/auto-device/auto-device.ipynb
@@ -0,0 +1,1051 @@
+{
+ "cells": [
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "id": "190e8e4c-461f-4521-ae7f-3491fa827ab7",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "# Automatic Device Selection with OpenVINO™\n",
+ "\n",
+ "The [Auto device](https://docs.openvino.ai/2024/openvino-workflow/running-inference/inference-devices-and-modes/auto-device-selection.html) (or AUTO in short) selects the most suitable device for inference by considering the model precision, power efficiency and processing capability of the available [compute devices](https://docs.openvino.ai/2024/about-openvino/compatibility-and-support/supported-devices.html). The model precision (such as `FP32`, `FP16`, `INT8`, etc.) is the first consideration to filter out the devices that cannot run the network efficiently.\n",
+ "\n",
+ "Next, if dedicated accelerators are available, these devices are preferred (for example, integrated and discrete [GPU](https://docs.openvino.ai/2024/openvino-workflow/running-inference/inference-devices-and-modes/gpu-device.html)). [CPU](https://docs.openvino.ai/2024/openvino-workflow/running-inference/inference-devices-and-modes/cpu-device.html) is used as the default \"fallback device\". Keep in mind that AUTO makes this selection only once, during the loading of a model. \n",
+ "\n",
+ "When using accelerator devices such as GPUs, loading models to these devices may take a long time. To address this challenge for applications that require fast first inference response, AUTO starts inference immediately on the CPU and then transparently shifts inference to the GPU, once it is ready. This dramatically reduces the time to execute first inference.\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "#### Table of contents:\n",
+ "\n",
+ "- [Import modules and create Core](#Import-modules-and-create-Core)\n",
+ "- [Convert the model to OpenVINO IR format](#Convert-the-model-to-OpenVINO-IR-format)\n",
+ "- [(1) Simplify selection logic](#(1)-Simplify-selection-logic)\n",
+ " - [Default behavior of Core::compile_model API without device_name](#Default-behavior-of-Core::compile_model-API-without-device_name)\n",
+ " - [Explicitly pass AUTO as device_name to Core::compile_model API](#Explicitly-pass-AUTO-as-device_name-to-Core::compile_model-API)\n",
+ "- [(2) Improve the first inference latency](#(2)-Improve-the-first-inference-latency)\n",
+ " - [Load an Image](#Load-an-Image)\n",
+ " - [Load the model to GPU device and perform inference](#Load-the-model-to-GPU-device-and-perform-inference)\n",
+ " - [Load the model using AUTO device and do inference](#Load-the-model-using-AUTO-device-and-do-inference)\n",
+ "- [(3) Achieve different performance for different targets](#(3)-Achieve-different-performance-for-different-targets)\n",
+ " - [Class and callback definition](#Class-and-callback-definition)\n",
+ " - [Inference with THROUGHPUT hint](#Inference-with-THROUGHPUT-hint)\n",
+ " - [Inference with LATENCY hint](#Inference-with-LATENCY-hint)\n",
+ " - [Difference in FPS and latency](#Difference-in-FPS-and-latency)\n",
+ "\n",
+ "\n",
+ "### Installation Instructions\n",
+ "\n",
+ "This example includes its helper module and sample image locally. An internet connection is required only on the first run to download the pretrained ResNet-50 weights.\n",
+ "\n",
+ "We recommend running the notebook in a virtual environment. You only need a Jupyter server to start.\n",
+ "For details, please refer to [Installation Guide](https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/README.md#-installation-guide).\n",
+ "\n",
+ "
\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f2999a00",
+ "metadata": {},
+ "source": [
+ "# Install UV"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a6ef706d",
+ "metadata": {},
+ "source": [
+ "Install uv, then run these commands in a terminal.\n",
+ "\n",
+ "Windows\n",
+ "\n",
+ "irm https://astral.sh/uv/install.ps1 | iex\n",
+ "\n",
+ "Mac/Linux\n",
+ "\n",
+ "curl -LsSf https://astral.sh/uv/install.sh | sh\n",
+ "\n",
+ "Verify the installation:\n",
+ "\n",
+ "uv --version\n",
+ "\n",
+ "From the auto-device folder, install dependencies:\n",
+ "\n",
+ "uv sync\n",
+ "\n",
+ "uv run jupyter lab auto-device.ipynb"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "id": "fcfc461c",
+ "metadata": {},
+ "source": [
+ "## Import modules and create Core\n",
+ "[back to top ⬆️](#Table-of-contents:)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "6c7f9f06",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Available devices: ['CPU', 'GPU', 'NPU']\n",
+ "Selected device: GPU\n"
+ ]
+ }
+ ],
+ "source": [
+ "import time\n",
+ "import sys\n",
+ "\n",
+ "import openvino as ov\n",
+ "from IPython.display import Markdown, display\n",
+ "\n",
+ "core = ov.Core()\n",
+ "available = core.available_devices\n",
+ "print(f\"Available devices: {available}\")\n",
+ "\n",
+ "device = \"GPU\" if \"GPU\" in available else \"CPU\"\n",
+ "print(f\"Selected device: {device}\")\n",
+ "\n",
+ "if device == \"CPU\":\n",
+ " display(\n",
+ " Markdown(\n",
+ " '