apartรฉ โ€” souffleurs (dรฉploiement navigateur, ONNX q4 + LoRA int8 hot-swap)

Format prรชt ร  servir dans le navigateur (transformers.js / WebGPU) de l'architecture ยซ souffleurs ยป : UN seul modรจle de base ONNX q4 partagรฉ + des adaptateurs LoRA รฉchangeables ร  chaud (.data), tous au mรชme rang โ†’ un seul base sert tous les rรดles.

Mรฉtaphore : le souffleur de thรฉรขtre. Le caller (souffleur-chat) dรฉcide et route ; les exรฉcuteurs (souffleur-pdf, -xlsx-docx, -sandbox) produisent l'artefact. Le hot-swap = le mรชme acteur (base) change de souffleur selon la scรจne.

Versioning (dรฉtection de mise ร  jour)

Les souffleurs ont des noms de fichiers versionnรฉs immuables (souffleur-<role>-<version>.data). La source de vรฉritรฉ des versions courantes = manifest.json (ร  la racine). Un client fetch ce petit fichier en no-store, compare les version ร  son cache, et ne re-tรฉlรฉcharge que le .data changรฉ. Dรฉtails d'intรฉgration : voir HANDOFF-versioning-souffleurs.md dans le repo de lab. Version actuelle : chat 0.2.0 (le caller redonne du code + route write_file(pdf)), exรฉcuteurs 0.1.0.

Contenu du repo

Fichier Rรดle Taille
onnx/model_q4.onnx graphe base r128 (slots LoRA int8, DequantizeLinear inline) ~0.36 MB
onnx/model_q4.onnx_data poids base q4 (externes, partagรฉs par tous les souffleurs) ~795 MB
config.json, generation_config.json, tokenizer*.json tokenizer + config (chat_template inclus) ~4.7 MB
adapters/souffleur-chat.data caller โ€” routage + tool-calls 86 MB
adapters/souffleur-pdf.data exรฉcuteur PDF (jsPDF) 86 MB
adapters/souffleur-xlsx-docx.data exรฉcuteur tableur / doc 86 MB
adapters/souffleur-sandbox.data exรฉcuteur sandbox JS 86 MB

Ajouter un rรดle = dรฉposer un .data de 86 MB de plus. Rien d'autre ne bouge.

Pourquoi 86 MB par souffleur (et pas 340)

  • Adaptateurs entraรฎnรฉs en LoRA r128 (les exรฉcuteurs), souffleur-chat entraรฎnรฉ en r64 puis padรฉ r128 (lignes de rang nulles) pour partager le mรชme base.
  • Stockage .data en int8 symรฉtrique par canal (quant + DequantizeLinear, compute FP32 restaurรฉ ร  l'exรฉcution) โ†’ รท4 vs fp32 : 340 MB โ†’ 86 MB, sans perte de qualitรฉ mesurรฉe (voir plus bas).
  • Le gros poids (795 MB base) est partagรฉ une seule fois entre tous les rรดles.

Chargement (transformers.js 4.2.0, WebGPU)

Le graphe rรฉfรฉrence deux fichiers externes : les poids base (model_q4.onnx_data) et un placeholder adapter.data remappรฉ vers le souffleur voulu. Hot-swap = mรชme graphe, autre .data.

import { pipeline } from '@huggingface/transformers'; // 4.2.0

async function load(souffleur) {
  return pipeline('text-generation', 'onnx/base', {
    device: 'webgpu', dtype: 'q4', model_file_name: 'model',
    session_options: { externalData: [
      { path: 'model_q4.onnx_data', data: 'onnx/model_q4.onnx_data' },
      { path: 'adapter.data',       data: `adapters/${souffleur}.data` },
    ] },
  });
}
// caller -> dรฉcide ; puis hot-swap vers l'exรฉcuteur choisi
let pipe = await load('souffleur-chat');   // routage
pipe     = await load('souffleur-pdf');    // exรฉcution (swap ~3.8 s, base en cache)

Validation hot-swap (navigateur, WebGPU, q4 int8)

Chaรฎne caller โ†’ hot-swap โ†’ exรฉcuteur testรฉe de bout en bout :

  1. souffleur-chat sur ยซ Crรฉe une facture PDF โ€ฆ 450 EUR HT ยป โ†’ รฉmet write_file(kind="pdf", task="Crรฉer une facture professionnelle โ€ฆ Total TTC : 450 EUR โ€ฆ paiement ร  30 jours.") (tool-call pythonic complet, ~17 tok/s).
  2. hot-swap โ†’ souffleur-pdf en ~3.8 s (base en cache, on ne recharge que le .data).
  3. souffleur-pdf sur l'intent โ†’ code jsPDF valide (new jsPDF(), en-tรชte setFillColor/rect, Nยฐ FAC-2024-089, doc.output('blob')), ~13 tok/s.

La quantif int8 ne dรฉgrade pas la sortie (identique/plus riche que le fp32 sur le mรชme prompt).

Contrat & prompt systรจme

Format tool-call pythonic : <|tool_call_start|>[name(args)]<|tool_call_end|> (parsรฉ AST). Le prompt systรจme du caller = coeur sp-chat + List of tools: [JSON] + (si fichiers) Files available: [{id,name,type}]. Deux rรจgles apprises et critiques :

  • Recopier file_id ร  l'identique, ne jamais l'inventer.
  • Toujours appeler l'outil compute pour tout calcul (jamais de calcul mental).

Base & entraรฎnement

  • Base : LFM2.5-VL-1.6B strippรฉ, TEXT-ONLY (pas de vision_config), model_type: lfm2. La vision se rebranche par hot-swap d'encodeur (hors de ce repo).
  • Entraรฎnement : Unsloth SFT sur AMD Strix Halo (Radeon 8060S, gfx1151, ROCm, WSL).
  • Cibles LoRA : in_proj,k_proj,out_proj,q_proj,v_proj,w1,w2,w3 ; scaling = 1.0 (alpha=r).
  • Le caller v6 score 94 % sur l'รฉval interne (routage + tool-calls).

Format ยซ source ยป (bf16)

Les adaptateurs bf16 d'origine (safetensors + adapter_config.json + chat_template) sont dans le dossier souffleurs/<nom>/v0.1/ du repo de lab โ€” utile pour re-quantifier ou rรฉ-entraรฎner. Ce repo-ci est le format de service (le plus lรฉger).

Downloads last month
194
GGUF
Model size
1B params
Architecture
lfm2
Hardware compatibility
Log In to add your hardware

4-bit

8-bit

16-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for apartejs/aparte-souffleurs

Adapter
(17)
this model