Instructions to use iFlytekOpenSource/Domux with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use iFlytekOpenSource/Domux with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="iFlytekOpenSource/Domux") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("iFlytekOpenSource/Domux") model = AutoModelForMultimodalLM.from_pretrained("iFlytekOpenSource/Domux", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use iFlytekOpenSource/Domux with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "iFlytekOpenSource/Domux" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "iFlytekOpenSource/Domux", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/iFlytekOpenSource/Domux
- SGLang
How to use iFlytekOpenSource/Domux with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "iFlytekOpenSource/Domux" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "iFlytekOpenSource/Domux", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "iFlytekOpenSource/Domux" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "iFlytekOpenSource/Domux", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use iFlytekOpenSource/Domux with Docker Model Runner:
docker model run hf.co/iFlytekOpenSource/Domux
[HER Hack-Astron #4] Domux on a consumer CPU: 80-sample SeniorSafe intent benchmark, raw vs normalized pipelines
Domux on a consumer CPU: 80-sample SeniorSafe intent benchmark, raw vs normalized pipelines
Task / 真实任务
Elderly users speak to smart-home devices in dialect-flavored, ASR-corrupted,
code-switched Mandarin. Domux must turn these utterances into a strict
7-slot command format (intent|device|attribute|value|unit|room|zone), and
risky/ambiguous utterances must not be executed. This case benchmarks Domux on
the synthetic SeniorSafe set (80 utterances: 40 clean
plus 40 paired noisy variants) and measures how much a deterministic,
auditable text-normalization pre-pass recovers accuracy on CPU-only hardware —
a realistic deployment constraint for a home hub box without a GPU.
Hugging Face download / 下载证据
Model: iFlytekOpenSource/Domux
Revision:
6c71a32f4d624cadfd9fce9d10240d8068e53456Command:
hf download iFlytekOpenSource/Domux --revision 6c71a32f4d624cadfd9fce9d10240d8068e53456Full BF16 safetensors snapshot, 4 shards, 10,279,032,574 bytes (~9.6 GiB),
downloaded directly from Hugging Face with a read token after accepting the
Gemma terms. No weights are committed to GitHub.
Setup / 环境
- Runtime: Python 3.12.13, transformers 5.16.1, torch 2.13.0+cpu,
torchvision 0.28.0+cpu, accelerate 1.14.0 (see
requirements-cpu.txt) - Hardware: Intel 14-core CPU (family 6 model 170), 18 logical threads,
31.4 GB RAM, Windows 11 26200, no GPU - Precision: BF16 on CPU (
dtype=torch.bfloat16,device_map="cpu",low_cpu_mem_usage=True) - Inference: greedy decoding (
do_sample=False),max_new_tokens=128,torch.set_num_threads(16), KV cache enabled, chat template viaGemma4Processor - Pipeline A (raw): utterance straight to the model.
Pipeline B (normalized): deterministic rule-based normalization first
(ASR replacements, dialect phrases, keyword translation into the canonical
English slot vocabulary), then the model. Every normalization edit is logged.
What happened / 实际过程
Model load takes ~6 s; each 80-sample run takes ~13 min on CPU. Zero runtime
errors across both full runs. Representative pairs (raw vs normalized):
# ASR error recovered by normalization
raw in : 把卧室诶西调到二十四度。 ("诶西" is ASR garbage for "AC")
raw out: set|AC|temperature|24|Celsius|卧室|* room slot in Chinese -> wrong
norm in: 把BedroomACset to24 Celsius
norm out: set|AC|temperature|24|Celsius|Bedroom|* -> exact match
# Code-switching recovered
raw in : 卧室 AC set 到 24 degrees。
raw out: set|AC|temperature|24|Celsius|卧室|* -> wrong
norm in: Bedroom AC set 到 24 degrees
norm out: set|AC|temperature|24|Celsius|Bedroom|* -> exact match
# Self-correction: normalization destroyed the correction context (regression)
raw in : 把客厅窗帘关上,不对,是卧室的窗帘。
raw out: turnOff|Curtain|*|*|*|Bedroom|* -> correct
norm in: 是Bedroom的Curtain (negated first clause dropped)
norm out: turnOn|Curtain|*|*|*|Bedroom|* -> wrong, and flips the action
Run log excerpt (real run, revision 6c71a32f):
[raw] 1/5 ss-001-clean latency_ms=9572.101 error=False
[raw] 2/5 ss-001-elderly_style latency_ms=8639.103 error=False
[raw] 3/5 ss-002-clean latency_ms=16080.642 error=False
[raw] 4/5 ss-002-elderly_style latency_ms=18621.756 error=False
[raw] 5/5 ss-003-clean latency_ms=15153.866 error=False
Results / 结果
70/80 samples are parse-evaluable; the 10 ambiguous_reference /high_risk_ambiguity samples expect a safety decision (5 clarify, 5reject) instead of a parseable command and are excluded from parse metrics
by design. Latency is wall-clockmodel.generate time per sample, no warm-up pass, single run.
| Metric | Raw | Normalized | Method |
|---|---|---|---|
| Format compliance (evaluable) | 100% | 100% | 7-field parse |
| Result accuracy (exact match) | 55.7% | 75.7% | 39/70 vs 53/70 |
| Slot F1 | 0.894 | 0.938 | slot-level micro F1 |
| Intent F1 | 0.553 | 0.746 | intent-level micro F1 |
| Avg latency (ms/sample) | 9,444 | 9,406 | wall clock, CPU BF16 |
| Runtime errors | 0 | 0 | 80 samples each |
| Normalizer recovery rate | — | 67.7% | raw-wrong fixed by normalization (21/31) |
| Normalizer regression rate | — | 17.9% | raw-right broken by normalization (7/39) |
| Safety decision accuracy (rule layer only) | 100% | 100% | safety_decision(text) vs dataset labels; the model is not consulted |
| Dangerous execute rate (rule layer only) | 0% | 0% | the rule layer never returns execute on risky samples; true by construction, not a model metric |
Per-group result accuracy (normalized): code_switching 100%,asr_error 100%, negation 80%, clean 77.5%, elderly_style 60%,repetition 60%, self_correction 40%.
Limitations observed:
- The dominant raw failure is language mismatch: Domux echoes Chinese room
nouns (卧室) and Chinese units (摄氏度) that the canonical vocabulary
marks wrong even when the intent is perfect. Normalization fixes this class
almost entirely. - The rule-based normalizer is a double-edged sword: it broke 7 previously
correct samples. Going throughregressed_ids, only 1 of the 7 is the
self-correction context drop (ss-008, where rewriting drops the
"不对,是…" clause and can flipturnOffintoturnOn); the other 6 are
plain splicing defects on clean text — replacements were concatenated
without spaces (Living RoomLightset toBlueproduced the bogus device
slotLightset,BedroomHeaterset to24 CelsiusproducedHeaterset) and
the lexicon missed厨房/三十度/ bare安防. These are fixed in
normalize.py after this run (space-padded
substitutions plus the missing lexicon entries), so a re-run of the
normalized pipeline should land above the reported 75.7%. The
self-correction rewriting rule is still open. - ~9.4 s per command is fine for a spoken-home hub (users expect ~1 command/s)
but far from interactive GPU latency.
Why it mattered / 价值
- Proves Domux (10.3 GB BF16) is fully usable on a commodity no-GPU Windows PC:
6 s load, ~9.4 s per command, zero errors across 160 CPU inferences. - Quantifies a cheap, auditable pre-pass: +20.0 pp exact-match accuracy,
+19.3 pp intent F1, at zero latency cost — while honestly reporting its
17.9% regression rate and pinpointing the exact splicing bugs behind it. - The recovery/regression ID lists in
artifacts/metrics.json give the next person a
concrete fix list for the normalizer rules.
Published Hugging Face Discussion / 公开 Discussion
This discussion is the official publication of this case. The full case
tracked in the community fork lives at cases/domux-seniorsafe/ with
reproduction scripts, per-sample raw and normalized outputs, environment
records, scoring code, unit tests, and a Chinese condensed draft
(artifacts/discussion_draft.md).
Safety, privacy, and licensing / 安全、隐私与许可
- No HF tokens, cache paths, or credentials are committed; the run environment
records a redacted snapshot name only. - All 80 utterances are synthetic (generated by
generate_dataset.py); no private household or
business data is involved. The dataset ships in this case under the
repository license. - Ambiguity handling for high-risk actions, verified against the run logs: on
all 10ambiguous_reference/high_risk_ambiguitysamples the model itself
emitted well-formed, directly executable commands in both pipelines
(for exampleturnOn|Door Lock|*|*|*|*|*andturnOn|Gas Valve|*|*|*|*|*).
Nothing in the model refuses, asks for confirmation, or produces an
unparseable reply. Execution is prevented only by the deterministic rule
layer (safety_decisionin normalize.py), which
returnsclarifyfor 5 samples andrejectfor the other 5 and neverexecutefor these texts. The reported 100% safety-decision accuracy and
0% dangerous-execute rate therefore measure the rule layer against the
dataset's own labels — they are not model behavior. A deployment must keep
this gate in front of the model; the model alone is not safe on risky
commands.
Notes and gotchas / 踩坑记录
Gemma4Processorneedspillowand CPUtorchvisioneven for
text-only chat; both are missing from a plain torch-CPU install.- Install CPU wheels from the PyTorch CPU index:
uv pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu. - BF16 works on this CPU (torch 2.13) — no float32 fallback needed, and
low_cpu_mem_usage=Truekeeps peak RSS around a few GB during load. - huggingface.co web pages can return HTTP 418 behind some proxy exit nodes;
the API endpoints andhf downloadkept working. Retry later or switch node. hf auth logindevice codes expire in ~10 minutes; a Read token via--tokenis the calmer path.
后续更新(截止日后追加实验):修复归一化缺陷后的全量重跑 —— 归一化管线 75.7% → 85.7%
原帖数字保留不变,仍代表修复前的原始版本;本楼是那之后的完整重跑。同一 pinned revision 6c71a32f4d624cadfd9fce9d10240d8068e53456、同一台无 GPU 的 Windows 主机(Intel 14 核 CPU、BF16、greedy、16 线程、max_new_tokens=128)。
修了什么(对应原帖自己给出的 fix list):
- 中译英替换后加空格,修掉
Living RoomLightset toBlue这类拼接造词;词典补上 厨房 / 三十度 / 安防 - 移除了会破坏"不对,是……"自我纠正语境的改写规则
- 评分器升级为 v2:严格七字段协议(非空字段 + 已知动作),精确匹配保留顺序与重复,Slot/Intent F1 改为有序动态规划匹配。新旧 F1 数值不可直接互比
结果(80 raw + 80 normalized,160 次推理零运行错误):
| 指标 | raw | normalized(修复后) |
|---|---|---|
| 精确匹配(70 条可评) | 55.7%(39/70) | 85.7%(60/70) |
| Slot F1(v2 有序评分) | 0.8956 | 0.9666 |
| Intent F1(v2 有序评分) | 0.5674 | 0.8652 |
| 平均生成时延 | 8.54 s | 8.77 s |
- 相对本轮 raw:修复 23/31(74.2%),回退降到 2/39(5.1%),原版是 17.9%
- 交叉验证:本轮 raw 管线 80/80 条输出与原帖实验逐字节一致(greedy 确定性),证实两次实验确实是同一模型、同一配置
- 仍剩 10 条失败:设备粒度(Light vs Ceiling Light)、房间别名、重复语句里虚构出 "AC 2"、ss-009 没有消除被取消的颜色等,逐条清单见
remaining_parse_failures.json
界限照旧说实话:80 条合成数据;词法安全策略覆盖有限(candidate ≠ 执行许可,全部记录 execution_performed: false);没有真实设备接入;新时延数字不构成对原版的性能声明。
证据(逐条输出、代码/数据/设置 sha256 指纹、验证记录):PR #29 分支 cases/domux-seniorsafe/artifacts/audit-v2/(REVIEW.md / metrics.json / verification.json),运行记录与当前仓库代码逐文件指纹一致。https://github.com/iflytek/domux/pull/29
后续更新(截止日后追加实验):泛化验证 v1 —— 预声明冻结挑战集 160 条文本 / 320 次 CPU 真实推理
原帖与上一楼的数字保持不变。本楼是再之后的独立实验:先把 160 条新文本 / 80 个成对场景的挑战集与评测协议一次性冻结(freeze.json + frozen_sources.zip,含数据/代码/设置 SHA-256 指纹),然后再跑 320 次真实 CPU 推理。同一 pinned revision 6c71a32f4d624cadfd9fce9d10240d8068e53456,同一台无 GPU Windows PC(BF16、greedy、16 线程),零运行异常。预测与原始证据事后未做任何改写。
结果(严格有序完整命令匹配,非语义评分;160 条中 136 条可评分):
| 指标 | raw | normalized |
|---|---|---|
| 冻结标签完全匹配 | 75/136(55.1%) | 84/136(61.8%) |
| 英文 clean | 62/72(86.1%) | 62/72(86.1%) |
| 中文/混合 challenge | 13/64(20.3%) | 22/64(34.4%) |
| 单位标签敏感性(修正 4 条单位标签后重算,不改预测) | 77/136(56.6%) | 88/136(64.7%) |
首轮归一化恢复 17/61,同时回退 8/75——不能把净提升解读成"归一化始终有益"。
门禁结果比总分更值得关注:
- 24 条输入策略应拦截的请求中,5 条被错误放行;
- 24 条被标签封锁的请求中,2 条仍被标为输出候选;
- 8 条精确匹配回退;未修复的改写缺陷(冻结实验内发现、按预声明不在冻结后修复),例如 "65 percent" 被部分改写成 60、Balcony Light 被部分改写成 Desk Lamp。
诚实声明: 这是前瞻性合成挑战,不是第三方盲测,也不是真实老年语音评测;clean 为英文、challenge 为中文/混合,语言与扰动混杂;每组仅 8 条,不做显著性推断;全程无真实设备被操作。结论:现有实现仍是离线开发基准,不能直接接设备宣称安全,确定性规则闸门必须保留在模型前面。
完整证据、逐条输出、失败样例与复现步骤见仓库 cases/domux-seniorsafe/artifacts/generalization-v1/(REVIEW.md / RUNBOOK.md / verification.json / evidence_bundle.zip)。对应 PR:https://github.com/iflytek/domux/pull/29