Skip to content
Back to skills

Shrink Vector Store

ASecurity

Shrink an embedding/RAG vector store 4–32× via int8 or binary quantization with a float rescore pass, preserving recall and provenance metadata. Use when a vector store is too large to be laptop-resident, query cost/latency is too high, or embeddings need to be quantized for FAISS/Qdrant/usearch. Do NOT use for embed-time ingestion failures (e.g. a provider 'too many tokens' 400 — that is an upstream chunking bug, not a storage-size problem) and do NOT enable the dark TurboQuant 4-bit path wi...

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 12, 2026
ai-agentspythongo

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add aibot88/sec_skill_store --skill shrink-vector-store --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Shrink Vector Store?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Shrink Vector Store
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aibot88-shrink-vector-store/badge)](https://www.skillsdirectory.com/skills/aibot88-shrink-vector-store)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: shrink-vector-store
description: "Shrink an embedding/RAG vector store 4–32× via int8 or binary quantization with a float rescore pass, preserving recall and provenance metadata. Use when a vector store is too large to be laptop-resident, query cost/latency is too high, or embeddings need to be quantized for FAISS/Qdrant/usearch. Do NOT use for embed-time ingestion failures (e.g. a provider 'too many tokens' 400 — that is an upstream chunking bug, not a storage-size problem) and do NOT enable the dark TurboQuant 4-bit path without the gate below."
---

# Shrink Vector Store

Reduce a stored embedding index's footprint with **scalar (int8)** or
**binary** quantization plus an **asymmetric float rescore**, so recall
stays high while the store shrinks 4–32×. Vectors change; provenance
metadata does not.

## Prerequisites

- `numpy` (only hard dependency). Python 3.
- The original float32 vectors (or a representative sample ≥10k) **and** a
  query set — required to measure recall; this skill cannot validate blind.

## Decision (commit to one)

| Goal | Choice | Shrink | Recall |
|------|--------|--------|--------|
| Safe default | **int8 + float rescore** | ~4× | ≈ float (rescore recovers it) |
| Maximum shrink | **binary + int8 rescore** | up to ~32× | ~96–99% with rescore |
| Extra trim (optional) | + Matryoshka dim-trim | stacks | depends on model support |

Pick **int8+rescore** unless the user explicitly needs maximum shrink.
Do not offer both and ask — choose, state which, proceed.

## Workflow

1. **Confirm scope.** Verify it is a storage-size problem, not an
   ingestion failure (see above). If ingestion, stop and explain.
2. **Locate the float baseline.** You need the original float32 vectors
   (or a sample ≥10k) and a query set to measure recall against.
3. **Quantize + build index.** Run the reference script:
   ```
   python scripts/quantize_embeddings.py --vectors vecs.npy --queries q.npy \
       --precision int8 --rescore --out store/
   ```
   `--precision {int8,binary}`; `--rescore` keeps a small float/int8 copy
   for the second-pass reorder; `--matryoshka N` optionally truncates dims.
4. **Validate recall (mandatory feedback loop).** The script reports
   `recall@10` of the quantized+rescore store vs the exact float baseline.
   **Gate: if recall@10 drops more than the user's tolerance (default 2%),
   do not ship** — fall back to a higher-precision setting and re-run.
5. **Preserve provenance.** Only the vector column is replaced. Any id /
   source / timestamp / provenance fields MUST be carried through
   unchanged. The script asserts row-count and id alignment; if it fails,
   stop — never silently drop provenance.
6. **Report.** State: precision used, achieved shrink ×, recall@10 vs
   float, and whether the recall gate passed.

## Rules

- **R0 — Storage problem only.** This skill addresses store *size*. An
  *embed-time* failure (provider rejects input as "too many tokens") is an
  upstream ingestion-chunking bug — quantization changes nothing about it.
  If that is the situation, say so and stop.
- **R1 — Asymmetric distance.** The query stays full precision; only the
  stored DB vectors are quantized. Never quantize the query.
- **R2 — Rescore is not optional for binary.** Binary without a rescore
  pass loses too much recall; the script enforces `--rescore` when
  `--precision binary`.
- **R3 — Provenance is immutable.** Quantization replaces vectors only.
  Row count, ordering, and all non-vector columns are preserved and
  asserted. A mismatch is a hard stop.
- **R4 — Measure, don't assume.** Always report measured recall@10 vs the
  exact float baseline on the user's own data. The "~96–99%" figures are
  priors, not guarantees for a given corpus.

## TurboQuant 4-bit path — DARK, gated (do not enable)

A 4-bit TurboQuant-style path (training-free random rotation +
per-coordinate scalar quant) can beat int8 on the footprint/recall
frontier. It is **deliberately not implemented here.** It is gated on an
external decision (port vetting + a measured benchmark beating the
int8-rescore baseline + an IP/patent review). Until that gate explicitly
passes:

- Do **not** add a 4-bit path to the script.
- Do **not** vendor a TurboQuant port into this skill.
- If asked for it, explain it is gated and that int8-rescore is the
  sanctioned baseline it must first be measured against.

## Output

A quantized store directory plus a stdout report. Concrete example
(int8 + rescore, 2000×128 sample):

```
precision=int8 rescore=True matryoshka=off
vectors=2000 dim=128 float_MB=1.0 quant_MB=0.3 shrink=4.0x
recall@10=0.9800 (gate: >= 0.9800)
written to <out>/
recall gate PASSED
```

Exit codes: 0 pass · 2 bad args/precondition · 3 provenance misalignment ·
4 recall gate failed. A non-zero exit means do not ship the quantized store.

## Limitations

- Needs the original float vectors (or a representative sample) to measure
  recall — cannot validate blind.
- Matryoshka dim-trim only works if the embedding model was trained for
  it; the script errors clearly if truncation collapses recall.
- Cross-environment determinism: if any rotation/projection is used,
  build-time and query-time must use the same seeded transform.

## Reference

- `scripts/quantize_embeddings.py` — run it (don't read it): quantizes,
  builds the index, runs the asymmetric rescore, and prints the recall@10
  vs float gate result. Handles its own errors and exits non-zero on a
  failed provenance or recall assertion.

Files in this skill

  • SKILL.md5.4 KB
  • source.json1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.