Skip to content
Open
Show file tree
Hide file tree
Changes from 72 commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
15fb4c0
Update AI Evangelist team section - Add Ezequiel Lanza as new team me…
ezelanza Jul 24, 2025
78f0668
Restructure team section to 2-column layout with single column for la…
ezelanza Jul 24, 2025
609c608
updates
ezelanza Jul 25, 2025
6eb703b
updates
ezelanza Jul 25, 2025
afdf76d
updates
ezelanza Jul 25, 2025
4bd15f9
updates
ezelanza Jul 25, 2025
2851abf
updates
ezelanza Jul 25, 2025
e0054c1
updates
ezelanza Jul 25, 2025
3cdfead
updates
ezelanza Jul 28, 2025
0b56457
updates
ezelanza Jul 28, 2025
b40c027
updates
ezelanza Jul 29, 2025
9159c8f
updates
ezelanza Jul 29, 2025
78f8425
Update video captioning demo with LLaVA integration and improved func…
ezelanza Aug 7, 2025
d54e17b
Update video captioning demo and remove old backup file
ezelanza Aug 8, 2025
62eb0b2
Update narrator demo requirements.txt
ezelanza Aug 11, 2025
dec29f4
Update narrator demo requirements.txt
ezelanza Aug 11, 2025
42c6237
Merge remote-tracking branch 'origin/master' into pr-344
ezelanza Aug 11, 2025
eec9a6a
Resolve merge: unify narrator demo requirements; add Optimum/OpenVINO…
ezelanza Aug 11, 2025
3950885
PR #344: keep README.md and .gitignore identical to master (drop PR c…
ezelanza Aug 11, 2025
fd93bf6
the_narrator_demo: update LLaVA notebook, requirements, and video cap…
ezelanza Aug 11, 2025
1489ee5
Merge pr-344 changes into video-captioning-demo-llava
ezelanza Aug 11, 2025
c4a80de
feat(narrator): update requirements and video_captioning.py
ezelanza Aug 12, 2025
79faa2b
Merge remote-tracking branch 'origin/master' into video-captioning-de…
ezelanza Aug 12, 2025
e29a4a3
the_narrator_demo: add video file input mode (--video_input/--prompt/…
ezelanza Aug 14, 2025
f3802e5
the_narrator_demo: add batch captioning for --video_input via --batch…
ezelanza Aug 14, 2025
8498aeb
the_narrator_demo: add timing info for batch capture and inference in…
ezelanza Aug 14, 2025
3e015a0
the_narrator_demo: fix timing display to show actual video duration v…
ezelanza Aug 14, 2025
4aa8fb4
Merge branch 'master' into video-captioning-demo-llava
adrianboguszewski Aug 20, 2025
16db2e6
Merge branch 'master' into video-captioning-demo-llava
ezelanza Sep 5, 2025
ce955d8
Update main.py in the_narrator_demo
ezelanza Sep 8, 2025
3feac3d
Merge branch 'master' into video-captioning-demo-llava
ezelanza Sep 8, 2025
c687a66
Update the narrator demo main.py with latest changes
ezelanza Sep 9, 2025
2c0487d
Additional updates to the narrator demo main.py
ezelanza Sep 9, 2025
aa4d6c8
Enhance model file validation in LLaVA video captioning
ezelanza Sep 9, 2025
723bfe1
Update video captioning functionality in narrator demo
ezelanza Sep 9, 2025
648d0ad
Update video captioning demo with latest changes
ezelanza Sep 9, 2025
2a019eb
Update video captioning demo main.py
ezelanza Sep 9, 2025
98ddc72
Updates
ezelanza Sep 15, 2025
cb010f7
Merge main.py with conflicts resolved
ezelanza Sep 28, 2025
055ee9b
updates to main demo
ezelanza Sep 28, 2025
d887805
agentic mulimodal v0000.1
ezelanza Sep 30, 2025
bb7662a
Update ai_ref_kits/agentic_multimodal_travelplaner
ezelanza Sep 30, 2025
e9f7d66
Update ai_ref_kits/agentic_multimodal_travelplaner
ezelanza Sep 30, 2025
5620bb7
Update agentic multimodal travel planner implementation
ezelanza Oct 2, 2025
57b3af1
Add mcp_tools directory to agentic multimodal travel planner
ezelanza Oct 2, 2025
3dfc56a
Update README and agent runner implementation
ezelanza Oct 2, 2025
c19d5f6
Update agent runner implementation
ezelanza Oct 2, 2025
003f1bd
Update agentic multimodal travel planner with agent runner improvemen…
ezelanza Oct 9, 2025
0e71bf3
Update README with latest changes to agentic multimodal travel planner
ezelanza Oct 9, 2025
73bf653
Add MCP tools for video processing and update README
ezelanza Oct 9, 2025
025e93d
Update agent runner, UI starter, and documentation
ezelanza Oct 9, 2025
bfc9aac
Update agent configuration, prompts, and runner functionality
ezelanza Oct 10, 2025
9e27f66
Updates
ezelanza Oct 27, 2025
3a8a3d6
Updates
ezelanza Oct 27, 2025
a53d4ce
Updates
ezelanza Oct 27, 2025
d8872c5
updates
ezelanza Oct 28, 2025
66642c6
updates
ezelanza Oct 28, 2025
f70b63e
updates
ezelanza Oct 28, 2025
86ff572
prompts updated
ezelanza Oct 29, 2025
a81f5e5
Removed code changes not related to the kit
adrianboguszewski Oct 31, 2025
c42c9b9
Merge branch 'master' into _agentic_travel_planner
adrianboguszewski Oct 31, 2025
dbd1b29
Small fixes in README
adrianboguszewski Oct 31, 2025
c07566d
Update ai_ref_kits/agentic_multimodal_travelplaner/agents/agent_runne…
adrianboguszewski Nov 13, 2025
738fd23
Update ai_ref_kits/agentic_multimodal_travelplaner/agents/agent_runne…
adrianboguszewski Nov 13, 2025
e56da0f
Renamed paths
adrianboguszewski Nov 13, 2025
88d8568
Update ai_ref_kits/agentic_multimodal_travel_planer/config/agents_con…
adrianboguszewski Nov 13, 2025
a3d161c
Removed ipywidgets
adrianboguszewski Nov 13, 2025
6c6cecb
fixes
ezelanza Nov 17, 2025
d82d8b7
fixes
ezelanza Nov 17, 2025
1613f6b
fixes
ezelanza Nov 17, 2025
648a7ef
Scan fixes
ezelanza Nov 17, 2025
0272d78
Path Validation added
ezelanza Nov 17, 2025
e1d52bb
Potential fix for code scanning alert no. 10: Uncontrolled data used …
ezelanza Nov 17, 2025
2b7d897
Path Validation added
ezelanza Nov 17, 2025
e1f22e4
Merge branch '_agentic_travel_planner' of https://github.com/openvino…
ezelanza Nov 17, 2025
6b8d3db
Path Validation added
ezelanza Nov 17, 2025
2af3a61
Path Validation added
ezelanza Nov 17, 2025
f864b3b
reqs file updates
ezelanza Nov 17, 2025
7cd152b
reqs file updates
ezelanza Nov 17, 2025
13e7f07
Update README.md
zhuo-yoyowz Nov 18, 2025
d194828
bridge tower references removed
ezelanza Nov 19, 2025
a2da464
Merge branch 'master' into _agentic_travel_planner
ezelanza Nov 19, 2025
9a23ed9
bridge tower references removed
ezelanza Nov 19, 2025
45cfbc0
Logging added to ui
ezelanza Nov 19, 2025
ba99b36
Memory reset added to agents
ezelanza Nov 20, 2025
f867488
Added mcp project group to the CI
adrianboguszewski Nov 24, 2025
6dcf2f3
Updated readmes
adrianboguszewski Nov 24, 2025
3ae8801
Fixes in UI
ezelanza Nov 25, 2025
0d39fc6
Thinking enabled to travel supervisor agent
ezelanza Nov 25, 2025
cbe1223
Conditions added to agent behaviour
ezelanza Nov 26, 2025
2e7d808
Conditions added to agent behaviour
ezelanza Nov 26, 2025
75782b1
Conditions added to agent behaviour
ezelanza Nov 26, 2025
bcc4f25
UI helper functions moved to utils
ezelanza Nov 28, 2025
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
366 changes: 366 additions & 0 deletions ai_ref_kits/agentic_multimodal_travel_planer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,366 @@
<div align="center">

# Agentic Tourism - Multi-Agent Travel Assistant with OpenVINO™ Toolkit
A sophisticated multi-agent system that provides intelligent travel assistance using specialized AI agents for hotel search, flight booking, and image captioning travel recommendations. Built with OpenVINO, MCP (Model Context Protocol), A2A (Agent to Agent Protocol), and the BeeAI framework.

<h4>
<a href="https://www.intel.com/content/www/us/en/developer/topic-technology/edge-5g/open-potential.html">🏠&nbsp;About&nbsp;the&nbsp;Kits&nbsp</a>
</h4>
</div>

[![Apache License](https://img.shields.io/badge/license-Apache_2.0-green.svg)](https://github.com/openvinotoolkit/openvino_build_deploy/blob/master/LICENSE.txt)

---

This reference kit demonstrates a multi-agent travel assistant. It coordinates specialized agents for hotel and flight search via MCP-connected tools and uses an image captioning VLM for visual understanding. The system is built with OpenVINO™ and the OpenVINO Model Server for optimized local inference, and orchestrated using BeeAI, MCP, and the A2A protocol.

This kit uses the following technology stack:

- [OpenVINO Toolkit](https://docs.openvino.ai/)
- [OpenVINO™ GenAI](https://docs.openvino.ai/2025/openvino-workflow-generative/inference-with-genai.html)
- [Optimum Intel](https://docs.openvino.ai/2025/openvino-workflow-generative/inference-with-optimum-intel.html)
- [OpenVINO Model Server](https://docs.openvino.ai/2025/model-server/ovms_what_is_openvino_model_server.html)
- [BEE AI Framework](https://github.com/i-am-bee/beeai-framework)
- [Model Context Protocol](https://modelcontextprotocol.io/docs/getting-started/intro)
- [A2A](https://github.com/a2aproject/A2A)

- [OpenVINO/Qwen3-8B-int4-ov](https://huggingface.co/OpenVINO/Qwen3-8B-int4-ov) (LLM)
- [OpenVINO/Phi-3.5-vision-instruct-int4-ov](https://huggingface.co/OpenVINO/Phi-3.5-vision-instruct-int4-ov) (VLM)

Check out our [AI Reference Kits repository](https://github.com/openvinotoolkit/openvino_build_deploy) for other kits.

```
┌─────────────────────────────────────────────────────────┐
│ Travel Router Agent │
│ (Main Coordinator & Orchestrator) │
│ (Port 9996) │
└────────────────────────┬────────────────────────────────┘
┌───────────-─────┼─────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│Hotel Finder │ │Flight Finder│ │Image Proc. │
│ Agent │ │ Agent │ │ Agent │
│ (Port 9999)│ │ (Port 9998) │ │ (Port 9997) │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│Hotel Search │ │Flight Search│ │Image Caption│
│ MCP Server │ │ MCP Server │ │ MCP Server │
│ (Port 3001) │ │ (Port 3002) │ │ (Port 3003) │
└─────────────┘ └─────────────┘ └─────────────┘
┌────────────────────────────────────────────────────────────┐
│ Hardware OpenVINO AI Stack │
│ • Qwen3-8B-int4-ov (LLM) │
│ • Phi-3.5-vision-instruct-int4-ov (VLM) │
└────────────────────────────────────────────────────────────┘

```

---

## Steps
1. Start OVMS LLMs
2. Start MCP servers (`start_mcp_servers.py`)
3. Start Agents (`start_agents.py`)
4. Start UI (`start_ui.py`)

## Setting Up Your Environment

To set up your environment, you first clone the repository, then create a virtual environment, activate the environment, and install the packages.

### Clone the Repository

To clone the repository, run this command:

```shell
git clone https://github.com/openvinotoolkit/openvino_build_deploy.git
```

This command clones the repository into a directory named `openvino_build_deploy` in the current directory. After the directory is cloned, run the following command to go to that directory:


```shell
cd openvino_build_deploy/ai_ref_kits/agentic_multimodal_travelplaner
```

### Create virtual environment

```
python3 -m venv agentic_venv
```

### Activate the Environment

The command you run to activate the virtual environment you created depends on whether you have a Unix-based operating system (Linux or macOS) or a Windows operating system.

To activate the virtual environment for a **Unix-based** operating system, run:

```shell
source agentic_venv/bin/activate
```

To activate the virtual environment for a **Windows** operating system, run:

```shell
agentic_venv\Scripts\activate
```

This activates the virtual environment and changes your shell's prompt to indicate that you are now working in that environment.

### Install the Requirements

To install the required packages, run the following commands:

```shell
python -m pip install --upgrade pip
pip install -r requirements.txt
```

## Step 1: Getting the LLMs for agents ready with OpenVINO model Server (OVMS)

Windows and Linux
### OPTION 1: Windows

TBC

### OPTION 2: Linux

### Docker Installation
For installation instructions, refer to the [official Docker documentation for Ubuntu](https://docs.docker.com/engine/install/ubuntu/).

### Get OpenVINO Model Server image
Once you have Docker installed on your machine, pull the OpenVINO Model Server image:
```
docker pull openvino/model_server:latest
```

### Download optimized models

OpenVINO Model Server will serve your models. In this example you will use two models: an LLM and a VLM.

Create your folder:
```
sudo mkdir -p $(pwd)/models
sudo chown -R $(id -u):$(id -g) $(pwd)/models
chmod -R 755 $(pwd)/models
```

Agent LLM: **Qwen3-8B**
```
docker run --user $(id -u):$(id -g) --rm -v $(pwd)/models:/models openvino/model_server:latest --pull --model_repository_path /models --source_model OpenVINO/Qwen3-8B-int4-ov --task text_generation --tool_parser hermes3
```

Vision Language Model (VLM): **Phi-3.5-vision-instruct-int4-ov**
```
docker run --user $(id -u):$(id -g) --rm -v $(pwd)/models:/models:rw openvino/model_server:latest \
--pull --model_repository_path /models --source_model OpenVINO/Phi-3.5-vision-instruct-int4-ov --task text_generation --pipeline_type VLM
```

### Start OpenVINO Model Server
Once you have your models, your next step is to start the services.

LLM
```
docker run -d --user $(id -u):$(id -g) --rm \
-p 8001:8000 \
-v $(pwd)/models:/models openvino/model_server:latest \
--rest_port 8000 \
--model_repository_path /models \
--source_model OpenVINO/Qwen3-8B-int4-ov \
--tool_parser hermes3 \
--cache_size 2 \
--task text_generation \
--enable_prefix_caching true
```


VLM
```
docker run -d --rm \
-p 8002:8000 \
-v $(pwd)/models:/models:ro \
openvino/model_server:latest \
--rest_port 8000 \
--model_name OpenVINO/Phi-3.5-vision-instruct-int4-ov \
--model_path /models/OpenVINO/Phi-3.5-vision-instruct-int4-ov
```

### Verify the services are running
Run:
```
docker ps
```

You should see the two models serving
```
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
424634ea10fe openvino/model_server:latest "/ovms/bin/ovms --re…" 3 days ago Up 3 days 0.0.0.0:8001->8000/tcp, [::]:8001->8000/tcp competent_ganguly9
a962a7695b1f openvino/model_server:latest "/ovms/bin/ovms --re…" 3 days ago Up 3 days 0.0.0.0:8002->8000/tcp, [::]:8002->8000/tcp agitated_galois
```

Your LLM is now running and ready to be used by the agents.

## Step 2: Start the MCP servers

This example uses three MCP servers that the agents will consume:
- Flight search (Intel AI Builder): provides available flight options
- Hotel search (Intel AI Builder): provides available hotels
- Image captioning: generates captions for images

### Get your SerpAPI key
Flight and travel agents use an external API for hotel and flight search. Obtain an API key from SerpAPI.

1. Go to https://serpapi.com/
2. Navigate to "Your Private API Key"
3. Copy the key

Once you have your key, you can launch the MCP servers.

### Launch MCP servers

Set your key
```
export SERP_API_KEY=***YOUR_KEY***
```

Run
```
python start_mcp_servers.py
```

**NOTE**: This script starts the MCP servers in the background and reads configuration from `config/mcp_config.yaml`. You can configure each MCP server there.

You should see confirmation that the MCP servers are running:
```
MCP 'image_mcp' started on port 3003
MCP 'hotel_finder' started on port 3001
MCP 'flight_finder' started on port 3002

Successfully started MCP servers: image_mcp, hotel_finder, flight_finder

Logs are in `logs/`. You can open each MCP server's log file there.
```
The script also provides a stop command:

```
python start_mcp_servers.py --stop
```

## Step 3: Start Agents

Start all the agents.

```
python start_agents.py
```

You should see:
```
Agent 'travel_router' started on port 9996
Agent 'flight_finder' started on port 9998
Agent 'hotel_finder' started on port 9999
Agent 'image_captioning' started on port 9997

Successfully started agents: travel_router, flight_finder, hotel_finder, image_captioning

Logs are in `logs/`
```

Logs are in `logs/`. You can open each agent's log file there.

The script also provides a stop command:

```
python start_agents.py --stop
```

Logs are in `logs/`. You can navigate to the folder to the log of each Agent server.

## Step 4: Start UI

```
python start_ui.py
```

Open `http://127.0.0.1:7860` in your browser.

## Customization (optional)

### Agents configuration
Below is how you can configure your own agents for the Agentic Multimodal Travel Planner. This guide covers the basics of agent configuration and helps you set up new agents or customize existing ones.

#### 1. Overview

Agents are defined via YAML configuration files located in the `config/` directory:

- `config/agents_config.yaml`: Controls properties, endpoints, ports, and enabled status of each agent.
- `config/agents_prompts.yaml`: Defines the system instructions (prompt) and templates for communication of each agent.

#### 2. How to add a new agent

1. **Open `config/agents_config.yaml`**
Find an agent section (e.g., `flight_finder:`), and use it as a template for your new agent.

```yaml
your_custom_agent:
name: "agent_name"
port: 9988
role : "agent_role"
enabled: true
```

- `your_custom_agent`: Unique name for your agent.
- `name`: Human-readable identifier for your agent.
- `port`: TCP port the agent will listen on (make sure it's unused).
- `role`: Brief role/description for your agent.
- `enabled`: Set to `true` to enable the agent.

2. **Open `config/agents_prompts.yaml`**
Create an entry for your agent with its system prompt and dialogue template.

```yaml
your_custom_agent:
system: |
You are the Custom Agent. Your job is to provide ... (describe the behavior here)
template: |
[User]: {{query}}
[Agent]:
```

- The `system` prompt is injected as the agent’s system-level context.
- The `template` can be customized to guide your agent's responses.

4. **Start Your Agent**
Make sure your agent is enabled in `agents_config.yaml`, then run:

```
python start_agents.py
```

Your agent should start alongside the others. Check the logs in the `logs/` directory for messages from your agent.

#### 3. Tips for Customization

- Use unique port numbers for each new agent.
- You may copy config stanzas for existing agents as a quick start.
- Edit the system prompt to set the "personality" and role for your agent.
- Restart the agent process after changing any YAML config.

#### 4. Disabling/Enabling Agents

Set `enabled: false` to disable an agent in `config/agents_config.yaml`—that agent won't be started by `start_agents.py`.

#### 5. Troubleshooting

- If your agent doesn't appear, check the logs in `logs/` for errors.
- Make sure the port is not being used by another process.
- Ensure your new agent class is properly importable and subclassed as required by the BeeAI Framework.

---

With this approach, you can flexibly expand the capabilities of your travel planning system by adding or customizing new agents to fit your requirements!
Loading
Loading