fix: wait for FastAPI health check before starting Next.jsRunning
yash-b18
9a30ec1
fix: add ES2017 target to tsconfig for Set iteration support
yash-b18
e5106cb
fix: use npm install instead of npm ci to handle lockfile drift
yash-b18
74ae558
fix: include frontend source in Docker build context
yash-b18
69d0b77
fix: add HuggingFace Space configuration to README
yash-b18
b7f3c90
Merge pull request #6 from yash-b18/feature/single-spaceβ
Yash Bhargava
Unverified signature
e7c30b4
feat: combine frontend+backend into single HF Space
feat: combine frontend+backend into single HF Space
yash-b18
b4d23ab
Merge pull request #5 from yash-b18/feature/frontend-dockerfileβ
Kattine
Unverified signature
88b0d9b
feat: add frontend Dockerfile for HuggingFace Spaces deployment
feat: add frontend Dockerfile for HuggingFace Spaces deployment
yash-b18
9843f3c
Merge pull request #4 from yash-b18/feature/hf-deploymentβ
Kattine
Unverified signature
f3ddb1d
feat: add HuggingFace Spaces deployment (Dockerfile, artifact scripts..., CORS fix)
feat: add HuggingFace Spaces deployment (Dockerfile, artifact scripts, CORS fix)
yash-b18
5978ef2
Merge pull request #3 from yash-b18/feature/ui-improvementsβ
Kattine
Unverified signature
d07db3a
Feature/UI improvements
feat: remove metrics table from UI
yash-b18
ba054ff
Revert "feat: remove model comparison and metrics table from UI"β
yash-b18
d621b50
This reverts commit 6ebd032618a6386b74d6d314a725daab31ce1d36.
feat: remove model comparison and metrics table from UI
yash-b18
6ebd032
Merge pull request #2 from yash-b18/kemingβ
Yash Bhargava
Unverified signature
7b1476b
feat: add side-by-side model comparison and fix
feat: add side-by-side model comparison UI and fix missing frontend modules
Kattine
821c624
Merge pull request #1 from yash-b18/feature/repo-scaffoldβ
Kattine
Unverified signature
c4cb21e
feat: DeepReads β full recommendation system with Two-Tower neural model and live demo
docs: rewrite README for DeepReads (Books dataset, correct ports, accurate explanations)
yash-b18
aaed08e
fix: replace model stats with real dataset statistics
yash-b18
31d13f7
fix: replace SHAP stat with BPR Training Loss (accurate for deep model)
yash-b18
e765b4f
fix: replace gaming icons with book-appropriate persona icons
yash-b18
104a690
fix: guard against 0 rendering as text node in stats row
yash-b18
148448c
feat: wire explain_from_items for picker flow; fix nan author guardβ
yash-b18
de2efef
- explain_from_items() derives explanation signals (author, keyword,
rating, price) from the liked_item_idxs passed by the cold-start
picker flow instead of a user_idx
- Guards item_author not in ("nan", "Unknown") prevent "you selected
a book by nan" from appearing in explanations
- recommender.py now calls explain_from_items() for liked-item
cold-start path instead of the generic fallback string
fix: liked_items now uses deep model via mean-pooled embedding; remove raw score display
yash-b18
d439004
feat: rewrite language explainer β author, rating, price, keyword signals
Two-Tower model:
- Switch from BCE to BPR loss with per-user negative pairing
- Remove weight decay from embedding parameters (sparse gradient fix)
- Collapse linear architecture (hidden_dims=[]) β MLP with ReLU collapsed
all inputs to same hypersphere direction on sparse book data
- Add BPRDataset with per-user negative sampling to dataset.py
- All 3 models now produce non-zero Recall@10 (was 0.000 for Two-Tower)
Evaluation results (5k sampled users, leave-last-out):
- Naive: Recall@10=0.0046, NDCG@10=0.0022, MRR=0.0020
- LightGBM: Recall@10=0.0026, NDCG@10=0.0012, MRR=0.0010
- Two-Tower: Recall@10=0.0024, NDCG@10=0.0014, MRR=0.0012
API / inference:
- Filter untitled items (42% of catalog) from all recommendation paths
- Use numpy fancy indexing for exclusion (was O(n) loop)
- Expand LightGBM candidate pool to 500 (was 100)
Frontend redesign:
- Single model UX β always use Two-Tower, remove ModelSelector/CompareView
- New MetricsTable component with real evaluation numbers
- pageβ¦
fix: resolve SIGSEGV and OpenMP deadlock for LightGBM + PyTorch coexistenceβ
yash-b18
09fcfe1
- downloader.py: rewrite to use HfFileSystem streaming JSONL (datasets 4.x compat)
- user_features.py: fix .mode().iat[0] IndexError on empty Series
- deep.py: add weights_only=True to torch.load to prevent interactive hang in PyTorch 2.11
- serve_utils.py: lazy-import torch after LightGBM pickle load to prevent SIGSEGV;
call torch.set_num_threads(1) immediately after import to prevent OpenMP deadlock
when LightGBM and PyTorch share a process on Apple Silicon macOS
- app.py: fix personas endpoint to use rating column (not label); add detailed
model-loading logs to aid future debugging
- recommender.py: fix feat[item_idx] KeyError in classical recommendations;
fix nan title/category/brand display
feat: Next.js 14 frontend β RecoIQ app with persona selector, item picker, model toggle, comparison view, and SHAP explanations
yash-b18
f6d269d
feat: FastAPI backend β recommend, compare, items, personas endpoints with full explainability
yash-b18
6d9c101
feat: explainability β SHAP for LightGBM and metadata-grounded language explanations for Two-Tower
yash-b18
fbc171a
feat: evaluation metrics, model evaluator, ablation experiment, error analysis
yash-b18
dd33d52
feat: all three models β naive popularity, LightGBM reranker, Two-Tower neural
yash-b18
fa98c11
feat: data pipeline β download, preprocess, split, and feature engineering
Sets up the complete project skeleton for the Explainable Multi-Stage
Recommendation System. Includes directory layout, central config module,
pipeline orchestrator, Makefile, report outline, and all package __init__
files. No model or data code yet β that comes in subsequent branches.