import importlib.util
import json
import struct
import tempfile
import unittest
from pathlib import Path
MODULE_PATH = (
Path(__file__).resolve().parent.parent
/ "tools"
/ "lmstudio"
/ "wrapper_generator.py"
)
if MODULE_PATH.exists():
spec = importlib.util.spec_from_file_location("wrapper_generator", MODULE_PATH)
module = importlib.util.module_from_spec(spec)
assert spec is not None and spec.loader is not None
spec.loader.exec_module(module)
gen = module
else: # pragma: no cover
gen = None
class WrapperGeneratorTests(unittest.TestCase):
def setUp(self):
if gen is None:
self.fail("tools.lmstudio.wrapper_generator is not available")
self.official_model_yaml = """\
model: qwen/qwen3.6-35b-a3b
base:
- key: lmstudio-community/qwen3.6-35b-a3b-gguf
metadataOverrides:
domain: llm
architectures:
- qwen35moe
compatibilityTypes:
- gguf
reasoning: true
config:
operation:
fields:
- key: llm.prediction.promptTemplate
value:
type: jinja
jinjaPromptTemplate:
template: |
{%- if add_generation_prompt %}
{%- if enable_thinking is defined and enable_thinking is false %}
{{- '\\n\\n\\n\\n' }}
{%- else %}
{{- '\\n' }}
{%- endif %}
{%- endif %}
customFields:
- key: enableThinking
effects:
- type: setJinjaVariable
variable: enable_thinking
- key: preserveThinking
effects:
- type: setJinjaVariable
variable: preserve_thinking
"""
self.official_manifest = {
"type": "model",
"owner": "qwen",
"name": "qwen3.6-35b-a3b",
"dependencies": [
{
"type": "model",
"purpose": "baseModel",
"modelKeys": ["lmstudio-community/qwen3.6-35b-a3b-gguf"],
}
],
"revision": 1,
}
def _write_gguf_metadata(self, path: Path, metadata: dict[str, object]) -> None:
type_string = 8
type_bool = 7
def write_string(value: str) -> bytes:
raw = value.encode("utf-8")
return struct.pack(" tuple[int, bytes]:
if isinstance(value, bool):
return type_bool, struct.pack("", value)
if isinstance(value, str):
return type_string, write_string(value)
raise TypeError(f"Unsupported GGUF test metadata value: {value!r}")
payload = bytearray()
payload.extend(b"GGUF")
payload.extend(struct.pack("