Spaces:
Sleeping
Sleeping
| title: NovaDXB | |
| emoji: π | |
| colorFrom: purple | |
| colorTo: indigo | |
| sdk: docker | |
| pinned: false | |
| license: mit | |
| short_description: AI-powered Agentic Concierge for Dubai Tourists and Visitors | |
| <div align="center"> | |
| # β¦ NOVADXB | |
| ### Explore Dubai. Intelligently. | |
| **An AI agentic concierge that plans your entire Dubai trip β itinerary, budget, dining, and area recommendations β through natural conversation.** | |
| [](https://huggingface.co/spaces/nipunkavindaAI/NovaDXB) | |
| [](https://www.python.org/) | |
| [](https://www.langchain.com/) | |
| [](LICENSE) | |
| [**π Try the Live App**](https://huggingface.co/spaces/nipunkavindaAI/NovaDXB) Β· [**π Report a Bug**](https://github.com/NipunKavinda95/NovaDXB/issues) Β· [**π‘ Request a Feature**](https://github.com/NipunKavinda95/NovaDXB/issues) | |
| </div> | |
| --- | |
| ## π 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 | |
| <div align="center"> | |
| | 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 | | |
| </div> | |
| ### 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 | |
| - Python 3.11+ | |
| - An [OpenAI API key](https://platform.openai.com/) | |
| - A [Pinecone API key](https://www.pinecone.io/) with an index created (1536 dimensions, cosine metric) | |
| ### Installation | |
| ```bash | |
| # 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: | |
| ```env | |
| 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 | |
| ```bash | |
| # 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 | |
| ```bash | |
| 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 | |
| ```bash | |
| docker build -t novadxb . | |
| docker run -p 7860:7860 --env-file .env novadxb | |
| ``` | |
| --- | |
| ## πΊοΈ Roadmap | |
| - [x] Core RAG pipeline with Pinecone + LlamaIndex | |
| - [x] Agentic reasoning with 7 specialized tools | |
| - [x] Security hardening (rate limiting, sanitization, CORS) | |
| - [x] 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 | |
| [](https://www.linkedin.com/in/nipun-kavinda/) | |
| [](https://github.com/NipunKavinda95) | |
| [](https://huggingface.co/nipunkavindaAI) | |
| --- | |
| <div align="center"> | |
| _If you found this project interesting, consider giving it a β_ | |
| </div> | |