Open-Sourcing hamo-score-0.6b: Psychological State Scoring That Runs on Your Own Machine
AI for Psychology, Psychology for AI.
Hamo has open-sourced hamo-score-0.6b: a 600-million-parameter model that reads one message in a wellness conversation and returns five psychological state dimensions — and never writes a reply. It runs on a laptop in under a second, agrees with a frontier cloud scorer on 96.3% of clinical decisions, and cost about six and a half dollars of API budget to reach v4, the release announced here (later re-labelling and audits cost more).
Every Hamo conversation has a silent participant. While the Avatar talks, something else is reading — not composing a response, just taking a reading. A client says one thing, and it quietly writes down five numbers.
That component is called SCORE. Until now it ran as a call to a frontier cloud API: every message a client sent left our machines, went out to a vendor, and came back with a judgment. Now it is a model small enough to fit on a phone, and as of this week anyone can download it and run it entirely on their own machine. Hamo's own live service is not there yet: client messages still leave our machines, as explained below.
A scorer, not a speaker
The clearest way to describe SCORE is that it takes a conversation's pulse. It reads one message and rates five dimensions, each from 0.0 to 3.0:
- Agency — is this person doing something for themselves? Plans, coping, self-directed action.
- Withdrawal — are they pulling back? Disengaging, avoiding, going quiet.
- Extremity — catastrophizing, all-or-nothing framing, absolute language.
- Hostility — attacking someone. Venting frustration on its own doesn't count.
- Boundary — the linguistic trace of a clear "I": I need, I'm not willing to, this is my limit.
Boundary deserves a note, because it is the strangest of the five. Its clinical ancestor is differentiation of self in family systems work — a property of relationships, observed over time. But a scorer reading one message can't see a relationship. It can only see language. So what it actually measures is the linguistic footprint of boundary: "I need…" and "I'm not willing to…" score high; a panicked flood in which the self dissolves into feeling scores low. Insulting someone isn't a boundary at all — that registers as Hostility, which is boundary failure in the opposite direction.
Hamo shows these five numbers to a client in one place only: the chart in the WhatsApp weekly summary, as the week's averages, with Withdrawal, Extremity and Hostility flipped so that longer is better on every bar. In the conversation, the numbers flow into deterministic code that computes a pressure value, sorts the moment into a state band, and lets an admission table decide how deep the conversation is allowed to go — whether this turn can only offer grounding and company, or whether cognitive work is on the table.
The scorer does not prescribe. But every prescription downstream is written on top of its reading.
Why this had to be small, local, and ours
A cloud API was scoring well. Four things it could not give us:
Data sovereignty. Under most frontier-model terms of service, you may not use a model's outputs to train a competing model. Score with a rented judge and the scores stay rented. Score with your own, and every judgment becomes an asset that can teach the next generation.
A ruler that doesn't move. Cloud models get silently upgraded, and when the judge changes, the yardstick drifts underneath you. An audit trail has to be able to answer "was last month's pressure value measured with the same ruler as this month's" — and only a pinned version number makes that answerable. For any institution that needs to defend a clinical record, a model that changes without telling you is disqualifying.
Privacy in the strong sense. Run the scorer on your own machine and scoring sends nothing out at all. For conversations that function as medical records, "the data never leaves the clinic" is the strongest posture available — stronger than any encryption promise about data in transit. [Update, 2026-11: Hamo's own live service is not there yet. Reply generation and the semantic crisis screen run in the cloud, and the cloud scorer this model replaced still runs on every turn for comparison, so a client's messages still leave our machines.]
Credibility about what we'd ask of others. The shape we believe professional institutions should eventually deploy is a local small model plus a deterministic spine. It would be hollow to recommend that shape without moving our own system onto it, and that move is not finished, as the paragraph above says. Open-sourcing something you don't personally depend on is a press release. Open-sourcing the thing your own system runs on is a commitment.
How it learned, and the one rule that shaped everything
The first principle was a privacy red line, and it constrained every decision that followed: real client conversations never enter the training set.
Real production data did exactly two jobs. It served as the exam — 758 held-out turns, with their historical production scores as the answer key. And it provided distribution statistics: how long real people's messages actually are, how colloquial, how fragmentary. That second job matters more than it sounds. Synthetic training data written without it drifts toward tidy, articulate, novel-length paragraphs that no distressed person has ever typed.
[Update, 2026-08: as of v6.1, real production data does one more job — 440 turns written by three company-internal staff members (the founder and two staff counselors) entered training with their explicit consent, ~8% of the corpus. External client conversations still never enter training. Details on the model card.]
The teaching itself ran as a three-stage chain. Production scoring had already produced an answer key sitting in a database, costing nothing further to use. An open model — DeepSeek-chat — then had to sit a qualification exam of several hundred real items against that answer key before it was allowed to teach anything. Given the production rubric plus a calibration note on Boundary that production never had, it reached 88.7% at the dimension level, just under our 90% line, and passed conditionally (its decision-level score on the same paper, worked out a day later, was 97.5%). Only then did it grade the synthetic dialogue windows that became the student's homework — roughly 20,000 admitted across six data generations, of which the v4 release this post announced learned on about 15,000. The student, Qwen3-0.6B, learned on that homework on a MacBook, about an hour a round at first and about two hours by v4.
Why route through an intermediate teacher instead of teaching directly from the incumbent's scores? Two reasons, and both are structural. The terms of service didn't permit it. And we wanted a lineage that is fully open and reproducible end to end — someone else should be able to run this pipeline without a commercial API key and get a comparable result.
The synthetic corpus was not written freely, either. It was produced against a grid of scenario cells with quotas: neutral small talk must score zero across the board; giving up and avoidance must score high on Withdrawal; resistance to AI itself appears at five graded intensities; a one-word message like "whatever" has to be interpretable only in context. Every generated example then passed through an admission check. Anything scoring outside its design target was discarded rather than patched.
The report card
The fairest benchmark for a scorer is the scorer it replaces. Two caveats on reading the table. First, the columns sit different papers: the model is graded on the held-out final exam, while the teacher's figures are its scores on a separate several-hundred-item calibration paper, the one it sat to qualify — context, not a like-for-like race. Second, this post announced v4; the weights you would have downloaded in 2026-09 were v7, so both are shown rather than one quietly replacing the other. Since 2026-10-31 the default on Hugging Face has been v10h; human counselors engaged by Hamo reviewed and re-scored its synthetic training labels. Its numbers are in the 2026-11 note just above the table.
[Update, 2026-09: the current column now shows v7, the current release on Hugging Face, in place of v6.1. v7 had the teacher re-label the whole training corpus at temperature 0 (label denoising) and added a 2,713-row boundary-discrimination patch. Against v6.1 on the same 453-turn final exam, dimension agreement dipped 0.5 pt (85.6% → 85.1%), which is expected rather than a regression — the student now tracks the denoised labels more faithfully, and so sits slightly further from the noisier reference labels the exam uses — while decision agreement rose from 96.2% to 97.1%. On a 300-question boundary exam, measured on the shipped q8 GGUF, fabrication (a true 0 scored 1.0 or higher) fell from 13.5% to 2.9% and sign flips (a true 0.0 scored 2.0 or higher — self-erasure read as strong boundary) from 6 to 0. Details on the model card.]
[Update, 2026-11: v10h's shipped q8 GGUF has 82.8% dimension agreement (A 70 · W 87 · E 85 · H 95 · B 77) and 97.1% decision agreement on the same 453-turn final exam; the exam's answers are the reference labels, not counselor scores, and they use an older Agency rubric, so the A figure shows how far the rubric moved, not accuracy; the models' 0.0–3.0 scores are not comparable across v7, v9, v10 and v10h. Details in the technical record.]
| v4 (this post) | v7 (current in 2026-09) | Teacher (DeepSeek) | Reference scorer, vs. itself | |
|---|---|---|---|---|
| Dimension agreement (±0.5) | 84.0% | 85.1% | 88.7% | 94–98% (dimension level) |
| Final clinical decision agreement | 96.3% | 97.1% | 97.5% (decision level) | — |
| Per-dimension | A 81 · W 86 · E 85 · H 94 · B 73 | A 84 · W 87 · E 87 · H 94 · B 74 | — | — |
| Graded on | 758-turn held-out exam | 453-turn final split | several-hundred-item calibration paper | — |
| Latency | ~0.8s on a local M1 laptop (MLX); ~1.7s on a small cloud server (GGUF Q8 / Ollama / t4g.medium) | — | — | network round trip |
| Cost per score | fractions of a cent, amortized on self-hosted hardware | — | — | metered API + data leaving the country |
Two numbers in that table need their conditions stated, because stripped of them they mean something else. 97.5% is the teacher's own score at the decision level, on the paper it sat to qualify, worked out the day after it passed. The line set for it was 90% at the dimension level; it reached 88.7% and passed conditionally. 94–98% is something different: the incumbent cloud scorer's agreement with itself when it scores the same message twice, measured at the dimension level. That second figure is the ceiling, not a competitor. The comparison worth making for v7 is 85.1% against a 94–98% ceiling. The 97.1% and the teacher's 97.5% come from different papers, so read them side by side, not as a gap.
And the honest asterisk on 85.1% / 97.1%. We went looking for contamination in the final exam and found some: 42 of the 453 turns (9.3%) contain message text that also appears in training — the same three consenting staff members saying similar things in different sessions — and 11 of those (2.4%) share even the recent conversation context. Graded apart for v7: the 42 contaminated turns score 88.1% dimension and 100% decision; the 411 clean ones score 84.8% and 96.8%. So the published figures carry roughly +0.3 points of optimism on each. We measured that rather than assuming it away, and we would rather you have both numbers.
Three honest notes about this table. First, the ceiling is not 100% — the reference scorer only agrees with itself 94–98% of the time on repeat runs, and most of the small model's disagreements are line-ball calls of the "is this 1.0 or 1.5" variety on a 0.5-step scale, exactly the calls the reference model also flips on. Second, Boundary at 73% is the weakest dimension and we are not going to bury that; it is the hardest of the five to read from a single message, for the reason described above. Third, and least flattering: decision-level agreement actually went down slightly this generation, from 96.8% in the previous version to 96.3% here. We took that trade deliberately — the same release moved dimension-level agreement from 81% to 84.0% — but it is a regression on one axis and it belongs in the table's own paragraph rather than in a footnote nobody reads.
One thing changed alongside the small model. Very short replies — "nvm", "whatever" — used to be skipped as unscoreable. The pipeline now scores them in context, and the small model catches the withdrawal signal inside them. Which is precisely the moment a good clinician would have looked up.
What it refuses to do
The boundaries here are not disclaimers. They are architecture.
It never writes replies. Architecturally it is still a small language model — you load it with AutoModelForCausalLM and call generate — but everything it was trained and prompted to emit is a single JSON object holding the five scores. It has no conversational role. Hamo shows its scores to a client only in the weekly chart described above.
It is not a crisis detector. This is the most important line in this post, and it needs stating precisely rather than sweepingly. The crisis decision is not wired to this model at all: in Hamo's system an independent mechanism short-circuits into the full escalation protocol upstream, and a message it catches is not scored on that turn. That guarantee runs one way: the gate promises "hit means blocked", not "nothing gets missed" — our own English wordlist once matched "end my life" and let "ending my life" through. What a word list misses falls to the rest of the spine and to the responsible clinician. None of this model's scores, Withdrawal included, is a crisis signal. Swapping the scorer cannot move that gate, because the gate was never connected to it. The licence makes an independent upstream mechanism a condition of consumer-facing mental-wellness deployments, and also requires disclosing that an AI system is in use; deployers remain responsible for meeting both.
It does not diagnose. No labels, no disorders, no clinical determinations about a person. It assesses a message, not a human being, and certainly not a third party someone happens to mention.
It does not decide. What the system says next is governed by nine therapeutic methods on one clinical spine, configured by a licensed therapist who stakes their own accountability on it. The scorer informs. It never chooses.
Why the license isn't Apache 2.0
We thought about this for a long time, and chose deliberately.
Fully permissive licensing would mean the first unsupervised consumer AI companion built on these weights carries our name on its lineage — the exact product category regulators are currently dismantling. Fully closed would mean researchers and institutions can't verify anything we claim, which defeats the purpose.
So the weights ship under HAMO-RAIL-S 1.0, a responsible-AI license rather than an OSI-approved open-source license. We'd rather be precise about that than borrow credibility from a word that doesn't fit. Commercial use, modification, and redistribution are all free — what it carries instead is four use restrictions:
- No standalone clinical determinations. The score is an input to a human's judgment, never a verdict on its own.
- No consequential decisions about individuals — employment, insurance, surveillance screening. A model that reads psychological state from language is exactly the kind of thing that gets pointed at people who never consented to being read, and this line exists to make that a licence violation rather than a grey area.
- Consumer-facing mental-wellness deployments must keep an independent upstream crisis path and disclose AI involvement to the people they serve.
- No attempting to re-identify individuals.
Full terms are on the model page.
What we hope gets built
A scorer this small, this fast, and this inspectable is useful well beyond our own product. Four groups we'd particularly like to hear from:
Psychology research institutions. You can pin a version and it will never drift underneath your study. A cloud model silently upgraded mid-experiment invalidates comparisons across time; a fixed local checkpoint does not. If you need a per-message state instrument that produces the same number in March that it produced in January, this is one.
Clinical and wellness organizations. Run it inside your own infrastructure and scoring never sends client language out of it. The weights are small enough for commodity hardware — no GPU cluster, no vendor dependency, and for this step no data-processing agreement to negotiate over conversation content.
Practicing counselors. The honest use here is supervision and review support: a second reading over a session transcript, a way to see the shape of a client's state across weeks that a memory of the sessions alone can't hold. Not a replacement for your judgment. An instrument that your judgment interprets.
Social and language psychologists. Underneath this is a concrete claim: that measurable properties of psychological state leave traces in the language of a single message. We think that claim deserves adversarial testing by people who study language and mind for a living. The dimension where v4 was weakest — Boundary, 73% — is exactly where that scrutiny would be most valuable.
And if you find it wrong, tell us where. Published weights and a published evaluation method mean disagreement can now be specific instead of rhetorical. That's most of the point.
Why we're giving away a component we built
Because the mission does not get accomplished by one company holding all the pieces.
AI for Psychology, Psychology for AI.
If the goal were market share, you would keep every component. But the goal is to help people see what has always been running underneath their own behavior — and no single company reaches that, on any timeline that matters, alone. Psychology research institutions, clinical organizations, practicing counselors, and scholars of mind and society all have to be able to build with these tools, examine them, and correct them. That requires the components to be inspectable and locally runnable. So we are making ours that way, starting here.
This is the first of Hamo's components to be released, and the smallest. It will not be the last.
“A component that reads someone's psychological state should not be a black box owned by anyone — including us. It should be small enough to run on your own machine, cheap enough that a research lab can afford it, and open enough that when we're wrong, you can show us exactly where. That's why the weights are public. Understanding the human mind is not a market to corner. It's work that has to be done together.”
— Chris Cheng, Founder and CEO of Hamo AI
Model: HamoAI/hamo-score-0.6b · Base: Qwen3-0.6B · License: HAMO-RAIL-S 1.0 · Formats: safetensors, MLX, GGUF
Grounded in code, not slideware.
Hamo AI — making minds aware, and awake.
[Corrected 2026-11: the length of the production scoring record, how the teacher qualified, where clients see these scores, how long training rounds took, the API cost, what lets very short replies be scored, how generated examples were screened, and that the upstream crisis mechanism is not purely deterministic.]
About Hamo AI
Hamo AI Technology Ltd. is a Canada-based artificial intelligence company building the next-generation AI-Powered Therapist Avatar System. We are developing a comprehensive AI therapy platform called “Hamo” that connects mental health professionals with clients through AI-powered therapy avatars. The ecosystem consists of three interconnected applications: Hamo Pro (therapist dashboard for creating and managing AI avatars), Hamo Client (client interface for interacting with therapy avatars), and Hamo-UME (Unified Mind Engine, backend API). The platform aims to make mental health support more accessible while maintaining professional oversight through professional therapists who create and manage the AI avatars.
Media Contact
Hamo AI Technology Ltd.
Email: socialmedia@hamo.ai
Website: www.hamo.ai
Address: 108 College St, Schwartz Reisman Campus, SUITE W640, Toronto ON M5G 0C6, Canada
Frequently Asked Questions
What is hamo-score-0.6b?
An open-weights 0.6-billion-parameter model, fine-tuned from Qwen3-0.6B, that reads a single message in a mental-wellness conversation and returns five psychological state dimensions — Agency, Withdrawal, Extremity, Hostility, and Boundary — each scored 0.0 to 3.0. It generates no text. It is a measuring instrument, not a conversational agent.
Is hamo-score-0.6b a therapy chatbot?
No. It never writes replies — everything it was trained and prompted to emit is a single JSON object holding five scores. It is architecturally still a small language model, loaded with AutoModelForCausalLM, but it has no conversational role. Hamo shows those scores to a client only in a weekly chart of averages on WhatsApp. Deciding what to say next is a separate job, never given to this model: deterministic code and a licensed therapist's configuration set what is allowed, and a different language model writes the reply.
Can hamo-score-0.6b detect a crisis or suicide risk?
No — it is explicitly not a crisis detector. The crisis decision is not wired to this model: in Hamo's own system an independent mechanism short-circuits upstream, and a message it catches is not scored on that turn. The gate guarantees 'hit means blocked'; it does not guarantee 'nothing is missed' — our own shipped wordlist once let a phrasing through. What a word list misses falls to the rest of Hamo's clinical spine and to the responsible clinician. None of this model's scores, Withdrawal included, is a crisis signal. The licence makes an independent upstream mechanism a condition of consumer-facing mental-wellness deployments, and also requires disclosing that an AI system is in use; deployers remain responsible for meeting both.
Was real client conversation data used to train this model?
No. Not a single authentic client message entered the training set — that remains true of every version. For the v4 release this post announced, real production turns were used for exactly two things: as a held-out exam to grade the model, and as a statistical reference for how real people actually write; its training curriculum was entirely synthetic — roughly 20,000 admitted dialogue windows across six data generations, about 15,000 of them in v4. (Update: since v6.1, the shipped weights additionally train on 440 turns contributed by three company-internal staff members — the founder and two staff counselors — with their explicit consent, ~8% of the corpus in v6.1 and 6.5% in v10h, upsampled ×3. External client conversations still never enter training — see the model card.)
How accurate is a 0.6B model compared to a frontier cloud model?
The v4 release this post announced agrees with a frontier cloud scorer on 96.3% of final clinical decisions, and reaches 84.0% on dimension scores within ±0.5 (v10h, the default on Hugging Face since 2026-10-31, graded on a 453-turn final exam against reference labels that use an older Agency rubric: 97.1% and 82.8%). For context, the reference scorer agrees with itself only 94–98% of the time on repeat runs — that self-consistency is the real ceiling, not 100%.
What license is hamo-score-0.6b released under? Can I use it commercially?
HAMO-RAIL-S 1.0, a responsible-AI license rather than Apache 2.0. Commercial use, modification, and redistribution are all permitted. It carries four use restrictions instead: no standalone clinical determinations; no consequential decisions about individuals such as employment, insurance, or surveillance screening; consumer-facing mental-wellness deployments must keep an independent upstream crisis path and disclose AI involvement; and no attempting to re-identify individuals.