NovaDXB / README.md
nipunkavindaAI's picture
README Update and env.example add
d780bd4
|
Raw
History Blame Contribute Delete
10.1 kB
metadata
title: NovaDXB
emoji: πŸ“ˆ
colorFrom: purple
colorTo: indigo
sdk: docker
pinned: false
license: mit
short_description: AI-powered Agentic Concierge for Dubai Tourists and Visitors

✦ NOVADXB

Explore Dubai. Intelligently.

An AI agentic concierge that plans your entire Dubai trip β€” itinerary, budget, dining, and area recommendations β€” through natural conversation.

Live Demo Python LangChain License

πŸš€ Try the Live App Β· πŸ“‹ Report a Bug Β· πŸ’‘ Request a Feature


πŸ“– Overview

Dubai welcomes 18+ million tourists every year, yet trip planning still means scattered blog posts, outdated listicles, and guesswork about real costs.

NovaDXB is an agentic AI concierge built specifically for Dubai tourism. Rather than a simple Q&A chatbot, it's a reasoning agent equipped with specialized tools that plans complete, personalized Dubai experiences β€” thinking like a local concierge, not a search engine.

Tell it your budget, your travel style, and your dates β€” NovaDXB builds a complete itinerary with real area names, real restaurant recommendations, and real AED pricing, pulled from a curated Dubai-specific knowledge base.


✨ Key Features

Feature Description
πŸ—ΊοΈ Smart Itinerary Builder Generates complete day-by-day Dubai plans with real places, timing, and costs
🏨 Area Recommender Matches the best Dubai neighborhood to your budget and travel style
🍽️ Dining Concierge Restaurant recommendations from street food to fine dining, with real AED pricing
πŸ’° Budget Estimator Transparent daily/total cost breakdowns across Budget, Mid, and Luxury tiers
🌀️ Weather Advisor Seasonal guidance and packing tips based on Dubai's climate patterns
πŸ’± Currency Converter Quick AED conversions for major tourist currencies
πŸ“ Local Knowledge Base Curated insider tips and hidden gems most tourists never discover
πŸ€– Agentic Reasoning Multi-step planning β€” the agent decides which tools to call, not a fixed script

πŸ› οΈ Tech Stack

Layer Technology
LLM OpenAI GPT-4o-mini
Agent Framework LangChain + LangGraph (ReAct agent pattern)
RAG Engine LlamaIndex
Vector Database Pinecone
Backend Flask + Waitress (WSGI)
Frontend HTML / CSS / JavaScript
Containerization Docker
Deployment HuggingFace Spaces

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Frontend   β”‚ ───▢ β”‚  Flask API    β”‚ ───▢ β”‚  LangGraph Agent  β”‚
β”‚ (HTML/CSS/JS)β”‚      β”‚ (rate-limited,β”‚      β”‚   (7 MCP tools)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚  sanitized)   β”‚      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
                                                         β–Ό
                                               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                               β”‚   RAG Engine      β”‚
                                               β”‚  (LlamaIndex)     β”‚
                                               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                          β”‚
                                                          β–Ό
                                               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                               β”‚  Pinecone Vector   β”‚
                                               β”‚     Database       β”‚
                                               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

The agent receives a user query, reasons about which tool(s) it needs (itinerary planning, budget estimation, area recommendation, etc.), retrieves grounded context from the Dubai knowledge base via RAG, and returns a specific, actionable response β€” never generic advice.


πŸ“‚ Project Structure

NovaDXB/
β”œβ”€β”€ data/                      # Knowledge base (RAG source documents)
β”‚   β”œβ”€β”€ areas_guide.csv        # 20+ Dubai neighborhoods
β”‚   β”œβ”€β”€ attractions.csv        # 30+ attractions with costs & tips
β”‚   β”œβ”€β”€ dining_guide.csv       # 25+ restaurants across all budgets
β”‚   β”œβ”€β”€ practical_info.txt     # Visa, transport, culture, safety
β”‚   β”œβ”€β”€ budget_logic.txt       # Budget/Mid/Luxury cost breakdowns
β”‚   β”œβ”€β”€ seasonal_guide.txt     # Month-by-month climate & events
β”‚   └── hidden_gems.txt        # Local insider tips
β”œβ”€β”€ static/                    # Frontend assets
β”‚   β”œβ”€β”€ index.html             # Chat interface
β”‚   └── landing.html           # Landing page
β”œβ”€β”€ app.py                     # Flask application (routes, security, rate limiting)
β”œβ”€β”€ agent.py                   # LangGraph ReAct agent + 7 MCP tools
β”œβ”€β”€ rag_engine.py               # LlamaIndex + Pinecone RAG pipeline
β”œβ”€β”€ requirements.txt            # Python dependencies
β”œβ”€β”€ Dockerfile                  # Container definition
└── .env.example                 # Environment variable template

πŸš€ Getting Started

Prerequisites

Installation

# Clone the repository
git clone https://github.com/NipunKavinda95/NovaDXB.git
cd NovaDXB

# Create a virtual environment
python -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

Configuration

Create a .env file in the project root:

OPENAI_API_KEY=your_openai_api_key
PINECONE_API_KEY=your_pinecone_api_key
PINECONE_INDEX_NAME=novadxb
SECRET_KEY=generate_with_python_secrets_token_hex_32
INGEST=false

Generate a secure SECRET_KEY with: python -c "import secrets; print(secrets.token_hex(32))"

First-Time Setup β€” Ingest the Knowledge Base

# Set INGEST=true in .env, then run once:
python rag_engine.py

# Set INGEST=false afterward to avoid re-ingesting on every restart

Run Locally

python app.py

Visit http://localhost:7860 to see the landing page, or http://localhost:7860/app for the chat interface.


πŸ”’ Security & Reliability

NovaDXB was built with production-grade practices, not just hackathon-grade ones:

  • βœ… Input sanitization β€” strips control characters, enforces length limits
  • βœ… Prompt-injection detection β€” flags and safely redirects override attempts
  • βœ… Rate limiting β€” per-IP sliding window, prevents abuse and runaway API costs
  • βœ… Response caching β€” identical queries served instantly, reduces LLM calls
  • βœ… Restricted CORS β€” scoped to known origins, not wide open
  • βœ… No leaked exceptions β€” full error details logged server-side only
  • βœ… Graceful startup handling β€” missing API keys fail safely, not silently

🐳 Docker Deployment

docker build -t novadxb .
docker run -p 7860:7860 --env-file .env novadxb

πŸ—ΊοΈ Roadmap

  • Core RAG pipeline with Pinecone + LlamaIndex
  • Agentic reasoning with 7 specialized tools
  • Security hardening (rate limiting, sanitization, CORS)
  • Live deployment on HuggingFace Spaces
  • Premium split-panel UI with live itinerary visualization
  • Interactive map integration
  • Multi-language support

🀝 Acknowledgments

Built as part of the Decoding Data Science β€” AI Application Building Challenge, supported by JetBrains and Google for Developers.


πŸ“¬ Connect

Nipun Kavinda β€” Industrial AI & MLOps Engineer, Dubai

LinkedIn GitHub HuggingFace


If you found this project interesting, consider giving it a ⭐