live: heartbeat sync 2026-10-18T17:49:00-07:00 (Refs #11)
This commit is contained in:
1 parent
b3d3df4bdb
commit
57e255f930
15 files changed
+352
-19
No files matched your search
@@ -254,3 +254,49 @@ providers:
|
||||
# prior assistants' <think> blocks from history. Keep them —
|
||||
# multi-turn tool traffic on this endpoint is the majority.
|
||||
preserve_thinking: true
|
||||
|
||||
# Speech endpoint — the fleet's TTS, NOT a chat provider. `api:
|
||||
# openai-speech` is a runner API (catalog kind `tts`), so this row never
|
||||
# enters the chat picker, the Ctrl+P cycle, or any chat role: it is
|
||||
# reachable only through the `speech` model role and the tts device.
|
||||
# frank-tts (host port 7772) is the OpenAI /v1/audio/speech façade that
|
||||
# resolves a voice BY NAME; its engine (frank-tts-engine, container-internal
|
||||
# 8880, never published) is arm A qwentts.cpp 5916bf7 — measured 0.55-0.67
|
||||
# RTF warm and 86-451 ms to the first audio byte on Dankclaw's CPU, with
|
||||
# mainline llama-tts (TTS_BACKEND=llama-tts-cli) kept as the rollback.
|
||||
# Transport contract, read out of the harness itself: the request body is
|
||||
# {model, input, response_format, voice?, speed?}; `voice` is forwarded ONLY
|
||||
# when explicitly set, and sampleRate/bitRate are REJECTED outright (the
|
||||
# transport throws "openai-speech does not support sampleRate"), so the
|
||||
# codec comes from the output_path suffix and the only tunable that matters
|
||||
# is the voice name — which must be a real pack name (narrator1/2/3); an
|
||||
# unknown name is an engine error, not a fallback.
|
||||
# DELIBERATELY NOT WIRED YET: config.yml `modelRoles.speech` still points at
|
||||
# local/kokoro. Flip it to "frank-tts (dankclaw)/frank-tts" only after the
|
||||
# service is deployed and has answered a real synthesis, because `auth: none`
|
||||
# makes the provider read as AVAILABLE even while the container is down — the
|
||||
# role would then fail instead of falling back to Kokoro. The same flip must
|
||||
# re-key `speech.voice` (now am_fenrir, a Kokoro voice) to a pack name.
|
||||
# SCHEMA LAW, learned the hard way (2026-10-18): provider-level `api` must be
|
||||
# a CHAT transport — the models.yml schema accepts only the chat/judge APIs
|
||||
# there, and naming a runner API (`openai-speech`) at provider level fails the
|
||||
# file's validation, which DISABLES EVERY custom provider: all three fleet
|
||||
# endpoints vanish from the registry, not just this one (`omp models` prints
|
||||
# "models.yml validation failed — custom providers disabled" and lists only
|
||||
# local/kokoro). The runner api belongs on the MODEL entry only, which is what
|
||||
# the block below does — `auth: none` covers the credential requirement, and
|
||||
# `contextWindow`/`maxTokens` stay unset because the check only fires when they
|
||||
# are provided (the bundled Kokoro row is null on both). `omp models --kind tts`
|
||||
# still prints 128K/16K for this row — the registry fills display defaults — and
|
||||
# the speech transport never reads them: its whole request body is the five
|
||||
# fields named above. Verified 2026-10-18 with `omp models --kind tts` (row
|
||||
# present) and `omp models` (frank-tts absent from the chat roster, all three
|
||||
# fleet providers still listed).
|
||||
"frank-tts (dankclaw)":
|
||||
baseUrl: http://192.168.0.143:7772/v1
|
||||
auth: none
|
||||
models:
|
||||
- id: frank-tts
|
||||
name: "frank-tts (dankclaw) — cloned voices"
|
||||
api: openai-speech
|
||||
input: [text]
|
||||
Reference in new issue
Block a user