Image-to-Text
PyTorch
Safetensors
PEFT
English
remote-sensing
satellite-imagery
earth-observation
change-detection
visual-grounding
image-captioning
visual-question-answering
optical-sar-fusion
sar
multimodal
lora
Instructions to use thundercode/SatQuery with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use thundercode/SatQuery with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
release: add HF_RELEASE_VERIFICATION.md
Browse files- HF_RELEASE_VERIFICATION.md +142 -0
HF_RELEASE_VERIFICATION.md
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Hugging Face Release Verification
|
| 2 |
+
|
| 3 |
+
**Phase:** 4 · **Date:** 2026-09-25 · **Repo:** https://huggingface.co/thundercode/SatQuery
|
| 4 |
+
**Result:** **VERIFIED — all 6 artifacts byte-identical, all 4 support files present.**
|
| 5 |
+
|
| 6 |
+
---
|
| 7 |
+
|
| 8 |
+
## 1. What was released
|
| 9 |
+
|
| 10 |
+
| Item | Detail |
|
| 11 |
+
|---|---|
|
| 12 |
+
| Repository | `thundercode/SatQuery` (model repo) |
|
| 13 |
+
| Visibility | **public** (`private: false`) |
|
| 14 |
+
| HEAD after release | **`55681e0cddb91a4a5655da98a49bc025e537b657`** |
|
| 15 |
+
| `lastModified` | `2026-09-25T18:21:52Z` |
|
| 16 |
+
| Files on Hub | **22** |
|
| 17 |
+
|
| 18 |
+
## 2. Pre-flight inspection (what was already there, and what was done with it)
|
| 19 |
+
|
| 20 |
+
| Existing file | Content found | Action |
|
| 21 |
+
|---|---|---|
|
| 22 |
+
| `README.md` | a **25-byte stub** — literally `---\nlicense: unknown\n---`, no content | **replaced** with the model card (nothing of value lost) |
|
| 23 |
+
| `.gitattributes` | the standard Hugging Face **LFS routing template** — already routes `*.pt`, `*.safetensors`, `*.bin` through LFS | **left untouched** (it was already correct and is required for LFS) |
|
| 24 |
+
|
| 25 |
+
**No useful content was overwritten.** The stub README contained no project information.
|
| 26 |
+
|
| 27 |
+
## 3. Write permission
|
| 28 |
+
|
| 29 |
+
Verified **before** uploading, by reading the token's own scopes from `GET /api/whoami-v2`:
|
| 30 |
+
|
| 31 |
+
```
|
| 32 |
+
auth.type : access_token
|
| 33 |
+
auth.accessToken.displayName : Workbuddy
|
| 34 |
+
auth.accessToken.role : fineGrained
|
| 35 |
+
scoped[0].entity : user thundercode
|
| 36 |
+
scoped[0].permissions : repo.content.read, repo.access.read, repo.write, …
|
| 37 |
+
```
|
| 38 |
+
|
| 39 |
+
`repo.write` is present, scoped to the `thundercode` user. This **closes** the earlier
|
| 40 |
+
"write permission unproven" note from Phase 0.
|
| 41 |
+
|
| 42 |
+
## 4. Uploaded contents
|
| 43 |
+
|
| 44 |
+
| # | Path on Hub | Bytes |
|
| 45 |
+
|---|---|---|
|
| 46 |
+
| 1 | `README.md` (model card) | 26,767 |
|
| 47 |
+
| 2 | `MODEL_CARD.md` | 7,002 |
|
| 48 |
+
| 3 | `models/manifest.json` | 4,458 |
|
| 49 |
+
| 4 | `models/checksums.sha256` | 642 |
|
| 50 |
+
| 5–15 | `docs/*.md` (11 files) | ~84,000 total |
|
| 51 |
+
| 16 | `change/head.pt` | 63,231,009 |
|
| 52 |
+
| 17 | `change_vqa/head.pt` | 5,822,809 |
|
| 53 |
+
| 18 | `optical_sar/head.pt` | 14,427,457 |
|
| 54 |
+
| 19 | `grounding/head.pt` | 12,639,041 |
|
| 55 |
+
| 20 | `router/adapter.pt` | 211,961 |
|
| 56 |
+
| 21 | `vlm/adapter_model.safetensors` | 34,798,048 |
|
| 57 |
+
|
| 58 |
+
Total released weight payload: **131,130,325 bytes (~125 MiB)** across the six trained artifacts.
|
| 59 |
+
**No backbone weights are redistributed.**
|
| 60 |
+
|
| 61 |
+
## 5. Independent verification (re-downloaded, not trusted)
|
| 62 |
+
|
| 63 |
+
`release/tools/hf_verify.py` **re-downloads each artifact over direct HTTPS** and hashes the bytes it
|
| 64 |
+
receives, comparing against the locally-computed sha256. It does **not** trust the upload step.
|
| 65 |
+
|
| 66 |
+
| STATUS | hf_path | remote bytes | local bytes |
|
| 67 |
+
|---|---|---|---|
|
| 68 |
+
| **MATCH** | `change/head.pt` | 63,231,009 | 63,231,009 |
|
| 69 |
+
| **MATCH** | `change_vqa/head.pt` | 5,822,809 | 5,822,809 |
|
| 70 |
+
| **MATCH** | `optical_sar/head.pt` | 14,427,457 | 14,427,457 |
|
| 71 |
+
| **MATCH** | `grounding/head.pt` | 12,639,041 | 12,639,041 |
|
| 72 |
+
| **MATCH** | `router/adapter.pt` | 211,961 | 211,961 |
|
| 73 |
+
| **MATCH** | `vlm/adapter_model.safetensors` | 34,798,048 | 34,798,048 |
|
| 74 |
+
|
| 75 |
+
```
|
| 76 |
+
artifacts verified : 6
|
| 77 |
+
artifacts failed : 0
|
| 78 |
+
```
|
| 79 |
+
|
| 80 |
+
Support files confirmed present: `README.md`, `MODEL_CARD.md`, `models/manifest.json`,
|
| 81 |
+
`models/checksums.sha256` — all `OK`.
|
| 82 |
+
|
| 83 |
+
### 5.1 A verification method that was itself wrong (recorded)
|
| 84 |
+
|
| 85 |
+
The **first** verification attempt reported all six artifacts `DIFFER`, with every remote hash equal
|
| 86 |
+
to `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855` — the sha256 of **empty
|
| 87 |
+
content**. The cause was not the upload: `hf_hub_download` returned an empty file in this
|
| 88 |
+
environment (a download-path problem), so the verifier hashed nothing.
|
| 89 |
+
|
| 90 |
+
This was caught by a **second, independent method** (a direct `curl` download), which produced the
|
| 91 |
+
correct hash `8527c3ed28a293e13293d48601d48e3ceafa137b9acabddaf5de31a58a509b5c` for
|
| 92 |
+
`router/adapter.pt` — byte-identical to the local file, and confirmed to be a real PyTorch zip
|
| 93 |
+
(`PK\x03\x04`, containing `adapter/data.pkl`).
|
| 94 |
+
|
| 95 |
+
The verifier was then rewritten to use **direct HTTPS with proxies disabled**. It now reports
|
| 96 |
+
6/6 MATCH. The failed first attempt is recorded because a verifier that silently hashes an empty
|
| 97 |
+
file would have produced a **false failure** — and, with a different bug, could just as easily have
|
| 98 |
+
produced a **false pass**.
|
| 99 |
+
|
| 100 |
+
## 6. Cross-checks against independently-recorded hashes
|
| 101 |
+
|
| 102 |
+
Two of the six hashes can be checked against values recorded elsewhere in the project, independent
|
| 103 |
+
of this release:
|
| 104 |
+
|
| 105 |
+
| Artifact | Recorded elsewhere | Computed here | Agree |
|
| 106 |
+
|---|---|---|---|
|
| 107 |
+
| `change_vqa_head` | `cfae5e43…d63a82a` (`artifacts/change_vqa/run/PROMOTION.json`) | `cfae5e43…d63a82a` | **yes** |
|
| 108 |
+
| `vlm_lora_adapter` | `07c76a75…a5adf5e` (adapter provenance) | `07c76a75…a5adf5e` | **yes** |
|
| 109 |
+
|
| 110 |
+
## 7. Access verification
|
| 111 |
+
|
| 112 |
+
- The repository is **public** — the URLs resolve without a token.
|
| 113 |
+
- `GET /api/models/thundercode/SatQuery` returns the repo with `private: false`, `gated: false`,
|
| 114 |
+
`disabled: false`.
|
| 115 |
+
- Every artifact is retrievable at
|
| 116 |
+
`https://huggingface.co/thundercode/SatQuery/resolve/main/<path>`.
|
| 117 |
+
|
| 118 |
+
## 8. Secrets
|
| 119 |
+
|
| 120 |
+
**No secret was uploaded.** The uploaded set is: the model card, the manifest, the checksums, the 11
|
| 121 |
+
docs, and the six weight files. No tokens, keys, environment files, or credentials exist in any
|
| 122 |
+
uploaded file. The token used for the upload is **not** written into any released file.
|
| 123 |
+
|
| 124 |
+
## 9. Reproduce this verification
|
| 125 |
+
|
| 126 |
+
```bash
|
| 127 |
+
export HF_TOKEN=... # token with repo.content.read
|
| 128 |
+
python release/tools/hf_verify.py
|
| 129 |
+
```
|
| 130 |
+
|
| 131 |
+
Exit code 0 with `artifacts failed : 0` means the release is intact. Committed output:
|
| 132 |
+
`release/tools/hf_verify_report.txt`.
|
| 133 |
+
|
| 134 |
+
## 10. Notes and caveats
|
| 135 |
+
|
| 136 |
+
- The Hub's own **README metadata validator** emitted a warning during upload
|
| 137 |
+
(`empty or missing yaml metadata in repo card`) for one intermediate commit. The final README
|
| 138 |
+
carries full YAML frontmatter (`license: other`, tags, `pipeline_tag: image-to-text`).
|
| 139 |
+
- The released docs are the **detailed** versions; the model card's relative links
|
| 140 |
+
(`docs/LIMITATIONS.md`, `models/manifest.json`) resolve because both are uploaded.
|
| 141 |
+
- **The six artifacts are small trained modules over frozen backbones.** Anyone using them must also
|
| 142 |
+
fetch the pinned backbones listed in `models/manifest.json` / `docs/MODELS.md`.
|