Provenance and license
- Base: Qwen/Qwen2.5-0.5B-Instruct.
- Pinned base revision:
7ae557604adf67be50417f59c2c2f167def9a775.
- CyMesh synthetic text corpus: 10,025 examples across 84 concepts and five languages;
concept-separated training/validation/test partitions. Training split: 6,677 examples.
- LoRA fine-tuning for 2 epochs, seed 20260923, then merge and FP16 export.
- Dataset and prompt hashes are recorded in
mesh_query_config.json.
- Apache-2.0: see LICENSE, LICENSE.base and NOTICE for upstream attribution and modifications.
- No project meshes, library index, user conversations, account credentials or training checkpoints are included.
Use with CyMesh
In CyMesh MeshLibrary → AI Models & Installation, choose this model's Download & Install.
Choose Use for Semantic Search, then enable Library Settings → Asset Library → Search → Enable Semantic Search.
The feature is optional and limited to MeshLibrary. Downloads are stored outside the plugin.
Existing integrations can use the downloaded folder as Library Query Model.
The contract remains cymesh-query-v1; mesh_query_prompt.txt must match its recorded SHA-256.
CPU and CUDA are supported by the host runtime. The default installer uses CPU PyTorch;
CUDA requires a compatible PyTorch runtime configured by the user.
import jsonimport torchfrom huggingface_hub import snapshot_downloadfrom pathlib import Pathfrom transformers import AutoModelForCausalLM, AutoTokenizer folder = snapshot_download("cyberalien/CySearchAssist-Mesh-0.5B") # Pin revision to a reviewed commit in production.tokenizer = AutoTokenizer.from_pretrained(folder, local_files_only=True, trust_remote_code=False)device = "cuda" if torch.cuda.is_available() else "cpu"model = AutoModelForCausalLM.from_pretrained( folder, torch_dtype=torch.float16 if device == "cuda" else torch.float32, local_files_only=True, trust_remote_code=False,).to(device).eval()messages = [ {"role": "system", "content": (Path(folder)/"mesh_query_prompt.txt").read_text("utf-8")}, {"role": "user", "content": "une chaise en bois sans accoudoirs"},]prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)inputs = tokenizer(prompt, return_tensors="pt").to(device)with torch.inference_mode(): output = model.generate(**inputs, max_new_tokens=256, do_sample=False, pad_token_id=tokenizer.eos_token_id)text = tokenizer.decode(output[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True)print(text) # Parse AND validate; do not treat generated values as asset paths or commands.
Expected keys: mesh_prompt, variations (exactly two), suggested_categories, suggested_tags, exclude.
Invalid output should fall back explicitly to the user's original text. Do not execute model output.
Measured limits
Local CPU benchmark: Ryzen 9 7900X, eight PyTorch threads, FP16 files loaded for FP32 CPU computation.
Small technical test; target expectations came from asset names, not human relevance annotations.
It does not establish general retrieval accuracy across arbitrary libraries.
Table with columns: Measurement, 1.5B, 0.5B| Measurement | 1.5B | 0.5B |
|---|
| Valid JSON contract, 37 queries | 35/37 | 30/37 |
| Named target in top five, 10 metadata queries | 10/10 | 7/10 |
| Median CPU generation with loaded model | 15.26 s | 5.23 s |
| Peak process RAM including load | 8.96 GiB | 3.09 GiB |
Negations, synonyms, multilingual ambiguity and materials can be misinterpreted.
No guarantee of equivalent quality between the two sizes. These exports are not GGUF or 4-bit quantized.
The initial CyMesh worker reloads the model per search, adding loading latency.
The host should preserve manual categories and only return real paths from its own asset index.