tinyhumansai/openhuman · error · VoiceNotCompiledError
voice_not_compiled
voice_not_compiled
Error message
Voice transcription is unavailable in this build — the voice module was not compiled into the app. Update OpenHuman to the latest version; restarting will not help.
What it means
Argument-loop error from `openhuman memory graph` (alias `graph-query`). Accepted tokens are only `--namespace/-n`, `--subject`, `--predicate` (each with a value), `-v/--verbose`, `-h/--help`. Anything else — unknown flag or positional — aborts. Note a dangling `--subject`/`--predicate` at end of argv produces the separate `missing value for {flag}` error, not this one.
Source
Thrown at app/src/features/human/voice/sttClient.ts:122
const rpcStart = Date.now();
let result: CloudTranscribeResult;
try {
result = await callCoreRpc<CloudTranscribeResult>({
method: 'openhuman.voice_cloud_transcribe',
params,
});
} catch (err) {
// An "unknown method" error means the core serving this app was built
// without the `voice` Cargo feature, so the `openhuman.voice_*`
// controllers were never registered (#4901). This is a compile-time
// property of the binary — restarting cannot change it, which is why the
// old #1289-era "restart to pick up the latest core sidecar" copy was
// unactionable (and the sidecar itself is gone since #1061).
const msg = err instanceof Error ? err.message : String(err);
if (msg.includes('unknown method')) {
sttLog('[voice-stt] transcribe rpc: voice domain absent from core build: %s', msg);
throw new VoiceNotCompiledError();
}
sttLog('transcribe rpc failed (passthrough): %O', err);
throw err;
}
const text = result?.text?.trim() ?? '';
sttLog('transcribed chars=%d rpc_ms=%d', text.length, Math.round(Date.now() - rpcStart));
return text;
}
interface FactoryTranscribeOptions {
/** BCP-47 language hint, e.g. `'en'`. */
language?: string;
/** Override the server-side provider resolution: `'cloud'` for the backend
* proxy, or a `voice_providers` slug. When unset the core resolves
* `voice_server.stt_engine`. */
provider?: string;
/** Model id for the selected engine (e.g. `'whisper-1'`, `'scribe_v1'`). */
model?: string;View on GitHub (pinned to a221052e0d)
Solutions
- Use exactly the three value flags: --namespace, --subject, --predicate
- Spell the flags precisely (no --object; the third slot is --predicate)
- Run `openhuman memory graph --help` to confirm the usage line
Example fix
# before openhuman memory graph --object "doc:1" # after openhuman memory graph --subject "doc:1"
Defensive patterns
Strategy: validation
Validate before calling
# bash: graph accepts only --namespace/--subject/--predicate (+values), -v, -h
prev=''
for a in "$@"; do
case "$a" in
--namespace|-n|--subject|--predicate|-v|--verbose|-h|--help) ;;
-*) echo "unknown graph arg: $a" >&2; exit 2 ;;
*) [ -n "$prev" ] || { echo "positional not accepted: $a" >&2; exit 2; } ;;
esac
prev="$a"
done
openhuman memory graph "$@" Try / catch
if ! out=$(openhuman memory graph "$@" 2>&1); then case "$out" in *"unknown graph arg"*) openhuman memory graph --help >&2; exit 2;; esac printf '%s\n' "$out" >&2; exit 1 fi
Prevention
- Remember the triple is subject/predicate only — there is no --object
- Namespace is a flag, never a positional
When it happens
Trigger: `openhuman memory graph --object x` (typo for --subject); `openhuman memory graph mynamespace` (positional namespace not accepted); `openhuman memory graph --json`.
Common situations: Confusing subject/predicate/object vocabulary from RDF tooling; assuming positional forms; automation written against an older CLI revision.
Related errors
- audio blob is empty
- Recovery phrase is required.
- Failed to secure recovery phrase. Please try again.
- Invalid ${paramName}: ${value}. ID is out of the valid integ
- OpenHuman could not reach its local runtime. Quit and reopen
AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16).
Data as JSON: /api/errors/e420f837f6bc777e.
Report an issue: GitHub.