| .. | ||
| src/travel_agents | ||
| config.yaml | ||
| docker-compose.yaml | ||
| Dockerfile | ||
| pyproject.toml | ||
| README.md | ||
| test.rest | ||
| travel_agent_request.rest | ||
| uv.lock | ||
Travel Booking Agent Demo (LangChain-first)
A lightweight LangChain-powered multi-agent travel booking system that runs two small agents behind Plano’s router: a weather agent and a flight agent. Each agent is implemented with LangChain tool-calling out of the box and kept minimal so you can read, tweak, and extend quickly.
Overview
This demo consists of two LangChain agents that work together seamlessly:
- Weather Agent - Real-time weather conditions and multi-day forecasts for any city worldwide
- Flight Agent - Live flight information between airports with real-time tracking
Both agents are plain LangChain tool-callers. Plano routes traffic based on intent and forwards to the right LangChain agent. Everything runs in Docker for quick start.
Features
- Lightweight code: Minimal prompts + tools you can read in one pass
- Intelligent routing: Plano auto-routes to weather vs flight
- Real-time data: Weather (Open-Meteo) + flights (FlightAware)
- Multi-day forecasts: Up to 16 days for weather
Prerequisites
- Docker and Docker Compose
- Plano CLI installed
- OpenAI API key
Quick Start
1. Set Environment Variables
Create a .env file or export environment variables:
export AEROAPI_KEY="your-flightaware-api-key" # Optional, demo key included
2. Start All Agents with Docker
chmod +x start_agents.sh
./start_agents.sh
Or directly:
docker compose up --build
This starts:
- Weather Agent on port 10510
- Flight Agent on port 10520
- Open WebUI on port 8080
3. Start Plano Orchestrator
In a new terminal:
cd /path/to/travel_agents
planoai up config.yaml
# Or if installed with uv: uvx planoai up config.yaml
The gateway will start on port 8001 and route requests to the appropriate agents.
4. Test the System
Option 1: Use Open WebUI at http://localhost:8080
Option 2: Send requests directly to Plano Orchestrator:
curl http://localhost:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "What is the weather like in Paris?"}
]
}'
Example Conversations
Weather Query
User: What's the weather in Istanbul?
Assistant: [Weather Agent provides current conditions and forecast]
Flight Search
User: What flights go from London to Seattle?
Assistant: [Flight Agent shows available flights with schedules and status]
Multi-Agent Conversation
User: What's the weather in Istanbul?
Assistant: [Weather information]
User: Do they fly out from Seattle?
Assistant: [Flight information from Istanbul to Seattle]
The system understands context and pronouns, automatically routing to the right agent.
Multi-Intent Queries
User: What's the weather in Seattle, and do any flights go direct to New York?
Assistant: [Both weather_agent and flight_agent respond simultaneously]
- Weather Agent: [Weather information for Seattle]
- Flight Agent: [Flight information from Seattle to New York]
The orchestrator can select multiple agents simultaneously for queries containing multiple intents.
Agent Details (LangChain)
Weather Agent
- Port: 10510
- API: Open-Meteo (free, no API key)
- LangChain: Tool to fetch weather; LLM summarizes with provided data
- Capabilities: Current weather, multi-day forecasts, temperature, conditions, sunrise/sunset
Flight Agent
- Port: 10520
- API: FlightAware AeroAPI
- LangChain: Tool resolves cities → IATA and fetches flights
- Capabilities: Real-time flight status, schedules, delays, gates, terminals, live tracking
Architecture
User Request
↓
Plano (8001)
[Orchestrator]
|
┌────┴────┐
↓ ↓
Weather Flight
Agent Agent
(10510) (10520)
[Docker] [Docker]
Each agent:
- Extracts intent using GPT-4o-mini (with OpenTelemetry tracing)
- Fetches real-time data from APIs
- Generates response using GPT-4o
- Streams response back to user
Both agents run as Docker containers and communicate with Plano via host.docker.internal.
Project Structure
travel_agents/
├── config.yaml # Plano configuration
├── docker-compose.yaml # Docker services orchestration
├── Dockerfile # Multi-agent container image
├── start_agents.sh # Quick start script
├── pyproject.toml # Python dependencies
└── src/
└── travel_agents/
├── __init__.py # CLI entry point
├── weather_agent.py # Weather forecast agent (multi-day support)
└── flight_agent.py # Flight information agent
Configuration Files
config.yaml
Defines the two agents, their descriptions, and routing configuration. The agent router uses these descriptions to intelligently route requests.
docker-compose.yaml
Orchestrates the deployment of:
- Weather Agent (builds from Dockerfile)
- Flight Agent (builds from Dockerfile)
- Open WebUI (for testing)
- Jaeger (for distributed tracing)
Troubleshooting
Docker containers won't start
- Verify Docker and Docker Compose are installed
- Check that ports 10510, 10520, 8080 are available
- Review container logs:
docker compose logs weather-agentordocker compose logs flight-agent
Plano won't start
- Verify Plano is installed:
plano --version - Ensure you're in the travel_agents directory
- Check config.yaml is valid
No response from agents
- Verify all containers are running:
docker compose ps - Check that Plano is running on port 8001
- Review agent logs:
docker compose logs -f - Verify
host.docker.internalresolves correctly (should point to host machine)
API Endpoints
All agents expose OpenAI-compatible chat completion endpoints:
POST /v1/chat/completions- Chat completion endpointGET /health- Health check endpoint