category_resolver.py 848 B

123456789101112131415161718192021222324252627282930
  1. from __future__ import annotations
  2. from dataclasses import dataclass
  3. from pathlib import Path
  4. from bom_assistant.session.models import BomRow
  5. from bom_assistant.suppliers.category_resolver import resolve_category
  6. from bom_assistant.suppliers.lcsc.categories import get_subcategories_for
  7. _CACHE_PATH = Path(__file__).parent / "category_cache.json"
  8. @dataclass
  9. class LcscCategory:
  10. name: str
  11. id: int
  12. def __repr__(self) -> str:
  13. return f"LcscCategory(name={self.name!r}, id={self.id})"
  14. def resolve(row: BomRow) -> LcscCategory | None:
  15. """Map a BomRow to an LCSC subcategory via shared LLM resolver."""
  16. result = resolve_category(
  17. row,
  18. get_subcategories_for(row.category),
  19. supplier="lcsc",
  20. cache_path=_CACHE_PATH,
  21. )
  22. return LcscCategory(result.name, result.id) if result else None