Liquor Expert is a containerized, full-stack AI application that acts as a professional liquor tasting assistant. It uses a locally hosted LLM (via Ollama), retrieval-augmented generation (RAG) with a vector database of liquor reviews, and a simple web-based chat interface.
The system retrieves relevant expert reviews and combines them with the model’s own knowledge to generate informed, expert-style answers about alcoholic beverages.
This project uses the Wine, Beer, and Liquor Reviews dataset from the Datafiniti product database, which contains several thousand online reviews of beer, liquor, and wine products. The dataset provides text reviews and metadata for a variety of alcoholic beverages and serves as the basis for the vector database used for semantic retrieval in this app.
The project consists of three main services, orchestrated with Docker Compose:
- Runs the Ollama server
- Hosts:
gemma3:1b– language model for text generationnomic-embed-text– embedding model for vector search
- Exposes a REST API (
/generate) - Uses:
- LangChain
- ChromaDB for vector storage
- Ollama embeddings for semantic search
- Retrieves relevant liquor reviews and injects them into the prompt
- Simple chat-style UI
- Communicates with the backend via
/api/generate - Renders Markdown responses from the model
liquor-expert/
├── README.md
├── docker-compose.yml
├── Dockerfile
├── backend/
│ ├── Dockerfile
│ ├── main.py
│ ├── vector_db.py
│ └── requirements.txt
└── frontend/
├── Dockerfile
├── nginx.conf
├── index.html
├── script.js
└── style.css- Docker
- Docker Compose (v2 recommended)
git clone https://github.com/b14ucky/liquor-expert.git
cd liquor-expertdocker-compose up --buildOn first startup, Ollama will download the required models (gemma3:1b and nomic-embed-text). This may take a few minutes.
Once everything is running, open your browser and go to:
http://localhostYou’ll see a web-based chat interface.
- Enter a question related to alcoholic beverages
- The backend retrieves relevant liquor reviews from the vector database
- The LLM generates an expert-style response using both:
- Retrieved reviews
- Its own general knowledge
This project uses the Wine, Beer, and Liquor Reviews dataset from Datafiniti as the source of truth for review data.
Although the original dataset contains many columns, only a subset is used to build the vector database for semantic retrieval.
The following columns are extracted directly from the Datafiniti CSV files
inside vector_db.py:
- brand
- name
- reviews.text
- reviews.rating
- reviews.date
These fields are combined to form natural-language documents of the form:
{brand}, {name}: {review text}The remaining dataset columns are intentionally ignored.
After downloading and extracting the dataset CSV file, run:
python backend/vector_db.pyThis script:
- Loads the Datafiniti review data
- Extracts the required columns
- Converts each review into a LangChain
Document - Generates embeddings using
nomic-embed-text - Stores the vectors persistently in ChromaDB
The vector database is stored locally at:
backend/vector_db/Once created, the FastAPI backend uses this database to retrieve the top-5 most relevant reviews for each user query.
Request body:
{
"question": "Your liquor-related question"
}Response:
{
"response": "Expert-generated answer"
}- Ollama
- LangChain
- ChromaDB
- FastAPI
- Nginx
- Docker & Docker Compose
- Vanilla JavaScript, HTML, and CSS
- All services communicate over an internal Docker bridge network
- The frontend proxies API requests through Nginx (/api/* → FastAPI)
- CORS is fully enabled for development simplicity
This project is licensed under the MIT License. See the LICENSE file for details.