An intelligent, multi-service travel planning platform that orchestrates real-time tourism, accommodation, transport, and routing data to generate grounded, optimized, day-by-day itineraries.
The platform follows a modular microservice architecture. Specialized domain services fetch verified provider data, while the Planner Service coordinates data aggregation and invokes a constrained AI planning agent.
graph TD
Client[Client / test_plan.py] -->|POST /plan| Planner[planner-service :8000]
Planner -->|GET /tourism| Tourism[tourism-service :8001]
Planner -->|GET /hotels| Hotel[hotel-service :8002]
Planner -->|GET /route| Route[route-service :8003]
Planner -->|GET /api/v1/buses| Bus[bus-service :8004]
Planner -->|GET /api/v1/trains| Train[train-service :8005]
Planner -->|Structured Prompt| Gemini[Google Gemini 2.5 Flash]
Hotel -->|SQLite Cache| HotelVol[(hotel-cache-data)]
| Service | Port | Responsibility | Data Source / Engine |
|---|---|---|---|
planner-service |
8000 |
Orchestrates all services, builds TripContext, and executes Gemini Planning Agent |
FastAPI, Google GenAI SDK |
tourism-service |
8001 |
Discovers verified attractions and points of interest | Google Places API (New) |
hotel-service |
8002 |
Fetches bookable accommodations with SQLite persistent caching | SerpApi (Google Hotels) |
route-service |
8003 |
Computes transit & driving distances and travel times | Google Routes API |
bus-service |
8004 |
Resolves routes and searches real-time bus schedules & fares | RedBus Provider |
train-service |
8005 |
Searches Indian Railways trains, schedules, classes & live seat status | Ixigo / ConfirmTkt API |
- Docker Engine (v24.0+) & Docker Compose (v2.20+)
- (Optional for local script testing) Python 3.11+
-
Copy
.env.exampleto create.envat the project root:cp .env.example .env
-
Configure your API keys in
.env:# API Keys GOOGLE_MAPS_API_KEY=your_google_maps_key SERPAPI_API_KEY=your_serpapi_key GEMINI_API_KEY=your_gemini_api_key # Service Configuration FRONTEND_ORIGIN=http://localhost:3000 HOTEL_CACHE_TTL_HOURS=24 HTTP_TIMEOUT=20.0 LLM_TIMEOUT=60.0
# Build and start all 6 containers in the background
docker compose up -d --build# View aggregated live logs docker compose logs -f # View logs for a specific service docker compose logs -f planner-service
docker compose ps
# Restart all containers docker compose restart # Stop all containers docker compose down # Stop and delete persistent cache volumes docker compose down -v
| Service | Base URL | Health Check | Interactive Docs |
|---|---|---|---|
| Planner Service | http://localhost:8000 |
GET /health |
/docs |
| Tourism Service | http://localhost:8001 |
GET /health |
/docs |
| Hotel Service | http://localhost:8002 |
GET /health |
/docs |
| Route Service | http://localhost:8003 |
GET /health |
/docs |
| Bus Service | http://localhost:8004 |
GET /health |
/docs |
| Train Service | http://localhost:8005 |
GET /health |
/docs |
Once the Docker stack is running, test the complete end-to-end trip planning workflow:
# Run the test client against http://localhost:8000/plan
python test_plan.pycurl -X POST http://localhost:8000/plan \ -H "Content-Type: application/json" \ -d '{ "origin": "Chennai", "destination": "Coimbatore", "start_date": "2026-08-29", "end_date": "2026-08-31", "travelers": 2, "preferences": { "budget": { "level": "medium" }, "transport": { "mode": "train", "berth_preference": "3A" }, "hotel": { "category": "mid_range" }, "activities": { "pace": "moderate", "interests": ["history", "nature"] } } }'
Dream-Destiny/
βββ docker-compose.yml # Multi-container orchestration
βββ .env.example # Template for environment variables
βββ test_plan.py # Standalone test runner for planning endpoints
βββ planner-service/ # Core orchestrator & AI planning agent (Port 8000)
β βββ app/
β β βββ agents/ # Planning agent implementation
β β βββ api/ # FastAPI routes (/plan, /plan/context)
β β βββ business/ # Preference mapping & pre-filtering
β β βββ clients/ # Downstream HTTP service clients
β β βββ orchestration/ # Async data gathering pipeline
β β βββ schemas/ # Pydantic schemas (Request, Context, Itinerary)
β β βββ services/llm/ # Gemini GenAI client & structured prompts
β βββ Dockerfile
βββ tourism-service/ # Google Places attractions service (Port 8001)
β βββ Dockerfile
βββ hotel-service/ # Google Hotels & SQLite cache service (Port 8002)
β βββ Dockerfile
βββ route-service/ # Google Routes distance & time service (Port 8003)
β βββ Dockerfile
βββ transport-service/
β βββ bus/ # RedBus bus search & city resolver (Port 8004)
β β βββ Dockerfile
β βββ train/ # Ixigo Indian rail search & live seats (Port 8005)
β βββ Dockerfile
βββ shared/ # Reference shared Pydantic data schemas