# Quickbot - Multi Agent Travel Concierge (ADK + Agent Engine) Quickbot Multi Agent Travel Concierge is a sophisticated application designed to deliver highly personalized travel experiences. Leveraging an [Agent Development Kit (ADK)](https://google.github.io/adk-docs/) and powerful [Agent Engine](https://cloud.google.com/vertex-ai/generative-ai/docs/agent-engine/overview) capabilities, this system orchestrates multiple specialized intelligent agents to provide comprehensive support throughout the user’s journey – from initial planning and booking to real-time itinerary alerts and in-trip assistance. It features a user-friendly frontend and a robust backend API to manage agent interactions and deliver a seamless travel planning and support experience. This Template is taken from the official [Agent Garden samples](https://github.com/google/adk-samples/tree/main), the [Travel Concierge MultiAgent](https://github.com/google/adk-samples/tree/main/agents/travel-concierge) is implemented adding a backend with ADK and a nice Angular Frontend to interact with it in an easy and straightforward way. ## Overview This project provides an advanced framework for a travel concierge service powered by a multi-agent system. By utilizing an Agent Development Kit (ADK), developers can easily create, deploy, and manage specialized agents (e.g., for flights, accommodations, local activities, transportation, real-time alerts). The core Agent Engine orchestrates these agents, enabling them to collaborate and intelligently respond to user needs, offering personalized recommendations and proactive support. The architecture is designed with a decoupled frontend and backend, ensuring scalability and maintainability for a rich user experience. ## Demo Here's a look at our Travel Concierge MultiAgent in action! ## Prerequisites Before you begin, ensure you have the following installed: * **Docker and Docker Compose v2:** Essential for the containerized deployment. * Verify your Docker Compose version with `docker compose version`. If you have an older `docker-compose` (with a hyphen), you might need to upgrade to use `docker compose` in the commands. * **Google Cloud SDK (`gcloud` CLI):** May be required if any agents or the Agent Engine interact with Google Cloud services (e.g., for data storage, specific APIs, or managed services). * **Python 3.x:** For backend development (if not using Docker). * **Node.js and npm (or yarn):** For frontend development (if not using Docker). ## Getting Started You have two main options to get the application running: ### Option 1: Using Docker Compose (Recommended for Quick Start) This is the **simplest way to get the entire application (frontend and backend) up and running!** You just need to run `docker compose up` after initial setup. See the next steps: 1. **Ensure Docker and Docker Compose v2 are installed and running.** 2. **Authenticate with Google Cloud (if applicable):** If your agents or the Agent Engine need to interact with Google Cloud services, you may need to provide Google Cloud credentials. For local development with ADC: ```bash gcloud auth application-default login gcloud config set project # If using a specific GCP project gcloud auth application-default set-quota-project # If using a specific GCP project # Verify your configuration gcloud auth list gcloud config list project ``` The `docker-compose.yml` file can be configured to mount these local credentials into the backend container. > **Windows Users:** The path to ADC might differ. Adjust volume mounts in `docker-compose.yml` if needed. > **Note:** Ensure any required APIs are enabled in your Google Cloud project if used. 3. **Build Docker Images:** Build the Docker images for the frontend and backend services: ```bash docker compose build ``` The backend will be configured using environment variables (see "Environment Variables" section), including any necessary API keys for travel services, ADK configurations, or Agent Engine settings. 4. **Run the application:** After building the images, start the services: ```bash docker compose up ``` The frontend should typically be available at `http://localhost:4200` (or as configured) and the backend API at `http://localhost:8080`. ### Option 2: Manual Setup (for Development and Customization) Follow these steps if you prefer to run the frontend and backend services manually on your local machine. **A. Backend Setup** 1. **Navigate to the `backend/` directory.** ```bash cd backend ``` 2. **Create a virtual environment and install dependencies:** ```bash # Check if you are already in an environment pip -V # If not, create and activate (for Linux/macOS) python3 -m venv .venv source .venv/bin/activate # Install requirements pip3 install -r requirements.txt ``` > **VS Code Tip:** If VS Code doesn't recognize your virtual environment, press `Ctrl + Shift + P` (or `Cmd + Shift + P` on Mac), type "Python: Select Interpreter", choose "Enter interpreter path...", and then find and select `.venv/bin/python` inside your `backend` directory. 3. **Setup Google Cloud (`gcloud`) credentials (if applicable):** If your backend, agents, or Agent Engine interact with GCP, ensure you're authenticated. ```bash gcloud auth login # Login with your user account gcloud config set project # If using a specific GCP project # For services using Application Default Credentials (ADC) locally gcloud auth application-default login gcloud auth application-default set-quota-project # If using a specific GCP project # Verify configuration gcloud auth list gcloud config list project ``` 4. **Configure Environment Variables:** Backend configuration is managed via environment variables. Create a `.local.env` file in the `backend/` directory (copy from `.local.env.example` if one exists). This file should be in `.gitignore`. * **For Mac/Windows (or zsh console on Linux):** Source the variables directly (from the `backend/` directory): ```bash . ./.local.env ``` * **For Linux (bash):** Open `backend/.venv/bin/activate` and append the `export` commands from your `backend/.local.env` file after the `PATH` export section. For example: ```sh # ... existing activate script content ... _OLD_VIRTUAL_PATH="$PATH" PATH="$VIRTUAL_ENV/bin:$PATH" export PATH # Quickbot env variables (copied from .local.env) export ENVIRONMENT="development" export FRONTEND_URL="http://localhost:4200" # ADK, Agent Engine, and Travel API variables # export ADK_CONFIG_PATH="/path/to/adk_config.json" # export AGENT_ENGINE_ENDPOINT="http://localhost:xxxx/api/agent-engine" # Or other config # export FLIGHT_API_KEY="your_flight_api_key" # export HOTEL_API_KEY="your_hotel_api_key" # export WEATHER_API_KEY="your_weather_api_key" # ... other necessary agent or backend variables ... ``` Verify the variables are set by running `env` in your activated terminal. 5. **Run the setup script (if applicable):** This script might perform initial configurations for the ADK, Agent Engine, or agent registration. ```bash # from the backend/ directory python3 setup.py ``` 6. **Run the backend application:** ```bash # from the backend/ directory uvicorn main:app --reload --port 8080 ``` **B. Frontend Setup** (These instructions assume a typical TypeScript/Angular frontend. Adjust as necessary based on your `frontend/README.md`.) 1. **Navigate to the `frontend/` directory.** ```bash cd frontend ``` 2. **Install dependencies:** ```bash npm install ``` 3. **Environment Variables (if applicable):** The frontend might require its own environment configuration (e.g., via a `.env` file or Angular's `environment.ts` files for API endpoints). Check the `frontend/` directory or its `README.md` for specific instructions. 4. **Run the frontend application:** ```bash npm start # Or, for many Angular projects: # ng serve ``` The application will typically be available at `http://localhost:4200`. ## Project Structure (highlighting important parts) ```text multi-agent-travel-concierge-with-adk/ ├── backend/ # Python backend (FastAPI/Uvicorn) for agent orchestration/API │ ├── .venv/ # Python virtual environment (gitignored) │ ├── .local.env # Local environment variables (gitignored) │ ├── main.py # Main application file (e.g., FastAPI app) │ ├── requirements.txt # Backend dependencies │ ├── setup.py # Backend setup script (e.g., ADK init, agent registration) │ └── README.md # Backend-specific instructions ├── frontend/ # TypeScript frontend (Angular) for UI │ ├── node_modules/ # Node.js dependencies (gitignored) │ ├── src/ # Frontend source code │ ├── package.json # Frontend dependencies and scripts │ ├── tsconfig.json # TypeScript configuration │ └── README.md # Frontend-specific instructions ├── docker-compose.yml # Docker Compose configuration for all services └── README.md # This file: Root project README ``` ## Environment Variables Configuration for both frontend and backend is primarily managed through environment variables. * **Backend:** * When running manually, backend environment variables are typically defined in `backend/.local.env`. * When running with Docker, these variables are usually passed into the backend container via the `docker-compose.yml` file (often referencing a `.env` file at the root or `backend/` directory). * **Please consult your `docker-compose.yml` for the definitive list of required backend environment variables.**: * `IS_FIRST_DEPLOYMENT`: Whether to deploy the resources or not when running docker compose. * `_PROJECT_ID`: Your Google Cloud Project ID (if any GCP services are used by agents or the engine). * `_REGION`: Your Google Cloud region. * `ENVIRONMENT`: Application environment (e.g., `development`, `production`). * `FRONTEND_URL`: URL of the frontend application (e.g., `http://localhost:4200`). * *(Add/remove/modify based on your actual `docker-compose.yml` and backend needs)* * Consult `backend/README.md` or `backend/.local.env.example` for a complete and accurate list and details on agent-specific configurations. * **Frontend:** * Frontend environment variables (e.g., API endpoint URLs) are usually managed within the frontend's build system (e.g., Angular's `environment.ts` files or a `.env` file in the `frontend/` directory). * Consult `frontend/README.md` for specific details. ## Code Styling & Commit Guidelines To maintain code quality and consistency across the project: * **TypeScript (Frontend):** We follow the Angular Coding Style Guide by leveraging Google's TypeScript Style Guide using `gts`. This includes a formatter, linter, and automatic code fixer. * **Python (Backend):** We adhere to the Google Python Style Guide, using tools like `pylint` and `black` for linting and formatting. * **Commit Messages:** We suggest following Angular's Commit Message Guidelines to create clear and descriptive commit messages. ### Frontend (TypeScript with `gts`) (Assumes setup within the `frontend/` directory) 1. **Initialize `gts` (if not already done in the project):** Navigate to `frontend/` and run: ```bash npx gts init ``` This will set up `gts` and create necessary configuration files (like `tsconfig.json`). Ensure your `tsconfig.json` (or a related `gts` config file like `.gtsrc`) includes an extension for `gts` defaults, typically: ```json { "extends": "./node_modules/gts/tsconfig-google.json" // ... other configurations } ``` 2. **Check for linting issues:** (This assumes a `lint` script is defined in `frontend/package.json`, e.g., `"lint": "gts lint"`) ```bash # from frontend/ directory npm run lint ``` 3. **Fix linting issues automatically (where possible):** (This assumes a `fix` script is defined in `frontend/package.json`, e.g., `"fix": "gts fix"`) ```bash # from frontend/ directory npm run fix ``` ### Backend (Python with `pylint` and `black`) (Assumes setup within the `backend/` directory and its virtual environment activated) 1. **Ensure Dependencies are Installed:** Add `pylint` and `black` to your `backend/requirements.txt` file if not already present: ``` pylint black ``` Then install them within your virtual environment: ```bash # from backend/ directory, with .venv activated pip install pylint black # or pip install -r requirements.txt ``` 2. **Configure `pylint`:** It's recommended to have a `.pylintrc` file in your `backend/` directory to configure `pylint` rules. You can generate one if it doesn't exist: ```bash # from backend/ directory pylint --generate-rcfile > .pylintrc ``` Customize this file according to your project's needs and the Google Python Style Guide. 3. **Check for linting issues with `pylint`:** Navigate to the `backend/` directory and run: ```bash # from backend/ directory pylint . # Or specify modules/packages: pylint agents/ adk_components/ agent_engine/ travel_services/ ``` 4. **Format code with `black`:** To automatically format all Python files in the `backend/` directory and its subdirectories: ```bash # from backend/ directory python -m black . --line-length=80 ```