InsuranceBot / 70-docs /60-decisions /ADR-024-triple-mirror-code-and-data.md
rohitsar567's picture
refactor: KI-047 β€” bucket reorg (Option A safe subset)
e2d09f9
|
Raw
History Blame Contribute Delete
3.19 kB

ADR-024: Triple-mirror β€” HuggingFace + GitHub + local for both code and data

Status: Locked Date: 2026-05-14

Context

The project's working state must be resilient against:

  1. HF Space outage β€” production deploy down.
  2. HF Dataset corruption / accidental deletion β€” entire RAG corpus lost.
  3. Local Mac failure β€” work-in-progress code lost.
  4. GitHub repo nuked β€” public mirror lost.

Single-point-of-failure on any one layer is unacceptable.

Decision

Mirror both code and data across three layers. Two GitHub repos parallel two HuggingFace artifacts.

Layer Code Data
HuggingFace Space rohitsar567/InsuranceBot (Docker) Dataset rohitsar567/insurance-bot-data
GitHub Repo rohitsar567/insurance-sales-bot Repo rohitsar567/insurance-sales-bot-data (Git LFS)
Local Mac ~/Developer/Insurance Sales Bot/ working tree ~/Developer/Insurance Sales Bot/rag/_hf_dataset_backup/ (gitignored)

Alternatives considered

Mirror count Why rejected
Single layer (HF only) HF Space outage = product down + no backup of code state.
Two layers (HF + local) Local Mac failure or theft = irrecoverable.
Two layers (HF + GitHub) GitHub LFS bandwidth cap (1 GB/month free) is exposed to every external reviewer clone.

Push fan-out pattern

The code repo has two remotes:

origin β†’ huggingface.co/spaces/rohitsar567/InsuranceBot (HF Space)
github β†’ github.com/rohitsar567/insurance-sales-bot

git push origin main && git push github main after every commit. Sync verification: git rev-list --count main...origin/main and same for github/main; both must equal 0.

The data repo (insurance-sales-bot-data) on GitHub uses Git LFS for files >50 MB (the 157 MB chroma.sqlite3 and the 87 MB IRDAI master circular PDF).

End-user runtime path (important)

External users hitting the live bot never touch GitHub. The runtime path is:

End user β†’ HF Space (Docker container with data pre-baked at build time
                     via snapshot_download from HF Dataset)

GitHub is for code mirror + offline backup. GitHub LFS bandwidth is only consumed by manual clones (operator on a new Mac, reviewer inspecting the repo).

Consequences

Positive:

  • Three independent failure domains; any one outage doesn't lose the project.
  • Sarvam reviewers can inspect code on GitHub (the polished read-only surface).
  • HF reviewers can run the live demo.
  • Operator can rebuild the entire dataset from local backup if HF Dataset is ever lost.

Negative:

  • Push fan-out is two commands instead of one.
  • Three sets of credentials (HF token, GitHub PAT, local file system).

Mitigations:

  • A shell alias / git hook can collapse the dual push to one command if it becomes friction.
  • Tokens stored in .git/config (one-time setup per machine).

Revisit at scale

  • Add git push origin main github main as a single composite remote (git remote add all with two pushurls) so one command pushes to both.
  • For data, automate "HF Dataset commit β†’ GitHub LFS sync" via a GitHub Action triggered by HF webhook.