AyoubChLin's picture
feat: update classifier model to local zero-shot NLI and enhance language detection with local library
2d0ef3b

Architecture Decisions (ADR-style)

ADR-001: Use modular FastAPI layout for classifier backend

  • Status: Accepted
  • Type: Explicit
  • Evidence:
    • app/main.py
    • app/api/router.py
    • app/routers/
    • app/services/
    • app/pipelines/
  • Rationale:
    • Clear separation between transport, orchestration, and integrations.

ADR-002: Preserve endpoint contracts from prior service behavior

  • Status: Accepted
  • Type: Explicit
  • Evidence:
    • app/routers/classification.py
    • tests/test_routes.py
  • Rationale:
    • Keep clients functional while refactoring internals.

ADR-003: Use local Hugging Face zero-shot NLI model for classification

  • Status: Accepted
  • Type: Explicit
  • Evidence:
    • app/core/config.py
    • app/services/classifier_service.py
  • Rationale:
    • Perform true runtime-label zero-shot classification with local inference control.

ADR-004: Use local langdetect library for language detection

  • Status: Accepted
  • Type: Explicit
  • Evidence:
    • app/services/language_service.py
  • Rationale:
    • Remove external dependency and keep language inference local.

ADR-005: Keep labels in in-memory mutable config

  • Status: Accepted (current), Needs review
  • Type: Explicit
  • Evidence:
    • app/models/label_config.py
    • app/services/label_service.py
    • app/routers/classification.py (/configlabel, /labels)
  • Rationale:
    • Simple runtime tuning without DB migration.
  • Tradeoff:
    • No persistence across restarts, no cross-instance consistency.

ADR-006: Store uploaded files on local filesystem under static mount

  • Status: Accepted
  • Type: Explicit
  • Evidence:
    • app/services/file_storage_service.py
    • app/main.py
    • docker-compose.yml
  • Rationale:
    • Enables document/image extraction workflow with minimal infrastructure.

ADR-007: Map errors into contract-friendly HTTP statuses

  • Status: Accepted
  • Type: Explicit
  • Evidence:
    • app/routers/classification.py
    • app/core/exceptions.py
  • Rationale:
    • Differentiate local validation issues (400) from inference failures (502).

ADR-008: No built-in auth layer for this API

  • Status: Accepted (current), Needs review
  • Type: Inferred
  • Evidence:
    • app/routers/classification.py
    • absence of auth dependencies/middleware in app/main.py
  • Rationale:
    • likely positioned as internal or early-stage service.