Stores e-commerce data (go to sql_models.py for detailed schema) in a sqlite database using SQLModel (main sql component is sql_db.py). Whenever a product is inserted into database using sql_db.py, its corresponding product text vector embedding along with product id (for product searching) is stored automatically in Qdrant vector database. FastAPI server run.py utilizes sql_db.py for fetching and inserting data into database and llm component llm.py utilizes sql_db.py for query generation and csv dataset generation for fine tuning of Google FLAN-T5
(go to fine-tuning.ipynb).
- You must have
Git
installed on your system. - You must have
Python 3
installed on your system. - You must have
Docker Desktop
(for hosing qdrant server) installed on your system. Download page: here - You must have
cuda
installed on your system for llm fine tuning. Find out which is the latest version of CUDA that pytorch supports at: pytorch.org and install that version of cuda. Please refer to cudas installation guide for step by step guide for installation.
Ensure git is installed on your system. Then, open terminal and enter:
git clone https://github.com/abhash-rai/E-Commerce-LLM-Based-Recommendation-System.git
Open project directory:
cd E-Commerce-LLM-Based-Recommendation-System
Keep note of the full path
to the project directory as it will be required in step 2.
Install docker desktop and check docker installation:
docker --version
If you get docker version and build text then, enter (make sure Docker Desktop is open and running in your system):
docker pull qdrant/qdrant
Run qdrant server on docker with below command but replace <PathToLocalRepo>
portion with the full path
of the project directory noted in step 1
. Example <PathToLocalRepo>
would be something like 'D:/temp/E-Commerce-LLM-Based-Recommendation-System'.
docker run -d --name qdrant -p 6333:6333 -v <PathToLocalRepo>/db/qdrant_storage:/qdrant/storage qdrant/qdrant
Install virtualenv
library using pip:
pip install virtualenv
I found python3.12 works well along with the required dependencies so create virtual environment named .venv
with the same python version:
virtualenv -p python3.12 .venv
Activate the virtual environment:
.venv\Scripts\activate
Install dependencies:
pip install -r requirements.txt
Final dependency to install is pytorch. Before that make sure you know your system OS and installed cudas version. You can check installed cudas version by entering:
nvcc --version
Find out which is the versions of CUDA that pytorch supports at: pytorch.org and see if one of those version is the one you installed on your system. If there is no match then, you need to reinstall cuda to a version that pytorch supports.
Go to same pytorch.org site and scroll down to 'Install PyTorch' section and select relevant options to get pytorch installation command for your system. For my windows OS with CUDA 12.4 command was (yours might be different according to your system):
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
Finally, install:
pip install transformers[torch]
You can start experimenting with synthetic data which is not necessary but recommended for trying out. To populate synthetic data run below command, which will create sqlite database and vectore collection for products automatically (will take a few moments):
python populate_synthetic_db.py
The sqlite database will be at E-Commerce-LLM-Based-Recommendation-System/db/sqlite_storage/main.db
and qdrant will store vector embeddings as collections at E-Commerce-LLM-Based-Recommendation-System/db/qdrant_storage
.
Open fine-tuning.ipynb in VS Code and select the previously generated virtual environment .venv
as the kernel. Then, run each cell of the notebook which will ultimately generate csv dataset for fine tuning, tune Google FLAN-T5
LLM model, and save the fine tuned model locally for generating recommendations.
LLM name along with similar informations and paths are set in constants.py. You can choose to keep LLM_NAME to any one of: "google/flan-t5-small", "google/flan-t5-base", "google/flan-t5-large", "google/flan-t5-xl", or "google/flan-t5-xxl". For model information go to: https://huggingface.co/docs/transformers/en/model_doc/flan-t5
run.py has already builtin functionality to run fastapi server with uvicorn. So, run command:
python run.py
Wait a while until server is fully loaded, then to try out the APIs go to: http://127.0.0.1:8000/docs. There are 4 APIs for searching products, recommending product to a customer, storing recommendation feedback, and monitoring recommendation performance. Explore the APIs along with the database: E-Commerce-LLM-Based-Recommendation-System/db/sqlite_storage/main.db
for id of entities and how APIs manage database.
You can modify run.py and sql_db.py to add endpoints to perform CRUD operations on every models detailed in sql_models.py to make a full fledged server.