# SPDX-License-Identifier: AGPL-3.0-only # Copyright 2026-present the Unsloth AI Inc. team. All rights reserved. See /studio/LICENSE.AGPL-3.0 """Tests for :mod:`utils.models.gguf_metadata`. Synthesise small GGUF headers in tmp dirs so we never depend on real model files.""" from __future__ import annotations import struct from pathlib import Path from typing import Iterable, Mapping from utils.models.gguf_metadata import ( is_mmproj_by_metadata, pairing_score, read_gguf_general_metadata, read_mmproj_audio_capability, ) _GGUF_MAGIC = 0x46554747 _VTYPE_STRING = 8 _VTYPE_UINT32 = 4 _VTYPE_ARRAY = 9 _VTYPE_BOOL = 7 def _enc_string(s: str) -> bytes: b = s.encode("utf-8") return struct.pack(" bytes: return _enc_string(key) + struct.pack(" bytes: return _enc_string(key) + struct.pack(" bytes: return _enc_string(key) + struct.pack(" bytes: vals = list(values) out = _enc_string(key) + struct.pack(" Path: """Minimal GGUF: header + KV body, no tensors.""" extra_uint32 = extra_uint32 or {} extra_string_arrays = extra_string_arrays or {} extra_bools = extra_bools or {} kv_count = ( len(general_strings) + len(extra_uint32) + len(extra_string_arrays) + len(extra_bools) ) body = b"" for k, v in general_strings.items(): body += _enc_kv_string(k, v) for k, v in extra_uint32.items(): body += _enc_kv_uint32(k, v) for k, v in extra_string_arrays.items(): body += _enc_kv_string_array(k, v) for k, v in extra_bools.items(): body += _enc_kv_bool(k, v) header = struct.pack( "