|
Download README.md from ParshvPatel/Multimodal_Search_Engine: direct link, hf CLI and curl.
- Browser
- Download file 5.38 kB
-
https://huggingface.co/spaces/ParshvPatel/Multimodal_Search_Engine/resolve/main/README.md
- Command line
-
hf download hf://spaces/ParshvPatel/Multimodal_Search_Engine/README.md
-
curl -L -o README.md https://huggingface.co/spaces/ParshvPatel/Multimodal_Search_Engine/resolve/main/README.md
5.38 kB
| title: Interlace Multimodal Fashion Search | |
| emoji: 👗 | |
| colorFrom: purple | |
| colorTo: pink | |
| sdk: docker | |
| app_port: 7860 | |
| pinned: false | |
| # Interlace — Multimodal Fashion Search Engine | |
| A semantic fashion search engine built on FashionCLIP, FAISS, and BM25, with a Next.js frontend. Supports text search, image upload search, and multimodal queries against an ASOS product catalog. | |
| --- | |
| ## Prerequisites | |
| | Tool | Version | Install | | |
| |------|---------|---------| | |
| | Python | 3.11 | [python.org](https://python.org) | | |
| | Node.js | 18+ | [nodejs.org](https://nodejs.org) | | |
| | npm | 9+ | bundled with Node.js | | |
| --- | |
| ## Project Structure | |
| ``` | |
| Asos_Engine_Project/ | |
| backend/ FastAPI backend (ML engine + REST API) | |
| app/ | |
| engine/ FashionCLIP encoder, FAISS index, BM25, reranker | |
| routers/ API route handlers | |
| services/ Search orchestration | |
| models/ Pydantic schemas | |
| requirements.txt | |
| Dockerfile | |
| frontend/ Next.js 15 App Router frontend | |
| src/ | |
| app/ Pages (/, /search, /products/[sku]) | |
| components/ UI components | |
| lib/ API client, types, mock data | |
| asos_clean.csv Product catalog (not in repo — required for backend) | |
| asos_engine/ FAISS indexes + embeddings (auto-generated on first run) | |
| ``` | |
| --- | |
| ## Running Locally | |
| There are two modes: | |
| - **Mock mode** — frontend only, uses hardcoded sample products. No backend needed. Good for UI demos. | |
| - **Full stack** — frontend + backend, returns real ASOS search results with images. | |
| --- | |
| ### Option A: Frontend only (mock mode) | |
| Use this if you just want to demo the UI without running the ML backend. | |
| **Terminal 1:** | |
| ```bash | |
| cd frontend | |
| npm install | |
| npm run dev | |
| ``` | |
| Open [http://localhost:3000](http://localhost:3000) | |
| The app detects that no backend URL is configured and falls back to mock data automatically. | |
| --- | |
| ### Option B: Full stack (backend + frontend) | |
| Use this for a real demo with live search results. | |
| #### Step 1: Set up the backend | |
| > **Important:** All backend commands must be run from the **project root** (`Asos_Engine_Project/`), not from inside `backend/`. The module imports use the `backend.` prefix and require the project root on the Python path. | |
| **Terminal 1 — install and start the backend:** | |
| ```bash | |
| # From Asos_Engine_Project/ | |
| python -m pip install -r backend/requirements.txt | |
| python -m uvicorn backend.app.main:app --reload --port 8000 | |
| ``` | |
| > **Windows note:** Use `python -m uvicorn` (not bare `uvicorn`). PowerShell does not automatically add Python's `Scripts/` folder to PATH, so the bare command is not found. | |
| On first run, the engine will build FAISS indexes from `asos_clean.csv`. This takes a few minutes and produces files in `asos_engine/`. Subsequent runs skip this and load directly. | |
| Expected output when ready: | |
| ``` | |
| Engine ready with 46,000+ products | |
| INFO: Uvicorn running on http://0.0.0.0:8000 | |
| ``` | |
| Verify it is running: | |
| ```bash | |
| curl http://localhost:8000/api/v1/health | |
| # Expected: {"status":"ok","engine_ready":true,"product_count":...} | |
| ``` | |
| Interactive API docs: [http://localhost:8000/docs](http://localhost:8000/docs) | |
| #### Step 2: Set up the frontend | |
| **Terminal 2 — configure and start the frontend:** | |
| ```bash | |
| cd frontend | |
| # Create local env file pointing to the running backend | |
| # Use printf, not echo -- PowerShell's echo writes UTF-16 which Next.js cannot read | |
| printf 'NEXT_PUBLIC_API_URL=http://localhost:8000\n' > .env.local | |
| npm install | |
| npm run dev | |
| ``` | |
| Open [http://localhost:3000](http://localhost:3000) | |
| --- | |
| ## Data File | |
| `asos_clean.csv` is not stored in this repository (too large for Git). It must be present in the project root for the backend to start. The config auto-detects it: | |
| ``` | |
| Asos_Engine_Project/ | |
| asos_clean.csv <-- place it here | |
| ``` | |
| If you have the `.parquet` version instead (`asos_clean.parquet`), that also works and is preferred (faster to load). | |
| --- | |
| ## Environment Variables | |
| ### Backend | |
| Set via shell environment or a `.env` file in `backend/`: | |
| | Variable | Default | Description | | |
| |----------|---------|-------------| | |
| | `ASOS_DATA_PATH` | auto-detected | Path to `asos_clean.csv` / `.parquet` | | |
| | `ASOS_PERSISTENT_DIR` | `./asos_engine` | Where FAISS indexes are saved | | |
| | `ASOS_LOG_LEVEL` | `INFO` | Logging verbosity | | |
| | `HF_TOKEN` | (none) | HuggingFace token — needed to download FashionCLIP on first run if rate-limited | | |
| ### Frontend | |
| Set in `frontend/.env.local` (this file is gitignored): | |
| | Variable | Example | Description | | |
| |----------|---------|-------------| | |
| | `NEXT_PUBLIC_API_URL` | `http://localhost:8000` | Backend base URL. If unset, app uses mock data. | | |
| --- | |
| ## API Endpoints | |
| All routes are prefixed with `/api/v1`. | |
| | Method | Endpoint | Description | | |
| |--------|----------|-------------| | |
| | GET | `/health` | Engine status and product count | | |
| | POST | `/search` | Text, image (base64), or multimodal search | | |
| | POST | `/search/image` | Image file upload search | | |
| | GET | `/search/similar/{sku}` | Visually similar products | | |
| | GET | `/products/{sku}` | Product detail by SKU | | |
| | GET | `/products/{sku}/outfit` | Outfit recommendations for a product | | |
| --- | |
| ## Tech Stack | |
| **Backend:** Python 3.11 · FastAPI · FashionCLIP · FAISS · BM25 · PyTorch · Pydantic v2 · Pandas · Uvicorn | |
| **Frontend:** Next.js 15 (App Router) · TypeScript · Tailwind CSS v4 · Framer Motion · GSAP | |