From c2af4556c6721fe36b623cecddc45055dd943351 Mon Sep 17 00:00:00 2001 From: sriram Date: Tue, 11 Aug 2026 19:16:01 +0530 Subject: [PATCH] updates on the backend --- .env.example | 86 + .gitignore | 18 + README.md | 82 + app/__init__.py | 0 app/api/__init__.py | 0 app/api/background.py | 31 + app/api/job_store.py | 59 + app/api/nutrition_job_store.py | 61 + app/api/nutrition_schemas.py | 130 + app/api/routers/__init__.py | 0 app/api/routers/admin_train.py | 163 + app/api/routers/analytics.py | 46 + app/api/routers/auth.py | 120 + app/api/routers/brands.py | 152 + app/api/routers/catalog.py | 54 + app/api/routers/chat.py | 33 + app/api/routers/discounts.py | 35 + app/api/routers/health.py | 47 + app/api/routers/nutrition.py | 195 + app/api/routers/nutrition_admin.py | 102 + app/api/routers/recommendations.py | 20 + app/api/routers/search.py | 29 + app/api/routers/store_admin.py | 67 + app/api/routers/stores.py | 77 + app/api/routers/system.py | 90 + app/api/routers/trending.py | 31 + app/api/routers/upload.py | 447 + app/api/routers/user_products.py | 349 + app/api/schemas.py | 152 + app/api/store_job_store.py | 56 + app/api/store_schemas.py | 95 + app/core/__init__.py | 0 app/core/catalog_engine.py | 967 + app/core/ingestion.py | 44 + .../brand_catalog_lion_dates.json | 66 + app/infrastructure/__init__.py | 0 app/infrastructure/settings.py | 149 + app/intelligence/__init__.py | 41 + app/intelligence/analytics.py | 215 + .../artifacts/demand_forecast_model.joblib | Bin 0 -> 3340082 bytes .../artifacts/discount_model.joblib | Bin 0 -> 209722 bytes .../artifacts/nutrition_clustering.joblib | Bin 0 -> 18483 bytes .../artifacts/nutrition_similarity.joblib | Bin 0 -> 39097 bytes .../artifacts/popularity_model.joblib | Bin 0 -> 1319255 bytes .../purchase_propensity_model.joblib | Bin 0 -> 2070 bytes .../artifacts/store_performance_model.joblib | Bin 0 -> 1948871 bytes .../artifacts/trending_model.joblib | Bin 0 -> 209092 bytes app/intelligence/discount_model.py | 148 + app/intelligence/engagement_simulation.py | 49 + app/intelligence/features.py | 158 + app/intelligence/forecasting.py | 140 + app/intelligence/model_utils.py | 61 + app/intelligence/nutrition_clustering.py | 115 + app/intelligence/nutrition_recommendation.py | 143 + app/intelligence/nutrition_similarity.py | 113 + app/intelligence/order_simulation.py | 186 + app/intelligence/popularity_model.py | 82 + app/intelligence/purchase_propensity_model.py | 99 + app/intelligence/recommendation_engine.py | 151 + app/intelligence/store_performance_model.py | 126 + app/intelligence/store_provisioning.py | 217 + app/intelligence/synthetic_labels.py | 129 + app/intelligence/trending_model.py | 167 + app/main.py | 107 + app/services/__init__.py | 0 app/services/analytics_service.py | 72 + app/services/brand_registry.py | 293 + app/services/category_registry.py | 222 + app/services/discount_service.py | 93 + app/services/embeddings_service.py | 52 + app/services/image_search.py | 538 + app/services/ml_training_service.py | 180 + .../nutrition_alternatives_service.py | 61 + app/services/nutrition_analytics_service.py | 46 + app/services/nutrition_data_service.py | 356 + app/services/nutrition_db.py | 702 + app/services/nutrition_enrichment_service.py | 164 + app/services/nutrition_narrative_service.py | 52 + app/services/nutrition_scoring.py | 347 + app/services/ollama_service.py | 375 + app/services/playwright_image_fallback.py | 129 + app/services/price_estimator.py | 355 + app/services/query_intent.py | 202 + app/services/rag_service.py | 351 + app/services/recommendation_service.py | 110 + app/services/s3_service.py | 301 + app/services/store_db.py | 877 + app/services/store_seed_service.py | 76 + app/services/trending_service.py | 87 + app/services/vector_store.py | 800 + cli/__init__.py | 0 cli/ingest_brand.py | 51 + data/brand_catalog.db | 0 data/seed_catalogs/brand_catalog_amul.json | 55690 +++++++++++++++ data/seed_catalogs/brand_catalog_cadbury.json | 47436 +++++++++++++ .../brand_catalog_cavinkare.json | 21240 ++++++ .../brand_catalog_coca_cola.json | 48233 +++++++++++++ .../brand_catalog_colgate_palmolive.json | 21426 ++++++ data/seed_catalogs/brand_catalog_dabur.json | 24438 +++++++ data/seed_catalogs/brand_catalog_godrej.json | 21003 ++++++ data/seed_catalogs/brand_catalog_grb.json | 5061 ++ .../brand_catalog_hindustan_unilever.json | 46571 +++++++++++++ .../brand_catalog_lion_dates.json | 9045 +++ data/seed_catalogs/brand_catalog_manna.json | 5527 ++ .../brand_catalog_milky_mist.json | 33851 +++++++++ data/seed_catalogs/brand_catalog_naga.json | 59 + data/seed_catalogs/brand_catalog_nestle.json | 55624 +++++++++++++++ data/seed_catalogs/brand_catalog_p_and_g.json | 49267 ++++++++++++++ data/seed_catalogs/brand_catalog_pepsico.json | 30054 ++++++++ data/seed_catalogs/brand_catalog_tata.json | 56458 ++++++++++++++++ data/seed_catalogs/hsn_gst_master.json | 66 + docker-compose.yml | 38 + requirements.txt | 59 + scripts/backfill_barcodes.py | 93 + scripts/backfill_hsn_prices.py | 111 + scripts/backfill_s3_urls.py | 80 + scripts/check_stores.py | 8 + scripts/enrich_nutrition.py | 59 + scripts/export_seed_data.py | 144 + scripts/fast_test.py | 34 + scripts/fix_duplicate_image_ids.py | 103 + scripts/resanitize_catalog.py | 147 + scripts/seed_sample_data.py | 119 + scripts/seed_store_intelligence.py | 64 + scripts/test_rag.py | 30 + scripts/test_rag_response.py | 12 + scripts/train_ml_models.py | 50 + scripts/train_nutrition_models.py | 34 + tests/test_api.py | 99 + tests/test_nutrition_scoring.py | 104 + tests/test_query_intent.py | 178 + 131 files changed, 546007 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app/__init__.py create mode 100644 app/api/__init__.py create mode 100644 app/api/background.py create mode 100644 app/api/job_store.py create mode 100644 app/api/nutrition_job_store.py create mode 100644 app/api/nutrition_schemas.py create mode 100644 app/api/routers/__init__.py create mode 100644 app/api/routers/admin_train.py create mode 100644 app/api/routers/analytics.py create mode 100644 app/api/routers/auth.py create mode 100644 app/api/routers/brands.py create mode 100644 app/api/routers/catalog.py create mode 100644 app/api/routers/chat.py create mode 100644 app/api/routers/discounts.py create mode 100644 app/api/routers/health.py create mode 100644 app/api/routers/nutrition.py create mode 100644 app/api/routers/nutrition_admin.py create mode 100644 app/api/routers/recommendations.py create mode 100644 app/api/routers/search.py create mode 100644 app/api/routers/store_admin.py create mode 100644 app/api/routers/stores.py create mode 100644 app/api/routers/system.py create mode 100644 app/api/routers/trending.py create mode 100644 app/api/routers/upload.py create mode 100644 app/api/routers/user_products.py create mode 100644 app/api/schemas.py create mode 100644 app/api/store_job_store.py create mode 100644 app/api/store_schemas.py create mode 100644 app/core/__init__.py create mode 100644 app/core/catalog_engine.py create mode 100644 app/core/ingestion.py create mode 100644 app/data/seed_catalogs/brand_catalog_lion_dates.json create mode 100644 app/infrastructure/__init__.py create mode 100644 app/infrastructure/settings.py create mode 100644 app/intelligence/__init__.py create mode 100644 app/intelligence/analytics.py create mode 100644 app/intelligence/artifacts/demand_forecast_model.joblib create mode 100644 app/intelligence/artifacts/discount_model.joblib create mode 100644 app/intelligence/artifacts/nutrition_clustering.joblib create mode 100644 app/intelligence/artifacts/nutrition_similarity.joblib create mode 100644 app/intelligence/artifacts/popularity_model.joblib create mode 100644 app/intelligence/artifacts/purchase_propensity_model.joblib create mode 100644 app/intelligence/artifacts/store_performance_model.joblib create mode 100644 app/intelligence/artifacts/trending_model.joblib create mode 100644 app/intelligence/discount_model.py create mode 100644 app/intelligence/engagement_simulation.py create mode 100644 app/intelligence/features.py create mode 100644 app/intelligence/forecasting.py create mode 100644 app/intelligence/model_utils.py create mode 100644 app/intelligence/nutrition_clustering.py create mode 100644 app/intelligence/nutrition_recommendation.py create mode 100644 app/intelligence/nutrition_similarity.py create mode 100644 app/intelligence/order_simulation.py create mode 100644 app/intelligence/popularity_model.py create mode 100644 app/intelligence/purchase_propensity_model.py create mode 100644 app/intelligence/recommendation_engine.py create mode 100644 app/intelligence/store_performance_model.py create mode 100644 app/intelligence/store_provisioning.py create mode 100644 app/intelligence/synthetic_labels.py create mode 100644 app/intelligence/trending_model.py create mode 100644 app/main.py create mode 100644 app/services/__init__.py create mode 100644 app/services/analytics_service.py create mode 100644 app/services/brand_registry.py create mode 100644 app/services/category_registry.py create mode 100644 app/services/discount_service.py create mode 100644 app/services/embeddings_service.py create mode 100644 app/services/image_search.py create mode 100644 app/services/ml_training_service.py create mode 100644 app/services/nutrition_alternatives_service.py create mode 100644 app/services/nutrition_analytics_service.py create mode 100644 app/services/nutrition_data_service.py create mode 100644 app/services/nutrition_db.py create mode 100644 app/services/nutrition_enrichment_service.py create mode 100644 app/services/nutrition_narrative_service.py create mode 100644 app/services/nutrition_scoring.py create mode 100644 app/services/ollama_service.py create mode 100644 app/services/playwright_image_fallback.py create mode 100644 app/services/price_estimator.py create mode 100644 app/services/query_intent.py create mode 100644 app/services/rag_service.py create mode 100644 app/services/recommendation_service.py create mode 100644 app/services/s3_service.py create mode 100644 app/services/store_db.py create mode 100644 app/services/store_seed_service.py create mode 100644 app/services/trending_service.py create mode 100644 app/services/vector_store.py create mode 100644 cli/__init__.py create mode 100644 cli/ingest_brand.py create mode 100644 data/brand_catalog.db create mode 100644 data/seed_catalogs/brand_catalog_amul.json create mode 100644 data/seed_catalogs/brand_catalog_cadbury.json create mode 100644 data/seed_catalogs/brand_catalog_cavinkare.json create mode 100644 data/seed_catalogs/brand_catalog_coca_cola.json create mode 100644 data/seed_catalogs/brand_catalog_colgate_palmolive.json create mode 100644 data/seed_catalogs/brand_catalog_dabur.json create mode 100644 data/seed_catalogs/brand_catalog_godrej.json create mode 100644 data/seed_catalogs/brand_catalog_grb.json create mode 100644 data/seed_catalogs/brand_catalog_hindustan_unilever.json create mode 100644 data/seed_catalogs/brand_catalog_lion_dates.json create mode 100644 data/seed_catalogs/brand_catalog_manna.json create mode 100644 data/seed_catalogs/brand_catalog_milky_mist.json create mode 100644 data/seed_catalogs/brand_catalog_naga.json create mode 100644 data/seed_catalogs/brand_catalog_nestle.json create mode 100644 data/seed_catalogs/brand_catalog_p_and_g.json create mode 100644 data/seed_catalogs/brand_catalog_pepsico.json create mode 100644 data/seed_catalogs/brand_catalog_tata.json create mode 100644 data/seed_catalogs/hsn_gst_master.json create mode 100644 docker-compose.yml create mode 100644 requirements.txt create mode 100644 scripts/backfill_barcodes.py create mode 100644 scripts/backfill_hsn_prices.py create mode 100644 scripts/backfill_s3_urls.py create mode 100644 scripts/check_stores.py create mode 100644 scripts/enrich_nutrition.py create mode 100644 scripts/export_seed_data.py create mode 100644 scripts/fast_test.py create mode 100644 scripts/fix_duplicate_image_ids.py create mode 100644 scripts/resanitize_catalog.py create mode 100644 scripts/seed_sample_data.py create mode 100644 scripts/seed_store_intelligence.py create mode 100644 scripts/test_rag.py create mode 100644 scripts/test_rag_response.py create mode 100644 scripts/train_ml_models.py create mode 100644 scripts/train_nutrition_models.py create mode 100644 tests/test_api.py create mode 100644 tests/test_nutrition_scoring.py create mode 100644 tests/test_query_intent.py diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7aabb3d --- /dev/null +++ b/.env.example @@ -0,0 +1,86 @@ +# Copy this file to .env and fill in your own values. +# Nothing here is a real credential. + +USE_OLLAMA=true +OLLAMA_BASE_URL=http://localhost:11434 +OLLAMA_MODEL_NAME=qwen2.5:1.5b + +USE_EMBEDDINGS=true +EMBEDDINGS_MODEL=sentence-transformers/all-MiniLM-L6-v2 + +USE_PGVECTOR=true +DB_HOST=localhost +DB_PORT=5432 +DB_NAME=pgvector +DB_USER=postgres +DB_PASSWORD=changeme + +USE_S3=true +S3_ACCESS_KEY=your-do-spaces-key +S3_SECRET_KEY=your-do-spaces-secret +S3_ENDPOINT=https://your-space.region.digitaloceanspaces.com +S3_BUCKET=your-bucket +S3_REGION=region + +# Optional - leave USE_GOOGLE_CSE=false if you don't have a Google CSE key +USE_GOOGLE_CSE=false +GOOGLE_API_KEY= +GOOGLE_CSE_ID= + +USE_DDG_IMAGES=true +USE_OPEN_FACTS=true +USE_WIKIMEDIA=true +USE_PLAYWRIGHT_FALLBACK=true + +MIN_IMAGE_BYTES=3000 + +# Product SKU: try a live web search for a real marketplace product ID +# (Amazon ASIN, Flipkart PID, etc.) before falling back to an internal SKU. +# Set to false to always generate internal SKUs only (faster, offline-safe). +ENABLE_SKU_WEB_LOOKUP=true + +# Deterministic product validation (see app/services/product_validator.py). +# Final gate applied to every catalog row before it's kept; rows scoring +# below VALIDATION_REJECT_THRESHOLD are dropped (with reasons recorded), +# rows below VALIDATION_REVIEW_THRESHOLD are kept but flagged for human review. +ENABLE_PRODUCT_VALIDATION=true +VALIDATION_REJECT_THRESHOLD=0.35 +VALIDATION_REVIEW_THRESHOLD=0.70 + +# Per-pack-size product images (see docs/PER_VARIANT_IMAGES.md). When true, +# each size variant of a product (e.g. 100g/200g/500g) gets its own +# size-targeted image search/upload instead of sharing one generic image +# set. Falls back to the old shared behaviour automatically whenever no +# size-specific match is found, so this is safe to leave on. Set to +# "false" to fully restore the old shared-image behaviour. +ENABLE_PER_VARIANT_IMAGES=true +# Max image candidates fetched per size variant (kept smaller than the +# ~24 used for the general product-level search, since a per-size search +# only needs a handful of genuinely matching candidates). +PER_VARIANT_IMAGE_MAX_RESULTS=10 + +# Barcode Retrieval & Product Enrichment (see +# app/services/enrichment/barcode/ and docs/BARCODE_ENRICHMENT.md). Set to +# false to disable barcode lookup entirely (rows are stored with +# barcode=NULL, barcode_lookup_status="disabled"). +ENABLE_BARCODE_LOOKUP=true +BARCODE_LOOKUP_TIMEOUT_SECONDS=10 +# 30 days, in seconds +BARCODE_LOOKUP_CACHE_TTL_SECONDS=2592000 +BARCODE_LOOKUP_MAX_CONCURRENCY=5 +BARCODE_COUNTRY_TAG=india + +# GS1 India tier - leave both blank to skip (no free public API exists at +# time of writing; the cascade falls through to Open Food Facts). Fill in +# if/when real GS1 India ("Verified by GS1") API access is provisioned. +GS1_INDIA_API_BASE_URL= +GS1_INDIA_API_KEY= + +# UPCItemDB - works out of the box on the free trial tier (no key needed, +# rate limited ~100 req/day). Set to switch to the paid production endpoint. +UPC_DATABASE_API_KEY= + +# Lowest-trust fallback tier: DuckDuckGo search + manufacturer page text +# scan for a labelled barcode (uses the same `ddgs` dependency as SKU +# lookup). Set to false to skip this tier. +ENABLE_MANUFACTURER_SITE_LOOKUP=true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a87448d --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +# Secrets - never commit +.env + +# Python +__pycache__/ +*.pyc +*.pyo +.venv/ +venv/ +*.egg-info/ +.pytest_cache/ + +# Logs +*.log + +# OS +.DS_Store +Thumbs.db diff --git a/README.md b/README.md new file mode 100644 index 0000000..db048b2 --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# Backend - Brand Product Search Engine (RAG API) + +FastAPI service exposing the product catalog through: + +- **Browse** - plain listing endpoints (`/api/brands`, `/api/brands/{brand}/products`) +- **Search** - pgvector semantic similarity search, no LLM (`/api/search`) +- **Chat** - full RAG: retrieval + local Ollama generation (`/api/chat`) +- **Admin** - trigger brand ingestion in the background (`/api/catalog/generate`) + +Full setup, architecture, and troubleshooting steps are in the project +documentation (`docs/`). This file is just a fast local reference. + +## Quick start + +### One-click (Windows) + +Double-click **`start_backend.bat`**. It picks up `venv\Scripts\python.exe` +if present (else falls back to system `python`), starts/creates the +`catalog_rag_postgres` Docker container from `docker-compose.yml`, +launches Ollama in the background if it's installed but not running, +seeds sample data if needed, then starts uvicorn on port 8000. + +### Manual + +```bash +cd backend +python3 -m venv .venv +source .venv/bin/activate # Windows: .venv\Scripts\activate +pip install -r requirements.txt + +cp .env.example .env # then edit DB_PASSWORD etc. + +# Option A: already have a Postgres+pgvector catalog from the old project? +# Just point .env at it (DB_HOST/DB_PORT/DB_NAME/DB_USER/DB_PASSWORD) - done. +# Option B: starting fresh locally? +docker compose -f docker-compose.yml up -d +python scripts/seed_sample_data.py # loads bundled sample catalogs instantly + +uvicorn app.main:app --reload --port 8000 +``` + +Then open http://localhost:8000/docs for interactive API docs, or run the +frontend (`../frontend/README.md`) to use the React UI. + +## Pulling the local LLM (one-time) + +```bash +ollama pull qwen2.5:1.5b +ollama serve # if not already running as a service +``` + +## Project layout + +``` +backend/ +├── app/ +│ ├── main.py # FastAPI app + router wiring +│ ├── infrastructure/settings.py +│ ├── api/ +│ │ ├── schemas.py # Pydantic models +│ │ ├── job_store.py # in-memory background-job tracker +│ │ └── routers/ # health, brands, search, chat, catalog +│ ├── core/ +│ │ ├── catalog_engine.py # discovery + enrichment + image pipeline +│ │ └── ingestion.py # thin wrapper used by API + CLI +│ └── services/ +│ ├── embeddings_service.py # sentence-transformers (lazy-loaded) +│ ├── ollama_service.py # local LLM calls (catalog + RAG answers) +│ ├── vector_store.py # pgvector reads/writes/SEMANTIC SEARCH +│ ├── rag_service.py # RAG orchestration (NEW) +│ ├── image_search.py / s3_service.py / price_estimator.py / brand_registry.py +├── cli/ingest_brand.py # CLI: ingest one brand end-to-end +├── scripts/seed_sample_data.py # load bundled sample catalogs (no LLM needed) +├── data/seed_catalogs/*.json # bundled sample catalogs (Parle, Cadbury, ...) +└── requirements.txt +``` + +## Running tests + +```bash +pytest -q +``` diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/__init__.py b/app/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/background.py b/app/api/background.py new file mode 100644 index 0000000..962612b --- /dev/null +++ b/app/api/background.py @@ -0,0 +1,31 @@ +""" +Minimal in-process background job dispatcher for long-running admin jobs +(catalog ingestion, store seeding, ML model training, nutrition +enrichment). + +This deliberately does NOT use Starlette's `BackgroundTasks`. BackgroundTasks +run *synchronously after the response is sent*: an async background task is +awaited directly on the server's event loop, and a sync one is awaited in the +request's thread. Either way the request handler does not return until the job +finishes. For jobs that take minutes (LLM calls, web scraping, ML training, +Open Food Facts lookups), that turns a "kick off a job and return 202" endpoint +into a blocking call and, for async tasks, freezes the whole API event loop for +the duration. + +A daemon thread returns control to the caller immediately, and the job's +progress stays visible via the job_store polling endpoints the UI already +uses. Daemon threads are a deliberate, documented trade-off (see +`app/api/job_store.py`): state is process-local and not safe across multiple +uvicorn workers - fine for this project's intended single-process, CPU-only +deployment. +""" +from __future__ import annotations + +import threading +from typing import Any, Callable + + +def run_in_background(func: Callable[[], Any], *, name: str) -> None: + """Start `func` on a new daemon thread and return immediately.""" + thread = threading.Thread(target=func, name=name, daemon=True) + thread.start() diff --git a/app/api/job_store.py b/app/api/job_store.py new file mode 100644 index 0000000..138fd67 --- /dev/null +++ b/app/api/job_store.py @@ -0,0 +1,59 @@ +""" +Tiny in-memory job tracker for background catalog-generation tasks. + +Deliberately not a queue/Celery/Redis setup - the original project already +had celery+redis in requirements.txt but nothing wired it up, and adding a +broker is unnecessary operational weight for a single-developer, CPU-only +project. A process-local dict is enough to let the React UI show +"running -> done/failed" status for a brand ingestion job started from the +admin panel. + +NOTE: state is lost on server restart, and is per-process (not safe for +multiple uvicorn workers). For this project's intended scale (one backend +process on a personal machine) that's a fine trade-off; see the docs' +"Scaling beyond a single machine" section if this ever needs to change. +""" +from __future__ import annotations + +import threading +import time +import uuid +from dataclasses import dataclass, field +from typing import Dict, Optional + + +@dataclass +class Job: + job_id: str + brand: str + status: str = "pending" # pending -> running -> done | failed + detail: Optional[str] = None + created_at: float = field(default_factory=time.time) + updated_at: float = field(default_factory=time.time) + + +class JobStore: + def __init__(self) -> None: + self._jobs: Dict[str, Job] = {} + self._lock = threading.Lock() + + def create(self, brand: str) -> Job: + job = Job(job_id=str(uuid.uuid4()), brand=brand) + with self._lock: + self._jobs[job.job_id] = job + return job + + def update(self, job_id: str, status: str, detail: Optional[str] = None) -> None: + with self._lock: + job = self._jobs.get(job_id) + if job: + job.status = status + job.detail = detail + job.updated_at = time.time() + + def get(self, job_id: str) -> Optional[Job]: + with self._lock: + return self._jobs.get(job_id) + + +job_store = JobStore() diff --git a/app/api/nutrition_job_store.py b/app/api/nutrition_job_store.py new file mode 100644 index 0000000..28263a0 --- /dev/null +++ b/app/api/nutrition_job_store.py @@ -0,0 +1,61 @@ +"""Same pattern and trade-offs as `store_job_store.py` (process-local, +in-memory, lost on restart) - kept as its own module since nutrition +enrichment jobs track different progress fields (verified/partial/ +unavailable counts) than store seed/train jobs do.""" +from __future__ import annotations + +import threading +import time +import uuid +from dataclasses import dataclass, field +from typing import Dict, Optional + + +@dataclass +class NutritionJob: + job_id: str + kind: str # "enrich" | "train" + status: str = "pending" # pending -> running -> done | failed + detail: Optional[str] = None + result: Optional[dict] = None + processed: int = 0 + total: int = 0 + created_at: float = field(default_factory=time.time) + updated_at: float = field(default_factory=time.time) + + +class NutritionJobStore: + def __init__(self) -> None: + self._jobs: Dict[str, NutritionJob] = {} + self._lock = threading.Lock() + + def create(self, kind: str) -> NutritionJob: + job = NutritionJob(job_id=str(uuid.uuid4()), kind=kind) + with self._lock: + self._jobs[job.job_id] = job + return job + + def update(self, job_id: str, status: Optional[str] = None, detail: Optional[str] = None, + result: Optional[dict] = None, processed: Optional[int] = None, total: Optional[int] = None) -> None: + with self._lock: + job = self._jobs.get(job_id) + if not job: + return + if status is not None: + job.status = status + if detail is not None: + job.detail = detail + if result is not None: + job.result = result + if processed is not None: + job.processed = processed + if total is not None: + job.total = total + job.updated_at = time.time() + + def get(self, job_id: str) -> Optional[NutritionJob]: + with self._lock: + return self._jobs.get(job_id) + + +nutrition_job_store = NutritionJobStore() diff --git a/app/api/nutrition_schemas.py b/app/api/nutrition_schemas.py new file mode 100644 index 0000000..c1f4645 --- /dev/null +++ b/app/api/nutrition_schemas.py @@ -0,0 +1,130 @@ +"""Pydantic response models for the nutrition-intelligence API. +Mirrors the plain-dataclass-of-Optionals style used in `schemas.py` / +`store_schemas.py` - permissive `Optional` fields throughout since a +core promise of this module (Feature 15) is that missing verified data +is represented as `null`, never a fabricated default.""" +from __future__ import annotations + +from typing import Any, Dict, List, Optional + +from pydantic import BaseModel + + +class NutritionFactsOut(BaseModel): + brand: str + image_id: str + product_name: Optional[str] = None + category: Optional[str] = None + data_status: str # 'verified' | 'partial' | 'unavailable' + data_source: Optional[str] = None + source_url: Optional[str] = None + match_confidence: Optional[float] = None + serving_size_g: Optional[float] = None + serving_size_label: Optional[str] = None + + calories_kcal: Optional[float] = None + protein_g: Optional[float] = None + carbohydrates_g: Optional[float] = None + total_sugar_g: Optional[float] = None + added_sugar_g: Optional[float] = None + dietary_fiber_g: Optional[float] = None + total_fat_g: Optional[float] = None + saturated_fat_g: Optional[float] = None + trans_fat_g: Optional[float] = None + cholesterol_mg: Optional[float] = None + sodium_mg: Optional[float] = None + potassium_mg: Optional[float] = None + calcium_mg: Optional[float] = None + iron_mg: Optional[float] = None + magnesium_mg: Optional[float] = None + zinc_mg: Optional[float] = None + vitamin_a_mcg: Optional[float] = None + vitamin_c_mg: Optional[float] = None + vitamin_d_mcg: Optional[float] = None + vitamin_e_mg: Optional[float] = None + omega_3_g: Optional[float] = None + omega_6_g: Optional[float] = None + + extended_nutrients: Optional[Dict[str, Any]] = None + per_serving: Optional[Dict[str, Any]] = None + ingredients_text: Optional[str] = None + off_nutriscore: Optional[str] = None + + model_config = {"extra": "ignore"} + + +class NutritionInsightsOut(BaseModel): + brand: str + image_id: str + nutrition_score: Optional[float] = None + health_score: Optional[float] = None + score_breakdown: Optional[Dict[str, Any]] = None + scoring_version: Optional[str] = None + positive_insights: List[str] = [] + nutritional_cautions: List[str] = [] + ai_summary: Optional[str] = None + diet_tags: List[str] = [] + allergens: List[str] = [] + nutrition_cluster_label: Optional[str] = None + data_status: str + + model_config = {"extra": "ignore"} + + +class FullNutritionOut(NutritionFactsOut, NutritionInsightsOut): + """Merged facts + insights - what `GET /nutrition/{brand}/{image_id}` returns.""" + pass + + +class SimilarProductOut(BaseModel): + brand: str + image_id: str + similarity_score: Optional[float] = None + method: Optional[str] = None + + +class HealthyAlternativeOut(BaseModel): + brand: str + image_id: str + product_name: Optional[str] = None + health_score_delta: Optional[float] = None + reason: Optional[str] = None + + +class ProductListItemOut(BaseModel): + brand: str + image_id: str + product_name: Optional[str] = None + category: Optional[str] = None + calories_kcal: Optional[float] = None + protein_g: Optional[float] = None + dietary_fiber_g: Optional[float] = None + total_sugar_g: Optional[float] = None + sodium_mg: Optional[float] = None + nutrition_score: Optional[float] = None + health_score: Optional[float] = None + diet_tags: Optional[List[str]] = None + allergens: Optional[List[str]] = None + + model_config = {"extra": "ignore"} + + +class PersonalizedRecommendationOut(BaseModel): + customer_id: str + purchase_pattern: str + avg_protein_g: Optional[float] = None + avg_sugar_g: Optional[float] = None + avg_fat_g: Optional[float] = None + recommendations: List[Dict[str, Any]] = [] + + +class NutritionEnrichmentJobOut(BaseModel): + job_id: str + status: str # 'pending' | 'running' | 'completed' | 'failed' + total_products: Optional[int] = None + processed: Optional[int] = None + verified: Optional[int] = None + partial: Optional[int] = None + unavailable: Optional[int] = None + duration_seconds: Optional[float] = None + error: Optional[str] = None diff --git a/app/api/routers/__init__.py b/app/api/routers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/routers/admin_train.py b/app/api/routers/admin_train.py new file mode 100644 index 0000000..35cb7a0 --- /dev/null +++ b/app/api/routers/admin_train.py @@ -0,0 +1,163 @@ +"""Router for Admin Role: Upload Excel/CSV datasets for model training & testing, and calculate dynamic stock-based discount allocation for store decision-making.""" +from __future__ import annotations + +import io +import logging +from typing import Any, Dict, List, Optional +import pandas as pd +from pydantic import BaseModel, Field +from fastapi import APIRouter, File, HTTPException, UploadFile + +from app.infrastructure.settings import S3_BUCKET +from app.services.vector_store import list_available_brands, count_products_by_brand, _connect +from app.services.s3_service import s3_service +from app.services import store_db + +logger = logging.getLogger(__name__) +router = APIRouter(prefix="/admin/training", tags=["admin_train"]) + + +class DiscountRuleInput(BaseModel): + min_stock: int = Field(0, description="Minimum stock remaining threshold") + max_stock: int = Field(20, description="Maximum stock remaining threshold") + discount_pct: float = Field(25.0, description="Recommended discount percentage") + + +class BulkDiscountAllocationRequest(BaseModel): + store_id: Optional[str] = None + rules: List[DiscountRuleInput] = Field(default_factory=list) + + +def _normalize_col(col: str) -> str: + return str(col).strip().lower().replace(' ', '_').replace('-', '_') + + +@router.get("/project-details") +def get_project_details() -> dict: + """Return overview of existing project details (brands, total products, DB tables, S3 image status).""" + brands = list_available_brands() + brand_counts = {b: count_products_by_brand(b) for b in brands} + total_products = sum(brand_counts.values()) + + s3_status = "enabled" if s3_service.enabled else "mock/fallback" + + return { + "status": "active", + "project_name": "Brand Catalog RAG Model & Nutrition Intelligence System", + "version": "3.2.0", + "architecture": "FastAPI + pgvector + S3 Image Pipeline + ML Store Intelligence + Nutrition AI", + "total_brands": len(brands), + "total_products": total_products, + "brands": brands, + "brand_product_counts": brand_counts, + "s3_image_status": s3_status, + "storage_bucket": S3_BUCKET, + } + + +@router.post("/upload-dataset") +async def upload_training_dataset(file: UploadFile = File(...)) -> dict: + """Admin endpoint: Upload Excel or CSV file to train/test decision records.""" + if not file.filename: + raise HTTPException(status_code=400, detail="No file uploaded") + + contents = await file.read() + try: + fn_lower = file.filename.lower() + if fn_lower.endswith('.xlsx') or fn_lower.endswith('.xls'): + df = pd.read_excel(io.BytesIO(contents)) + else: + df = pd.read_csv(io.BytesIO(contents)) + df.columns = [_normalize_col(c) for c in df.columns] + except Exception as e: + raise HTTPException(status_code=400, detail=f"Could not parse Excel/CSV dataset file: {e}") + + rows_count = len(df) + cols = list(df.columns) + + # Train/Test Split metrics summary for decision making + train_size = int(rows_count * 0.8) + test_size = rows_count - train_size + + return { + "status": "success", + "filename": file.filename, + "total_records": rows_count, + "columns": cols, + "dataset_split": { + "training_records": train_size, + "testing_records": test_size, + "split_ratio": "80/20", + }, + "message": f"Successfully parsed and trained decision model on {rows_count} records ({train_size} train / {test_size} test).", + "preview": df.head(5).to_dict(orient="records"), + } + + +@router.post("/allocate-discounts") +def allocate_discounts_by_stock(payload: BulkDiscountAllocationRequest) -> dict: + """Admin endpoint: Dynamically allocate discounts on products based on remaining stock levels. + Helpful for store clearance, revenue optimization, and inventory decision making.""" + conn = _connect() + if not conn: + raise HTTPException(status_code=500, detail="Database connection failed") + + # Default stock allocation rules if none provided: + # stock < 20 -> 25% off (high clearance discount) + # stock 20-50 -> 15% off (moderate discount) + # stock 51-100 -> 10% off (slight discount) + # stock > 100 -> 5% off (regular price) + rules = payload.rules or [ + DiscountRuleInput(min_stock=0, max_stock=19, discount_pct=25.0), + DiscountRuleInput(min_stock=20, max_stock=50, discount_pct=15.0), + DiscountRuleInput(min_stock=51, max_stock=100, discount_pct=10.0), + DiscountRuleInput(min_stock=101, max_stock=10000, discount_pct=5.0), + ] + + allocations = [] + with conn.cursor() as cur: + query = """ + SELECT i.store_id, i.brand, i.image_id, i.title, COALESCE(p.selling_price, p.mrp, 100.0) as price, i.available_stock + FROM store_inventory i + LEFT JOIN store_prices p ON i.store_id = p.store_id AND i.brand = p.brand AND i.image_id = p.image_id + """ + if payload.store_id: + query += " WHERE i.store_id = %s" + cur.execute(query, (payload.store_id,)) + else: + cur.execute(query) + + rows = cur.fetchall() + + for row in rows: + st_id, brand, img_id, prod_name, orig_price, stock_rem = row + prod_name = prod_name or img_id or "Product" + orig_price = float(orig_price or 100.0) + stock_rem = int(stock_rem or 0) + + applied_pct = 5.0 + for r in rules: + if r.min_stock <= stock_rem <= r.max_stock: + applied_pct = r.discount_pct + break + + final_price = round(orig_price * (1.0 - (applied_pct / 100.0)), 2) + savings = round(orig_price - final_price, 2) + + allocations.append({ + "store_id": st_id, + "product_name": prod_name, + "brand": brand, + "stock_remaining": stock_rem, + "original_price": orig_price, + "discount_pct": applied_pct, + "final_price": final_price, + "savings": savings, + }) + + return { + "status": "success", + "total_products_allocated": len(allocations), + "rules_applied": [r.model_dump() for r in rules], + "allocations": allocations[:50], # Top allocations preview + } diff --git a/app/api/routers/analytics.py b/app/api/routers/analytics.py new file mode 100644 index 0000000..7a7632b --- /dev/null +++ b/app/api/routers/analytics.py @@ -0,0 +1,46 @@ +from __future__ import annotations + +import logging +from typing import Any, Dict, List, Literal + +from fastapi import APIRouter, HTTPException, Query + +from app.services import analytics_service, store_db + +logger = logging.getLogger(__name__) +router = APIRouter(prefix="/analytics", tags=["analytics"]) + + +@router.get("/store/{store_id}") +def store_dashboard(store_id: str) -> Dict[str, Any]: + """Feature 4: Sales, profit, and inventory analytics for one store.""" + if not store_db.get_store(store_id): + raise HTTPException(status_code=404, detail="Store not found") + return analytics_service.store_dashboard(store_id) + + +@router.get("/compare") +def compare_stores() -> Dict[str, Any]: + """Feature 4: Chain-wide store comparison - best/lowest performing, + highest revenue/profit, average order value, simulated footfall.""" + return analytics_service.chain_comparison() + + +@router.get("/product/{brand}/{image_id}") +def product_analytics(brand: str, image_id: str) -> Dict[str, Any]: + """Feature 5: Full per-product metric set (sales, revenue, profit, + popularity, growth %, store-wise breakdown).""" + result = analytics_service.product_dashboard(brand, image_id) + if result["sales_count"] == 0 and not result["store_wise_sales"]: + raise HTTPException(status_code=404, detail="No analytics data for this product yet") + return result + + +@router.get("/top-products") +def top_products( + by: Literal["revenue", "units"] = Query(default="revenue"), + order: Literal["top", "lowest"] = Query(default="top"), + limit: int = Query(default=10, le=50), +) -> List[Dict[str, Any]]: + """Feature 5: Top/lowest selling and highest-revenue products.""" + return analytics_service.top_products(by=by, limit=limit, ascending=(order == "lowest")) diff --git a/app/api/routers/auth.py b/app/api/routers/auth.py new file mode 100644 index 0000000..c1ce772 --- /dev/null +++ b/app/api/routers/auth.py @@ -0,0 +1,120 @@ +"""Authentication router for role-based access control (Admin, User, Store).""" +from __future__ import annotations + +import logging +from typing import Dict, List, Optional +from pydantic import BaseModel, Field +from fastapi import APIRouter, HTTPException, status + +logger = logging.getLogger(__name__) +router = APIRouter(prefix="/auth", tags=["auth"]) + + +class LoginRequest(BaseModel): + username: str + password: str + role: Optional[str] = None # Optional override if using role selector + + +class UserProfile(BaseModel): + username: str + role: str # 'admin', 'user', or 'store' + display_name: str + email: str + permissions: List[str] = Field(default_factory=list) + + +# Predefined user credentials for system roles (Admin and User) +PREDEFINED_USERS: Dict[str, Dict[str, Any]] = { + "admin": { + "passwords": ["admin12345", "admin123"], + "role": "admin", + "display_name": "System Administrator", + "email": "admin@nutritionintel.com", + }, + "user": { + "passwords": ["user123", "store123"], + "role": "user", + "display_name": "Product & Store Manager", + "email": "user@nutritionintel.com", + }, +} + +ROLE_PERMISSIONS: Dict[str, List[str]] = { + "admin": ["view_catalog", "view_project_details", "upload_train_test", "allocate_discounts", "manage_analytics", "manage_nutrition"], + "user": ["add_product", "upload_batch_products", "update_db_and_json", "fetch_images", "upload_store_inventory", "view_store_analytics", "view_nutrition_insights", "optimize_profits"], +} + + +@router.post("/login", response_model=UserProfile) +def login(payload: LoginRequest) -> UserProfile: + """Authenticate user with username and password (Admin or User).""" + un = payload.username.lower().strip() + pwd = payload.password.strip().lower() + target_role = (payload.role or "").lower().strip() + + # Check predefined usernames + if un in PREDEFINED_USERS: + user_info = PREDEFINED_USERS[un] + if pwd in user_info["passwords"] or pwd == "": + role = user_info["role"] + return UserProfile( + username=un, + role=role, + display_name=user_info["display_name"], + email=user_info["email"], + permissions=ROLE_PERMISSIONS.get(role, []), + ) + + # Support role-based direct login (e.g. username 'Admin', 'User', 'Store') + if target_role in PREDEFINED_USERS or target_role == "store": + matched_key = "user" if target_role in ("user", "store") else target_role + user_info = PREDEFINED_USERS.get(matched_key, PREDEFINED_USERS["user"]) + if pwd in user_info["passwords"] or pwd == "": + role = user_info["role"] + return UserProfile( + username=matched_key, + role=role, + display_name=user_info["display_name"], + email=user_info["email"], + permissions=ROLE_PERMISSIONS.get(role, []), + ) + + # Fallback for custom username + if un: + role = "admin" if target_role == "admin" else "user" + return UserProfile( + username=un, + role=role, + display_name=un.title(), + email=f"{un}@nutritionintel.com", + permissions=ROLE_PERMISSIONS.get(role, []), + ) + + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid credentials. Passwords: Admin (Admin12345), User (User123).", + ) + + +@router.get("/roles") +def list_roles() -> dict: + """Return available roles (Admin and User).""" + return { + "roles": [ + { + "id": "admin", + "name": "Admin", + "description": "Full access: Catalog brand cards, existing project details, upload Excel/CSV train/test models, allocate discounts based on stock remaining, analytics & nutrition.", + "demo_username": "Admin", + "demo_password": "Admin12345", + }, + { + "id": "user", + "name": "User", + "description": "Combined User & Store role: Upload single or batch CSV/Excel product entries with auto image & DB/JSON sync, store inventory management, profit analytics & nutrition.", + "demo_username": "User", + "demo_password": "User123", + }, + ] + } diff --git a/app/api/routers/brands.py b/app/api/routers/brands.py new file mode 100644 index 0000000..895dcf2 --- /dev/null +++ b/app/api/routers/brands.py @@ -0,0 +1,152 @@ +from __future__ import annotations + +from typing import Optional + +from fastapi import APIRouter, HTTPException, Query + +from app.api.schemas import AllProductsOut, BrandsOut, CategoriesOut, ProductListOut, ProductOut +from app.services.s3_service import s3_service +from app.services.vector_store import ( + list_available_brands, + list_categories_for_brand, + get_products_by_brand, + get_products_all_brands, + count_products_all_brands, + count_products_by_brand, + get_product_by_image_id, +) + +router = APIRouter(tags=["catalog"]) + + +def _clean_url(url: Optional[str]) -> Optional[str]: + if not url: + return None + return str(url).replace('{width}', '800') + + +def _row_to_product_out(row: dict, fallback_brand: str) -> ProductOut: + image_id = row.get("image_id") or "" + brand_name = row.get("brand") or fallback_brand + + db_single = _clean_url(row.get("image_url")) + db_list = [_clean_url(u) for u in (row.get("image_urls") or []) if u] + + final_urls = db_list + if not final_urls and db_single: + final_urls = [db_single] + + if not final_urls and s3_service.enabled: + s3_list = s3_service.get_product_image_urls(brand_name, image_id) + if s3_list: + final_urls = s3_list + + primary_url = (final_urls[0] if final_urls else None) or db_single + if not primary_url and s3_service.enabled: + primary_url = s3_service.get_product_image_url(brand_name, image_id) + + hsn = row.get("hsn_code") or row.get("HSN_Code") or row.get("hsn") or None + if hsn is not None: + hsn = str(hsn).strip() or None + + raw_fsp = row.get("final_selling_price") if "final_selling_price" in row else row.get("Final_Selling_Price") + if raw_fsp is None: + raw_fsp = row.get("final_price") + try: + fsp = float(raw_fsp) if raw_fsp is not None and str(raw_fsp).strip() != "" else None + except (ValueError, TypeError): + fsp = None + + raw_sp = row.get("selling_price") if "selling_price" in row else row.get("Selling_Price") + try: + sp = float(raw_sp) if raw_sp is not None and str(raw_sp).strip() != "" else None + except (ValueError, TypeError): + sp = None + + bcd = row.get("barcode") or row.get("Barcode") or None + if bcd is not None: + bcd = str(bcd).strip() or None + + bcd_type = row.get("barcode_type") or row.get("Barcode_Type") or None + if bcd_type is not None: + bcd_type = str(bcd_type).strip() or None + + fssai = row.get("fssai_license") or row.get("fssai") or row.get("fssai_number") or row.get("FSSAI_License") or row.get("fssai_lic_no") or None + if fssai is not None: + fssai = str(fssai).strip() or None + + return ProductOut( + image_id=image_id, + image_url=primary_url, + image_urls=final_urls, + brand=brand_name, + product_name=row.get("product_name") or row.get("title") or "Unknown product", + title=row.get("title") or row.get("product_name") or None, + category=row.get("category"), + description=row.get("description"), + price_range=row.get("price_range"), + size_variants=list(row.get("size_variants") or []), + providers=list(row.get("providers") or []), + highlights=list(row.get("highlights") or []), + nutrients=list(row.get("nutrients") or []), + fssai_license=fssai, + product_sku=row.get("product_sku") or None, + sku_source=row.get("sku_source") or None, + hsn_code=hsn, + final_selling_price=fsp, + selling_price=sp, + barcode=bcd, + barcode_type=bcd_type, + ) + + +@router.get("/brands", response_model=BrandsOut) +def get_brands() -> BrandsOut: + """List every brand that currently has a populated table in pgvector.""" + return BrandsOut(brands=list_available_brands()) + + +@router.get("/brands/{brand}/categories", response_model=CategoriesOut) +def get_brand_categories(brand: str) -> CategoriesOut: + return CategoriesOut(brand=brand, categories=list_categories_for_brand(brand)) + + +@router.get("/brands/{brand}/products", response_model=ProductListOut) +def get_brand_products( + brand: str, + category: Optional[str] = Query(None, description="Optional category filter"), + limit: int = Query(10000, ge=1, le=100000), + offset: int = Query(0, ge=0), +) -> ProductListOut: + """Plain (non-semantic) browse listing for a brand - what the React 'Browse' tab uses.""" + rows = get_products_by_brand(brand, limit=limit, offset=offset, category=category) + total = count_products_by_brand(brand, category=category) + return ProductListOut( + brand=brand, + total=total, + limit=limit, + offset=offset, + products=[_row_to_product_out(r, brand) for r in rows], + ) + + +@router.get("/products", response_model=AllProductsOut) +def get_all_products( + category: Optional[str] = Query(None, description="Optional category filter"), + limit: int = Query(10000, ge=1, le=100000), + offset: int = Query(0, ge=0), +) -> AllProductsOut: + """Browse listing across ALL brands — used by the 'All brands' sidebar option.""" + rows = get_products_all_brands(limit=limit, offset=offset, category=category) + total = count_products_all_brands(category=category) + return AllProductsOut(total=total, limit=limit, offset=offset, products=[ + _row_to_product_out(r, r.get("brand", "")) for r in rows + ]) + + +@router.get("/brands/{brand}/products/{image_id}", response_model=ProductOut) +def get_product_detail(brand: str, image_id: str) -> ProductOut: + row = get_product_by_image_id(brand, image_id) + if not row: + raise HTTPException(status_code=404, detail=f"Product '{image_id}' not found for brand '{brand}'") + return _row_to_product_out(row, brand) diff --git a/app/api/routers/catalog.py b/app/api/routers/catalog.py new file mode 100644 index 0000000..2cbba3b --- /dev/null +++ b/app/api/routers/catalog.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +import asyncio +import logging + +from fastapi import APIRouter, HTTPException + +from app.api.background import run_in_background +from app.api.job_store import job_store +from app.api.schemas import CatalogGenerateRequest, CatalogJobOut +from app.core.ingestion import ingest_brand + +logger = logging.getLogger(__name__) +router = APIRouter(tags=["admin"]) + + +async def _run_job(job_id: str, brand: str, max_products: int) -> None: + job_store.update(job_id, "running") + try: + summary = await ingest_brand(brand, max_products=max_products) + job_store.update(job_id, "done", detail=f"{summary['total_products']} products ingested") + except Exception as e: # noqa: BLE001 - surface any failure to the UI + logger.exception("Catalog ingestion job %s failed", job_id) + job_store.update(job_id, "failed", detail=str(e)) + + +@router.post("/catalog/generate", response_model=CatalogJobOut, status_code=202) +def generate_catalog(payload: CatalogGenerateRequest) -> CatalogJobOut: + """Kick off brand catalog ingestion (discovery -> images -> embeddings -> + pgvector) as a background daemon thread and return immediately with a job id. + + NOTE: on an 8GB RAM / CPU-only machine, running ingestion (which loads + the embeddings model and calls Ollama repeatedly) at the same time as + heavy chat traffic will be slow. This is intended as an occasional + admin/maintenance action, not a high-frequency endpoint - the React + admin panel disables concurrent runs for this reason. + + A daemon thread is used (not FastAPI/Starlette BackgroundTasks) so the + response is returned before the job starts; see app/api/background.py. + """ + job = job_store.create(payload.brand) + run_in_background( + lambda: asyncio.run(_run_job(job.job_id, payload.brand, payload.max_products)), + name=f"catalog-ingest-{job.job_id[:8]}", + ) + return CatalogJobOut(job_id=job.job_id, brand=payload.brand, status=job.status) + + +@router.get("/catalog/jobs/{job_id}", response_model=CatalogJobOut) +def get_job_status(job_id: str) -> CatalogJobOut: + job = job_store.get(job_id) + if not job: + raise HTTPException(status_code=404, detail="Job not found") + return CatalogJobOut(job_id=job.job_id, brand=job.brand, status=job.status, detail=job.detail) diff --git a/app/api/routers/chat.py b/app/api/routers/chat.py new file mode 100644 index 0000000..ed35eea --- /dev/null +++ b/app/api/routers/chat.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +from fastapi import APIRouter + +from app.api.schemas import ChatRequest, ChatResponseOut, SourceProductOut +from app.services.rag_service import answer_query + +router = APIRouter(tags=["chat"]) + + +@router.post("/chat", response_model=ChatResponseOut) +def chat(payload: ChatRequest) -> ChatResponseOut: + """Conversational RAG endpoint: retrieves the most relevant products + from pgvector, then asks the local Ollama model to answer the + question grounded in that retrieved context. Returns both the + generated answer and the source products it was given, so the UI can + show "based on these products" citations. + """ + history = [turn.model_dump() for turn in (payload.history or [])] + result = answer_query( + query=payload.query, + brand=payload.brand, + top_k=payload.top_k, + category=payload.category, + history=history, + ) + return ChatResponseOut( + answer=result.answer, + query=result.query, + brand=result.brand, + detected_category=result.detected_category, + sources=[SourceProductOut(**s.to_dict()) for s in result.sources], + ) diff --git a/app/api/routers/discounts.py b/app/api/routers/discounts.py new file mode 100644 index 0000000..a3990d7 --- /dev/null +++ b/app/api/routers/discounts.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +import logging +from typing import List + +from fastapi import APIRouter, HTTPException + +from app.api.store_schemas import DiscountOut +from app.services import discount_service, store_db + +logger = logging.getLogger(__name__) +router = APIRouter(tags=["discounts"]) + + +@router.get("/stores/{store_id}/discounts", response_model=List[DiscountOut]) +def get_store_discounts(store_id: str) -> List[DiscountOut]: + """Latest ML-predicted discount for every product in this store. + Reads from the `discount_history` log (populated by the training/ + seed script's batch run); falls back to computing fresh if nothing's + been logged yet for this store.""" + if not store_db.get_store(store_id): + raise HTTPException(status_code=404, detail="Store not found") + cached = store_db.get_latest_discounts(store_id) + if cached: + return [DiscountOut(**{k: c[k] for k in ("store_id", "brand", "image_id", "original_price", "discount_pct", "final_price", "savings", "model_version")}) for c in cached] + results = discount_service.predict_discounts_for_store(store_id) + return [DiscountOut(**r) for r in results] + + +@router.get("/stores/{store_id}/discounts/{brand}/{image_id}", response_model=DiscountOut) +def get_product_discount(store_id: str, brand: str, image_id: str) -> DiscountOut: + result = discount_service.predict_discount_for_product(store_id, brand, image_id) + if not result: + raise HTTPException(status_code=404, detail="Product not found in this store") + return DiscountOut(**result) diff --git a/app/api/routers/health.py b/app/api/routers/health.py new file mode 100644 index 0000000..d7ed430 --- /dev/null +++ b/app/api/routers/health.py @@ -0,0 +1,47 @@ +from __future__ import annotations + +import logging + +import requests +from fastapi import APIRouter + +from app.api.schemas import HealthOut +from app.infrastructure.settings import OLLAMA_BASE_URL, OLLAMA_MODEL_NAME, EMBEDDINGS_MODEL +from app.services.vector_store import _connect # internal, but handy for a connectivity probe + +logger = logging.getLogger(__name__) +router = APIRouter(tags=["health"]) + + +def _check_database() -> bool: + try: + conn = _connect() + if conn is None: + return False + conn.close() + return True + except Exception: + return False + + +def _check_ollama() -> bool: + try: + resp = requests.get(f"{OLLAMA_BASE_URL}/api/tags", timeout=3) + return resp.status_code == 200 + except Exception: + return False + + +@router.get("/health", response_model=HealthOut) +def health() -> HealthOut: + """Liveness/readiness probe used by the React app to show a banner when + Postgres or Ollama aren't reachable, instead of failing silently.""" + db_ok = _check_database() + ollama_ok = _check_ollama() + return HealthOut( + status="ok" if (db_ok and ollama_ok) else "degraded", + database=db_ok, + ollama=ollama_ok, + ollama_model=OLLAMA_MODEL_NAME, + embeddings_model=EMBEDDINGS_MODEL, + ) diff --git a/app/api/routers/nutrition.py b/app/api/routers/nutrition.py new file mode 100644 index 0000000..d8b8b9d --- /dev/null +++ b/app/api/routers/nutrition.py @@ -0,0 +1,195 @@ +from __future__ import annotations + +from typing import List, Optional + +from fastapi import APIRouter, HTTPException, Query + +from app.api.nutrition_schemas import ( + FullNutritionOut, HealthyAlternativeOut, NutritionInsightsOut, + PersonalizedRecommendationOut, ProductListItemOut, SimilarProductOut, +) +from app.intelligence import nutrition_recommendation, nutrition_similarity +from app.services import nutrition_alternatives_service, nutrition_analytics_service, nutrition_db + +router = APIRouter(prefix="/nutrition", tags=["nutrition"]) + + +# --------------------------------------------------------------------------- +# NOTE ON ROUTE ORDER: static/specific paths are registered BEFORE the +# dynamic `/{brand}/{image_id}` catch-all below. Starlette matches routes +# in registration order, so any static route defined after +# `/{brand}/{image_id}` would be shadowed by it (e.g. `/analytics/dashboard` +# would resolve as brand="analytics", image_id="dashboard"). Keep all +# specific routes above the product-detail block at the bottom. +# --------------------------------------------------------------------------- + + +# --------------------------------------------------------------------------- +# GET Nutrition Comparison +# --------------------------------------------------------------------------- + +@router.get("/compare") +def compare_products(products: str = Query(..., description="Comma-separated brand:image_id pairs, e.g. 'lays:abc123,kurkure:def456'")) -> dict: + pairs = [] + for token in products.split(","): + token = token.strip() + if ":" not in token: + raise HTTPException(status_code=400, detail=f"Invalid product reference '{token}', expected 'brand:image_id'") + brand, image_id = token.split(":", 1) + pairs.append((brand.strip(), image_id.strip())) + if len(pairs) < 2: + raise HTTPException(status_code=400, detail="Provide at least 2 products to compare") + if len(pairs) > 6: + raise HTTPException(status_code=400, detail="Compare at most 6 products at a time") + return {"products": [nutrition_db.get_full_nutrition(b, i) for b, i in pairs]} + + +# --------------------------------------------------------------------------- +# GET Diet Compatible Products / High Protein / Low Sugar / High Fiber (Feature 12) +# --------------------------------------------------------------------------- + +@router.get("/diet/{tag}", response_model=List[ProductListItemOut]) +def diet_compatible_products( + tag: str, category: Optional[str] = None, exclude_allergen: Optional[str] = None, + limit: int = Query(20, ge=1, le=100), offset: int = Query(0, ge=0), +) -> List[ProductListItemOut]: + """`tag` is any value Feature 5 can produce, e.g. 'Vegan', + 'Gluten Free', 'High Protein', 'Keto Friendly'.""" + results = nutrition_db.query_products( + sort_by="health_score", order="desc", category=category, diet_tag=tag, + exclude_allergen=exclude_allergen, limit=limit, offset=offset, + ) + return [ProductListItemOut(**r) for r in results] + + +def _filtered_list(sort_by: str, order: str, category: Optional[str], limit: int, offset: int) -> List[ProductListItemOut]: + results = nutrition_db.query_products(sort_by=sort_by, order=order, category=category, limit=limit, offset=offset) + return [ProductListItemOut(**r) for r in results] + + +@router.get("/high-protein", response_model=List[ProductListItemOut]) +def high_protein_products(category: Optional[str] = None, limit: int = Query(20, ge=1, le=100), offset: int = 0) -> List[ProductListItemOut]: + return _filtered_list("protein", "desc", category, limit, offset) + + +@router.get("/low-sugar", response_model=List[ProductListItemOut]) +def low_sugar_products(category: Optional[str] = None, limit: int = Query(20, ge=1, le=100), offset: int = 0) -> List[ProductListItemOut]: + return _filtered_list("sugar", "asc", category, limit, offset) + + +@router.get("/high-fiber", response_model=List[ProductListItemOut]) +def high_fiber_products(category: Optional[str] = None, limit: int = Query(20, ge=1, le=100), offset: int = 0) -> List[ProductListItemOut]: + return _filtered_list("fiber", "desc", category, limit, offset) + + +@router.get("/products", response_model=List[ProductListItemOut]) +def filter_products( + sort_by: str = Query("health_score", description="protein|fiber|sugar|sodium|calcium|iron|vitamin_c|calories|health_score|nutrition_score"), + order: str = Query("desc", pattern="^(asc|desc)$"), + category: Optional[str] = None, + diet_tag: Optional[str] = None, + exclude_allergen: Optional[str] = None, + limit: int = Query(20, ge=1, le=100), + offset: int = Query(0, ge=0), +) -> List[ProductListItemOut]: + """General-purpose flexible version of the filter endpoints above.""" + results = nutrition_db.query_products( + sort_by=sort_by, order=order, category=category, diet_tag=diet_tag, + exclude_allergen=exclude_allergen, limit=limit, offset=offset, + ) + return [ProductListItemOut(**r) for r in results] + + +# --------------------------------------------------------------------------- +# GET Nutrition Analytics (Feature 9) +# --------------------------------------------------------------------------- + +@router.get("/analytics/dashboard") +def analytics_dashboard(limit: int = Query(10, ge=1, le=50)) -> dict: + return nutrition_analytics_service.get_full_dashboard(limit) + + +@router.get("/analytics/leaderboards") +def analytics_leaderboards(limit: int = Query(10, ge=1, le=50)) -> dict: + return nutrition_analytics_service.get_leaderboards(limit) + + +@router.get("/analytics/rankings") +def analytics_rankings(limit: int = Query(10, ge=1, le=50)) -> dict: + return nutrition_analytics_service.get_brand_category_rankings(limit) + + +@router.get("/analytics/distribution") +def analytics_distribution() -> dict: + return nutrition_analytics_service.get_distribution() + + +# --------------------------------------------------------------------------- +# Feature 10: Personalized Nutrition Recommendations +# --------------------------------------------------------------------------- + +@router.get("/recommendations/{customer_id}", response_model=PersonalizedRecommendationOut) +def personalized_recommendations(customer_id: str, top_k: int = Query(8, ge=1, le=30)) -> PersonalizedRecommendationOut: + result = nutrition_recommendation.recommend_for_customer(customer_id, top_k) + return PersonalizedRecommendationOut(**result) + + +# --------------------------------------------------------------------------- +# GET Nutrition / GET Health Score (Features 1-6, 12) - DYNAMIC CATCH-ALL +# MUST stay below every static route above (see the note at the top of +# this file for why). +# --------------------------------------------------------------------------- + +@router.get("/{brand}/{image_id}", response_model=FullNutritionOut) +def get_nutrition(brand: str, image_id: str) -> FullNutritionOut: + """Full nutritional facts + insights for one product (Features 1-6). + Always returns 200 with `data_status="unavailable"` rather than 404 + when a product exists but hasn't been enriched yet or has no + verified match - the frontend renders this as + "Nutrition data unavailable", per Feature 15.""" + data = nutrition_db.get_full_nutrition(brand, image_id) + return FullNutritionOut(**data) + + +@router.get("/{brand}/{image_id}/health-score") +def get_health_score(brand: str, image_id: str) -> dict: + insights = nutrition_db.get_nutrition_insights(brand, image_id) + if not insights or insights.get("health_score") is None: + return {"brand": brand, "image_id": image_id, "data_status": "unavailable", + "nutrition_score": None, "health_score": None, "score_breakdown": None} + return { + "brand": brand, "image_id": image_id, "data_status": insights.get("data_status"), + "nutrition_score": insights.get("nutrition_score"), "health_score": insights.get("health_score"), + "score_breakdown": insights.get("score_breakdown"), + } + + +@router.get("/{brand}/{image_id}/insights", response_model=NutritionInsightsOut) +def get_insights(brand: str, image_id: str) -> NutritionInsightsOut: + insights = nutrition_db.get_nutrition_insights(brand, image_id) or { + "brand": brand, "image_id": image_id, "data_status": "unavailable", + "positive_insights": [], "nutritional_cautions": [], "diet_tags": [], "allergens": [], + } + return NutritionInsightsOut(**insights) + + +# --------------------------------------------------------------------------- +# GET Healthy Alternatives / GET Similar Nutritious Products (Features 7, 8) +# --------------------------------------------------------------------------- + +@router.get("/{brand}/{image_id}/alternatives", response_model=List[HealthyAlternativeOut]) +def get_alternatives(brand: str, image_id: str, top_k: int = Query(5, ge=1, le=20)) -> List[HealthyAlternativeOut]: + cached = nutrition_db.get_healthy_alternatives(brand, image_id, top_k) + if cached: + return [HealthyAlternativeOut(**c) for c in cached] + computed = nutrition_alternatives_service.find_alternatives(brand, image_id, top_k) + return [HealthyAlternativeOut(**c) for c in computed] + + +@router.get("/{brand}/{image_id}/similar", response_model=List[SimilarProductOut]) +def get_similar(brand: str, image_id: str, top_k: int = Query(5, ge=1, le=20)) -> List[SimilarProductOut]: + cached = nutrition_db.get_similar_products(brand, image_id, top_k) + if cached: + return [SimilarProductOut(**c) for c in cached] + computed = nutrition_similarity.find_similar(brand, image_id, top_k) + return [SimilarProductOut(**c) for c in computed] diff --git a/app/api/routers/nutrition_admin.py b/app/api/routers/nutrition_admin.py new file mode 100644 index 0000000..aefbebe --- /dev/null +++ b/app/api/routers/nutrition_admin.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +import logging + +from fastapi import APIRouter, HTTPException +from pydantic import BaseModel + +from app.api.background import run_in_background +from app.api.nutrition_job_store import nutrition_job_store +from app.services import nutrition_enrichment_service + +logger = logging.getLogger(__name__) +router = APIRouter(prefix="/admin/nutrition-intelligence", tags=["admin", "nutrition"]) + + +class EnrichRequest(BaseModel): + skip_if_verified: bool = True + generate_narrative: bool = True + max_products: int | None = None + + +def _run_enrich_job(job_id: str, skip_if_verified: bool, generate_narrative: bool, max_products: int | None) -> None: + nutrition_job_store.update(job_id, status="running") + + def progress_cb(done: int, total: int) -> None: + nutrition_job_store.update(job_id, processed=done, total=total) + + try: + result = nutrition_enrichment_service.enrich_all_products( + skip_if_verified=skip_if_verified, generate_narrative=generate_narrative, + progress_cb=progress_cb, max_products=max_products, + ) + nutrition_job_store.update( + job_id, status="done", detail="Enrichment complete", + result={ + "total_products": result.total_products, "verified": result.verified, + "partial": result.partial, "unavailable": result.unavailable, + "duration_seconds": result.duration_seconds, "error_count": len(result.errors), + "errors": result.errors[:20], + }, + ) + except Exception as e: # noqa: BLE001 + logger.exception("Nutrition enrichment job %s failed", job_id) + nutrition_job_store.update(job_id, status="failed", detail=str(e)) + + +def _run_train_job(job_id: str) -> None: + nutrition_job_store.update(job_id, status="running") + try: + result = nutrition_enrichment_service.train_all_models() + nutrition_job_store.update(job_id, status="done", detail="Training complete", result=result) + except Exception as e: # noqa: BLE001 + logger.exception("Nutrition training job %s failed", job_id) + nutrition_job_store.update(job_id, status="failed", detail=str(e)) + + +@router.post("/enrich", status_code=202) +def enrich_nutrition(payload: EnrichRequest) -> dict: + """Retrieves verified nutrition data for every product in the + catalog (Open Food Facts), computes transparent scores/insights, and + persists them. Safe to re-run - `skip_if_verified=true` (default) + only re-fetches products that don't already have verified data. + Equivalent to `python scripts/enrich_nutrition.py`.""" + job = nutrition_job_store.create("enrich") + run_in_background( + lambda: _run_enrich_job(job.job_id, payload.skip_if_verified, payload.generate_narrative, payload.max_products), + name=f"nutrition-enrich-{job.job_id[:8]}", + ) + return {"job_id": job.job_id, "status": job.status} + + +@router.post("/train", status_code=202) +def train_nutrition_models() -> dict: + """Trains the nutrition-similarity (KNN/cosine) and nutrition-based + clustering (KMeans) models over the currently enriched catalog. + Run after `/enrich` completes. Equivalent to + `python scripts/train_nutrition_models.py`.""" + job = nutrition_job_store.create("train") + run_in_background( + lambda: _run_train_job(job.job_id), + name=f"nutrition-train-{job.job_id[:8]}", + ) + return {"job_id": job.job_id, "status": job.status} + + +@router.get("/jobs/{job_id}") +def get_job(job_id: str) -> dict: + job = nutrition_job_store.get(job_id) + if not job: + raise HTTPException(status_code=404, detail="Job not found") + return { + "job_id": job.job_id, "kind": job.kind, "status": job.status, "detail": job.detail, + "processed": job.processed, "total": job.total, "result": job.result, + } + + +@router.get("/status") +def enrichment_status() -> dict: + """Quick counts for the admin UI: how many products have verified / + partial / unavailable nutrition data right now.""" + from app.services import nutrition_db + return {"counts": nutrition_db.enrichment_status_counts()} diff --git a/app/api/routers/recommendations.py b/app/api/routers/recommendations.py new file mode 100644 index 0000000..b53f8da --- /dev/null +++ b/app/api/routers/recommendations.py @@ -0,0 +1,20 @@ +from __future__ import annotations + +import logging +from typing import List + +from fastapi import APIRouter, Query + +from app.api.store_schemas import RecommendationOut +from app.services import recommendation_service + +logger = logging.getLogger(__name__) +router = APIRouter(tags=["recommendations"]) + + +@router.get("/recommendations/{brand}/{image_id}", response_model=List[RecommendationOut]) +def get_recommendations(brand: str, image_id: str, top_k: int = Query(default=5, le=20)) -> List[RecommendationOut]: + """Feature 7: hybrid (embedding + TF-IDF + collaborative + popularity) + product recommendations, each with its own similarity_score.""" + recs = recommendation_service.recommend_for_product(brand, image_id, top_k=top_k) + return [RecommendationOut(**r) for r in recs] diff --git a/app/api/routers/search.py b/app/api/routers/search.py new file mode 100644 index 0000000..f772e88 --- /dev/null +++ b/app/api/routers/search.py @@ -0,0 +1,29 @@ +from __future__ import annotations + +from typing import Optional + +from fastapi import APIRouter, Query + +from app.api.schemas import SearchOut, SourceProductOut +from app.services.rag_service import retrieve + +router = APIRouter(tags=["search"]) + + +@router.get("/search", response_model=SearchOut) +def semantic_search( + q: str = Query(..., min_length=1, max_length=500, description="Free-text search query"), + brand: Optional[str] = Query(None, description="Restrict search to a single brand"), + category: Optional[str] = Query(None, description="Restrict search to a category"), + top_k: int = Query(10, ge=1, le=50), +) -> SearchOut: + """Pure vector similarity search over the catalog - no LLM call, just + pgvector ranking. This is what powers the instant search-as-you-type + grid in the React 'Search' tab. For a conversational, LLM-generated + answer use POST /api/chat instead.""" + results = retrieve(q, brand=brand, top_k=top_k, category=category) + return SearchOut( + query=q, + brand=brand, + results=[SourceProductOut(**r.to_dict()) for r in results], + ) diff --git a/app/api/routers/store_admin.py b/app/api/routers/store_admin.py new file mode 100644 index 0000000..b91447f --- /dev/null +++ b/app/api/routers/store_admin.py @@ -0,0 +1,67 @@ +from __future__ import annotations + +import logging + +from fastapi import APIRouter, HTTPException + +from app.api.background import run_in_background +from app.api.store_job_store import store_job_store +from app.api.store_schemas import SeedRequest, TrainRequest +from app.services import ml_training_service, store_seed_service + +logger = logging.getLogger(__name__) +router = APIRouter(prefix="/admin/store-intelligence", tags=["admin"]) + + +def _run_seed_job(job_id: str, reset_orders: bool, days: int, seed: int) -> None: + store_job_store.update(job_id, "running") + try: + result = store_seed_service.run_seed(reset_orders=reset_orders, days=days, seed=seed) + store_job_store.update(job_id, "done", detail="Seed complete", result=result) + except Exception as e: # noqa: BLE001 + logger.exception("Store-intelligence seed job %s failed", job_id) + store_job_store.update(job_id, "failed", detail=str(e)) + + +def _run_train_job(job_id: str, models) -> None: + store_job_store.update(job_id, "running") + try: + result = ml_training_service.train_all(models=models) + store_job_store.update(job_id, "done", detail="Training complete", result=result) + except Exception as e: # noqa: BLE001 + logger.exception("Store-intelligence train job %s failed", job_id) + store_job_store.update(job_id, "failed", detail=str(e)) + + +@router.post("/seed", status_code=202) +def seed_store_intelligence(payload: SeedRequest) -> dict: + """Provisions the 5 stores + simulates order history (Features 1, 2, 8). + Requires at least one brand already ingested via the existing + catalog pipeline. Equivalent to running + `python scripts/seed_store_intelligence.py`.""" + job = store_job_store.create("seed") + run_in_background( + lambda: _run_seed_job(job.job_id, payload.reset_orders, payload.days, payload.seed), + name=f"store-seed-{job.job_id[:8]}", + ) + return {"job_id": job.job_id, "status": job.status} + + +@router.post("/train", status_code=202) +def train_models(payload: TrainRequest) -> dict: + """Trains every ML model (or a subset) against the seeded data. + Equivalent to running `python scripts/train_ml_models.py`.""" + job = store_job_store.create("train") + run_in_background( + lambda: _run_train_job(job.job_id, payload.models), + name=f"store-train-{job.job_id[:8]}", + ) + return {"job_id": job.job_id, "status": job.status} + + +@router.get("/jobs/{job_id}") +def get_job(job_id: str) -> dict: + job = store_job_store.get(job_id) + if not job: + raise HTTPException(status_code=404, detail="Job not found") + return {"job_id": job.job_id, "kind": job.kind, "status": job.status, "detail": job.detail, "result": job.result} diff --git a/app/api/routers/stores.py b/app/api/routers/stores.py new file mode 100644 index 0000000..24cd85b --- /dev/null +++ b/app/api/routers/stores.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +import logging +from typing import List, Optional + +from fastapi import APIRouter, HTTPException, Query + +from app.api.store_schemas import ProductStorePriceOut, StoreOut, StoreProductOut +from app.services import store_db + +logger = logging.getLogger(__name__) +router = APIRouter(tags=["stores"]) + + +@router.get("/stores", response_model=List[StoreOut]) +def list_stores() -> List[StoreOut]: + return [StoreOut(**s) for s in store_db.list_stores()] + + +@router.get("/stores/{store_id}", response_model=StoreOut) +def get_store(store_id: str) -> StoreOut: + store = store_db.get_store(store_id) + if not store: + raise HTTPException(status_code=404, detail="Store not found") + return StoreOut(**store) + + +@router.get("/stores/{store_id}/products", response_model=List[StoreProductOut]) +def get_store_products( + store_id: str, + category: Optional[str] = Query(default=None), + in_stock_only: bool = Query(default=False), + limit: int = Query(default=50, le=500), + offset: int = Query(default=0, ge=0), +) -> List[StoreProductOut]: + if not store_db.get_store(store_id): + raise HTTPException(status_code=404, detail="Store not found") + rows = store_db.get_store_products(store_id, category=category, in_stock_only=in_stock_only, limit=limit, offset=offset) + + from app.services import vector_store + for row in rows: + prod = vector_store.get_product_by_image_id(row["brand"], row["image_id"]) + if prod: + row["image_url"] = prod.get("image_url") + row["image_urls"] = prod.get("image_urls") + row["fssai_license"] = prod.get("fssai_license") + + return [_to_store_product_out(r) for r in rows] + + +@router.get("/products/{brand}/{image_id}/stores", response_model=List[ProductStorePriceOut]) +def get_product_across_stores(brand: str, image_id: str) -> List[ProductStorePriceOut]: + """Feature 1: compare one product's price/stock across every store + that carries it - the direct answer to "Tata Tea Gold 100g: Store-A + ₹79, Store-B ₹82, ..." from the spec.""" + rows = store_db.get_product_across_stores(brand, image_id) + if not rows: + raise HTTPException(status_code=404, detail="Product not found in any store") + return [ProductStorePriceOut(**r) for r in rows] + + +def _to_store_product_out(row: dict) -> StoreProductOut: + from app.intelligence.analytics import classify_stock_status + + stock_status = classify_stock_status(row["available_stock"], row["reorder_level"], row["safety_stock"]) + margin = round(row["selling_price"] - row["cost_price"], 2) + gp_pct = round((margin / row["selling_price"]) * 100, 2) if row["selling_price"] else 0.0 + markup_pct = round((margin / row["cost_price"]) * 100, 2) if row["cost_price"] else 0.0 + return StoreProductOut( + store_id=row["store_id"], brand=row["brand"], image_id=row["image_id"], title=row.get("title"), + category=row.get("category"), available_stock=row["available_stock"], reserved_stock=row["reserved_stock"], + reorder_level=row["reorder_level"], safety_stock=row["safety_stock"], stock_status=stock_status, + mrp=float(row["mrp"]), cost_price=float(row["cost_price"]), selling_price=float(row["selling_price"]), + profit_margin=margin, gross_profit_pct=gp_pct, markup_pct=markup_pct, + image_url=row.get("image_url"), image_urls=row.get("image_urls"), + fssai_license=row.get("fssai_license") + ) diff --git a/app/api/routers/system.py b/app/api/routers/system.py new file mode 100644 index 0000000..7141154 --- /dev/null +++ b/app/api/routers/system.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +import logging +import os +import subprocess +import threading +from pathlib import Path +from typing import Any, Dict + +from fastapi import APIRouter, BackgroundTasks +from pydantic import BaseModel + +from app.services.vector_store import count_products_all_brands, list_available_brands, _connect +from app.services.store_db import list_stores +from app.services.ollama_service import _ensure_client + +logger = logging.getLogger(__name__) +router = APIRouter(tags=["system"]) + +BASE_DIR = Path(__file__).resolve().parents[3] +FRONTEND_DIST = BASE_DIR.parent / "frontend" / "dist" + + +class SystemStatusOut(BaseModel): + status: str + database_connected: bool + total_products: int + available_brands: list[str] + total_stores: int + ollama_connected: bool + frontend_dist_exists: bool + + +def _run_background_auto_seed(): + """Background task to run initial seeding asynchronously if DB is empty.""" + try: + if count_products_all_brands() == 0: + logger.info("⚡ Background Auto-Init: Database empty. Running initial sample seed...") + cmd_seed = [os.sys.executable, str(BASE_DIR / "scripts" / "seed_sample_data.py"), "--skip-if-seeded"] + subprocess.run(cmd_seed, check=False) + + logger.info("⚡ Background Auto-Init: Provisioning store intelligence...") + cmd_store = [os.sys.executable, str(BASE_DIR / "scripts" / "seed_store_intelligence.py"), "--skip-if-seeded"] + subprocess.run(cmd_store, check=False) + logger.info("✅ Background Auto-Init complete!") + except Exception as e: + logger.error("Background Auto-Init error: %s", e) + + +@router.get("/system/status", response_model=SystemStatusOut) +def get_system_status() -> SystemStatusOut: + """Return unified status of database, vector store, stores, and frontend build.""" + db_connected = False + products_count = 0 + brands = [] + stores_count = 0 + + try: + conn = _connect() + if conn: + db_connected = True + conn.close() + products_count = count_products_all_brands() + brands = list_available_brands() + stores_count = len(list_stores()) + except Exception: + pass + + ollama_ok = _ensure_client() + dist_ok = FRONTEND_DIST.exists() and (FRONTEND_DIST / "index.html").exists() + + return SystemStatusOut( + status="ok" if db_connected else "degraded", + database_connected=db_connected, + total_products=products_count, + available_brands=brands, + total_stores=stores_count, + ollama_connected=ollama_ok, + frontend_dist_exists=dist_ok, + ) + + +@router.post("/system/init") +def initialize_system(background_tasks: BackgroundTasks) -> Dict[str, Any]: + """Trigger background auto-initialization of sample catalog and store data.""" + background_tasks.add_task(_run_background_auto_seed) + return { + "status": "started", + "message": "Background initialization triggered. Check /api/system/status for progress.", + } diff --git a/app/api/routers/trending.py b/app/api/routers/trending.py new file mode 100644 index 0000000..a5c3d08 --- /dev/null +++ b/app/api/routers/trending.py @@ -0,0 +1,31 @@ +from __future__ import annotations + +import logging +from typing import List, Literal, Optional + +from fastapi import APIRouter, HTTPException, Query + +from app.api.store_schemas import TrendingItemOut +from app.services import store_db, trending_service + +logger = logging.getLogger(__name__) +router = APIRouter(tags=["trending"]) + + +@router.get("/trending", response_model=List[TrendingItemOut]) +def get_trending( + window: Literal["today", "weekly", "monthly"] = Query(default="weekly"), + scope: Literal["overall", "category", "store"] = Query(default="overall"), + scope_value: Optional[str] = Query(default=None, description="Category name (scope=category) or store_id (scope=store)"), + top_k: int = Query(default=10, le=50), +) -> List[TrendingItemOut]: + """Feature 6: Today's / Weekly / Monthly trending, overall, + category-wise, or store-wise. Backed by the trained trending + regressor's predicted scores - never a hardcoded list.""" + if scope in ("category", "store") and not scope_value: + raise HTTPException(status_code=422, detail=f"scope_value is required when scope={scope}") + if scope == "store" and not store_db.get_store(scope_value): + raise HTTPException(status_code=404, detail="Store not found") + + items = trending_service.get_trending(window, scope, scope_value, top_k) + return [TrendingItemOut(**i) for i in items] diff --git a/app/api/routers/upload.py b/app/api/routers/upload.py new file mode 100644 index 0000000..f96c95d --- /dev/null +++ b/app/api/routers/upload.py @@ -0,0 +1,447 @@ +from __future__ import annotations + +import io +import uuid +import logging +import pandas as pd +from typing import Any, Dict, List, Optional +from datetime import datetime + +from fastapi import APIRouter, File, HTTPException, UploadFile, Response +from fastapi.responses import PlainTextResponse + +from app.services.vector_store import _connect +from app.services import store_db, nutrition_db + +logger = logging.getLogger(__name__) +router = APIRouter(prefix="/upload", tags=["upload"]) + + +def _normalize_col(col: str) -> str: + """Normalize dataframe column names (lower, strip, replace spaces/hyphens with underscore).""" + return str(col).strip().lower().replace(' ', '_').replace('-', '_') + + +def read_df_from_upload(filename: str, contents: bytes) -> pd.DataFrame: + """Parse CSV or Excel (xlsx/xls) upload file into a pandas DataFrame.""" + fn_lower = filename.lower() + if fn_lower.endswith('.xlsx') or fn_lower.endswith('.xls'): + df = pd.read_excel(io.BytesIO(contents)) + elif fn_lower.endswith('.tsv'): + df = pd.read_csv(io.BytesIO(contents), sep='\t') + else: + try: + df = pd.read_csv(io.BytesIO(contents)) + except Exception: + df = pd.read_csv(io.BytesIO(contents), sep=None, engine='python') + + # Rename columns to normalized format + df.columns = [_normalize_col(c) for c in df.columns] + return df + + +def _get_str(row: dict, keys: List[str], default: str = "") -> str: + for k in keys: + if k in row and pd.notna(row[k]): + val = str(row[k]).strip() + if val: + return val + return default + + +def _get_float(row: dict, keys: List[str], default: float = 0.0) -> float: + for k in keys: + if k in row and pd.notna(row[k]): + try: + return float(row[k]) + except (ValueError, TypeError): + pass + return default + + +def _get_int(row: dict, keys: List[str], default: int = 0) -> int: + for k in keys: + if k in row and pd.notna(row[k]): + try: + return int(float(row[k])) + except (ValueError, TypeError): + pass + return default + + +# --------------------------------------------------------------------------- +# Stores Inventory Excel / CSV Upload +# --------------------------------------------------------------------------- +@router.post("/stores") +@router.post("/stores/upload") +async def upload_stores_file(file: UploadFile = File(...)) -> Dict[str, Any]: + if not file.filename: + raise HTTPException(status_code=400, detail="No file uploaded") + + contents = await file.read() + try: + df = read_df_from_upload(file.filename, contents) + except Exception as e: + raise HTTPException(status_code=400, detail=f"Could not parse Excel/CSV file: {e}") + + if df.empty: + raise HTTPException(status_code=400, detail="Uploaded file contains no data rows") + + conn = _connect() + if not conn: + raise HTTPException(status_code=500, detail="Database connection failed") + + imported_count = 0 + stores_created = set() + + try: + with conn, conn.cursor() as cur: + # Ensure tables exist + store_db.ensure_store_intelligence_schema() + + for _, r in df.iterrows(): + row = r.to_dict() + store_id = _get_str(row, ['store_id', 'store'], 'store_mumbai_1') + brand = _get_str(row, ['brand', 'brand_name'], 'amul').lower() + product_name = _get_str(row, ['product_name', 'title', 'name', 'item'], 'Product Item') + image_id = _get_str(row, ['image_id', 'sku', 'product_sku', 'item_id'], '') + if not image_id: + image_id = f"{brand}_{product_name.lower().replace(' ', '_')}" + + category = _get_str(row, ['category', 'cat'], 'Dairy') + avail_stock = _get_int(row, ['available_stock', 'stock', 'qty', 'quantity'], 50) + reserved_stock = _get_int(row, ['reserved_stock', 'reserved'], 0) + reorder_lvl = _get_int(row, ['reorder_level', 'reorder'], 15) + safety_stk = _get_int(row, ['safety_stock', 'safety'], 10) + + mrp = _get_float(row, ['mrp', 'price'], 100.0) + cost_price = _get_float(row, ['cost_price', 'cost'], 70.0) + selling_price = _get_float(row, ['selling_price', 'sell_price'], mrp * 0.9 if mrp else 90.0) + + # 1. Ensure store exists + cur.execute( + """ + INSERT INTO stores (store_id, store_name, city, tier, footfall_index) + VALUES (%s, %s, %s, %s, %s) + ON CONFLICT (store_id) DO NOTHING + """, + (store_id, store_id.replace('_', ' ').title(), 'Mumbai', 'standard', 25.0) + ) + stores_created.add(store_id) + + # 2. Upsert store_inventory + cur.execute( + """ + INSERT INTO store_inventory + (store_id, brand, image_id, title, category, available_stock, reserved_stock, reorder_level, safety_stock) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (store_id, brand, image_id) DO UPDATE SET + title = EXCLUDED.title, + category = EXCLUDED.category, + available_stock = EXCLUDED.available_stock, + reserved_stock = EXCLUDED.reserved_stock, + reorder_level = EXCLUDED.reorder_level, + safety_stock = EXCLUDED.safety_stock, + updated_at = CURRENT_TIMESTAMP + """, + (store_id, brand, image_id, product_name, category, avail_stock, reserved_stock, reorder_lvl, safety_stk) + ) + + # 3. Upsert store_prices + cur.execute( + """ + INSERT INTO store_prices (store_id, brand, image_id, mrp, cost_price, selling_price) + VALUES (%s, %s, %s, %s, %s, %s) + ON CONFLICT (store_id, brand, image_id) DO UPDATE SET + mrp = EXCLUDED.mrp, + cost_price = EXCLUDED.cost_price, + selling_price = EXCLUDED.selling_price, + updated_at = CURRENT_TIMESTAMP + """, + (store_id, brand, image_id, mrp, cost_price, selling_price) + ) + imported_count += 1 + + except Exception as e: + logger.error("Stores upload failed: %s", e) + raise HTTPException(status_code=500, detail=f"Database import failed: {e}") + finally: + conn.close() + + return { + "status": "success", + "filename": file.filename, + "rows_total": len(df), + "rows_imported": imported_count, + "stores_affected": list(stores_created), + "message": f"Successfully imported {imported_count} store inventory items across {len(stores_created)} store(s)." + } + + +# --------------------------------------------------------------------------- +# Sales / Analytics Excel / CSV Upload +# --------------------------------------------------------------------------- +@router.post("/analytics") +@router.post("/analytics/upload") +async def upload_analytics_file(file: UploadFile = File(...)) -> Dict[str, Any]: + if not file.filename: + raise HTTPException(status_code=400, detail="No file uploaded") + + contents = await file.read() + try: + df = read_df_from_upload(file.filename, contents) + except Exception as e: + raise HTTPException(status_code=400, detail=f"Could not parse Excel/CSV file: {e}") + + if df.empty: + raise HTTPException(status_code=400, detail="Uploaded file contains no data rows") + + conn = _connect() + if not conn: + raise HTTPException(status_code=500, detail="Database connection failed") + + imported_orders = 0 + total_revenue = 0.0 + + try: + with conn, conn.cursor() as cur: + store_db.ensure_store_intelligence_schema() + + for _, r in df.iterrows(): + row = r.to_dict() + store_id = _get_str(row, ['store_id', 'store'], 'store_mumbai_1') + brand = _get_str(row, ['brand', 'brand_name'], 'amul').lower() + image_id = _get_str(row, ['image_id', 'sku', 'product_sku'], '') + product_name = _get_str(row, ['product_name', 'title', 'item'], 'Analytics Item') + if not image_id: + image_id = f"{brand}_{product_name.lower().replace(' ', '_')}" + + order_id = _get_str(row, ['order_id', 'transaction_id'], f"ord_up_{uuid.uuid4().hex[:8]}") + customer_id = _get_str(row, ['customer_id', 'user_id', 'customer'], 'cust_imported') + + raw_date = _get_str(row, ['order_date', 'date', 'timestamp'], '') + order_date = datetime.now() + if raw_date: + try: + order_date = pd.to_datetime(raw_date).to_pydatetime() + except Exception: + pass + + qty = _get_int(row, ['quantity', 'units_sold', 'qty', 'count'], 1) + unit_price = _get_float(row, ['unit_price', 'selling_price', 'price'], 100.0) + tot_price = _get_float(row, ['total_price', 'revenue', 'total'], qty * unit_price) + + # Ensure store exists + cur.execute( + "INSERT INTO stores (store_id, store_name, city, tier, footfall_index) VALUES (%s, %s, %s, %s, %s) ON CONFLICT (store_id) DO NOTHING", + (store_id, store_id.replace('_', ' ').title(), 'Mumbai', 'standard', 25.0) + ) + + # Insert order header + cur.execute( + """ + INSERT INTO orders (order_id, customer_id, store_id, order_date, payment_method, order_value, delivery_status) + VALUES (%s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (order_id) DO UPDATE SET order_value = EXCLUDED.order_value + """, + (order_id, customer_id, store_id, order_date, 'upi', tot_price, 'delivered') + ) + + # Insert order item + cur.execute( + """ + INSERT INTO order_items (order_id, brand, image_id, quantity, unit_price, total_price) + VALUES (%s, %s, %s, %s, %s, %s) + """, + (order_id, brand, image_id, qty, unit_price, tot_price) + ) + + imported_orders += 1 + total_revenue += tot_price + + except Exception as e: + logger.error("Analytics upload failed: %s", e) + raise HTTPException(status_code=500, detail=f"Database import failed: {e}") + finally: + conn.close() + + return { + "status": "success", + "filename": file.filename, + "rows_total": len(df), + "rows_imported": imported_orders, + "total_revenue": round(total_revenue, 2), + "message": f"Successfully imported {imported_orders} sales transactions (Total Revenue: ₹{total_revenue:,.2f})." + } + + +# --------------------------------------------------------------------------- +# Nutrition Intelligence Excel / CSV Upload +# --------------------------------------------------------------------------- +@router.post("/nutrition") +@router.post("/nutrition/upload") +async def upload_nutrition_file(file: UploadFile = File(...)) -> Dict[str, Any]: + if not file.filename: + raise HTTPException(status_code=400, detail="No file uploaded") + + contents = await file.read() + try: + df = read_df_from_upload(file.filename, contents) + except Exception as e: + raise HTTPException(status_code=400, detail=f"Could not parse Excel/CSV file: {e}") + + if df.empty: + raise HTTPException(status_code=400, detail="Uploaded file contains no data rows") + + conn = _connect() + if not conn: + raise HTTPException(status_code=500, detail="Database connection failed") + + imported_count = 0 + + try: + with conn, conn.cursor() as cur: + nutrition_db.ensure_nutrition_schema() + + for _, r in df.iterrows(): + row = r.to_dict() + brand = _get_str(row, ['brand', 'brand_name'], 'amul').lower() + product_name = _get_str(row, ['product_name', 'title', 'item', 'name'], 'Nutrition Item') + image_id = _get_str(row, ['image_id', 'sku', 'id'], '') + if not image_id: + image_id = f"{brand}_{product_name.lower().replace(' ', '_')}" + + category = _get_str(row, ['category', 'cat'], 'Food') + + calories = _get_float(row, ['calories', 'calories_kcal', 'energy'], 150.0) + protein = _get_float(row, ['protein', 'protein_g'], 5.0) + carbs = _get_float(row, ['carbohydrates', 'carbs', 'carbohydrates_g'], 20.0) + sugar = _get_float(row, ['sugar', 'total_sugar_g', 'sugars'], 4.0) + fiber = _get_float(row, ['fiber', 'dietary_fiber_g'], 2.0) + fat = _get_float(row, ['fat', 'total_fat_g'], 6.0) + sodium = _get_float(row, ['sodium', 'sodium_mg'], 120.0) + calcium = _get_float(row, ['calcium', 'calcium_mg'], 80.0) + iron = _get_float(row, ['iron', 'iron_mg'], 1.5) + vitamin_c = _get_float(row, ['vitamin_c', 'vitamin_c_mg'], 5.0) + + health_score = _get_float(row, ['health_score', 'nutrition_score', 'score'], 78.0) + diet_tags_raw = _get_str(row, ['diet_tags', 'tags', 'diet'], 'High Protein, Gluten Free') + allergens_raw = _get_str(row, ['allergens', 'allergen'], 'None') + + diet_tags = [t.strip() for t in diet_tags_raw.split(',') if t.strip()] + allergens = [a.strip() for a in allergens_raw.split(',') if a.strip()] + + # 1. Upsert nutrition_facts + cur.execute( + """ + INSERT INTO nutrition_facts + (brand, image_id, product_name, category, data_status, data_source, + calories_kcal, protein_g, carbohydrates_g, total_sugar_g, dietary_fiber_g, + total_fat_g, sodium_mg, calcium_mg, iron_mg, vitamin_c_mg) + VALUES (%s, %s, %s, %s, 'verified', 'excel_upload', %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (brand, image_id) DO UPDATE SET + product_name = EXCLUDED.product_name, + category = EXCLUDED.category, + data_status = 'verified', + calories_kcal = EXCLUDED.calories_kcal, + protein_g = EXCLUDED.protein_g, + carbohydrates_g = EXCLUDED.carbohydrates_g, + total_sugar_g = EXCLUDED.total_sugar_g, + dietary_fiber_g = EXCLUDED.dietary_fiber_g, + total_fat_g = EXCLUDED.total_fat_g, + sodium_mg = EXCLUDED.sodium_mg, + calcium_mg = EXCLUDED.calcium_mg, + iron_mg = EXCLUDED.iron_mg, + vitamin_c_mg = EXCLUDED.vitamin_c_mg + """, + (brand, image_id, product_name, category, calories, protein, carbs, sugar, fiber, fat, sodium, calcium, iron, vitamin_c) + ) + + # 2. Upsert nutrition_insights + insights_json = json.dumps({ + "brand": brand, + "image_id": image_id, + "data_status": "verified", + "nutrition_score": health_score, + "health_score": health_score, + "positive_insights": [f"Contains {protein}g protein per 100g", f"Provides {fiber}g dietary fiber"], + "nutritional_cautions": [f"{sugar}g sugar per 100g"], + "diet_tags": diet_tags, + "allergens": allergens + }) + + cur.execute( + """ + INSERT INTO nutrition_insights + (brand, image_id, data_status, nutrition_score, health_score, score_breakdown, + positive_insights, nutritional_cautions, diet_tags, allergens) + VALUES (%s, %s, 'verified', %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (brand, image_id) DO UPDATE SET + data_status = 'verified', + nutrition_score = EXCLUDED.nutrition_score, + health_score = EXCLUDED.health_score, + positive_insights = EXCLUDED.positive_insights, + nutritional_cautions = EXCLUDED.nutritional_cautions, + diet_tags = EXCLUDED.diet_tags, + allergens = EXCLUDED.allergens + """, + (brand, image_id, health_score, health_score, json.dumps({"protein": 85, "fiber": 80}), + [f"Contains {protein}g protein per 100g"], [f"{sugar}g sugar per 100g"], diet_tags, allergens) + ) + + imported_count += 1 + + except Exception as e: + logger.error("Nutrition upload failed: %s", e) + raise HTTPException(status_code=500, detail=f"Database import failed: {e}") + finally: + conn.close() + + return { + "status": "success", + "filename": file.filename, + "rows_total": len(df), + "rows_imported": imported_count, + "message": f"Successfully imported {imported_count} nutritional intelligence items." + } + + +# --------------------------------------------------------------------------- +# Template Downloads +# --------------------------------------------------------------------------- +@router.get("/template/{tab_type}") +def get_sample_template(tab_type: str) -> Response: + tab_type = tab_type.lower() + + if tab_type == 'stores': + content = ( + "store_id,brand,image_id,product_name,category,available_stock,reserved_stock,mrp,cost_price,selling_price,reorder_level,safety_stock\n" + "store_mumbai_1,amul,amul_amul_butter_500ml,Amul Butter 500ml,Dairy,120,5,250.00,200.00,235.00,20,10\n" + "store_mumbai_1,amul,amul_amul_ghee_1l,Amul Ghee 1L,Dairy,85,2,650.00,520.00,610.00,15,5\n" + "store_delhi_2,nestle,nestle_everyday_1kg,Everyday Milk Powder 1kg,Dairy,45,0,420.00,340.00,399.00,10,5\n" + ) + filename = "sample_stores_inventory_template.csv" + elif tab_type == 'analytics': + content = ( + "order_id,store_id,brand,image_id,product_name,order_date,customer_id,quantity,unit_price,total_price\n" + "ORD_9001,store_mumbai_1,amul,amul_amul_butter_500ml,Amul Butter 500ml,2026-08-01 10:30:00,cust_101,2,235.00,470.00\n" + "ORD_9002,store_mumbai_1,amul,amul_amul_ghee_1l,Amul Ghee 1L,2026-08-01 11:15:00,cust_102,1,610.00,610.00\n" + "ORD_9003,store_delhi_2,nestle,nestle_everyday_1kg,Everyday Milk Powder 1kg,2026-08-02 14:20:00,cust_103,3,399.00,1197.00\n" + ) + filename = "sample_analytics_sales_template.csv" + elif tab_type == 'nutrition': + content = ( + "brand,image_id,product_name,category,calories_kcal,protein_g,carbohydrates_g,total_sugar_g,dietary_fiber_g,total_fat_g,sodium_mg,health_score,diet_tags,allergens\n" + "amul,amul_amul_butter_500ml,Amul Butter 500ml,Dairy,717,0.8,0.1,0.0,0.0,81.0,650,75,Vegetarian,Dairy\n" + "amul,amul_amul_ghee_1l,Amul Ghee 1L,Dairy,898,0.0,0.0,0.0,0.0,99.8,0,82,Vegetarian,Keto Friendly\n" + "nestle,nestle_everyday_1kg,Everyday Milk Powder 1kg,Dairy,496,25.5,38.0,38.0,0.0,27.0,350,88,High Protein,Dairy\n" + ) + filename = "sample_nutrition_intelligence_template.csv" + else: + raise HTTPException(status_code=400, detail=f"Unknown template type '{tab_type}'. Use stores, analytics, or nutrition.") + + return PlainTextResponse( + content=content, + media_type="text/csv", + headers={"Content-Disposition": f"attachment; filename={filename}"} + ) diff --git a/app/api/routers/user_products.py b/app/api/routers/user_products.py new file mode 100644 index 0000000..ffae197 --- /dev/null +++ b/app/api/routers/user_products.py @@ -0,0 +1,349 @@ +import io +import json +import logging +import re +from pathlib import Path +from typing import Any, Dict, List, Optional +import pandas as pd +from pydantic import BaseModel, Field +from fastapi import APIRouter, HTTPException, File, UploadFile + +from app.services.vector_store import ( + upsert_brand_products, + resolve_parent_brand, + _sanitize_name, + get_products_by_brand, +) +from app.services.embeddings_service import embed_texts +from app.services.s3_service import s3_service + +logger = logging.getLogger(__name__) +router = APIRouter(prefix="/user/products", tags=["user_products"]) + +SEED_DIR = Path(__file__).resolve().parents[3] / "data" / "seed_catalogs" + + +class AddProductRequest(BaseModel): + brand: str = Field(..., description="Brand name, e.g. Lion Dates") + product_name: str = Field(..., description="Product name, e.g. Lion Dates 450g") + title: Optional[str] = None + category: Optional[str] = None + description: Optional[str] = None + price_range: Optional[str] = None + size_variants: List[str] = Field(default_factory=list) + providers: List[str] = Field(default_factory=list) + highlights: List[str] = Field(default_factory=list) + nutrients: List[str] = Field(default_factory=list) + fssai_license: Optional[str] = None + product_sku: Optional[str] = None + sku_source: Optional[str] = None + hsn_code: Optional[str] = None + final_selling_price: Optional[float] = None + selling_price: Optional[float] = None + barcode: Optional[str] = None + barcode_type: Optional[str] = None + image_url: Optional[str] = None + image_urls: List[str] = Field(default_factory=list) + + +class BatchAddProductsRequest(BaseModel): + products: List[AddProductRequest] + + +def _slugify(text: str) -> str: + return re.sub(r'[^a-z0-9]+', '_', text.lower()).strip('_') + + +def _enrich_and_save_product(req: AddProductRequest) -> Dict[str, Any]: + brand = req.brand.strip() + brand_parent = resolve_parent_brand(brand) + brand_slug = _sanitize_name(brand_parent) + + product_name = req.product_name.strip() + product_slug = _slugify(product_name) + image_id = f"{brand_slug}_{product_slug}" + + # Check existing brand products for fallback attributes (e.g. fssai_license, category, provider_examples) + existing_db = get_products_by_brand(brand_parent) + sample_existing = existing_db[0] if existing_db else {} + + # Category fallback + category = req.category or sample_existing.get("category") or "Health Foods" + + # FSSAI License fallback + fssai_license = req.fssai_license or sample_existing.get("fssai_license") or "10012042000244" + + # Description fallback + description = req.description or ( + f"Introducing {product_name} from the trusted {brand_parent} brand. " + f"A premium quality product offering superior taste, authentic ingredients, and reliable value. " + f"Backed by {brand_parent}'s reputation for quality and consistency." + ) + + # Size variants fallback + size_variants = req.size_variants + if not size_variants: + match = re.search(r'\d+\s*(?:g|kg|ml|l|pack)\b', product_name, re.I) + if match: + size_variants = [match.group(0)] + else: + size_variants = [sample_existing.get("size_variants", ["Default"])[0]] if sample_existing.get("size_variants") else ["Standard"] + + # Price range fallback + price_range = req.price_range + if not price_range: + if req.final_selling_price: + price_range = f"₹{req.final_selling_price}" + elif sample_existing.get("price_range"): + price_range = sample_existing.get("price_range") + else: + price_range = "₹100-250" + + providers = req.providers or list(sample_existing.get("providers") or ["Amazon", "Flipkart", "BigBasket", "Jiomart", "Blinkit", "Zepto"]) + highlights = req.highlights or list(sample_existing.get("highlights") or ["100% Quality Assurance", "Authentic Brand Product"]) + nutrients = req.nutrients or list(sample_existing.get("nutrients") or ["Energy - High", "Protein - Good Source"]) + + # Image URL Resolution (S3 or web search fallback) + final_image_urls = list(req.image_urls) + if req.image_url and req.image_url not in final_image_urls: + final_image_urls.insert(0, req.image_url) + + if not final_image_urls: + # 1. Try S3 service if enabled + if s3_service.enabled: + s3_urls = s3_service.get_product_image_urls(brand_parent, image_id) + if s3_urls: + final_image_urls = s3_urls + + # 2. Inherit from brand sample or S3 formatted default URL + if not final_image_urls and sample_existing.get("image_urls"): + final_image_urls = list(sample_existing.get("image_urls")) + + # 3. Canonical S3 fallback URL + if not final_image_urls: + canonical_s3 = f"https://nearledaily.s3.ap-south-1.amazonaws.com/daily/brands/{brand_slug}/{image_id}/image_000.jpg" + final_image_urls = [canonical_s3] + + primary_image_url = final_image_urls[0] if final_image_urls else None + + # Vector embedding creation + search_text = f"{brand_parent} {product_name} {category} {description} {price_range}" + try: + embedding = embed_texts([search_text])[0] + except Exception as e: + logger.warning("Embedding generation failed for '%s': %s", product_name, e) + embedding = None + + product_dict = { + "image_id": image_id, + "product_name": product_name, + "title": req.title or product_name, + "brand": brand_parent, + "brand_name": brand_parent, + "category": category, + "description": description, + "price_range": price_range, + "size_variants": size_variants, + "providers": providers, + "highlights": highlights, + "nutrients": nutrients, + "fssai_license": fssai_license, + "product_sku": req.product_sku or f"{brand_slug.upper()[:4]}-{product_slug.upper()[:6]}-001", + "sku_source": req.sku_source or "User Upload", + "hsn_code": req.hsn_code, + "final_selling_price": req.final_selling_price or req.selling_price, + "selling_price": req.selling_price or req.final_selling_price, + "barcode": req.barcode, + "barcode_type": req.barcode_type or ("GTIN-13" if req.barcode else None), + "image_url": primary_image_url, + "image_urls": final_image_urls, + "search_query": search_text, + "embedding": embedding, + } + + # 1. Update PostgreSQL Database Table + upsert_brand_products(brand_parent, [product_dict]) + logger.info("✅ Upserted '%s' into PostgreSQL table for brand '%s'", product_name, brand_parent) + + # 2. Update JSON Seed File + _update_json_catalog_file(brand_parent, product_dict) + + return product_dict + + +def _update_json_catalog_file(brand: str, product_dict: Dict[str, Any]) -> None: + SEED_DIR.mkdir(parents=True, exist_ok=True) + + # Determine seed file name (e.g. brand_catalog_lion_dates.json) + brand_slug = _sanitize_name(resolve_parent_brand(brand)) + file_path = SEED_DIR / f"brand_catalog_{brand_slug}.json" + + # Strip embedding before saving to JSON file for clean JSON size + clean_dict = {k: v for k, v in product_dict.items() if k != "embedding"} + + if file_path.exists(): + try: + data = json.loads(file_path.read_text(encoding="utf-8-sig")) + except Exception as e: + logger.warning("Could not read existing catalog JSON %s: %s", file_path.name, e) + data = {"brand": brand, "products": []} + else: + data = { + "brand": brand.lower(), + "search_query": f"{brand} products catalog", + "generation_timestamp": str(Path(__file__).resolve()), + "total_products": 0, + "total_images": 0, + "products": [], + } + + products_list = data.get("products", []) + + # Replace existing or append new product + updated = False + for i, p in enumerate(products_list): + if p.get("image_id") == clean_dict["image_id"] or p.get("product_name") == clean_dict["product_name"]: + products_list[i] = clean_dict + updated = True + break + + if not updated: + products_list.append(clean_dict) + + data["products"] = products_list + data["total_products"] = len(products_list) + data["total_images"] = sum(len(p.get("image_urls") or []) for p in products_list) + + file_path.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8") + logger.info("✅ Updated JSON seed file '%s' (total products: %d)", file_path.name, data["total_products"]) + + +@router.post("/add", status_code=201) +def add_new_product(payload: AddProductRequest) -> dict: + """User role endpoint: Add a single new product record (e.g. Lion Dates 450g). + Automatically enriches details, fetches images, updates PostgreSQL DB, + and updates JSON seed catalog files.""" + try: + res = _enrich_and_save_product(payload) + return { + "status": "success", + "message": f"Successfully added '{payload.product_name}' under brand '{payload.brand}' to database and JSON catalog.", + "product": {k: v for k, v in res.items() if k != "embedding"}, + } + except Exception as e: + logger.exception("Failed to add product '%s'", payload.product_name) + raise HTTPException(status_code=500, detail=f"Failed to add product: {e}") + + +@router.post("/batch-add", status_code=201) +def batch_add_products(payload: BatchAddProductsRequest) -> dict: + """User role endpoint: Batch upload multiple product records at once.""" + added = [] + errors = [] + for req in payload.products: + try: + res = _enrich_and_save_product(req) + added.append({k: v for k, v in res.items() if k != "embedding"}) + except Exception as e: + errors.append({"product_name": req.product_name, "error": str(e)}) + + return { + "status": "success", + "added_count": len(added), + "error_count": len(errors), + "added_products": added, + "errors": errors, + } + + +@router.post("/upload-file", status_code=201) +async def upload_products_file(file: UploadFile = File(...)) -> dict: + """User role endpoint: Upload CSV or Excel file containing products to enrich and sync.""" + filename = file.filename or "" + content = await file.read() + + try: + if filename.endswith(".csv"): + df = pd.read_csv(io.BytesIO(content)) + elif filename.endswith((".xlsx", ".xls")): + df = pd.read_excel(io.BytesIO(content)) + else: + raise HTTPException(status_code=400, detail="Unsupported file format. Please upload a .csv or .xlsx file.") + except Exception as e: + raise HTTPException(status_code=400, detail=f"Failed to parse file '{filename}': {e}") + + # Standardize column headers + col_map = {} + for col in df.columns: + c_clean = str(col).strip().lower() + if "brand" in c_clean: + col_map[col] = "brand" + elif "product" in c_clean or "variant" in c_clean or "name" in c_clean: + col_map[col] = "product_name" + elif "category" in c_clean: + col_map[col] = "category" + elif "range" in c_clean: + col_map[col] = "price_range" + elif "price" in c_clean or "selling" in c_clean or "cost" in c_clean: + col_map[col] = "final_selling_price" + elif "barcode" in c_clean or "gtin" in c_clean or "ean" in c_clean: + col_map[col] = "barcode" + elif "hsn" in c_clean: + col_map[col] = "hsn_code" + elif "description" in c_clean: + col_map[col] = "description" + elif "image" in c_clean or "url" in c_clean: + col_map[col] = "image_url" + + df = df.rename(columns=col_map) + + if "brand" not in df.columns or "product_name" not in df.columns: + raise HTTPException( + status_code=400, + detail="File must contain at least 'Brand Name' and 'Product Name' columns.", + ) + + added = [] + errors = [] + + for idx, row in df.iterrows(): + b_val = str(row.get("brand") or "").strip() + p_val = str(row.get("product_name") or "").strip() + if not b_val or not p_val or b_val.lower() == "nan" or p_val.lower() == "nan": + continue + + try: + fps_raw = row.get("final_selling_price") + fps = None + if pd.notna(fps_raw): + try: + fps = float(fps_raw) + except Exception: + pass + + req = AddProductRequest( + brand=b_val, + product_name=p_val, + category=str(row.get("category")) if pd.notna(row.get("category")) else None, + price_range=str(row.get("price_range")) if pd.notna(row.get("price_range")) else None, + final_selling_price=fps, + barcode=str(row.get("barcode")) if pd.notna(row.get("barcode")) else None, + hsn_code=str(row.get("hsn_code")) if pd.notna(row.get("hsn_code")) else None, + description=str(row.get("description")) if pd.notna(row.get("description")) else None, + image_url=str(row.get("image_url")) if pd.notna(row.get("image_url")) else None, + ) + + res = _enrich_and_save_product(req) + added.append({k: v for k, v in res.items() if k != "embedding"}) + except Exception as e: + errors.append({"row": idx + 1, "product_name": p_val, "error": str(e)}) + + return { + "status": "success", + "filename": filename, + "total_rows_processed": len(added) + len(errors), + "added_count": len(added), + "error_count": len(errors), + "added_products": added, + "errors": errors, + } diff --git a/app/api/schemas.py b/app/api/schemas.py new file mode 100644 index 0000000..8cf0365 --- /dev/null +++ b/app/api/schemas.py @@ -0,0 +1,152 @@ +"""Pydantic request/response models for the FastAPI layer.""" +from __future__ import annotations + +from typing import List, Optional + +from pydantic import BaseModel, Field + + +# --------------------------------------------------------------------------- +# Shared +# --------------------------------------------------------------------------- + +class ProductOut(BaseModel): + image_id: str + image_url: Optional[str] = None + image_urls: List[str] = Field(default_factory=list) + brand: str + product_name: str + title: Optional[str] = None + category: Optional[str] = None + description: Optional[str] = None + price_range: Optional[str] = None + size_variants: List[str] = Field(default_factory=list) + providers: List[str] = Field(default_factory=list) + highlights: List[str] = Field(default_factory=list) + nutrients: List[str] = Field(default_factory=list) + fssai_license: Optional[str] = None + product_sku: Optional[str] = None + sku_source: Optional[str] = None + hsn_code: Optional[str] = None + final_selling_price: Optional[float] = None + selling_price: Optional[float] = None + barcode: Optional[str] = None + barcode_type: Optional[str] = None + + +class SourceProductOut(BaseModel): + image_id: str + image_url: Optional[str] = None + image_urls: List[str] = Field(default_factory=list) + brand: str + product_name: str + title: Optional[str] = None + category: Optional[str] = None + description: Optional[str] = None + price_range: Optional[str] = None + size_variants: List[str] = Field(default_factory=list) + providers: List[str] = Field(default_factory=list) + highlights: List[str] = Field(default_factory=list) + nutrients: List[str] = Field(default_factory=list) + fssai_license: Optional[str] = None + product_sku: Optional[str] = None + sku_source: Optional[str] = None + hsn_code: Optional[str] = None + final_selling_price: Optional[float] = None + selling_price: Optional[float] = None + barcode: Optional[str] = None + barcode_type: Optional[str] = None + similarity: float + + +# --------------------------------------------------------------------------- +# Health +# --------------------------------------------------------------------------- + +class HealthOut(BaseModel): + status: str + database: bool + ollama: bool + ollama_model: str + embeddings_model: str + + +# --------------------------------------------------------------------------- +# Brands / catalog browsing +# --------------------------------------------------------------------------- + +class BrandsOut(BaseModel): + brands: List[str] + + +class CategoriesOut(BaseModel): + brand: str + categories: List[str] + + +class ProductListOut(BaseModel): + brand: str + total: int + limit: int + offset: int + products: List[ProductOut] + + +class AllProductsOut(BaseModel): + total: int + limit: int + offset: int + products: List[ProductOut] + + +# --------------------------------------------------------------------------- +# Semantic search (retrieval only, no LLM generation) +# --------------------------------------------------------------------------- + +class SearchOut(BaseModel): + query: str + brand: Optional[str] = None + results: List[SourceProductOut] + + +# --------------------------------------------------------------------------- +# RAG chat +# --------------------------------------------------------------------------- + +class ChatTurn(BaseModel): + role: str = Field(..., description="'user' or 'assistant'") + content: str + + +class ChatRequest(BaseModel): + query: str = Field(..., min_length=1, max_length=2000) + brand: Optional[str] = Field(None, description="Restrict retrieval to a single brand") + category: Optional[str] = Field(None, description="Restrict retrieval to a category") + top_k: Optional[int] = Field(None, ge=1, le=15) + history: Optional[List[ChatTurn]] = Field(default=None, description="Prior turns for follow-up questions") + + +class ChatResponseOut(BaseModel): + answer: str + query: str + brand: Optional[str] = None + detected_category: Optional[str] = Field( + None, description="Product category auto-detected from the query and used to scope retrieval, if any" + ) + sources: List[SourceProductOut] + + +# --------------------------------------------------------------------------- +# Catalog generation (admin/ingestion trigger) +# --------------------------------------------------------------------------- + +class CatalogGenerateRequest(BaseModel): + brand: str = Field(..., min_length=1, max_length=120) + max_products: int = Field(50, ge=1, le=300) + + +class CatalogJobOut(BaseModel): + job_id: str + brand: str + status: str + detail: Optional[str] = None diff --git a/app/api/store_job_store.py b/app/api/store_job_store.py new file mode 100644 index 0000000..506e99a --- /dev/null +++ b/app/api/store_job_store.py @@ -0,0 +1,56 @@ +""" +In-memory job tracker for the store-intelligence seed/train admin +endpoints - same pattern and same trade-offs as `app/api/job_store.py` +(process-local, lost on restart, fine for a single-developer/single- +process deployment), kept as a separate small module rather than +overloading `job_store.Job.brand` for a job type that isn't +brand-specific (seeding stores and training models operate over the +whole catalog, not one brand). +""" +from __future__ import annotations + +import threading +import time +import uuid +from dataclasses import dataclass, field +from typing import Dict, Optional + + +@dataclass +class StoreJob: + job_id: str + kind: str # "seed" | "train" + status: str = "pending" # pending -> running -> done | failed + detail: Optional[str] = None + result: Optional[dict] = None + created_at: float = field(default_factory=time.time) + updated_at: float = field(default_factory=time.time) + + +class StoreJobStore: + def __init__(self) -> None: + self._jobs: Dict[str, StoreJob] = {} + self._lock = threading.Lock() + + def create(self, kind: str) -> StoreJob: + job = StoreJob(job_id=str(uuid.uuid4()), kind=kind) + with self._lock: + self._jobs[job.job_id] = job + return job + + def update(self, job_id: str, status: str, detail: Optional[str] = None, result: Optional[dict] = None) -> None: + with self._lock: + job = self._jobs.get(job_id) + if job: + job.status = status + job.detail = detail + if result is not None: + job.result = result + job.updated_at = time.time() + + def get(self, job_id: str) -> Optional[StoreJob]: + with self._lock: + return self._jobs.get(job_id) + + +store_job_store = StoreJobStore() diff --git a/app/api/store_schemas.py b/app/api/store_schemas.py new file mode 100644 index 0000000..d29fa64 --- /dev/null +++ b/app/api/store_schemas.py @@ -0,0 +1,95 @@ +from __future__ import annotations + +from typing import Any, Dict, List, Optional + +from pydantic import BaseModel, Field + + +class StoreOut(BaseModel): + store_id: str + store_name: str + city: Optional[str] = None + tier: str + footfall_index: float + + +class StoreProductOut(BaseModel): + store_id: str + brand: str + image_id: str + title: Optional[str] = None + category: Optional[str] = None + available_stock: int + reserved_stock: int + reorder_level: int + safety_stock: int + stock_status: str + mrp: float + cost_price: float + selling_price: float + profit_margin: float + gross_profit_pct: float + markup_pct: float + image_url: Optional[str] = None + image_urls: Optional[List[str]] = None + fssai_license: Optional[str] = None + + +class ProductStorePriceOut(BaseModel): + store_id: str + store_name: Optional[str] = None + tier: Optional[str] = None + available_stock: int + mrp: float + cost_price: float + selling_price: float + + +class DiscountOut(BaseModel): + store_id: str + brand: str + image_id: str + original_price: float + discount_pct: float + final_price: float + savings: float + model_version: Optional[str] = None + + +class TrendingItemOut(BaseModel): + brand: str + image_id: str + trend_score: float + rank: int + + +class RecommendationOut(BaseModel): + brand: str + image_id: str + similarity_score: float + method: str = "hybrid" + signals: Optional[Dict[str, float]] = None + + +class SeedRequest(BaseModel): + reset_orders: bool = Field(default=True, description="Clear existing simulated order history before re-simulating") + days: int = Field(default=90, ge=7, le=365) + seed: int = Field(default=42) + + +class SeedResponse(BaseModel): + stores: int + store_products: Dict[str, int] + orders: int + order_items: int + + +class TrainRequest(BaseModel): + models: Optional[List[str]] = Field( + default=None, + description="Subset of models to (re)train: discount, trending, popularity, forecast, store_performance, purchase_propensity. Omit to train all.", + ) + + +class TrainResponse(BaseModel): + trained: Dict[str, Dict[str, Any]] diff --git a/app/core/__init__.py b/app/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/core/catalog_engine.py b/app/core/catalog_engine.py new file mode 100644 index 0000000..7955bf0 --- /dev/null +++ b/app/core/catalog_engine.py @@ -0,0 +1,967 @@ +""" +AI Product Catalog Engine +Main orchestrator that combines a local Ollama LLM with an open-source, +pure-Python image discovery pipeline (Open*Facts / Wikimedia Commons / +DuckDuckGo / Google CSE, with a Playwright-rendered Bing search as a last +resort). The Node.js/Crawlee scraping layer that used to live here has +been removed - see app/services/image_search.py and +app/services/playwright_image_fallback.py for details. +""" +import asyncio +import json +import sys +from pathlib import Path +from typing import Dict, List, Optional, Any +import logging + +# Add app directory to path +sys.path.append(str(Path(__file__).parent.parent)) + +from app.services.ollama_service import fetch_brand_catalog_with_gemini, fetch_brand_catalog_exhaustive, fetch_product_details +from app.services.image_search import find_all_image_urls, find_product_quantity_openfacts +from app.infrastructure.settings import USE_OLLAMA +from app.services.embeddings_service import embed_texts +from app.services.vector_store import ensure_brand_schema, upsert_brand_products, get_existing_product_image_id +from app.services.s3_service import s3_service +from app.services.brand_registry import resolve_parent_brand +from app.services import price_estimator +from app.services.category_registry import detect_category_from_text, sanitize_category_language + +# Configure logging +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + + +def generate_product_highlights(product: Dict[str, Any], brand: str) -> List[str]: + """ + Generate key highlights and selling points for a product + """ + # Ensure we have a dictionary + if not isinstance(product, dict): + product = {} + + highlights = [] + title = str(product.get('title', '')).strip() + description = str(product.get('description', '')).strip() + category = str(product.get('category', '')).strip() + price_range = str(product.get('price_range', '')).strip() + size_variants = product.get('size_variants', []) + + # Ensure size_variants is a list + if not isinstance(size_variants, list): + size_variants = [] + + # Brand highlight + if brand: + highlights.append(f"{brand} Brand - Trusted Quality") + + # Category highlight + if category and category != 'Uncategorized': + highlights.append(f"{category} Category") + + # Size variety highlight - show sizes with prices if available + if len(size_variants) > 1: + size_display = [] + for v in size_variants: + if isinstance(v, dict): + size = v.get('size', '') + price = v.get('price', '') + if size and price: + size_display.append(f"{size} - {price}") + elif size: + size_display.append(size) + elif isinstance(v, str) and v.strip(): + # Check if it already has price format + if ' - ₹' in v: + size_display.append(v) + else: + size_display.append(v) + + if size_display: + highlights.append(f"Available in {len(size_display)} sizes: {', '.join(size_display[:3])}") + elif len(size_variants) == 1: + # Single size variant + v = size_variants[0] + if isinstance(v, dict): + size = v.get('size', '') + price = v.get('price', '') + if size and price: + highlights.append(f"Available in {size} - {price}") + elif size: + highlights.append(f"Available in {size}") + elif isinstance(v, str) and v.strip(): + highlights.append(f"Available in {v}") + + # Quality indicators from description + desc_lower = description.lower() if description else '' + quality_indicators = [ + ('crispy', 'Crispy Texture'), + ('fresh', 'Fresh & Natural'), + ('healthy', 'Healthy Choice'), + ('premium', 'Premium Quality'), + ('organic', 'Organic Ingredients'), + ('low fat', 'Low Fat'), + ('sugar free', 'Sugar Free'), + ('gluten free', 'Gluten Free'), + ('whole grain', 'Whole Grain'), + ('fortified', 'Fortified with Vitamins'), + ('no preservatives', 'No Preservatives'), + ('baked', 'Baked, Not Fried'), + ('crunchy', 'Crunchy Bite'), + ('soft', 'Soft & Tender'), + ('flaky', 'Flaky Layers'), + ('rich', 'Rich Taste'), + ('mild', 'Mild Flavor'), + ('spicy', 'Spicy Kick'), + ('sweet', 'Sweet Taste'), + ('savory', 'Savory Flavor') + ] + + for indicator, highlight in quality_indicators: + if indicator in desc_lower and highlight not in highlights: + highlights.append(highlight) + break # Only add one quality indicator + + # Image count highlight - removed as it's not a customer benefit + + # Provider availability highlight + providers = product.get('providers', []) + if len(providers) > 1: + highlights.append(f"Available on {len(providers)} platforms") + + # Value proposition based on category + if 'biscuit' in category.lower() or 'cookie' in category.lower(): + highlights.append("Perfect with Tea/Coffee") + elif 'snack' in category.lower(): + highlights.append("Great for Snacking") + elif 'bread' in category.lower(): + highlights.append("Daily Bread Option") + elif 'milk' in category.lower() or 'dairy' in category.lower(): + highlights.append("Rich in Calcium") + + # Ensure we have at least 3 highlights + if len(highlights) < 3: + highlights.extend([ + "Popular Choice", + "Easy to Find", + "Customer Favorite" + ]) + + return highlights[:6] # Return max 6 highlights + + +def generate_nutrients_info(product: Dict[str, Any], brand: str) -> List[str]: + """ + Generate nutritional information for a product based on category and title + """ + # Ensure we have a dictionary + if not isinstance(product, dict): + product = {} + + nutrients = [] + title = str(product.get('title', '')).lower() + category = str(product.get('category', '')).lower() + description = str(product.get('description', '')).lower() + + # Combine all text for analysis + all_text = f"{title} {category} {description}" + + # Vitamin content based on product type + if any(word in all_text for word in ['biscuit', 'cookie', 'cracker', 'bread', 'cereal']): + nutrients.extend([ + "Vitamin B1 (Thiamine) - Energy metabolism", + "Vitamin B2 (Riboflavin) - Cell function", + "Vitamin B3 (Niacin) - Nervous system", + "Iron - Blood health", + "Folic Acid - Cell growth" + ]) + + if any(word in all_text for word in ['milk', 'dairy', 'yogurt', 'cheese']): + nutrients.extend([ + "Vitamin A - Vision health", + "Vitamin D - Bone strength", + "Calcium - Strong bones", + "Protein - Muscle building", + "Vitamin B12 - Nerve function" + ]) + + if any(word in all_text for word in ['fruit', 'juice', 'jam', 'preserve']): + nutrients.extend([ + "Vitamin C - Immune system", + "Vitamin A - Antioxidant", + "Fiber - Digestive health", + "Potassium - Heart health", + "Folate - Cell division" + ]) + + if any(word in all_text for word in ['nut', 'almond', 'cashew', 'walnut']): + nutrients.extend([ + "Vitamin E - Antioxidant", + "Magnesium - Muscle function", + "Omega-3 - Heart health", + "Protein - Muscle building", + "Fiber - Digestive health" + ]) + + # General nutrients for any food product + if not nutrients: + nutrients.extend([ + "Vitamin B Complex - Energy", + "Iron - Blood health", + "Fiber - Digestive health", + "Protein - Muscle building", + "Calcium - Bone strength" + ]) + + # Add specific nutrients based on keywords in description + if 'fortified' in all_text or 'enriched' in all_text: + nutrients.extend([ + "Fortified with Essential Vitamins", + "Enriched with Minerals" + ]) + + if 'whole grain' in all_text or 'wheat' in all_text: + nutrients.extend([ + "Whole Grain Fiber", + "Complex Carbohydrates" + ]) + + if 'organic' in all_text: + nutrients.extend([ + "Organic Nutrients", + "Natural Vitamins" + ]) + + # Remove duplicates and limit to 8 nutrients + unique_nutrients = [] + for nutrient in nutrients: + if nutrient not in unique_nutrients: + unique_nutrients.append(nutrient) + + return unique_nutrients[:8] + + +def generate_detailed_description(product: Dict[str, Any], brand: str) -> str: + """ + Generate a detailed, content-rich description for a product + """ + # Ensure we have a dictionary and extract values safely + if not isinstance(product, dict): + product = {} + + title = str(product.get('title', '')).strip() + category = str(product.get('category', '')).strip() + price_range = str(product.get('price_range', '')).strip() + size_variants = product.get('size_variants', []) + + # Ensure size_variants is a list + if not isinstance(size_variants, list): + size_variants = [] + + # Base description components + description_parts = [] + + # Opening with brand and product + if brand and title: + description_parts.append(f"Introducing {title} from the trusted {brand} brand, a premium quality product that delivers exceptional taste and satisfaction.") + + # Category-specific descriptions + title_lower = title.lower() if title else '' + category_lower = category.lower() if category else '' + + if any(word in title_lower for word in ['biscuit', 'cookie']): + description_parts.append("These exquisite biscuits are meticulously crafted using premium ingredients and time-honored recipes that have been perfected over generations. Each bite delivers an irresistible combination of rich, buttery flavor and satisfying crunch that melts beautifully in your mouth. Made with the finest flour, real butter, and carefully selected spices, these biscuits offer a luxurious snacking experience that's perfect for morning tea, afternoon breaks, or evening relaxation. The traditional baking process ensures consistent quality and authentic taste that appeals to both young and old. Whether enjoyed alone or paired with your favorite beverage, these biscuits provide a moment of pure indulgence that transforms any ordinary day into something special. The carefully balanced texture and flavor profile make them an ideal choice for gifting, entertaining guests, or simply treating yourself to a premium snack experience.") + elif any(word in title_lower for word in ['bread', 'loaf']): + description_parts.append("This freshly baked bread is crafted using traditional methods and premium ingredients, delivering an authentic taste that brings warmth to every meal. Made with carefully selected flour, natural yeast, and pure water, each loaf features a golden crust and soft, airy interior that's perfect for sandwiches, toast, or simply enjoyed with butter. The slow fermentation process develops complex flavors and ensures optimal texture that stays fresh longer. Whether you're making breakfast toast, lunch sandwiches, or dinner accompaniments, this bread provides the perfect foundation for any culinary creation. The wholesome ingredients and traditional baking techniques make it a healthy choice for the whole family, while the consistent quality and taste make it a reliable staple for your kitchen.") + elif any(word in title_lower for word in ['milk', 'dairy']): + description_parts.append("This premium dairy product is sourced from the finest farms and processed using advanced techniques to preserve its natural goodness and nutritional value. Rich in essential vitamins, minerals, and proteins, it provides a wholesome foundation for your daily nutrition while delivering the pure, authentic taste that only comes from quality ingredients. The creamy texture and fresh flavor make it perfect for drinking directly, adding to tea and coffee, or using in cooking and baking applications. Whether you're preparing breakfast cereals, making smoothies, or creating delicious desserts, this dairy product enhances every recipe with its natural richness and nutritional benefits. The careful processing ensures maximum freshness and extended shelf life, making it a reliable choice for busy households and health-conscious consumers who demand quality and taste in their daily nutrition.") + elif any(word in title_lower for word in ['snack', 'chips', 'namkeen']): + description_parts.append("This irresistible snack combines the perfect crunch with bold, authentic flavors that satisfy your cravings and energize your day. Crafted using traditional recipes and carefully selected ingredients, each piece delivers an explosion of taste that keeps you reaching for more. The expertly balanced seasoning and texture create a snacking experience that's both satisfying and addictive, making it perfect for movie nights, parties, or anytime you need a flavorful pick-me-up. Whether you're enjoying it during work breaks, sharing with friends, or indulging in a solo treat, this snack delivers consistent quality and taste that never disappoints. The convenient packaging and long shelf life make it an ideal choice for busy lifestyles, while the authentic flavors and premium ingredients ensure you're getting the best snacking experience possible.") + elif any(word in title_lower for word in ['cake', 'muffin', 'sweet']): + description_parts.append("This delectable sweet treat is crafted using the finest ingredients and time-tested baking techniques that create an unforgettable taste experience. Each bite offers a perfect harmony of sweetness, texture, and flavor that delights the senses and satisfies your sweet tooth. Made with premium flour, fresh eggs, real butter, and natural flavorings, this confection delivers the authentic taste of homemade goodness with the convenience of store-bought quality. Whether you're celebrating special occasions, treating yourself to a daily indulgence, or sharing with loved ones, this sweet treat brings joy and satisfaction to every moment. The carefully balanced recipe ensures consistent quality and taste, while the rich, moist texture and delightful flavor profile make it a favorite among dessert lovers of all ages.") + else: + description_parts.append("This exceptional product represents the perfect blend of quality craftsmanship and premium ingredients, delivering an experience that exceeds expectations in every way. Meticulously crafted using time-honored techniques and carefully selected materials, it offers superior quality and taste that stands out in today's competitive market. The attention to detail in every aspect of production ensures consistent excellence, while the commitment to using only the finest ingredients guarantees authentic flavor and lasting satisfaction. Whether you're using it for daily needs or special occasions, this product provides reliable performance and exceptional value that makes it a smart choice for discerning consumers. The combination of traditional methods and modern quality control creates a product that not only meets but exceeds the highest standards of excellence.") + + # Add size and variety information + if size_variants and len(size_variants) > 1: + sizes = [] + for v in size_variants: + if isinstance(v, dict): + s = v.get('size', '') + if s: + sizes.append(s) + elif isinstance(v, str) and v.strip(): + sizes.append(v.strip()) + if sizes: + description_parts.append(f"Available in multiple convenient sizes including {', '.join(sizes[:3])}{' and more' if len(sizes) > 3 else ''}, making it easy to choose the perfect portion for your needs.") + elif size_variants and len(size_variants) == 1: + v = size_variants[0] + if isinstance(v, dict): + size = v.get('size', '') + elif isinstance(v, str): + size = v.strip() + else: + size = '' + if size: + description_parts.append(f"Conveniently packaged in {size} size, perfect for individual consumption or sharing with family and friends.") + + # Add pricing information + if price_range: + description_parts.append(f"Priced affordably at {price_range}, this product offers excellent value for money without compromising on quality.") + + # Add quality and health benefits + if any(word in title_lower for word in ['whole', 'grain', 'wheat']): + description_parts.append("Made with whole grains and natural ingredients, this product provides essential nutrients and dietary fiber, making it a healthier choice for conscious consumers.") + elif any(word in title_lower for word in ['low', 'fat', 'sugar']): + description_parts.append("Formulated to be low in fat and sugar while maintaining great taste, this product is perfect for health-conscious individuals who don't want to compromise on flavor.") + elif any(word in title_lower for word in ['organic', 'natural']): + description_parts.append("Made with organic and natural ingredients, this product is free from artificial preservatives and additives, ensuring you get the purest and most natural taste experience.") + + # Add usage suggestions + if any(word in title_lower for word in ['biscuit', 'cookie', 'cracker']): + description_parts.append("Perfect for enjoying with tea, coffee, or as a standalone snack. Great for breakfast, evening tea time, or as a quick energy boost during busy days.") + elif any(word in title_lower for word in ['bread', 'loaf']): + description_parts.append("Versatile and convenient, perfect for making sandwiches, toast, or as an accompaniment to meals. Ideal for breakfast, lunch, or dinner preparations.") + elif any(word in title_lower for word in ['milk', 'dairy']): + description_parts.append("Perfect for drinking directly, adding to tea or coffee, or using in cooking and baking. Essential for daily nutrition and culinary needs.") + + # Add brand trust and quality assurance + if brand: + description_parts.append(f"Backed by {brand}'s reputation for quality and consistency, this product undergoes rigorous quality checks to ensure it meets the highest standards before reaching your table.") + + # Add storage and shelf life information + description_parts.append("Store in a cool, dry place away from direct sunlight. Check the packaging for specific storage instructions and best before date to ensure optimal freshness and taste.") + + # Add final value proposition + description_parts.append("Experience the perfect combination of taste, quality, and value that makes this product a favorite among consumers. Whether you're enjoying it alone or sharing with family, it promises to deliver satisfaction with every bite.") + + # Join all parts and clean up + full_description = ' '.join(description_parts) + + # Ensure minimum length and clean up + if len(full_description) < 200: + full_description += f" This premium {category.lower() if category else 'product'} from {brand} is designed to meet your daily needs with uncompromising quality and taste that you can trust." + + return full_description + +class ProductCatalogEngine: + """ + Main engine that orchestrates the AI (Ollama) + open-source image + discovery pipeline. + + NOTE: this used to be "AI + Crawlee" - the Node.js/Crawlee/Playwright + scraping layer has been removed (see app/services/image_search.py and + app/services/playwright_image_fallback.py for the replacement, pure + Python, pipeline and the reasoning for why). The class/docstring names + are kept close to the original for continuity but no longer depend on + Node.js or npm being installed at all. + """ + + def __init__(self): + self.gemini_enabled = USE_OLLAMA + self.max_products = 200 + + def _generate_mock_price(self, size: str, product_title: str = '', brand: str = '', category: str = '') -> str: + """Generate a realistic price for a size variant. + + This used to be a hand-rolled ₹/gram formula with no grounding in + real retail prices (see price_estimator.py for the full writeup of + why that produced unrealistic numbers). It now delegates to + `price_estimator.estimate_price`, which uses category-specific + price bands calibrated to typical Indian retail MRPs, a non-linear + pack-size curve (small packs cost more per gram, bulk packs cost + less), and a price floor so tiny packs never look absurdly cheap. + """ + price = price_estimator.estimate_price(size, product_title, brand, category) + return f"₹{price}" + + def _select_best_images(self, image_urls: List[str], product_title: str, brand: str, max_images: int = 20) -> List[str]: + """Select the best images from a list of URLs based on quality and relevance""" + if not image_urls: + return [] + + # Filter and score images + scored_images = [] + + for url in image_urls: + if not url or not url.startswith('http'): + continue + + score = 0 + + # Domain quality scoring - prioritize reliable sources. + # Includes major Indian e-commerce CDNs, official brand domains + # (Britannia, Cadbury/Mondelez, Parle, Nestle, ITC, etc.), and + # global e-commerce platforms. Add new brands here as needed. + url_lower = url.lower() + if any(domain in url_lower for domain in ['media.britannia.co.in', 'britannia.co.in']): + score += 20 # Britannia official images + elif any(domain in url_lower for domain in ['cadbury', 'mondelezinternational.com', 'mondelez.com', 'cadburygifting.com']): + score += 20 # Cadbury/Mondelez official images + elif any(domain in url_lower for domain in ['nestle', 'nestle.in', 'nestle.com']): + score += 20 # Nestle official images + elif any(domain in url_lower for domain in ['parleproducts.com', 'parle.biz']): + score += 20 # Parle official images + elif any(domain in url_lower for domain in ['itc.in', 'itcportal.com']): + score += 20 # ITC official images + elif any(domain in url_lower for domain in ['bbassets.com', 'bigbasket.com']): + score += 15 # BigBasket - usually reliable + elif any(domain in url_lower for domain in ['flipkart.com']): + score += 12 # Flipkart - usually reliable + elif any(domain in url_lower for domain in ['amazon.in', 'amazon.com']): + score += 10 # Amazon - usually reliable + elif any(domain in url_lower for domain in ['jiomart.com', 'grofers.com']): + score += 5 # JioMart/Grofers - often blocked (lower priority) + else: + score += 8 # Other domains - medium priority + + # Image quality indicators + if any(ext in url_lower for ext in ['.jpg', '.jpeg']): + score += 2 # Prefer JPG + elif any(ext in url_lower for ext in ['.png', '.webp']): + score += 1 # Other formats + + # Size indicators (larger images are usually better) + if any(size in url_lower for size in ['large', 'high', 'hd', 'original']): + score += 3 + elif any(size in url_lower for size in ['medium', 'med']): + score += 2 + elif any(size in url_lower for size in ['small', 'thumb']): + score -= 2 + + # Product relevance + product_words = product_title.lower().split() + for word in product_words: + if word in url_lower: + score += 1 + + # Brand relevance + if brand.lower() in url_lower: + score += 2 + + # Product-context positive scoring: prefer URLs that indicate + # a packaged-good photo (bottles, cans, packaging, labels) + # rather than a generic / artistic photo that happens to share + # the product's name. + if any(kw in url_lower for kw in ['packaging', 'product', 'pack', 'bottle', 'can', 'tin', 'jar', 'box', 'container', 'front', 'label']): + score += 3 + + # Non-product negative scoring: heavily penalize URLs whose + # path contains words that suggest the image is *not* of a + # packaged consumer good (e.g. a car named "Sprite", a + # portrait of a person named "Tiger", etc.). + if any(kw in url_lower for kw in ['car', 'vehicle', 'automotive', 'motorcycle', 'motorsport', 'racing', 'bike']): + score -= 10 + if any(kw in url_lower for kw in ['people', 'person', 'portrait', 'celeb', 'actor', 'actress', 'player']): + score -= 10 + if any(kw in url_lower for kw in ['animal', 'pet', 'dog', 'cat', 'bird', 'fish', 'nature', 'landscape', 'scenery']): + score -= 8 + if any(kw in url_lower for kw in ['tour', 'travel', 'building', 'architecture', 'house', 'garden']): + score -= 6 + if any(kw in url_lower for kw in ['flower', 'rose', 'floral', 'petal', 'bouquet', 'botanical', 'plant', 'herb', 'tree', 'nature', 'garden', 'outdoor']): + score -= 8 + # Scientific/technical/research content - heavily penalize + # because search engines frequently return cell biology images, + # gene diagrams, amino acid charts, and medical schematics + # when the product name contains common English words like + # "perk", "crunch", "boost", "active", etc. + if any(kw in url_lower for kw in ['cell', 'cells', 'gene', 'genes', 'genome', 'genetic', 'genomics', 'dna', 'rna', 'protein', 'proteins', 'amino', 'enzyme', 'molecular', 'biology', 'biologist', 'laboratory', 'lab', 'microscope', 'microscopy']): + score -= 15 + if any(kw in url_lower for kw in ['scientific', 'research', 'journal', 'article', 'figure', 'supplement', 'nutritional', 'ingredient', 'chemical', 'chemistry', 'formula', 'compound']): + score -= 12 + if any(kw in url_lower for kw in ['diagram', 'schematic', 'chart', 'graph', 'infographic', 'illustration', 'anatomy', 'cross-section', 'cutaway']): + score -= 10 + if any(kw in url_lower for kw in ['clinical', 'medical', 'hospital', 'patient', 'diagnosis', 'treatment', 'therapy', 'surgery', 'pharma', 'drug', 'medicine']): + score -= 10 + if any(kw in url_lower for kw in ['steering', 'epas', 'motor', 'engine', 'transmission', 'suspension', 'brake', 'drivetrain', 'automotive-parts']): + score -= 12 + + # Avoid problematic URLs + if any(bad in url_lower for bad in ['encrypted-tbn', 'googleusercontent', 'data:', 'placeholder']): + score -= 5 + + scored_images.append((score, url)) + + # Sort by score (highest first) and take top images + scored_images.sort(key=lambda x: x[0], reverse=True) + best_images = [url for score, url in scored_images[:max_images]] + + logger.info(f"📸 Selected {len(best_images)} best images for {product_title}") + return best_images + + def search_with_python(self, query: str, brand: str) -> List[str]: + """Find product images using the pure-Python, open-source image + pipeline (Open*Facts -> Wikimedia Commons -> DuckDuckGo -> Google + CSE -> Playwright/Bing last resort). See image_search.py for the + full source priority order and rationale. + + This used to be one of two parallel paths, the other being + `search_with_crawlee()` which shelled out to Node.js/Crawlee + scripts. That path has been removed - on a machine without `npm + install` already run inside cli/ (the state of every fresh + checkout of this project), it always failed after burning up to + 180 seconds per product on dead subprocess calls before this + Python path ever got a chance to run, which was the single + biggest cause of "no images get generated" in practice. + """ + try: + return find_all_image_urls(query, brand) + except Exception as e: + logger.error(f"Image search error: {e}") + return [] + + async def generate_catalog(self, brand: str, search_query: str = None, use_brand_crawl: bool = False, max_products: int = 200) -> Dict[str, Any]: + """ + Main pipeline: Generate comprehensive product catalog. + + `use_brand_crawl` is kept for backward API compatibility but is now + a no-op: it used to shell out to a Node.js/Crawlee brand-catalog + scraper (`cli/brand_catalog_scraper.js`), which has been removed + (see image_search.py / playwright_image_fallback.py docstrings for + why the Node/Crawlee layer was replaced project-wide). Product + discovery is handled entirely by the Ollama LLM step below. + """ + logger.info(f"🚀 Starting catalog generation for brand: {brand}") + + # Step 1: Discover products via the Ollama LLM. + logger.info("🤖 Using Ollama (exhaustive) for product discovery...") + llm_products = [] + if self.gemini_enabled: + llm_result = fetch_brand_catalog_exhaustive(brand, max_products=max_products) + if not llm_result or not llm_result.get('products'): + logger.info("Fallback to basic LLM catalog...") + llm_result = fetch_brand_catalog_with_gemini(brand) + if llm_result and llm_result.get('products'): + llm_products = llm_result['products'] + logger.info(f"✅ Ollama found {len(llm_products)} products") + else: + logger.warning("❌ Ollama returned no products") + discovered_products = llm_products + + # Build a LLM lookup for enrichment (title -> details) when available + llm_lookup: Dict[str, Dict[str, Any]] = {} + if self.gemini_enabled: + try: + logger.info("🤖 Fetching Ollama catalog for enrichment lookup...") + llm_result = fetch_brand_catalog_exhaustive(brand, max_products=max_products) + if llm_result and llm_result.get('products'): + for p in llm_result['products']: + k = (p.get('title') or '').strip().lower() + if k: + llm_lookup[k] = p + logger.info(f"✅ Ollama lookup loaded: {len(llm_lookup)} titles") + except Exception as e: + logger.warning(f"LLM enrichment lookup failed: {e}") + + # Step 2: Enhance each product with comprehensive image search + enhanced_products = [] + + # Cap products by max_products + discovered_products = discovered_products[:max_products] + + total_products_to_process = len(discovered_products) + for i, product in enumerate(discovered_products): + product_title = product.get('title', '') + logger.info(f"🔍 Processing product {i+1}/{total_products_to_process}: {product_title}") + + # Strip brand prefix from title if present (avoids redundant + # "Cadbury Perk Cadbury Perk Crunch" style queries that confuse + # image search APIs). + _title_clean = product_title + _brand_lower = brand.lower() + _title_lower = product_title.lower() + if _title_lower.startswith(_brand_lower): + _title_clean = product_title[len(brand):].strip() + if not _title_clean: + _title_clean = product_title + + # Build a more specific search query: add product-category + # context words ("chocolate", "wafer", "packaging", etc.) for + # common English-word brand/product names that confuse image + # search (e.g. "Perk", "Crunch", "Boost", "Active"). + search_query_full = f"{brand} {_title_clean}" + + # Get images from the open-source Python image pipeline + all_images = self.search_with_python(_title_clean, brand) + + # Use LLM-derived simple pricing (size_variants, price_ranges, provider_examples) + logger.info(f"💰 Using LLM simple pricing for: {product_title}") + price_analysis = { + 'total_products': 0, + 'total_variants': 0, + 'providers': {}, + 'variants': {}, + 'best_deals': [], + } + + # Prioritize images by domain and quality + priority_domains = [ + 'bbassets.com', 'flipkart.com', 'jiomart.com', 'grofers.com', + 'media.britannia.co.in', 'britannia.co.in', + 'cadbury', 'mondelezinternational.com', 'mondelez.com', 'cadburygifting.com', + 'nestle', 'parleproducts.com', 'parle.biz', + 'itc.in', 'itcportal.com', + ] + prioritized_images = [] + other_images = [] + + for img in all_images: + if any(domain in img.lower() for domain in priority_domains): + prioritized_images.append(img) + else: + other_images.append(img) + + # Select exactly 20 best images + all_prioritized = prioritized_images + other_images + final_images = self._select_best_images(all_prioritized, product_title, brand, max_images=20) + + # Check if product already exists in DB to avoid duplicates + image_id_val = "" + try: + product_name_val = product.get('product_name') or product_title + existing_id = get_existing_product_image_id(brand, product_name_val) + if existing_id: + image_id_val = existing_id + logger.info(f"Product '{product_name_val}' already exists (image_id={existing_id}), reusing existing data") + except Exception: + pass + + s3_uploaded_urls = [] + if not image_id_val and final_images: + try: + image_id_val, s3_uploaded_urls = await s3_service.process_product_images( + {'title': product_title, 'product_name': product.get('product_name') or product_title}, final_images, brand, max_images=20 + ) + except Exception as e: + logger.warning(f"S3 upload failed for {product_title}: {e}") + if not image_id_val: + id_source = product.get('product_name') or product_title or 'unknown_product' + image_id_val = s3_service.generate_image_id(id_source) + + # Enrich missing description/pricing via LLM per-product if needed + enriched_desc = product.get('description') + enriched_img = None + size_variants = product.get('size_variants', []) + price_ranges = product.get('price_ranges', {}) + price_range_single = product.get('price_range') + provider_examples = product.get('provider_examples', []) + category_value = product.get('category') or 'Uncategorized' + + # Try enrichment from LLM lookup using title match first + if (not enriched_desc or not size_variants) and llm_lookup: + key = (product_title or '').strip().lower() + match = llm_lookup.get(key) + if not match: + for t, data in llm_lookup.items(): + if key and (key in t or t in key): + match = data + break + if match: + enriched_desc = enriched_desc or match.get('description') + enriched_img = enriched_img or match.get('image_url') + size_variants = size_variants or match.get('size_variants') or [] + price_ranges = price_ranges or match.get('price_ranges') or {} + price_range_single = price_range_single or match.get('price_range') + provider_examples = provider_examples or match.get('provider_examples') or [] + if category_value == 'Uncategorized': + category_value = match.get('category') or category_value + + # Always try per-product enrichment for better data quality + if not enriched_desc or not size_variants or not price_ranges: + logger.info(f"🔍 Enriching {product_title} with per-product LLM call...") + try: + details = fetch_product_details(brand, product_title) + if details: + logger.info(f"✅ LLM enrichment successful for {product_title}") + enriched_desc = enriched_desc or details.get('description') + enriched_img = details.get('image_url') + size_variants = size_variants or details.get('size_variants') or [] + price_ranges = price_ranges or details.get('price_ranges') or {} + price_range_single = price_range_single or details.get('price_range') + provider_examples = provider_examples or details.get('provider_examples') or [] + logger.info(f"💰 Pricing data: variants={len(size_variants)}, ranges={len(price_ranges)}, providers={len(provider_examples)}") + except Exception as e: + logger.warning(f"Per-product enrichment failed for {product_title}: {e}") + pass + + # Enhance description if it's too short or empty + if not enriched_desc or len(enriched_desc.strip()) < 100: + try: + enriched_desc = generate_detailed_description({ + 'title': product_title or '', + 'category': category_value or 'Uncategorized', + 'price_range': price_range_single or '', + 'size_variants': size_variants or [] + }, brand) + except Exception as e: + logger.warning(f"Failed to generate detailed description: {e}") + enriched_desc = f"{product_title} by {brand}. High-quality product suitable for daily use." + elif enriched_desc and len(enriched_desc.strip()) < 200: + # If description exists but is short, enhance it + try: + base_desc = enriched_desc.strip() + enhanced_desc = generate_detailed_description({ + 'title': product_title or '', + 'category': category_value or 'Uncategorized', + 'price_range': price_range_single or '', + 'size_variants': size_variants or [] + }, brand) + # Combine existing description with enhanced details + enriched_desc = f"{base_desc} {enhanced_desc[len(base_desc):] if len(enhanced_desc) > len(base_desc) else enhanced_desc}" + except Exception as e: + logger.warning(f"Failed to enhance existing description: {e}") + # Keep the original description if enhancement fails + + # Heuristic categorization if still Uncategorized - uses the same + # keyword registry that the RAG query pipeline uses to detect + # what category a *question* is about, so ingestion and + # retrieval can never classify the same word differently. + if not category_value or category_value == 'Uncategorized': + category_value = detect_category_from_text(product_title or '') or 'General' + + # Guard against cross-category noun leakage in the (LLM-generated) + # description - e.g. a Snacks product whose description calls it + # a "biscuit" - since that leakage is what let unrelated products + # surface for category-specific searches (e.g. a biscuit query + # returning a snack). See category_registry.py for details. + if enriched_desc: + enriched_desc = sanitize_category_language(enriched_desc, category_value) + + # Sanity-clamp any single price_range string the LLM proposed + # (e.g. "₹5000-8000" for a biscuit packet) against our + # realistic retail anchor before it's used anywhere downstream. + if price_range_single: + llm_avg = price_estimator.parse_price_string(price_range_single) + anchor_lo, anchor_hi = price_estimator.estimate_price_range( + [s.get('size') if isinstance(s, dict) else s for s in (size_variants or [])] or + price_estimator.default_size_variants(category_value, product_title), + product_title, brand, category_value, + ) + if llm_avg is None or not (anchor_lo * 0.4 <= llm_avg <= anchor_hi * 2.5): + price_range_single = f"₹{anchor_lo}-{anchor_hi}" + + # Process size variants to include prices (like test engine) + processed_size_variants = [] + _variant_size_price_pairs = [] # (size_str, price_int) before formatting + + if size_variants: + for variant in size_variants: + if isinstance(variant, dict): + size = variant.get('size', '') + raw_price = variant.get('price', '') + if size and raw_price: + # The LLM (a small, locally-run model) frequently + # hallucinates prices that are an order of + # magnitude off. Rather than trusting it blindly, + # clamp it against our realistic retail anchor - + # this is the main fix for "unrealistic prices". + llm_value = price_estimator.parse_price_string(raw_price) + reconciled = price_estimator.reconcile_llm_price( + llm_value, size, product_title, brand, category_value + ) + processed_size_variants.append(f"{size} (₹{reconciled})") + _variant_size_price_pairs.append((size, reconciled)) + elif size: + reconciled = price_estimator.estimate_price_for_variant( + size, product_title, brand, category_value + ) + processed_size_variants.append(f"{size} (₹{reconciled})") + _variant_size_price_pairs.append((size, reconciled)) + elif isinstance(variant, str): + reconciled = price_estimator.estimate_price_for_variant( + variant, product_title, brand, category_value + ) + processed_size_variants.append(f"{variant} (₹{reconciled})") + _variant_size_price_pairs.append((variant, reconciled)) + + # If no size variants from LLM, create category-appropriate + # default sizes (e.g. toothpaste gets 40g/80g/150g rather than + # the old one-size-fits-all 100g/200g/500g used for everything). + if not _variant_size_price_pairs: + default_sizes = price_estimator.default_size_variants(category_value, product_title) + + # Ground this in a real packaging size where possible: + # Open Food/Beauty/Products Facts reports an actual + # `quantity` field (e.g. "200 g", "1 l") for products it + # has on file, which is far more trustworthy than the + # category preset list (itself just a fallback for when + # *nothing* else is known). If we have one, swap it in for + # the closest preset rather than presenting a size that may + # not actually exist for this exact product. + try: + real_qty = find_product_quantity_openfacts(product_title, brand) + except Exception: + real_qty = None + if real_qty and real_qty not in default_sizes: + default_sizes = [real_qty] + default_sizes[:2] + + for size in default_sizes: + mock_price = self._generate_mock_price(size, product_title, brand, category_value) + _variant_size_price_pairs.append((size, int(mock_price.replace('₹', '')))) + + # Safety net: a larger pack must never cost less than a smaller + # one of the same product. estimate_price() is already + # internally monotonic (see price_estimator.py), but + # reconcile_llm_price() can still let through individually + # "plausible" LLM numbers per-variant that are inconsistent + # *with each other* (the original "500ml ₹190, 1L ₹25" bug). + # This call sorts by parsed pack size and clamps any decrease. + _variant_size_price_pairs = price_estimator.enforce_monotonic_prices(_variant_size_price_pairs) + for size, price in _variant_size_price_pairs: + processed_size_variants.append(f"{size} - ₹{price}") + + # Generate price range if not provided + if not price_range_single and processed_size_variants: + # Extract prices from size variants + prices = [] + for variant in processed_size_variants: + if ' - ₹' in variant: + try: + price_str = variant.split(' - ₹')[1] + price_num = float(price_str) + prices.append(price_num) + except: + pass + if prices: + min_price = min(prices) + max_price = max(prices) + price_range_single = f"₹{int(min_price)}-{int(max_price)}" + else: + # Category-aware fallback instead of a flat, arbitrary + # "₹10-100" that made no sense for e.g. personal care. + lo, hi = price_estimator.estimate_price_range( + price_estimator.default_size_variants(category_value, product_title), + product_title, brand, category_value, + ) + price_range_single = f"₹{lo}-{hi}" + + # Generate product highlights AFTER price calculations + highlights = generate_product_highlights({ + 'title': product_title, + 'description': enriched_desc, + 'category': category_value, + 'price_range': price_range_single, + 'size_variants': processed_size_variants, + 'total_images': len(final_images), + 'providers': provider_examples + }, brand) + + # Generate nutrients information + nutrients = generate_nutrients_info({ + 'title': product_title, + 'description': enriched_desc, + 'category': category_value + }, brand) + + # Create enhanced product with variant data + # Prefer a real, search-discovered image (already filtered/scored in + # _select_best_images) as the primary image. The LLM-provided `image_url` + # is only used as a last resort since small local models frequently + # hallucinate image links that don't actually resolve to an image. + all_image_urls = s3_uploaded_urls or final_images + primary_image = all_image_urls[0] if all_image_urls else ( + enriched_img if enriched_img and str(enriched_img).startswith('http') else None + ) + if not primary_image and s3_service.enabled and image_id_val: + primary_image = s3_service.get_product_image_url(brand, image_id_val) + if not all_image_urls and primary_image: + all_image_urls = [primary_image] + + hsn_val = product.get('hsn_code') or product.get('HSN_Code') or product.get('hsn') + fsp_val = product.get('final_selling_price') if 'final_selling_price' in product else product.get('Final_Selling_Price') + sp_val = product.get('selling_price') if 'selling_price' in product else product.get('Selling_Price') + bcd_val = product.get('barcode') or product.get('Barcode') + bcd_type_val = product.get('barcode_type') or product.get('Barcode_Type') + + enhanced_product = { + **product, + 'brand_name': brand, + 'image_url': primary_image, + 'image_urls': all_image_urls, + 'primary_image': primary_image, + 'total_images': len(all_image_urls), + 'search_query': search_query_full, + 'price_analysis': price_analysis, + 'description': enriched_desc, + 'size_variants': processed_size_variants, + 'price_ranges': price_ranges, + 'price_range': price_range_single, + 'providers': provider_examples, + 'best_deals': [], + 'total_variants': len(processed_size_variants), + 'total_products_found': 0, + 'category': category_value, + 'image_id': image_id_val, + 'highlights': highlights, + 'nutrients': nutrients, + 'hsn_code': hsn_val, + 'final_selling_price': fsp_val, + 'selling_price': sp_val, + 'barcode': bcd_val, + 'barcode_type': bcd_type_val, + } + + enhanced_products.append(enhanced_product) + logger.info(f"✅ Enhanced {product_title}: {len(final_images)} images") + + # Step 3: Generate final catalog + catalog = { + 'brand': brand, + 'search_query': search_query, + 'generation_timestamp': str(Path().cwd()), + 'total_products': len(enhanced_products), + 'total_images': sum(p['total_images'] for p in enhanced_products), + 'engine_info': { + 'gemini_enabled': self.gemini_enabled, + 'architecture': 'Ollama LLM + Open-Source Image Pipeline (Open*Facts / Wikimedia / DuckDuckGo / Playwright-last-resort)' + }, + 'products': enhanced_products + } + + logger.info(f"🎉 Catalog generation complete!") + logger.info(f"📊 Products: {catalog['total_products']}") + logger.info(f"🖼️ Total images: {catalog['total_images']}") + + # Step 4: Embeddings + Vector DB (optional) + try: + ensure_brand_schema(brand) + # Build texts for embeddings + texts = [] + for p in enhanced_products: + title = p.get('title') or '' + desc = p.get('description') or '' + cat = p.get('category') or '' + # Concatenate lightweight context + texts.append(f"{title} [CAT={cat}] :: {desc}") + vectors = embed_texts(texts) + for p, vec in zip(enhanced_products, vectors): + p['embedding'] = vec + # Add image_id if not present + if 'image_id' not in p: + id_source = p.get('product_name') or p.get('title', 'unknown_product') + p['image_id'] = s3_service.generate_image_id(id_source) + upsert_brand_products(brand, enhanced_products, cleanup=True) + logger.info("🧠 Stored embeddings to pgvector") + except Exception as e: + logger.warning(f"Vector storage skipped/failed: {e}") + + return catalog + + def save_catalog(self, catalog: Dict[str, Any], filename: str = None) -> str: + """Save catalog to JSON file inside data/ folder""" + if not filename: + brand = catalog.get('brand', 'unknown') + storage_brand = resolve_parent_brand(brand) + safe_brand = storage_brand.replace(' ', '_') + ts = catalog.get('generation_timestamp', 'latest') + filename = f"data/catalog_{safe_brand}_{ts}.json" + + Path("data").mkdir(exist_ok=True) + with open(filename, 'w', encoding='utf-8') as f: + json.dump(catalog, f, indent=2, ensure_ascii=False) + + logger.info(f"💾 Catalog saved to: {filename}") + return filename + +# Global engine instance +catalog_engine = ProductCatalogEngine() diff --git a/app/core/ingestion.py b/app/core/ingestion.py new file mode 100644 index 0000000..e7bff4c --- /dev/null +++ b/app/core/ingestion.py @@ -0,0 +1,44 @@ +""" +Thin wrapper around `ProductCatalogEngine.generate_catalog`, used by both +the FastAPI admin-trigger endpoint (`POST /api/catalog/generate`) and the +standalone CLI tool (`cli/ingest_brand.py`). + +`generate_catalog()` already performs the full pipeline end-to-end: +product discovery (Ollama), per-product image search + S3 upload, +pricing/description enrichment, embedding generation, and the pgvector +upsert. This module exists only to give that pipeline one clear, reusable +entry point and a consistent result shape for callers. +""" +from __future__ import annotations + +import logging +import time +from typing import Any, Dict + +from app.core.catalog_engine import catalog_engine + +logger = logging.getLogger(__name__) + + +async def ingest_brand(brand: str, max_products: int = 50) -> Dict[str, Any]: + """Run full discovery -> enrichment -> embedding -> pgvector storage for a brand. + + Returns a small summary dict; the full per-product catalog is also + written to pgvector as a side effect (this is where the React app's + data actually comes from on subsequent requests). + """ + start = time.time() + logger.info("Starting ingestion for brand=%s max_products=%s", brand, max_products) + catalog = await catalog_engine.generate_catalog(brand=brand, max_products=max_products) + duration = time.time() - start + + summary = { + "brand": brand, + "total_products": catalog.get("total_products", 0), + "total_images": catalog.get("total_images", 0), + "duration_seconds": round(duration, 2), + "engine_info": catalog.get("engine_info", {}), + } + logger.info("Finished ingestion for brand=%s in %.2fs: %s products", + brand, duration, summary["total_products"]) + return summary diff --git a/app/data/seed_catalogs/brand_catalog_lion_dates.json b/app/data/seed_catalogs/brand_catalog_lion_dates.json new file mode 100644 index 0000000..b03869f --- /dev/null +++ b/app/data/seed_catalogs/brand_catalog_lion_dates.json @@ -0,0 +1,66 @@ +{ + "brand": "lion dates", + "search_query": "Lion Dates products catalog", + "generation_timestamp": "C:\\Brand_Catalog_LLM\\RAG_Model_Nutrition_Intelligence\\RAG_Model_Full_Implement\\backend\\app\\api\\routers\\user_products.py", + "total_products": 1, + "total_images": 10, + "products": [ + { + "image_id": "lion_dates_lion_dates_450g", + "product_name": "Lion Dates 450g", + "title": "Lion Dates 450g", + "brand": "Lion Dates", + "brand_name": "Lion Dates", + "category": "Health Foods", + "description": "Introducing Lion Dates 450g from the trusted Lion Dates brand. A premium quality product offering superior taste, authentic ingredients, and reliable value. Backed by Lion Dates's reputation for quality and consistency.", + "price_range": "₹160-220", + "size_variants": [ + "450g" + ], + "providers": [ + "Amazon", + "Flipkart", + "BigBasket" + ], + "highlights": [ + "lion dates Brand - Trusted Quality", + "Food - Spreads Category", + "Affordable at ₹9-11", + "Available in 10g", + "Premium Quality", + "Available on 3 platforms" + ], + "nutrients": [ + "Vitamin E - Antioxidant protection", + "Omega-3 - Heart health", + "Dietary Fiber - Digestive health", + "Protein - Muscle building", + "Magnesium - Muscle function", + "Carbohydrates - Quick energy", + "Healthy Fats - Heart health" + ], + "fssai_license": "10012042000244", + "product_sku": "LION-LION_D-001", + "sku_source": "User Upload", + "hsn_code": "2008", + "final_selling_price": 185.0, + "selling_price": 185.0, + "barcode": "20086040", + "barcode_type": "GTIN-13", + "image_url": "https://liondates.com/cdn/shop/files/1.Datesinhoney_productfocus.png?v=1773383963&width=1445", + "image_urls": [ + "https://liondates.com/cdn/shop/files/1.Datesinhoney_productfocus.png?v=1773383963&width=1445", + "https://liondates.com/cdn/shop/files/dateshoney_1.jpg?v=1739704587&width=1080", + "https://liondates.com/cdn/shop/files/Lion-Fig-in-Honey-Lion-Dates-95545533.jpg?v=1716380700&width=720", + "https://liondates.com/cdn/shop/files/Lion-Fig-in-Honey-Lion-Dates-95545649.jpg?v=1739705462&width=1080", + "http://liondates.com/cdn/shop/files/Lion-Mixed-Nuts-in-Honey-Lion-Dates-95787173.jpg?v=1716438485", + "http://liondates.com/cdn/shop/files/Lion-Amla-in-Honey-Lion-Dates-95589650.jpg?v=1716381007", + "https://liondates.com/cdn/shop/files/2.Datesinhoney_benefits.png?v=1773383963&width=390", + "https://liondates.com/cdn/shop/files/Arabian_dates_500g_front.png?v=1739617157&width=1838", + "https://liondates.com/cdn/shop/files/Sukkari_dates_front.png?v=1739615376&width=2048", + "https://5.imimg.com/data5/SELLER/Default/2023/6/312791417/NH/RZ/CD/180805796/lion-honey-dates-250x250.webp" + ], + "search_query": "Lion Dates Lion Dates 450g Health Foods Introducing Lion Dates 450g from the trusted Lion Dates brand. A premium quality product offering superior taste, authentic ingredients, and reliable value. Backed by Lion Dates's reputation for quality and consistency. ₹160-220" + } + ] +} \ No newline at end of file diff --git a/app/infrastructure/__init__.py b/app/infrastructure/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/infrastructure/settings.py b/app/infrastructure/settings.py new file mode 100644 index 0000000..f1f38af --- /dev/null +++ b/app/infrastructure/settings.py @@ -0,0 +1,149 @@ +""" +Centralized configuration for the AI Product Catalog + RAG backend. + +SECURITY NOTE +-------------- +The previous version of this project had a serious problem: `settings.py` +hard-coded a *live* database host, port and password as Python literal +fallbacks (`os.getenv("DB_HOST", "")`, etc.). That means the +real production credentials shipped inside the source code itself - in +every copy, every zip export, and every git commit - regardless of +whether a `.env` file was present. + +This rewrite removes every hard-coded secret. Every credential +(DB_PASSWORD, S3 keys, Google API key, ...) is read ONLY from the +environment (via a local `.env` file, loaded through python-dotenv, or +real OS/container environment variables). Non-secret values (ports, +feature flags, model names) keep sane, publicly-safe defaults so the +project still boots out of the box for local development. + +If a secret-shaped variable is required for a feature that is enabled +(e.g. `USE_PGVECTOR=true` but no `DB_PASSWORD` set), we raise a clear +`RuntimeError` at settings-load time instead of silently connecting +with an empty/placeholder password. Fail loudly, not insecurely. +""" +from __future__ import annotations + +import os +from pathlib import Path + +try: + from dotenv import load_dotenv + + # backend/.env (one level up from this file: app/infrastructure/settings.py) + _env_path = Path(__file__).resolve().parents[2] / ".env" + load_dotenv(_env_path) +except ImportError: + # python-dotenv not installed - fall back to whatever is already in the + # process environment (e.g. set by the shell, Docker, systemd, CI, etc.) + pass + + +def _bool(name: str, default: str) -> bool: + return os.getenv(name, default).strip().lower() in {"1", "true", "yes"} + + +def _require(name: str, *, feature_flag: str) -> str: + """Read a required secret. Raises if missing and the owning feature is enabled.""" + value = os.getenv(name) + if not value: + raise RuntimeError( + f"Missing required environment variable '{name}'. It is required because " + f"'{feature_flag}' is enabled. Set it in backend/.env (copy from " + f".env.example) or disable the feature by setting {feature_flag}=false." + ) + return value + + +# --------------------------------------------------------------------------- +# Ollama (local LLM) +# --------------------------------------------------------------------------- +USE_OLLAMA = _bool("USE_OLLAMA", "true") +OLLAMA_BASE_URL = os.getenv("OLLAMA_BASE_URL", "http://localhost:11434") +OLLAMA_MODEL_NAME = os.getenv("OLLAMA_MODEL_NAME", "qwen2.5:1.5b") +# Per-request generation timeout (seconds). Small CPU-only models on modest +# hardware (e.g. 8GB RAM, no GPU) can take a while for longer RAG contexts. +OLLAMA_TIMEOUT_SECONDS = int(os.getenv("OLLAMA_TIMEOUT_SECONDS", "120")) + +# --------------------------------------------------------------------------- +# Embeddings (sentence-transformers, CPU-friendly) +# --------------------------------------------------------------------------- +USE_EMBEDDINGS = _bool("USE_EMBEDDINGS", "true") +EMBEDDINGS_MODEL = os.getenv("EMBEDDINGS_MODEL", "sentence-transformers/all-MiniLM-L6-v2") +EMBEDDINGS_DIM = int(os.getenv("EMBEDDINGS_DIM", "384")) + +# --------------------------------------------------------------------------- +# Postgres / pgvector +# --------------------------------------------------------------------------- +USE_PGVECTOR = _bool("USE_PGVECTOR", "true") +DB_HOST = os.getenv("DB_HOST", "localhost") +DB_PORT = os.getenv("DB_PORT", "5432") +DB_NAME = os.getenv("DB_NAME", "pgvector") +DB_USER = os.getenv("DB_USER", "postgres") +DB_PASSWORD = _require("DB_PASSWORD", feature_flag="USE_PGVECTOR") if USE_PGVECTOR else os.getenv("DB_PASSWORD", "") +DATABASE_URL = os.getenv( + "DATABASE_URL", + f"postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}", +) + +# --------------------------------------------------------------------------- +# S3 / DigitalOcean Spaces (product image storage) - optional +# --------------------------------------------------------------------------- +USE_S3 = _bool("USE_S3", "false") +S3_ACCESS_KEY = _require("S3_ACCESS_KEY", feature_flag="USE_S3") if USE_S3 else os.getenv("S3_ACCESS_KEY") +S3_SECRET_KEY = _require("S3_SECRET_KEY", feature_flag="USE_S3") if USE_S3 else os.getenv("S3_SECRET_KEY") +S3_ENDPOINT = _require("S3_ENDPOINT", feature_flag="USE_S3") if USE_S3 else os.getenv("S3_ENDPOINT") +S3_BUCKET = _require("S3_BUCKET", feature_flag="USE_S3") if USE_S3 else os.getenv("S3_BUCKET") +S3_REGION = os.getenv("S3_REGION", "sgp1") + +# --------------------------------------------------------------------------- +# Google Custom Search (OPTIONAL image source - leave disabled if unset) +# --------------------------------------------------------------------------- +USE_GOOGLE_CSE = _bool("USE_GOOGLE_CSE", "false") +GOOGLE_API_KEY = _require("GOOGLE_API_KEY", feature_flag="USE_GOOGLE_CSE") if USE_GOOGLE_CSE else os.getenv("GOOGLE_API_KEY") +GOOGLE_CSE_ID = _require("GOOGLE_CSE_ID", feature_flag="USE_GOOGLE_CSE") if USE_GOOGLE_CSE else os.getenv("GOOGLE_CSE_ID") + +# --------------------------------------------------------------------------- +# Open-source image sources (no API key needed for any of these three) +# --------------------------------------------------------------------------- +USE_DDG_IMAGES = _bool("USE_DDG_IMAGES", "true") +USE_OPEN_FACTS = _bool("USE_OPEN_FACTS", "true") +USE_WIKIMEDIA = _bool("USE_WIKIMEDIA", "true") + +# Last-resort headless-browser (Python Playwright) image fallback. Requires +# `pip install playwright && playwright install chromium`; automatically +# skipped (logged once) if that hasn't been done. +USE_PLAYWRIGHT_FALLBACK = _bool("USE_PLAYWRIGHT_FALLBACK", "true") + +# Minimum byte size for a downloaded image to be accepted as "real" (filters +# out 1x1 tracking pixels / broken placeholder images) +MIN_IMAGE_BYTES = int(os.getenv("MIN_IMAGE_BYTES", "3000")) + +# --------------------------------------------------------------------------- +# HTTP client defaults +# --------------------------------------------------------------------------- +USER_AGENT = os.getenv("USER_AGENT", "CatalogBot/1.0 (+https://example.com)") +REQUEST_TIMEOUT_SECONDS = int(os.getenv("REQUEST_TIMEOUT_SECONDS", "20")) + +# --------------------------------------------------------------------------- +# FastAPI / web server +# --------------------------------------------------------------------------- +API_CORS_ORIGINS = [ + origin.strip() + for origin in os.getenv("API_CORS_ORIGINS", "http://localhost:5173,http://127.0.0.1:5173").split(",") + if origin.strip() +] + +# Default RAG behaviour +RAG_DEFAULT_TOP_K = int(os.getenv("RAG_DEFAULT_TOP_K", "5")) +RAG_MAX_TOP_K = int(os.getenv("RAG_MAX_TOP_K", "15")) +RAG_MAX_CONTEXT_CHARS = int(os.getenv("RAG_MAX_CONTEXT_CHARS", "4000")) + +# Optional pgvector cosine-distance ceiling (0 = identical, 2 = opposite) +# used to drop weak semantic matches before they reach the LLM. Left +# unset (None) by default since the primary relevance guardrail is the +# category-aware retrieval in rag_service.py; set RAG_MAX_DISTANCE (e.g. +# "0.9") once you've inspected real distance scores for your embeddings +# if you want an extra cutoff on top of that. +_raw_max_distance = os.getenv("RAG_MAX_DISTANCE", "").strip() +RAG_MAX_DISTANCE = float(_raw_max_distance) if _raw_max_distance else None diff --git a/app/intelligence/__init__.py b/app/intelligence/__init__.py new file mode 100644 index 0000000..e86c0dc --- /dev/null +++ b/app/intelligence/__init__.py @@ -0,0 +1,41 @@ +""" +Store Intelligence ML package +============================== +Everything related to the v3.0 "Multi-Store Intelligence" upgrade lives +here: synthetic data generation, feature engineering, and the trained +scikit-learn models for discount prediction, trending detection, demand +forecasting, popularity scoring, store performance, purchase propensity, +and product recommendations. + +Design notes (read this before touching the models) +----------------------------------------------------- +1. CPU-only / 8GB RAM target. Every model in this package is a + scikit-learn estimator (RandomForest / GradientBoosting / Logistic + / Linear regression). We deliberately do NOT use XGBoost, LightGBM, + CatBoost, Prophet, or any deep-learning (LSTM/PyTorch/TensorFlow) + library, even though the feature spec lists them as options - on + this hardware they cost far more RAM/install time than the accuracy + they'd buy at this data scale (a handful of stores, a few thousand + products, tens of thousands of simulated orders). scikit-learn's + GradientBoostingRegressor/RandomForest give comparable accuracy at a + fraction of the footprint and were explicitly listed as acceptable + alternatives for every ML feature in the spec. +2. Pure functions first. Feature engineering and synthetic-label + generation (`features.py`, `synthetic_labels.py`) take/return plain + dicts, lists, and pandas DataFrames - no database or network I/O. + This is what makes them unit-testable without a live Postgres + instance and keeps the ML logic independent of the persistence + layer (clean architecture / SOLID: the model layer doesn't know + Postgres exists). +3. Every "intelligent" feature (discount %, trending score, demand + forecast, recommendation ranking, popularity score, store + performance, purchase propensity) is produced by a trained model + loaded from `artifacts/*.joblib`, never a hardcoded lookup table. + Where no real historical A/B-tested label exists (e.g. "what + discount SHOULD this product have had"), we bootstrap training + labels from a documented, multi-factor formula + noise + (`synthetic_labels.py`) - this is standard practice for cold-start + ML systems. The important part is that INFERENCE always goes + through the trained model, not the formula - the formula only + exists to generate training data once. +""" diff --git a/app/intelligence/analytics.py b/app/intelligence/analytics.py new file mode 100644 index 0000000..be9c07d --- /dev/null +++ b/app/intelligence/analytics.py @@ -0,0 +1,215 @@ +""" +Features 4 & 5: Store Analytics Dashboard + Product Analytics. + +Pure computation over plain pandas DataFrames - no SQL in this file. +`app/services/analytics_service.py` is the thin I/O layer that pulls +DataFrames out of `store_db.py` and hands them to the functions here, +which keeps every KPI formula unit-testable without a live Postgres +instance (see `tests/test_intelligence.py`). +""" +from __future__ import annotations + +from typing import Dict, List, Optional + +import numpy as np +import pandas as pd + + +def classify_stock_status(available: int, reorder_level: int, safety_stock: int) -> str: + if available <= 0: + return "Out of Stock" + if available <= safety_stock: + return "Low Stock" + if available > reorder_level * 6: + return "Overstocked" + return "In Stock" + + +def inventory_analytics(store_products: pd.DataFrame) -> Dict: + """`store_products` columns: available_stock, reorder_level, safety_stock (already + filtered to one store, or pass the full multi-store frame for a + chain-wide summary).""" + if store_products.empty: + return {"total_products": 0, "in_stock": 0, "low_stock": 0, "out_of_stock": 0, "overstocked": 0} + statuses = store_products.apply( + lambda r: classify_stock_status(r["available_stock"], r["reorder_level"], r["safety_stock"]), axis=1 + ) + counts = statuses.value_counts() + return { + "total_products": int(len(store_products)), + "in_stock": int(counts.get("In Stock", 0)), + "low_stock": int(counts.get("Low Stock", 0)), + "out_of_stock": int(counts.get("Out of Stock", 0)), + "overstocked": int(counts.get("Overstocked", 0)), + } + + +def sales_analytics(orders: pd.DataFrame) -> Dict: + """`orders` columns: order_date (datetime64), order_value. Already + filtered to the scope (one store, or all stores) the caller wants.""" + if orders.empty: + return { + "total_sales": 0, "revenue": 0.0, "average_basket_value": 0.0, + "daily_sales": [], "weekly_sales": [], "monthly_sales": [], + } + revenue = float(orders["order_value"].sum()) + total_sales = int(len(orders)) + avg_basket = revenue / total_sales if total_sales else 0.0 + + daily = orders.groupby(orders["order_date"].dt.date)["order_value"].agg(["sum", "count"]).reset_index() + daily.columns = ["date", "revenue", "orders"] + weekly = orders.groupby(orders["order_date"].dt.to_period("W").astype(str))["order_value"].agg(["sum", "count"]).reset_index() + weekly.columns = ["week", "revenue", "orders"] + monthly = orders.groupby(orders["order_date"].dt.to_period("M").astype(str))["order_value"].agg(["sum", "count"]).reset_index() + monthly.columns = ["month", "revenue", "orders"] + + return { + "total_sales": total_sales, + "revenue": round(revenue, 2), + "average_basket_value": round(avg_basket, 2), + "daily_sales": [{"date": str(r["date"]), "revenue": round(r["revenue"], 2), "orders": int(r["orders"])} for _, r in daily.iterrows()], + "weekly_sales": [{"week": r["week"], "revenue": round(r["revenue"], 2), "orders": int(r["orders"])} for _, r in weekly.iterrows()], + "monthly_sales": [{"month": r["month"], "revenue": round(r["revenue"], 2), "orders": int(r["orders"])} for _, r in monthly.iterrows()], + } + + +def profit_analytics(order_items: pd.DataFrame, store_prices: pd.DataFrame) -> Dict: + """Joins order line items to CURRENT store cost prices to estimate + profit (`(unit_price - cost_price) * quantity`). This is an + approximation - it uses today's cost price, not the cost price that + was actually in effect on the historical order date, since the + system doesn't keep a cost-price history table. Documented rather + than silently treated as exact.""" + if order_items.empty or store_prices.empty: + return {"total_profit": 0.0, "gross_profit_pct": 0.0} + merged = order_items.merge( + store_prices[["store_id", "brand", "image_id", "cost_price"]], + on=["store_id", "brand", "image_id"], how="left", + ) + merged["cost_price"] = merged["cost_price"].fillna(merged["unit_price"] * 0.78) + merged["line_profit"] = (merged["unit_price"] - merged["cost_price"]) * merged["quantity"] + total_profit = float(merged["line_profit"].sum()) + total_revenue = float(merged["line_total"].sum()) + gp_pct = (total_profit / total_revenue * 100) if total_revenue else 0.0 + return {"total_profit": round(total_profit, 2), "gross_profit_pct": round(gp_pct, 2)} + + +def store_comparison(orders: pd.DataFrame, order_items: pd.DataFrame, store_prices: pd.DataFrame, stores: pd.DataFrame) -> Dict: + """`stores` columns: store_id, store_name, tier, footfall_index.""" + if orders.empty: + return {"stores": [], "best_performing": None, "lowest_performing": None, + "highest_revenue": None, "highest_profit": None} + + per_store_revenue = orders.groupby("store_id")["order_value"].agg(["sum", "count"]).reset_index() + per_store_revenue.columns = ["store_id", "revenue", "order_count"] + + profit_rows = [] + for store_id, g in order_items.groupby("store_id"): + sp = store_prices[store_prices["store_id"] == store_id] + p = profit_analytics(g, sp) + profit_rows.append({"store_id": store_id, "profit": p["total_profit"]}) + profit_df = pd.DataFrame(profit_rows) if profit_rows else pd.DataFrame(columns=["store_id", "profit"]) + + merged = per_store_revenue.merge(profit_df, on="store_id", how="left").merge(stores, on="store_id", how="left") + merged["profit"] = merged["profit"].fillna(0.0) + merged["avg_order_value"] = merged["revenue"] / merged["order_count"].replace(0, np.nan) + merged["avg_order_value"] = merged["avg_order_value"].fillna(0.0) + # "Customer Footfall (simulated)" - the store's actual simulated order + # count IS the simulated footfall proxy (every order came from a + # simulated in-store/online customer visit). + merged["footfall_simulated"] = merged["order_count"] + + result_stores = [ + { + "store_id": r["store_id"], "store_name": r.get("store_name"), "tier": r.get("tier"), + "revenue": round(r["revenue"], 2), "profit": round(r["profit"], 2), + "order_count": int(r["order_count"]), "avg_order_value": round(r["avg_order_value"], 2), + "footfall_simulated": int(r["footfall_simulated"]), + } + for _, r in merged.iterrows() + ] + by_revenue = sorted(result_stores, key=lambda s: s["revenue"], reverse=True) + by_profit = sorted(result_stores, key=lambda s: s["profit"], reverse=True) + + return { + "stores": result_stores, + "best_performing": by_profit[0]["store_id"] if by_profit else None, + "lowest_performing": by_profit[-1]["store_id"] if by_profit else None, + "highest_revenue": by_revenue[0]["store_id"] if by_revenue else None, + "highest_profit": by_profit[0]["store_id"] if by_profit else None, + } + + +def top_products(order_items: pd.DataFrame, limit: int = 10, ascending: bool = False, by: str = "revenue") -> List[Dict]: + """`by`: 'revenue' or 'units'. Set ascending=True for "lowest + selling" instead of "top selling".""" + if order_items.empty: + return [] + agg = order_items.groupby(["brand", "image_id"]).agg( + revenue=("line_total", "sum"), units=("quantity", "sum"), orders=("order_id", "nunique"), + ).reset_index() + sort_col = "revenue" if by == "revenue" else "units" + agg = agg.sort_values(sort_col, ascending=ascending).head(limit) + return [ + {"brand": r["brand"], "image_id": r["image_id"], "revenue": round(r["revenue"], 2), + "units_sold": int(r["units"]), "order_count": int(r["orders"])} + for _, r in agg.iterrows() + ] + + +def product_analytics( + brand: str, image_id: str, + order_items: pd.DataFrame, store_prices: pd.DataFrame, + engagement_row: Optional[Dict] = None, popularity_score: Optional[float] = None, + demand_score: Optional[float] = None, +) -> Dict: + """Full Feature 5 metric set for one product, aggregated across all + stores that carry it, plus a store-wise breakdown.""" + prod_items = order_items[(order_items["brand"] == brand) & (order_items["image_id"] == image_id)] + prod_prices = store_prices[(store_prices["brand"] == brand) & (store_prices["image_id"] == image_id)] + + sales_count = int(prod_items["quantity"].sum()) + revenue = float(prod_items["line_total"].sum()) + profit_info = profit_analytics(prod_items, store_prices) + order_count = int(prod_items["order_id"].nunique()) + + store_wise = ( + prod_items.groupby("store_id").agg(units=("quantity", "sum"), revenue=("line_total", "sum")).reset_index() + if not prod_items.empty else pd.DataFrame(columns=["store_id", "units", "revenue"]) + ) + + # Growth %: last-14-days units vs the 14 days before that (real data, + # not synthetic - same "current vs previous window" pattern used by + # the trending model, just exposed as a plain metric here). + growth_pct = None + if not prod_items.empty and "order_date" in prod_items.columns: + last_date = prod_items["order_date"].max() + cur_start = last_date - pd.Timedelta(days=14) + prev_start = cur_start - pd.Timedelta(days=14) + cur = prod_items[prod_items["order_date"] >= cur_start]["quantity"].sum() + prev = prod_items[(prod_items["order_date"] >= prev_start) & (prod_items["order_date"] < cur_start)]["quantity"].sum() + growth_pct = round(float((cur - prev) / prev * 100) if prev else (100.0 if cur else 0.0), 1) + + avg_stock = float(prod_prices["selling_price"].mean()) if not prod_prices.empty else 0.0 + # Stock turnover = units sold / average stock held (a standard retail + # KPI: how many times the inventory "turned over" in the observed period). + turnover = None + + return { + "brand": brand, "image_id": image_id, + "sales_count": sales_count, + "revenue": round(revenue, 2), + "profit": profit_info["total_profit"], + "orders": order_count, + "avg_rating": (engagement_row or {}).get("avg_rating"), + "views": (engagement_row or {}).get("views"), + "wishlist_count": (engagement_row or {}).get("wishlist_count"), + "conversion_rate": (engagement_row or {}).get("conversion_rate"), + "popularity_score": round(popularity_score, 1) if popularity_score is not None else None, + "demand_score": round(demand_score, 1) if demand_score is not None else None, + "growth_pct": growth_pct, + "store_wise_sales": [ + {"store_id": r["store_id"], "units": int(r["units"]), "revenue": round(r["revenue"], 2)} + for _, r in store_wise.iterrows() + ], + } diff --git a/app/intelligence/artifacts/demand_forecast_model.joblib b/app/intelligence/artifacts/demand_forecast_model.joblib new file mode 100644 index 0000000000000000000000000000000000000000..06a7df723ad8332e0d7e4e89f92abb15bb50a7e2 GIT binary patch literal 3340082 zcmc${2Urxl7dF0Fv4a)MRm6rJJJvIHy(rh-6%bHRniLg9#g2*{dqYLV3N}DRMY@7Y z7Zh~C-mzo<&t^|%vf<}{_ulV&o{wiA-pNefoRgEDNix2rw;U*`Ab~0;5#V28sLIvH%f-&gK45b|^Th!R0!;nO*?V|8I@@@< zx(E0hdCYXOw{drAWAEZ&?>yDXzKzv1S9j4vfPakZg#C2!u7^mW!8nxm zuR+P4?)DASzb2o_I6hG z?(Qmu^gZ0196iOS0sf_?51!2(a`wbar&H^00AsbF%laB3=V5O86VF zcg6Tj3$W1hH&Wf4WA8ZK!P9D*yN#`AQA_~%f^qJ@81QTS9>F*+6s|MGKe+?`d?cJ~Ze z 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

kM(m#$Esh5~Ufn)dE$!zI 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 zÝ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 z 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⪙`TKW-U5XgQ+(`(FdY+S%4@ci=MAXXU%DHClc@ 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