Embedding


The current best open-weight embedding model.

Pull, serve, truncate, and normalize.

import argparse
import json
import shutil
from pathlib import Path

import torch
from safetensors import safe_open
from safetensors.torch import save_file

COPY_FILES = (
    "config.json",
    "generation_config.json",
    "tokenizer.json",
    "tokenizer.model",
    "tokenizer_config.json",
    "special_tokens_map.json",
    "preprocessor_config.json",
    "processor_config.json",
    "chat_template.jinja",
    "chat_template.json",
)

def weight_map(model_dir: Path) -> dict[str, Path]:
    index = model_dir / "model.safetensors.index.json"
    if index.is_file():
        meta = json.loads(index.read_text())
        return {k: model_dir / v for k, v in meta["weight_map"].items()}
    single = model_dir / "model.safetensors"
    if not single.is_file():
        raise FileNotFoundError(f"no safetensors found in {model_dir}")
    with safe_open(str(single), framework="pt") as f:
        return {k: single for k in f.keys()}

def load(path: Path, key: str) -> torch.Tensor:
    with safe_open(str(path), framework="pt") as f:
        return f.get_tensor(key)

def select_keys(wm: dict[str, Path], key_cutoff: str = None, layer_index: int = None) -> list[str]:
    keys = list(wm.keys())

    cutoff_pattern = None
    if layer_index is not None:
        cutoff_pattern = f"layers.{layer_index}."
    elif key_cutoff is not None:
        cutoff_pattern = key_cutoff

    if cutoff_pattern:
        matching = [k for k in keys if cutoff_pattern in k]
        if not matching:
            raise KeyError(f"No keys matching pattern '{cutoff_pattern}' found in model.")
        stop_key = matching[0]
        idx = keys.index(stop_key)
        keys = keys[:idx + 1]

    return keys

def process_sidecars(src: Path, dst: Path, keys: list[str]):
    max_layer = -1
    for k in keys:
        if "layers" in k:
            parts = k.split(".")
            try:
                idx = parts.index("layers")
                layer_num = int(parts[idx + 1])
                if layer_num > max_layer:
                    max_layer = layer_num
            except (ValueError, IndexError):
                pass

    for name in COPY_FILES:
        p = src / name
        if not p.is_file():
            continue

        if name.endswith(".index.json"):
            continue

        if name == "config.json":
            try:
                config_data = json.loads(p.read_text())
                if max_layer >= 0 and "num_hidden_layers" in config_data:
                    new_layers = max_layer + 1
                    config_data["num_hidden_layers"] = new_layers
                    print(f"Updated config.json: num_hidden_layers -> {new_layers}")

                (dst / name).write_text(json.dumps(config_data, indent=2))
                print(f"processed and saved {name}")
                continue
            except Exception as e:
                print(f"Warning: Could not update config.json ({e}), copying as-is.")

        shutil.copy2(p, dst / name)
        print(f"copied {name}")

def main():
    parser = argparse.ArgumentParser(description="Extract sequential weight slices from a Hugging Face model.")
    parser.add_argument("--model", required=True, help="Path to model directory")
    parser.add_argument("--key", default=None, help="Cut off extraction at the first key matching this substring")
    parser.add_argument("--index", type=int, default=None, help="Cut off extraction up to this transformer layer index (e.g. 0, 5, 11)")
    parser.add_argument("--print", action="store_true", help="Print all keys and exit")
    args = parser.parse_args()

    model_dir = Path(args.model).resolve()
    wm = weight_map(model_dir)

    if args.print:
        keys = select_keys(wm, key_cutoff=args.key, layer_index=args.index)
        print(f"Found {len(keys)} keys up to cutoff:")
        for k in keys:
            print(k)
        return

    # Determine safe output suffix name
    if args.index is not None:
        suffix = f"layer_{args.index}"
    else:
        suffix = args.key or "all"

    safe_suffix = "".join(c if c.isalnum() else "_" for c in suffix)[:30]
    out_dir = Path(f"{model_dir.name}-extracted-{safe_suffix}")
    out_dir.mkdir(parents=True, exist_ok=True)

    keys = select_keys(wm, key_cutoff=args.key, layer_index=args.index)

    tensors = {}
    for k in keys:
        t = load(wm[k], k).contiguous()
        tensors[k] = t
        print(f"{k:72s} {str(tuple(t.shape)):20s} {wm[k].name}")

    out = out_dir / "model.safetensors"
    save_file(tensors, str(out))

    process_sidecars(model_dir, out_dir, keys)
    print(f"wrote {len(tensors)} tensors -> {out}")

if __name__ == "__main__":
    main()