hamo-score-0.6b — the little model that takes your pulse
A 0.6B model that reads one message from a wellness conversation, in Chinese or English, and returns five scores as one JSON object: Agency, Withdrawal, Extremity, Hostility, Boundary (AWEHB), each 0.0–3.0. It does not write replies; its scores feed deterministic code (stress update, state buckets, action gating). 中文说明见下方。
- Scores locally, on CPU. No external API, no conversation data leaving the machine. Distilled to do the job of the LLM scorer behind Hamo AI's production rubric (the reference scorer).
- Small, and fast enough for live use. 0.64 GB as q8 GGUF (base: Qwen3-0.6B). On an ARM CPU server through ollama, with the toolkit's prompt trimming: median 2.13 s per message, slowest 2.91 s of 138 synthetic items.
- Ready to wire in. The toolkit (
pip install hamo-score, Apache-2.0): prompt format, upstream keyword gate, one-command Docker server. - Free to use, commercially too. HAMO-RAIL-S 1.0, with use restrictions.
Message: 今天试着出门散了个步 (tried going out for a walk today), after the assistant asked 这周过得怎么样? (how was your week?)
Scores (v10):
{"A": 1.0, "W": 0.0, "E": 0.0, "H": 0.0, "B": 1.5}
A one-off walk is mid-band Agency; Boundary also credits a report of positive action.
Quickstart
pip install hamo-score
- Library:
score_message()runs the keyword gate first and skips scoring if it fires. - Server:
docker compose upinserver/of the toolkit repository serves v10 asPOST /scoreon port 8080. - Self-check:
python eval/run_exam.pyin a clone of the repository, against your own ollama endpoint (--base-url); the Docker server exposes only port 8080. - Weights:
gguf/hamo-score-0.6b-v10.q8.gguf. Sampling must be neutral (temperature 0,repeat_penalty 1.0,top_k 0,top_p 1.0): ollama's defaultrepeat_penalty 1.1pushes scores away from zero. The toolkit'sOllamaClientsends the last three with each request.
Prompt template, transformers snippet and Modelfile: technical record.
The five scores
| Score | What it reads (0.0–3.0 in steps of 0.5) | |
|---|---|---|
| A | Agency | Moving one's situation, or the helping relationship, forward: a decision, asking for help, a sustained healthy habit |
| W | Withdrawal | Giving up, avoiding, disengaging |
| E | Extremity | Catastrophizing chains, all-or-nothing thinking |
| H | Hostility | Attacking someone; venting without a target is not hostility |
| B | Boundary | Speaking clearly from an "I" position: a need, a limit, a stated position; calm self-description and reports of positive action also score high |
The scores are not meant to be read raw.
Numbers at a glance
| Measure | Result (v10, shipped q8 GGUF, llama.cpp with Metal, temperature 0) | Measured on |
|---|---|---|
| Same state bucket as the reference labels | 435 of 453 turns (96.0%) | real final exam |
| W, E and H within ±0.5 of the reference labels | 1,204 of 1,359 judgments | real final exam |
| A: the higher-agency message of a pair scores higher | 149 of 154 pairs | synthetic A exam |
| B: the higher-boundary message of a pair scores higher | 179 of 180 pairs | synthetic B exams |
| Scores within ±0.5 of the label, mean of the five | 87.3% | toolkit self-check, 195 synthetic questions; certifies wiring, not model quality |
| Unparseable outputs | 0 | six exams |
The real final exam is 453 pseudonymised turns from three consenting internal staff members, so these are not accuracy figures for the general population. The synthetic exams are in-distribution: passing shows no regression inside the known range, not generalisation.
What it is not
Not a chatbot, not a diagnostic instrument, not a crisis detector. It does not detect or handle crises, and none of its scores, W included, is a crisis signal. Crisis handling is the job of deterministic code that runs before the model: the toolkit's keyword gate is a starting point, not a complete screen, and LICENSE §3c makes an independent upstream mechanism a condition of consumer-facing mental-wellness deployments.
Evaluation
v10 met 17 of the 18 checks of its signed pre-registration. The one it did not meet, G5a, was a stand-in for crisis handling, which the founder ruled outside this model after seeing the result; under the registration as signed the verdict was "rejected", and v10 is released by the founder's decision. The reported checks, exams and method are in the technical record.
Limitations & known residuals
- Scores are not comparable across v7, v9 and v10. Store the version with every score.
- A follows a newer rubric (v8) with no measurement on real conversations yet.
- B can flip sign. With no context, v10 scores B 2.5 on a known self-erasure sentence (giving up one's own position) whose correct B is 0; v7 and v9 score it 0.
- The exams are narrow and reused. The real ones cover three staff members and have judged earlier versions.
- Check the toolkit's stress cut-offs on your own data before they gate anything.
- Full list: technical record.
Training data
Synthetic conversations labelled by an open-weight teacher model, plus 440 pseudonymised turns from consenting internal staff. External user conversations never enter training. Training messages: 76.0% Chinese, 13.1% English, 10.9% mixed; results were not broken down by language.
Versions and files
- v10 is the default on
mainsince 2026-10-06 (UTC). Pin it withrevision="f3869312f0222992c3eb2e938e78090de38eb80a". - Files:
gguf/hamo-score-0.6b-v10.q8.gguf; the v9, v7 and v6.1 GGUFs stay ingguf/. Digests and rollback commands: technical record. - Coming from v9: its narrower B rubric makes computed stress drift upward wherever B has a negative weight, and re-tuning thresholds does not repair it. Move to v10 (or back to v7); do not carry over stress accumulated from v9 scores (full correction).
Links and license
- Toolkit: GitHub · PyPI · integration guide · FAQ · fine-tuning guide.
- Everything else: technical record.
- Disagree with a score? Open a disagreement report.
- License: HAMO-RAIL-S 1.0 (LICENSE): free commercial and non-commercial use, modification and redistribution, with four use restrictions that pass on to recipients (§3a–d). It is deliberately not an OSI-approved open-source license.
中文
给每句话把脉的小模型:0.6B,读心理支持对话里的一条消息(中文、英文都行),输出一个 JSON 对象,里面是五个分数:行动力、退缩、极端化、敌意、边界感(AWEHB),各 0.0–3.0。它只打分,不写回复;分数是给确定性代码用的(压力更新、状态桶、动作门控)。
- 本地评分,CPU 就能跑。 不调外部 API,对话数据不出机器。它学的是 Hamo AI 按生产口径打分的大模型评分器(参照评分器)。
- 小,而且快到能实时用。 q8 GGUF 0.64 GB(基座 Qwen3-0.6B)。在跑 ollama 的 ARM CPU 服务器上,提示词按工具包规则截短,每条消息中位 2.13 秒,138 道合成题里最慢 2.91 秒。
- 拿来就能接。 工具包(
pip install hamo-score,Apache-2.0):提示词格式、放在模型上游的关键词闸门、一条命令启动的 Docker 服务。 - 可自由使用,商用也行。 许可证是 HAMO-RAIL-S 1.0,附使用限制。
消息: 今天试着出门散了个步(上一句是助手问「这周过得怎么样?」)
打分(v10):
{"A": 1.0, "W": 0.0, "E": 0.0, "H": 0.0, "B": 1.5}
单次散步算中档的行动力;边界感的口径也给「报告积极行动」记分。
快速上手
pip install hamo-score
- 库:
score_message()先跑关键词闸门,命中就不评分。 - 服务: 在工具包仓库的
server/下执行docker compose up,8080 端口POST /score,跑的是 v10。 - 自检: 克隆仓库后运行
python eval/run_exam.py,对着自己的 ollama 服务(--base-url);Docker 服务只开放 8080 端口。 - 权重:
gguf/hamo-score-0.6b-v10.q8.gguf。采样必须取中性值(温度 0、repeat_penalty 1.0、top_k 0、top_p 1.0):ollama 默认的repeat_penalty 1.1会把分数从 0 往上推。工具包的OllamaClient每次请求都带后三项。
提示词模板、transformers 代码和 Modelfile 见技术档案。
五个分数
| 分数 | 读的是什么(0.0–3.0,步长 0.5) | |
|---|---|---|
| A | 行动力 | 主动推动处境或疗愈关系向前:做决定、主动求助、坚持健康习惯 |
| W | 退缩 | 放弃、回避、抽离 |
| E | 极端化 | 灾难化连锁、非黑即白 |
| H | 敌意 | 攻击某个人;没有对象的抱怨不算 |
| B | 边界感 | 站在「我」的位置把需要、界限、立场说清楚;平静有条理的自述、报告积极行动也给高分 |
分数不是直接读的。
关键数字
| 指标 | 结果(v10,随包 q8 GGUF,llama.cpp + Metal,温度 0) | 考卷 |
|---|---|---|
| 与参照标签落在同一个状态桶 | 453 轮中 435 轮(96.0%) | 真实终评 |
| W、E、H 与参照标签相差不超过 0.5 | 1,359 个判断中 1,204 个 | 真实终评 |
| A:成对题里行动力更高的一条得分更高 | 154 对中 149 对 | 合成 A 卷 |
| B:成对题里边界更清楚的一条得分更高 | 180 对中 179 对 | 两份合成 B 卷 |
| 与标签相差不超过 0.5(五维平均) | 87.3% | 工具包自检卷,195 道合成题;考过只说明接线对,不说明模型打得对 |
| 无法解析的输出 | 0 | 六份考卷 |
真实终评是三位已同意的内部员工的 453 轮对话,已假名化,所以这些不是一般人群上的准确率。合成考卷与训练同分布:考过只说明已知范围内没有退步,不说明能推广。
它不是什么
不是聊天机器人,不是诊断工具,也不是危机检测器。它不识别也不处理危机;它的分数,包括 W 在内,没有一个是危机信号。危机处理由先于模型运行的确定性代码负责:工具包的关键词闸门只是起点,不是完整筛查;面向消费者的心理健康部署,上游必须有独立机制,这是许可条件(LICENSE §3c)。
评测
签字版预注册的 18 项检查,v10 过了 17 项。没过的那一项 G5a 当初是作为危机处理的替代指标设的;创始人看到结果后裁定,危机处理不在本模型里判定。按签字版预注册,判定是「拒收」;v10 由创始人决定发布。已报告的各项检查、考卷和方法,都在技术档案里。
已知局限
- v7、v9、v10 的分数互不可比。 分数要连同版本一起存。
- A 用较新的 v8 口径,还没有真实对话上的测量。
- B 可能判反(符号翻转)。 一句已知的自我消融短句(放弃自己的立场),不带上下文时 v10 打 B 2.5,正确的 B 是 0;v7、v9 打 0。
- 考卷窄,而且反复用过。 真实考卷只覆盖三位员工,也给此前的版本判过卷。
- 工具包里压力分桶的阈值,请先用自己的数据核对,再让它把关。
- 完整清单见技术档案。
训练数据
合成对话由开放权重的教师模型打标,另有 440 轮假名化的内部员工对话(经本人同意)。外部用户的对话从不进入训练。训练消息里中文占 76.0%,英文 13.1%,中英混杂 10.9%;成绩没有按语言拆开测。
版本与文件
main自 2026-10-06(UTC)起默认是 v10。固定版本请用revision="f3869312f0222992c3eb2e938e78090de38eb80a"。- 文件:
gguf/hamo-score-0.6b-v10.q8.gguf;v9、v7、v6.1 的 GGUF 仍在gguf/下。校验和与回退命令见技术档案。 - 从 v9 过来: v9 的 B 用的是更窄的口径,喂进 B 为负权重的压力公式,算出的压力会向上漂,重调阈值修不了。请换 v10(或退回 v7),按 v9 分数累积的压力值不要沿用(完整更正)。