diff --git a/.github/scripts/test/ci-trust-policy.test.mjs b/.github/scripts/test/ci-trust-policy.test.mjs
index f34cd6d16f2..aa377b118d8 100644
--- a/.github/scripts/test/ci-trust-policy.test.mjs
+++ b/.github/scripts/test/ci-trust-policy.test.mjs
@@ -3285,3 +3285,35 @@ for (const [workflow, nextStep] of [
}
});
}
+
+// The CLI is typechecked against the in-repo SDK, whose public types come from
+// @qvac/inference. SDK Pod Checks selects packages by changed path, so without
+// this dependency an SDK type change never ran the CLI checks and broke main
+// for the next PR that touched the CLI.
+test("SDK and inference changes select the CLI pod checks", () => {
+ const packages = JSON.parse(read(".github/sdk-pod-checks.json"));
+ const cli = packages.find((entry) => entry.package === "cli");
+ assert.ok(cli, "the cli entry exists");
+ assert.deepEqual(cli.depends_on, ["packages/sdk", "packages/inference"]);
+
+ // The workflow selects a package when a changed file sits under its own path
+ // or one of its depends_on paths; this is that rule, pinned next to it.
+ const workflow = read(".github/workflows/pr-checks-sdk-pod.yml");
+ assert.ok(workflow.includes("([.path] + (.depends_on // [])) as $paths"));
+ assert.ok(workflow.includes('startswith($p + "/")'));
+ const selected = (changedFile) =>
+ packages
+ .filter((entry) =>
+ [entry.path, ...(entry.depends_on ?? [])].some((path) =>
+ changedFile.startsWith(`${path}/`),
+ ),
+ )
+ .map((entry) => entry.package);
+
+ assert.ok(selected("packages/inference/src/schemas/audio-gen.ts").includes("cli"));
+ assert.ok(selected("packages/sdk/src/client/api/audio-gen.ts").includes("cli"));
+ assert.ok(selected("packages/cli/src/serve/index.ts").includes("cli"));
+ assert.ok(!selected("packages/rag/index.js").includes("cli"));
+ // A sibling whose name merely starts with a dependency path is not a match.
+ assert.ok(!selected("packages/sdk-e2e/tests/tts.ts").includes("cli"));
+});
diff --git a/.github/sdk-pod-checks.json b/.github/sdk-pod-checks.json
index 0d43147679c..884580084e1 100644
--- a/.github/sdk-pod-checks.json
+++ b/.github/sdk-pod-checks.json
@@ -22,7 +22,8 @@
"package": "cli",
"path": "packages/cli",
"sdk_sources": ["workspace"],
- "sdk_sources_release": ["workspace", "published"]
+ "sdk_sources_release": ["workspace", "published"],
+ "depends_on": ["packages/sdk", "packages/inference"]
},
{
"package": "rag",
diff --git a/docs/website/content/docs/sdk/(v0.23)/ai-capabilities/text-to-speech.mdx b/docs/website/content/docs/sdk/(v0.23)/ai-capabilities/text-to-speech.mdx
index f7d6e268a99..96b4dacae54 100644
--- a/docs/website/content/docs/sdk/(v0.23)/ai-capabilities/text-to-speech.mdx
+++ b/docs/website/content/docs/sdk/(v0.23)/ai-capabilities/text-to-speech.mdx
@@ -97,14 +97,14 @@ A cancelled run ends cleanly rather than as an error: `done` resolves `true`,
statistics from the final frame (`undefined` if the run reported none).
- The five backend fields (`backendDevice`, `backendId`, `gpuUnsupported`,
- `enhancerBackendDevice`, `enhancerBackendId`) are reported by batch
- synthesis (`stream: false`) only. The chunked paths — `stream: true` (the
- default), `sentenceStream: true`, and `textToSpeechStream()` — run one
- native job per sentence and aggregate only the timing and sample counts,
- plus Audio8's two Core ML fields, which keep the last sentence's value.
- MOSS is the exception for `stream: true`: it runs the whole text as one
- native job, so it reports them there too.
+ The chunked paths — `stream: true` (the default), `sentenceStream: true`,
+ and `textToSpeechStream()` — run one native job per sentence. Their
+ aggregate sums the timing and sample counts, keeps `firstAudioMs` from the
+ first sentence and the backend and Core ML fields from the last sentence
+ that reported them, and carries no per-stage timings or counters: those
+ describe one native synthesis, so they are reported by batch synthesis
+ (`stream: false`) only. MOSS is the exception for `stream: true`: it runs
+ the whole text as one native job, so it reports everything there too.
| Field | Meaning |
@@ -122,6 +122,12 @@ statistics from the final frame (`undefined` if the run reported none).
| `enhancerBackendId` | LavaSR enhancer backend family, same codes as `backendId`. |
| `codecSidecarLoaded` | Audio8 on macOS/iOS: `1` while the Core ML codec sidecar is attached, `0` without one or once a failing sidecar was retired. |
| `codecOnCoreml` | Audio8: `1` when the synthesis ran its codec on the Core ML sidecar, `0` when it ran on the ggml backend `backendId` names. |
+| `firstAudioMs` | Milliseconds from the start of the run to the first audio, where the engine reports it. |
+| `t3Ms`, `s3genMs`, `t3Tokens` | Chatterbox: T3 decode and S3Gen + HiFT wall times in milliseconds, and the speech tokens T3 emitted. |
+| `stageTotalMs` | CosyVoice3 and Audio8: the engine's own wall time in milliseconds, the sum of its stages, excluding the addon's post-processing. |
+| `lmPrefillMs`, `lmDecodeMs`, `flowFrontendMs`, `ditEulerMs`, `hiftF0Ms`, `hiftSourceMs`, `hiftStftMs`, `hiftDecodeMs` | CosyVoice3 stage wall times, in milliseconds. |
+| `decodeSteps`, `speechTokens`, `flowFrames`, `melFrames`, `textIds`, `promptSpeechTokens` | CosyVoice3 work counters: LM decode steps, speech tokens generated, flow frames in (prompt + generated), mel frames out, text ids in the LM prefill, and the prompt speech tokens the LM continued from. |
+| `voiceEncodeMs`, `promptMs`, `prefillMs`, `sampleMs`, `fastDecodeMs`, `slowDecodeMs`, `codecLatentMs`, `codecSynthMs`, `resampleMs` | Audio8 stage wall times, in milliseconds. |
```ts
const stats = await result.stats;
@@ -163,6 +169,31 @@ as on the other engines; `openclCacheDir` (the Android OpenCL program cache)
is accepted by Chatterbox, Supertonic and CosyVoice3 only. Chatterbox supports
[LavaSR](#lavasr) post-processing.
+Instead of (or alongside) `referenceAudioSrc`, `voiceDir` points at a
+directory of pre-baked voice-conditioning tensors — the upstream CLI's
+`--save-voice` output — which skips the reference preprocessing; when both are
+set, tensors missing from the directory are backfilled from the recording.
+
+T3 sampling is tunable: `temperature` (engine default `0.8`; `0` decodes
+greedily), `topK` (`1000`; `0` disables the cutoff), `topP` (`0.95`) and
+`repeatPenalty` (`1.2`; `1` turns it off). The multilingual GGUFs also take
+`exaggeration` (prosody intensity, default `0.5`; above `0` more expressive,
+below `0` flatter), `cfgWeight` (T3 classifier-free-guidance scale, default
+`0.5`; `0` disables it, and it is separate from `cfgRate`, which steers S3Gen)
+and `minP` (min-p threshold, `0` = off); the Turbo variant ignores the three.
+
+Length and streaming cost: `nPredict` caps the speech tokens T3 decodes per
+synthesis (default `1000`, about 40 s); longer single calls also need `nCtx`
+to cover the prompt plus the generated tokens, or set `maxSentenceChars` so
+T3 + S3Gen run per segment of at most that many bytes (the reference CLI uses
+`180`), with `crossfadeMs` (default `30`) blending the segments in batch
+synthesis. `batchCfmSteps` sets the CFM Euler steps for batch synthesis (`0`
+= the library default: 2-step meanflow on Turbo, the model's full schedule on
+multilingual) while `cfmSteps` keeps driving native streaming, and
+`streamLeftContextTokens` bounds the per-chunk cost of long native streams by
+keeping only that many already-emitted speech tokens as S3Gen left context
+(typically 25–50; `0` = the whole emitted prefix).
+
### Supertonic
Supertonic uses a **single GGUF** via top-level `modelSrc`. Set `voice`, `ttsSpeed`, and `ttsNumInferenceSteps` in `modelConfig` as needed. Multilingual output is selected by the GGUF (e.g. `TTS_MULTILINGUAL_SUPERTONIC2_Q8_0`) plus `language`.
@@ -189,7 +220,32 @@ per request — set it in `modelConfig`.
`seed`, `threads`, `nGpuLayers`, `outputSampleRate` and `backendsDir` work
as on the other engines; `openclCacheDir` is accepted by Chatterbox,
Supertonic and CosyVoice3 only, and `vulkanCacheDir` additionally persists
-the compiled Vulkan pipeline cache when `useGPU` is set.
+the compiled Vulkan pipeline cache when `useGPU` is set. `vulkanDevice` picks
+the Vulkan adapter (`0` = the first, `N` = the Nth, `-1` = auto-pick by free
+VRAM preferring a discrete GPU) and is also used by the LavaSR enhancer;
+`prewarmText` is synthesized once at load so GPU pipelines (and a Core ML
+vocoder sidecar) are ready before the first request.
+
+Voices: `voice` selects a preset baked into the GGUF (`F1`, `M1`, …), and
+`voiceJsonSrc` loads an external voice JSON (`{ style_ttl, style_dp }`, e.g.
+a cloned voice) that overrides it; the engine checks the tensor sizes against
+the loaded model. `noiseNpySrc` supplies a fixed CFM initial-noise `.npy`
+tensor for reproducible output.
+
+Supertonic also streams natively: set `streamChunkTokens` above zero to emit
+audio per chunk of that many text tokens (Unicode code points — about 50 for
+English, 25–30 for CJK). `streamFirstChunkTokens` shrinks the first chunk for
+lower first-audio latency, `streamChunkTolerancePct` (default `20`) is the
+window, as a percentage of the chunk target, within which a boundary snaps to
+a sentence end, clause or space, and `streamMinChunkTokens` (default `30`)
+merges a shorter trailing chunk into the previous one.
+
+
+ Supertonic native chunk streaming cannot be combined with the LavaSR
+ enhancer or denoiser; the pair is rejected at load. Sentence streaming
+ (`stream: true` without `streamChunkTokens`, `sentenceStream: true`, or
+ `textToSpeechStream()`) works with either stage loaded.
+
### Parler-TTS
@@ -334,18 +390,34 @@ Conditioning uses one of three controls:
CosyVoice3 accepts **one conditioning control per synthesis** — an
`emotion`, a non-`moderate` `pace`, or an `instruct`. Combining them is
- rejected at load and request validation. `emotion` and `pace` can also be
- set per request on `textToSpeech()`; `instruct` is load-time only.
+ rejected at load and request validation. All three can also be set per
+ request on `textToSpeech()` and `textToSpeechStream()`, where the request's
+ control replaces the loaded one for that synthesis.
+```ts
+const result = textToSpeech({
+ modelId,
+ text: "今天天气真好。",
+ stream: false,
+ // Per-request control; a raw string is passed to the engine verbatim.
+ instruct: { dialect: "cantonese" },
+});
+```
+
Set `streamChunkTokens` above zero for native chunk streaming
(`streamFirstChunkTokens` tunes the first chunk only). Native streaming emits
at 24 kHz, so omit `outputSampleRate` or set it to `24000` unless the LavaSR
enhancer is loaded. `useGPU` offloads to Metal on macOS/iOS, Vulkan on
-desktop Linux/Windows, and OpenCL on Adreno Android devices; `threads`,
-`nGpuLayers`, `seed`, and `outputSampleRate` (8,000–192,000 Hz) work as on
-the other engines. CosyVoice3 also supports [LavaSR](#lavasr)
-post-processing via `lavasrEnhancerModelSrc` (48 kHz bandwidth extension) and
+desktop Linux/Windows, and OpenCL on Adreno Android devices; `vulkanDevice`
+picks the Vulkan adapter (`0` = the first, `N` = the Nth, `-1` = auto-pick by
+free VRAM preferring a discrete GPU) and is also used by the LavaSR enhancer.
+`flowCutPrompt` treats the baked-voice prompt frames as attention-only
+conditioning in the flow — a faster flow whose output deviates slightly from
+the reference (off by default). `threads`, `nGpuLayers`, `seed`, and
+`outputSampleRate` (8,000–192,000 Hz) work as on the other engines.
+CosyVoice3 also supports [LavaSR](#lavasr) post-processing via
+`lavasrEnhancerModelSrc` (48 kHz bandwidth extension) and
`lavasrDenoiserModelSrc` (batch-only; runs before the enhancer).
#### CosyVoice3 voice cloning
@@ -428,6 +500,35 @@ supply `referenceAudioSrc` (a reference recording) together with
together — a reference without its transcript or without the encoder is
rejected at load.
+With the encoder loaded, the voice can also change per request:
+`textToSpeech()` and `textToSpeechStream()` take `referenceAudioSrc` and
+`referenceText` too. A request-level recording replaces the loaded voice for
+that synthesis and must bring its own `referenceText` (the loaded transcript
+describes a different recording, so it is not inherited); a request-level
+`referenceText` on its own corrects the transcript of the loaded recording.
+The engine caches the codes of the most recent reference, so repeating one
+across requests skips the encoder.
+
+```ts
+const result = textToSpeech({
+ modelId,
+ text: "Spoken in another voice.",
+ stream: false,
+ referenceAudioSrc: "/path/to/someone-else.wav",
+ referenceText: "Exactly what that recording says.",
+});
+```
+
+
+ A request-level `referenceAudioSrc` is resolved inside the request. A local
+ path or an already cached source costs nothing, but a remote source that is
+ not cached yet downloads first, with no progress events, while the request
+ holds the model: every other speech request for that model waits behind it.
+ Pre-fetch remote recordings with `downloadAsset({ assetSrc })`, which fills
+ the same cache, and pass the same source to the request afterwards.
+ `cancel()` stops a download that is already in flight.
+
+
Generation is sampled by default: `temperature` (default `0.7`), `topK`
(`50`), and `topP` (`0.9`) tune it, `greedy: true` takes the argmax instead
and ignores all three, and `maxFrames` caps generation in codec frames
@@ -451,7 +552,9 @@ synthesis fails on it, Audio8 runs the codec on ggml instead; the
Audio8 has no `emotion`, `pace`, or description fields (at load or per
request), no LavaSR post-processing, and no native chunk streaming.
Sentence streaming (`sentenceStream: true`) and duplex
- `textToSpeechStream()` work as with every engine.
+ `textToSpeechStream()` work as with every engine. The request-level
+ `referenceAudioSrc` / `referenceText` pair is Audio8-only; other engines
+ reject it.
For model constants, see [SDK — Models](/sdk#models).
@@ -635,7 +738,9 @@ With Chatterbox, Supertonic, Parler, or CosyVoice3, you can choose to perform po
The denoiser needs the whole utterance, so it cannot be combined with native
chunk streaming (`streamChunkTokens > 0`) on Chatterbox, Parler, or
CosyVoice3. The combination is rejected at load. The enhancer has no such
- restriction — it resamples seam-free across chunk boundaries.
+ restriction there — it resamples seam-free across chunk boundaries.
+ Supertonic native chunk streaming rejects both stages; use sentence
+ streaming for enhanced or denoised Supertonic output.
```ts
diff --git a/packages/cli/README.md b/packages/cli/README.md
index 2cc5ab6c27d..d9104fd3233 100644
--- a/packages/cli/README.md
+++ b/packages/cli/README.md
@@ -570,6 +570,11 @@ trailing `npm install`.
carries the API the CLI now needs.
- Push CI (`General CI/CD (cli)`) uses the same split: in-repo SDK on `main` /
`feature-*` / `tmp-*`, published SDK on `release-*`.
+- The CLI compiles against the in-repo SDK's types, so a PR that changes
+ `packages/sdk` or `packages/inference` runs the CLI checks too, even when it
+ touches no CLI file (`depends_on` on the `cli` entry of
+ `.github/sdk-pod-checks.json`). An SDK type change that breaks a CLI source or
+ test file fails on the PR that makes it.
The committed `@qvac/sdk` range is never changed for testing — the in-repo link
is a CI-time/local-only override (`sdk-source:workspace` / `dev:link`), never
diff --git a/packages/cli/docs/serve/openai.md b/packages/cli/docs/serve/openai.md
index 613c79b79a7..ea3e030ff8f 100644
--- a/packages/cli/docs/serve/openai.md
+++ b/packages/cli/docs/serve/openai.md
@@ -909,7 +909,8 @@ When `voice` is omitted, the configured **`serve.openai.audio.speech.defaultVoic
- `voice` (optional, defaults to `defaultVoice`) — an OpenAI built-in voice name (`alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, `shimmer`, `verse`, `marin`, `cedar`), any other string, or a custom voice reference `{ "id": "voice_1234" }`. The object form routes the same way as its `id` string.
- `response_format` (optional) — `wav` (default), `pcm` (raw 16-bit signed little-endian PCM, mono), or `mp3` / `opus` / `aac` / `flac`. The encoded formats are produced by transcoding the synthesized audio through **`ffmpeg`**, which must be on the server's `PATH`; when ffmpeg is absent they return `503 transcode_unavailable` (use `wav`/`pcm` or install ffmpeg — see `qvac doctor`). The default stays `wav` so synthesis works on hosts without ffmpeg.
- `stream_format` (optional) — `audio` (default, one audio body) or `sse` (see [Streaming](#streaming-stream_format-sse)). Other values return `400 invalid_stream_format`.
-- **Accepted but ignored:** `speed`, `instructions` (a warning is logged; ignored keys are echoed in the success response via the `X-QVAC-Ignored-Params` header).
+ - `instructions` (optional) — forwarded to a CosyVoice3 alias (`ttsEngine: "cosyvoice3"`) as the engine's per-request `instruct` control: a raw natural-language instruction such as a Chinese dialect, emotion or speaking style, applied to this synthesis only. It is forwarded only when the alias configures no conditioning of its own: an alias whose `config` sets `instruct`, `emotion` or a non-moderate `pace` keeps that choice, since a per-request instruction would replace it. Other engines have no free-text voice control. In both of those cases it is an ignored param.
+- **Accepted but ignored:** `speed`, and `instructions` unless the alias is a CosyVoice3 one without configured conditioning (a warning is logged; ignored keys are echoed in the success response via the `X-QVAC-Ignored-Params` header).
### Response
diff --git a/packages/cli/src/serve/extensions/openai/audio.ts b/packages/cli/src/serve/extensions/openai/audio.ts
index e1bf86b16c8..ab7d5672234 100644
--- a/packages/cli/src/serve/extensions/openai/audio.ts
+++ b/packages/cli/src/serve/extensions/openai/audio.ts
@@ -185,6 +185,30 @@ export function buildWavBuffer(samples: number[], sampleRate: number): Buffer {
return Buffer.concat([header, data])
}
+// OpenAI's `instructions` steers the voice in natural language, which is what
+// CosyVoice3's per-request `instruct` control does, so it is forwarded there
+// verbatim (a raw instruction string). No other engine takes a free-text
+// control, so elsewhere the route keeps treating it as an ignored param.
+//
+// A per-request `instruct` replaces the alias's own conditioning for that
+// synthesis, so it is forwarded only to an alias that configures none: when
+// the operator set `instruct`, `emotion` or a non-moderate `pace`, that choice
+// stands and a client's habitual `instructions` text stays an ignored param.
+export function speechInstructFor(
+ config: Record | undefined,
+ instructions: unknown
+): string | undefined {
+ if (config?.['ttsEngine'] !== 'cosyvoice3' || typeof instructions !== 'string') return undefined
+ const pace = config['pace']
+ const configuresControl =
+ config['instruct'] !== undefined ||
+ config['emotion'] !== undefined ||
+ (pace !== undefined && pace !== 'moderate')
+ if (configuresControl) return undefined
+ const trimmed = instructions.trim()
+ return trimmed.length > 0 ? trimmed : undefined
+}
+
// Voice + model → alias lookup key. The route tries this first and falls
// back to the bare model name when no - alias exists, so
// existing single-alias TTS configs continue to work even when callers omit
diff --git a/packages/cli/src/serve/extensions/openai/routes/audio.ts b/packages/cli/src/serve/extensions/openai/routes/audio.ts
index 3755c90cc4f..9e6bb83aba2 100644
--- a/packages/cli/src/serve/extensions/openai/routes/audio.ts
+++ b/packages/cli/src/serve/extensions/openai/routes/audio.ts
@@ -32,7 +32,8 @@ import {
mapResponseFormat,
pcmContentType,
resolveSampleRate,
- speechAliasKey
+ speechAliasKey,
+ speechInstructFor
} from '@/serve/extensions/openai/audio'
import {
transcodeWav,
@@ -140,8 +141,17 @@ as usual; a failure after it arrives as a final \`{ "error": ... }\` event.
\`model_not_found\`; \`502\` \`speech_empty\`, \`transcode_failed\`; \`503\`
\`transcode_unavailable\`, \`model_not_ready\`.
+**\`instructions\`** reaches a CosyVoice3 alias (\`ttsEngine\` \`cosyvoice3\`)
+as the engine's per-request \`instruct\` control, a raw natural-language
+instruction such as a Chinese dialect, emotion or speaking style, when the
+alias configures no conditioning of its own. An alias whose config sets
+\`instruct\`, \`emotion\` or a non-moderate \`pace\` keeps that choice, and
+other engines have no free-text voice control; in both cases it is an ignored
+param.
+
**Ignored params** (logged, returned in \`X-QVAC-Ignored-Params\` header):
-\`speed\`, \`instructions\`.
+\`speed\`; \`instructions\` unless the alias is a CosyVoice3 one without
+configured conditioning.
`.trim(),
voices: `
List the configured TTS voices. Returns the OpenAI \`voice\` names mapped under
@@ -465,6 +475,11 @@ const plugin: FastifyPluginAsyncZod = async (app) => {
for (const key of SPEECH_UNSUPPORTED_PARAMS) {
if ((body as Record)[key] !== undefined) ignoredParams.push(key)
}
+ const instruct = speechInstructFor(modelEntry.config, body.instructions)
+ if (body.instructions !== undefined && instruct === undefined) {
+ ctx.logger.warn('Ignoring unsupported param: instructions')
+ ignoredParams.push('instructions')
+ }
ctx.logger.info(
` speech model=${alias} voice=${voice} format=${formatMapping.format} chars=${input.length} ` +
@@ -478,6 +493,7 @@ const plugin: FastifyPluginAsyncZod = async (app) => {
format: formatMapping.format === 'pcm' ? 'pcm' : 'wav',
fallbackSampleRate: resolveSampleRate(registryEntry.config),
ignoredParams,
+ ...(instruct !== undefined ? { instruct } : {}),
...(openai.textToSpeechStreamOverride !== undefined
? { streamFn: openai.textToSpeechStreamOverride }
: {})
@@ -489,7 +505,8 @@ const plugin: FastifyPluginAsyncZod = async (app) => {
modelId: sdkModelId,
text: input,
inputType: 'text',
- stream: true
+ stream: true,
+ ...(instruct !== undefined ? { instruct } : {})
})
// A client that disconnects mid-synthesis should stop the engine, not
// just stop receiving — same binding completions and transcriptions use.
@@ -630,6 +647,8 @@ interface StreamSpeechOptions {
format: 'wav' | 'pcm'
fallbackSampleRate: number
ignoredParams: string[]
+ /** CosyVoice3 per-request natural-language control (OpenAI `instructions`). */
+ instruct?: string
streamFn?: typeof textToSpeechStream
}
@@ -641,7 +660,8 @@ async function streamSpeech(
const logger = req.server.qvac.logger
const session = await (opts.streamFn ?? textToSpeechStream)({
modelId: opts.sdkModelId,
- inputType: 'text'
+ inputType: 'text',
+ ...(opts.instruct !== undefined ? { instruct: opts.instruct } : {})
})
req.bindCancel(session.requestId)
session.write(opts.input)
diff --git a/packages/cli/src/serve/extensions/openai/schemas/audio.ts b/packages/cli/src/serve/extensions/openai/schemas/audio.ts
index bbd184ad7f2..82928475114 100644
--- a/packages/cli/src/serve/extensions/openai/schemas/audio.ts
+++ b/packages/cli/src/serve/extensions/openai/schemas/audio.ts
@@ -109,7 +109,9 @@ export const audioSpeechBody = z
})
.passthrough()
-export const SPEECH_UNSUPPORTED_PARAMS = ['speed', 'instructions'] as const
+// `instructions` is not here: the speech route forwards it to CosyVoice3 as
+// the per-request `instruct` control and only ignores it on other engines.
+export const SPEECH_UNSUPPORTED_PARAMS = ['speed'] as const
export const voiceObject = z.object({
id: z.string(),
diff --git a/packages/cli/test/e2e/default/music.test.ts b/packages/cli/test/e2e/default/music.test.ts
index 16ecf7fa01e..54ed94b06bc 100644
--- a/packages/cli/test/e2e/default/music.test.ts
+++ b/packages/cli/test/e2e/default/music.test.ts
@@ -206,7 +206,11 @@ function fakeRun(
progressStream: (async function* () {
for (const tick of progress) yield await Promise.resolve(tick)
})(),
+ // The serve routes read `audio`; the chunk view and the encoded container
+ // are part of the result shape, so the fake carries empty ones.
+ chunkStream: (async function* (): AsyncGenerator {})(),
audio,
+ encoded: Promise.resolve(undefined),
stats: audio.then(() => STATS),
diagnostics: Promise.resolve(undefined)
}
diff --git a/packages/cli/test/unit/extensions/openai/audio.test.ts b/packages/cli/test/unit/extensions/openai/audio.test.ts
index 345affd2ee7..8f4d03b8b66 100644
--- a/packages/cli/test/unit/extensions/openai/audio.test.ts
+++ b/packages/cli/test/unit/extensions/openai/audio.test.ts
@@ -10,7 +10,8 @@ import {
buildWavHeader,
buildStreamingWavHeader,
buildWavBuffer,
- speechAliasKey
+ speechAliasKey,
+ speechInstructFor
} from '@/serve/extensions/openai/audio'
import { parseOpenAIOptions } from '@/serve/extensions/openai/config'
import { speechEncodeArgs, ENCODED_SPEECH_FORMATS } from '@/serve/lib/audio-transcode'
@@ -294,3 +295,40 @@ describe('parseOpenAIOptions — audio.speech.maxInputChars', () => {
}
})
})
+
+describe('speechInstructFor', () => {
+ const cosyvoice3 = { ttsEngine: 'cosyvoice3' }
+
+ it('forwards a trimmed instructions string to a CosyVoice3 alias without conditioning', () => {
+ assert.equal(speechInstructFor(cosyvoice3, ' 请用广东话表达。 '), '请用广东话表达。')
+ // `moderate` disengages the pace channel, so it is not a configured control.
+ assert.equal(
+ speechInstructFor({ ...cosyvoice3, pace: 'moderate' }, 'speak softly'),
+ 'speak softly'
+ )
+ })
+
+ it('keeps the conditioning an operator configured on the alias', () => {
+ for (const configured of [
+ { instruct: { dialect: 'cantonese' } },
+ { instruct: '请用四川话表达。' },
+ { emotion: 'happy' },
+ { pace: 'fast' }
+ ]) {
+ assert.equal(
+ speechInstructFor({ ...cosyvoice3, ...configured }, 'speak in a cheerful tone'),
+ undefined,
+ JSON.stringify(configured)
+ )
+ }
+ })
+
+ it('returns undefined for other engines, blank text, and non-strings', () => {
+ assert.equal(speechInstructFor({ ttsEngine: 'chatterbox' }, 'speak softly'), undefined)
+ assert.equal(speechInstructFor(undefined, 'speak softly'), undefined)
+ assert.equal(speechInstructFor({}, 'speak softly'), undefined)
+ assert.equal(speechInstructFor(cosyvoice3, ' '), undefined)
+ assert.equal(speechInstructFor(cosyvoice3, undefined), undefined)
+ assert.equal(speechInstructFor(cosyvoice3, 42), undefined)
+ })
+})
diff --git a/packages/inference/src/api/text-to-speech.ts b/packages/inference/src/api/text-to-speech.ts
index d68c57d7e4c..96c6625b398 100644
--- a/packages/inference/src/api/text-to-speech.ts
+++ b/packages/inference/src/api/text-to-speech.ts
@@ -186,7 +186,13 @@ function buildTextToSpeechStreamRequest(
...(params.expressivity !== undefined && { expressivity: params.expressivity }),
...(params.noise !== undefined && { noise: params.noise }),
...(params.reverb !== undefined && { reverb: params.reverb }),
- ...(params.quality !== undefined && { quality: params.quality })
+ ...(params.quality !== undefined && { quality: params.quality }),
+ // Per-request voice controls: CosyVoice3's instruct, Audio8's reference pair.
+ ...(params.instruct !== undefined && { instruct: params.instruct }),
+ ...(params.referenceAudioSrc !== undefined && {
+ referenceAudioSrc: params.referenceAudioSrc
+ }),
+ ...(params.referenceText !== undefined && { referenceText: params.referenceText })
}
}
diff --git a/packages/inference/src/plugins/builtin/tts-ggml/ops/text-to-speech-stream.ts b/packages/inference/src/plugins/builtin/tts-ggml/ops/text-to-speech-stream.ts
index 47c6aa38ee3..6d9e27ad6ae 100644
--- a/packages/inference/src/plugins/builtin/tts-ggml/ops/text-to-speech-stream.ts
+++ b/packages/inference/src/plugins/builtin/tts-ggml/ops/text-to-speech-stream.ts
@@ -20,6 +20,11 @@ import {
} from '@/plugins/builtin/tts-ggml/ops/parler-options'
import { bindTtsCancel, cancelIfAborted } from '@/plugins/builtin/tts-ggml/ops/cancel-binding'
import type { TtsOpResult } from '@/plugins/builtin/tts-ggml/ops/text-to-speech'
+import {
+ assertVoiceJobOptionsSupported,
+ resolveVoiceJobOptions,
+ type VoiceJobOptions
+} from '@/plugins/builtin/tts-ggml/ops/voice-options'
// Ends the text source the moment the run is cancelled. Without this an idle
// duplex session — cancelled while the accumulator is waiting for the next
@@ -124,7 +129,8 @@ async function* buffersToUtf8Fragments(
function buildRunStreamingOptions(
request: TextToSpeechStreamRequest,
- parlerJobOptions: ReturnType
+ parlerJobOptions: ReturnType,
+ voiceJobOptions: VoiceJobOptions
) {
const o: Record = {}
if (request.accumulateSentences !== undefined) {
@@ -139,7 +145,7 @@ function buildRunStreamingOptions(
if (request.flushAfterMs !== undefined) {
o['flushAfterMs'] = request.flushAfterMs
}
- return { ...o, ...parlerJobOptions }
+ return { ...o, ...parlerJobOptions, ...voiceJobOptions }
}
export async function* textToSpeechStream(
@@ -154,10 +160,20 @@ export async function* textToSpeechStream(
}
const parlerJobOptions = getParlerJobOptions(request)
assertParlerJobOptionsSupported(model, parlerJobOptions, 'textToSpeechStream')
+ assertVoiceJobOptionsSupported(model, request, 'textToSpeechStream')
await using ctx = await bindTtsCancel(model, request.modelId, request.requestId)
if (ctx.signal.aborted) return { ...buildStreamResult(0), cancelled: true }
+ // Resolved inside the request context: an uncached remote reference
+ // recording downloads here, and a cancel has to be able to stop that.
+ const voiceJobOptions = await resolveVoiceJobOptions(request, {
+ signal: ctx.signal,
+ scope: ctx.scope,
+ requestId: ctx.requestId
+ })
+ if (voiceJobOptions === null) return { ...buildStreamResult(0), cancelled: true }
+
const modelStart = nowMs()
if (!hasRunStreaming(model)) {
@@ -167,7 +183,7 @@ export async function* textToSpeechStream(
}
const textSource = untilAborted(buffersToUtf8Fragments(inputStream), ctx.signal)
- const streamOpts = buildRunStreamingOptions(request, parlerJobOptions)
+ const streamOpts = buildRunStreamingOptions(request, parlerJobOptions, voiceJobOptions)
const response = await model.runStreaming(
textSource,
Object.keys(streamOpts).length > 0 ? streamOpts : undefined
diff --git a/packages/inference/src/plugins/builtin/tts-ggml/ops/text-to-speech.ts b/packages/inference/src/plugins/builtin/tts-ggml/ops/text-to-speech.ts
index 8a53cd6ebeb..09e319dee97 100644
--- a/packages/inference/src/plugins/builtin/tts-ggml/ops/text-to-speech.ts
+++ b/packages/inference/src/plugins/builtin/tts-ggml/ops/text-to-speech.ts
@@ -21,11 +21,16 @@ import {
type ParlerJobOptions
} from '@/plugins/builtin/tts-ggml/ops/parler-options'
import { bindTtsCancel, cancelIfAborted } from '@/plugins/builtin/tts-ggml/ops/cancel-binding'
+import {
+ assertVoiceJobOptionsSupported,
+ resolveVoiceJobOptions,
+ type VoiceJobOptions
+} from '@/plugins/builtin/tts-ggml/ops/voice-options'
type RunStreamModel = {
runStream: (
text: string,
- options?: ParlerJobOptions & { locale?: string; maxChunkScalars?: number }
+ options?: ParlerJobOptions & VoiceJobOptions & { locale?: string; maxChunkScalars?: number }
) => Promise<{
iterate: () => AsyncIterable
stats?: AddonTtsStats
@@ -78,6 +83,7 @@ export async function* textToSpeech(params: TtsRequest): AsyncGenerator 0
+ Object.keys(parlerJobOptions).length > 0 ||
+ Object.keys(voiceJobOptions).length > 0
? {
...(sentenceStreamLocale !== undefined ? { locale: sentenceStreamLocale } : {}),
...(sentenceStreamMaxChunkScalars !== undefined
? { maxChunkScalars: sentenceStreamMaxChunkScalars }
: {}),
- ...parlerJobOptions
+ ...parlerJobOptions,
+ ...voiceJobOptions
}
: undefined
@@ -184,6 +201,7 @@ export async function* textToSpeech(params: TtsRequest): AsyncGenerator
+
+// Rebuild the structured instruct without explicit-undefined keys so it
+// satisfies the addon's exactOptionalPropertyTypes typing.
+export function toAddonInstruct(instruct: TtsCosyvoice3Instruct) {
+ if (typeof instruct === 'string') return instruct
+ return {
+ ...(instruct.dialect !== undefined ? { dialect: instruct.dialect } : {}),
+ ...(instruct.volume !== undefined ? { volume: instruct.volume } : {}),
+ ...(instruct.style !== undefined ? { style: instruct.style } : {})
+ }
+}
+
+/**
+ * Rejects per-request voice controls the loaded engine does not take. The
+ * request schema only knows an opaque modelId, so the engine check lives here:
+ * the addon would reject the same fields with its own throw, and naming the SDK
+ * field and the engine that takes it is clearer than surfacing that.
+ *
+ * Synchronous on purpose: both ops call it before they open their request
+ * context, so a request that can never run fails without queueing for the
+ * model.
+ */
+export function assertVoiceJobOptionsSupported(
+ model: unknown,
+ request: VoiceOptionsRequest,
+ handlerName: 'textToSpeech' | 'textToSpeechStream'
+): void {
+ const engine = getTtsEngineType(model)
+
+ if (request.instruct !== undefined && engine !== 'cosyvoice3') {
+ throw new PluginRequestValidationFailedError(
+ handlerName,
+ `instruct is only supported by CosyVoice3 models (engine is ${engine ?? 'unknown'})`
+ )
+ }
+
+ const referenceKeys = (['referenceAudioSrc', 'referenceText'] as const).filter(
+ (key) => request[key] !== undefined
+ )
+ if (referenceKeys.length > 0 && engine !== 'audio8') {
+ throw new PluginRequestValidationFailedError(
+ handlerName,
+ `${referenceKeys.join(', ')} ${referenceKeys.length === 1 ? 'is' : 'are'} only supported per request by Audio8 models (engine is ${engine ?? 'unknown'})`
+ )
+ }
+}
+
+/**
+ * The per-request voice controls in the addon's spelling, or `null` when the
+ * request was cancelled while its reference recording was being resolved,
+ * whether that resolution then failed or succeeded.
+ *
+ * `referenceAudioSrc` goes through the same source resolution as the load-time
+ * `referenceAudioSrc` (a local path, or a registry / remote source cached on
+ * first use), so a request can name a voice the same way a load config does.
+ * An uncached remote source downloads here, which can take as long as the
+ * synthesis itself. The op therefore resolves it inside its request context
+ * and hands that context over as `binding`: the request is already in the
+ * registry, so `cancel({ modelId })` finds it, and the download is subscribed
+ * to its abort signal, so that cancel and `cancel({ requestId })` both stop
+ * the transfer instead of letting speech generation follow it.
+ */
+export async function resolveVoiceJobOptions(
+ request: VoiceOptionsRequest,
+ binding: DownloadRequestBinding
+): Promise {
+ let referenceAudio: string | undefined
+ if (request.referenceAudioSrc !== undefined) {
+ try {
+ referenceAudio = await resolveModelPath(
+ request.referenceAudioSrc,
+ undefined,
+ undefined,
+ binding.signal,
+ { requestBinding: binding }
+ )
+ } catch (error) {
+ if (binding.signal.aborted) return null
+ throw error
+ }
+ // A resolution that succeeds does not mean the request is still wanted: a
+ // local or cached source only awaits a file check, which no signal
+ // interrupts. A cancel that lands during that wait has already fired the
+ // op's once-only `model.cancel()`, before any job existed, so starting the
+ // engine now would run a cancelled request to completion.
+ if (binding.signal.aborted) return null
+ }
+
+ return {
+ ...(request.instruct !== undefined ? { instruct: toAddonInstruct(request.instruct) } : {}),
+ ...(referenceAudio !== undefined ? { referenceAudio } : {}),
+ ...(request.referenceText !== undefined ? { referenceText: request.referenceText } : {})
+ }
+}
diff --git a/packages/inference/src/plugins/builtin/tts-ggml/plugin.ts b/packages/inference/src/plugins/builtin/tts-ggml/plugin.ts
index c6322e713a1..1b62fb10a78 100644
--- a/packages/inference/src/plugins/builtin/tts-ggml/plugin.ts
+++ b/packages/inference/src/plugins/builtin/tts-ggml/plugin.ts
@@ -36,6 +36,7 @@ import { createStreamLogger, registerAddonLogger } from '@/logging/index'
import { TtsArtifactsRequiredError, LegacyTtsModelDeprecatedError } from '@/errors/index'
import { textToSpeech } from '@/plugins/builtin/tts-ggml/ops/text-to-speech'
import { textToSpeechStream } from '@/plugins/builtin/tts-ggml/ops/text-to-speech-stream'
+import { toAddonInstruct } from '@/plugins/builtin/tts-ggml/ops/voice-options'
import { ttsFitRequest } from '@/plugins/builtin/tts-ggml/fit'
import { attachModelExecutionMs } from '@/profiling/model-execution'
import type { TtsOpYield } from '@/utils/tts-stats'
@@ -139,14 +140,23 @@ async function resolveSupertonicConfig(
): Promise> {
rejectLegacyOnnxFields(config)
- const { lavasrEnhancerModelSrc, lavasrDenoiserModelSrc, ...runtime } = config
- const lavasrArtifacts = await resolveLavasrArtifacts(
- lavasrEnhancerModelSrc,
- lavasrDenoiserModelSrc,
- ctx
- )
+ const { lavasrEnhancerModelSrc, lavasrDenoiserModelSrc, voiceJsonSrc, noiseNpySrc, ...runtime } =
+ config
+ const resolve = ctx.resolveModelPath
+ const [lavasrArtifacts, voiceJsonPath, noiseNpyPath] = await Promise.all([
+ resolveLavasrArtifacts(lavasrEnhancerModelSrc, lavasrDenoiserModelSrc, ctx),
+ voiceJsonSrc ? resolve(voiceJsonSrc) : Promise.resolve(undefined),
+ noiseNpySrc ? resolve(noiseNpySrc) : Promise.resolve(undefined)
+ ])
- return { config: runtime, artifacts: lavasrArtifacts }
+ return {
+ config: runtime,
+ artifacts: {
+ ...lavasrArtifacts,
+ ...(voiceJsonPath ? { voiceJsonPath } : {}),
+ ...(noiseNpyPath ? { noiseNpyPath } : {})
+ }
+ }
}
async function resolveParlerConfig(
@@ -341,6 +351,21 @@ function createChatterboxModel(
: {}),
...(config.cfmSteps !== undefined ? { cfmSteps: config.cfmSteps } : {}),
...(config.cfgRate !== undefined ? { cfgRate: config.cfgRate } : {}),
+ ...(config.streamLeftContextTokens !== undefined
+ ? { streamLeftContextTokens: config.streamLeftContextTokens }
+ : {}),
+ ...(config.batchCfmSteps !== undefined ? { batchCfmSteps: config.batchCfmSteps } : {}),
+ ...(config.nPredict !== undefined ? { nPredict: config.nPredict } : {}),
+ ...(config.maxSentenceChars !== undefined ? { maxSentenceChars: config.maxSentenceChars } : {}),
+ ...(config.crossfadeMs !== undefined ? { crossfadeMs: config.crossfadeMs } : {}),
+ ...(config.temperature !== undefined ? { temperature: config.temperature } : {}),
+ ...(config.topK !== undefined ? { topK: config.topK } : {}),
+ ...(config.topP !== undefined ? { topP: config.topP } : {}),
+ ...(config.repeatPenalty !== undefined ? { repeatPenalty: config.repeatPenalty } : {}),
+ ...(config.exaggeration !== undefined ? { exaggeration: config.exaggeration } : {}),
+ ...(config.cfgWeight !== undefined ? { cfgWeight: config.cfgWeight } : {}),
+ ...(config.minP !== undefined ? { minP: config.minP } : {}),
+ ...(config.voiceDir !== undefined ? { voiceDir: config.voiceDir } : {}),
...(config.nCtx !== undefined ? { nCtx: config.nCtx } : {}),
...(config.kvCacheType !== undefined ? { kvCacheType: config.kvCacheType } : {}),
// Chatterbox has no pace channel; `speed` is its only rate control.
@@ -376,12 +401,32 @@ function createSupertonicModel(
throw new TtsArtifactsRequiredError()
}
+ const voiceJsonPath = artifacts['voiceJsonPath']
+ const noiseNpyPath = artifacts['noiseNpyPath']
+
const logger = createStreamLogger(modelId, ModelType.ttsGgml)
const model = new TTSGgml({
engine: TTSGgml.ENGINE_SUPERTONIC,
files: { supertonicModel, ...lavasrFiles(artifacts) },
voice: config.voice ?? 'F1',
+ // An external voice JSON overrides the baked preset above.
+ ...(voiceJsonPath ? { voiceJsonPath } : {}),
+ ...(noiseNpyPath ? { noiseNpyPath } : {}),
+ ...(config.prewarmText !== undefined ? { prewarmText: config.prewarmText } : {}),
+ ...(config.vulkanDevice !== undefined ? { vulkanDevice: config.vulkanDevice } : {}),
+ ...(config.streamChunkTokens !== undefined
+ ? { streamChunkTokens: config.streamChunkTokens }
+ : {}),
+ ...(config.streamFirstChunkTokens !== undefined
+ ? { streamFirstChunkTokens: config.streamFirstChunkTokens }
+ : {}),
+ ...(config.streamChunkTolerancePct !== undefined
+ ? { streamChunkTolerancePct: config.streamChunkTolerancePct }
+ : {}),
+ ...(config.streamMinChunkTokens !== undefined
+ ? { streamMinChunkTokens: config.streamMinChunkTokens }
+ : {}),
...(config.ttsSpeed !== undefined ? { speed: config.ttsSpeed } : {}),
// Supertonic conditions pace when the engine is built, so it arrives as a
// constructor option rather than a per-request field.
@@ -470,17 +515,6 @@ function createParlerModel(
return { model }
}
-// Rebuild the structured instruct without explicit-undefined keys so it
-// satisfies the addon's exactOptionalPropertyTypes constructor typing.
-function toAddonInstruct(instruct: NonNullable) {
- if (typeof instruct === 'string') return instruct
- return {
- ...(instruct.dialect !== undefined ? { dialect: instruct.dialect } : {}),
- ...(instruct.volume !== undefined ? { volume: instruct.volume } : {}),
- ...(instruct.style !== undefined ? { style: instruct.style } : {})
- }
-}
-
function createCosyvoice3Model(
modelId: string,
config: TtsCosyvoice3RuntimeConfig,
@@ -517,6 +551,8 @@ function createCosyvoice3Model(
...(config.emotion !== undefined ? { emotion: config.emotion } : {}),
...(config.pace !== undefined ? { pace: config.pace } : {}),
...(config.instruct !== undefined ? { instruct: toAddonInstruct(config.instruct) } : {}),
+ ...(config.flowCutPrompt !== undefined ? { flowCutPrompt: config.flowCutPrompt } : {}),
+ ...(config.vulkanDevice !== undefined ? { vulkanDevice: config.vulkanDevice } : {}),
...(config.streamChunkTokens !== undefined
? { streamChunkTokens: config.streamChunkTokens }
: {}),
diff --git a/packages/inference/src/schemas/text-to-speech.ts b/packages/inference/src/schemas/text-to-speech.ts
index 3348130fd6b..6c4912be79f 100644
--- a/packages/inference/src/schemas/text-to-speech.ts
+++ b/packages/inference/src/schemas/text-to-speech.ts
@@ -183,6 +183,8 @@ const TTS_STREAM_CHUNK_TOKENS_DESC =
'Speech tokens per native streaming chunk; 0 disables native chunk streaming.'
const TTS_STREAM_FIRST_CHUNK_TOKENS_DESC =
'Smaller first streaming chunk for lower first-audio latency.'
+const TTS_VULKAN_DEVICE_DESC =
+ 'Vulkan adapter index, also used by the LavaSR enhancer: 0 = the first adapter, N = the Nth, -1 = auto-pick by free VRAM preferring a discrete adapter. Only consulted on Vulkan.'
const TTS_TEMPERATURE_DESC =
'Sampling temperature; unset defers to the engine default (Parler 1.0, Audio8 0.7).'
const TTS_TOP_K_DESC = 'Top-k sampling cutoff; unset defers to the engine default (50).'
@@ -416,6 +418,78 @@ export const ttsChatterboxRuntimeConfigSchema = z
.describe(
'Chatterbox S3Gen classifier-free-guidance rate; `0` skips the unconditioned pass, a positive value overrides the model’s baked rate. Omit to keep the baked rate.'
),
+ streamLeftContextTokens: ttsNonNegativeInt32Schema
+ .optional()
+ .describe(
+ 'Already-emitted speech tokens S3Gen keeps as left context per native streaming chunk (typically 25–50), bounding the per-chunk cost on long utterances; 0 = the whole emitted prefix.'
+ ),
+ batchCfmSteps: ttsNonNegativeInt32Schema
+ .optional()
+ .describe(
+ 'CFM Euler step count for batch synthesis; 0 = the library default (2-step meanflow on Turbo, the model’s full schedule on multilingual). The multilingual engine does not floor it, so values well below its schedule under-integrate. `cfmSteps` keeps driving native streaming.'
+ ),
+ nPredict: ttsPositiveInt32Schema
+ .optional()
+ .describe(
+ 'Cap on speech tokens T3 decodes per synthesis (~25 tokens ≈ 1 s); engine default 1000 (~40 s). Longer single calls also need `nCtx` to cover prompt plus generated tokens, or use `maxSentenceChars`.'
+ ),
+ maxSentenceChars: ttsNonNegativeInt32Schema
+ .optional()
+ .describe(
+ 'Sentence auto-split: T3 + S3Gen run per segment of at most this many bytes (the reference CLI uses 180); 0 = off. `nPredict` then applies per segment.'
+ ),
+ crossfadeMs: ttsNonNegativeInt32Schema
+ .optional()
+ .describe(
+ 'Raised-cosine crossfade between auto-split batch segments, in milliseconds (engine default 30). Native streaming stays gapless.'
+ ),
+ // T3 samples its speech tokens; the defaults are the addon's, not Parler's
+ // or Audio8's, so these do not share TTS_TEMPERATURE_DESC and friends.
+ temperature: z
+ .number()
+ .nonnegative()
+ .optional()
+ .describe('T3 sampling temperature (engine default 0.8); 0 decodes greedily.'),
+ topK: ttsNonNegativeInt32Schema
+ .optional()
+ .describe('T3 top-k sampling cutoff (engine default 1000); 0 disables the cutoff.'),
+ topP: z
+ .number()
+ .positive()
+ .max(1)
+ .optional()
+ .describe('T3 top-p (nucleus) sampling cutoff, 0 < p ≤ 1 (engine default 0.95).'),
+ repeatPenalty: z
+ .number()
+ .positive()
+ .optional()
+ .describe('T3 repetition penalty (engine default 1.2); 1 = off.'),
+ exaggeration: z
+ .number()
+ .optional()
+ .describe(
+ 'Multilingual only: prosody intensity, above 0 more expressive, below 0 flatter (engine default 0.5). The Turbo variant ignores it.'
+ ),
+ cfgWeight: z
+ .number()
+ .nonnegative()
+ .optional()
+ .describe(
+ 'Multilingual only: T3 classifier-free-guidance scale (engine default 0.5); 0 disables it. Separate from `cfgRate`, which steers S3Gen.'
+ ),
+ minP: z
+ .number()
+ .min(0)
+ .max(1)
+ .optional()
+ .describe('Multilingual only: min-p sampling threshold (engine default 0); 0 = off.'),
+ voiceDir: z
+ .string()
+ .min(1)
+ .optional()
+ .describe(
+ 'Directory of pre-baked voice-conditioning tensors (the upstream CLI’s `--save-voice` output), loaded instead of preprocessing a reference recording. With `referenceAudioSrc` too, tensors missing from the directory are backfilled from the recording.'
+ ),
// Int32 like the other engines: the addon narrows with `| 0`, so a wider
// value would wrap silently rather than fail.
threads: ttsPositiveInt32Schema.optional().describe(TTS_THREADS_DESC),
@@ -449,46 +523,77 @@ function refineSupertonicRateControls(
}
}
+const ttsSupertonicRuntimeConfigShape = {
+ ttsEngine: z.literal('supertonic').describe('TTS engine: Supertonic.'),
+ language: ttsSupertonicLanguageSchema.describe('Language code. Default `en`.'),
+ voice: z.string().optional().describe('Supertonic baked voice id, e.g. `F1` or `M1`.'),
+ ttsSpeed: z
+ .number()
+ .nonnegative()
+ .optional()
+ .describe(
+ 'Speech-rate / duration multiplier (1.0 = unchanged, <1 slower, >1 faster). Supertonic scales its native duration predictor. Mutually exclusive with `pace`.'
+ ),
+ // Supertonic maps the pace step onto a multiplier relative to the GGUF's
+ // own default_speed. It conditions the engine at construction, so unlike
+ // Parler and CosyVoice3 it cannot take a per-request pace.
+ pace: ttsPaceSchema
+ .optional()
+ .describe(
+ "Speaking rate: `'slow'`, `'moderate'`, or `'fast'`, applied when the engine is built. Mutually exclusive with `ttsSpeed`; cannot be changed per request."
+ ),
+ // SupertonicModel::validateConfig rejects negatives ('steps must be >= 0')
+ // and the addon narrows with `| 0`, so bound it like its sibling ttsSpeed.
+ ttsNumInferenceSteps: ttsNonNegativeInt32Schema
+ .optional()
+ .describe('Supertonic vector-estimator CFM steps; 0 uses the GGUF default.'),
+ useGPU: z.boolean().optional().describe(TTS_USE_GPU_DESC),
+ outputSampleRate: ttsOutputSampleRateSchema.optional(),
+ threads: ttsPositiveInt32Schema.optional().describe(TTS_THREADS_DESC),
+ nGpuLayers: ttsInt32Schema.optional().describe(TTS_NGPU_LAYERS_DESC),
+ seed: ttsInt32Schema.optional().describe(TTS_SEED_DESC),
+ vulkanCacheDir: z
+ .string()
+ .min(1)
+ .optional()
+ .describe(
+ 'Supertonic + `useGPU` only: directory where the Vulkan backend persists its compiled pipeline cache.'
+ ),
+ vulkanDevice: ttsInt32Schema.min(-1).optional().describe(TTS_VULKAN_DEVICE_DESC),
+ prewarmText: z
+ .string()
+ .trim()
+ .min(1)
+ .optional()
+ .describe(
+ 'Text synthesized once at load so GPU pipelines (and a Core ML vocoder sidecar) are ready before the first request; skipped on a plain CPU run. Use a sentence of representative length. Wins over the `vulkanCacheDir` default pre-warm.'
+ ),
+ // Supertonic chunks on text tokens, not speech tokens, so its native
+ // streaming controls carry their own wording.
+ streamChunkTokens: ttsNonNegativeInt32Schema
+ .optional()
+ .describe(
+ 'Text tokens (Unicode code points) per native streaming chunk, about 50 for English and 25–30 for CJK; 0 disables native chunk streaming. Cannot be combined with the LavaSR enhancer or denoiser.'
+ ),
+ streamFirstChunkTokens: ttsNonNegativeInt32Schema
+ .optional()
+ .describe(TTS_STREAM_FIRST_CHUNK_TOKENS_DESC),
+ streamChunkTolerancePct: ttsNonNegativeInt32Schema
+ .optional()
+ .describe(
+ 'Boundary-snap window for clause and whitespace chunk boundaries, as a percentage of the chunk target (engine default 20).'
+ ),
+ streamMinChunkTokens: ttsNonNegativeInt32Schema
+ .optional()
+ .describe(
+ 'Floor on every streamed chunk’s size in text tokens (engine default 30); shorter trailing chunks merge into the previous one.'
+ ),
+ ...ttsBackendDirFieldsShape,
+ ...ttsOpenclCacheFieldShape
+}
+
export const ttsSupertonicRuntimeConfigSchema = z
- .object({
- ttsEngine: z.literal('supertonic').describe('TTS engine: Supertonic.'),
- language: ttsSupertonicLanguageSchema.describe('Language code. Default `en`.'),
- voice: z.string().optional().describe('Supertonic baked voice id, e.g. `F1` or `M1`.'),
- ttsSpeed: z
- .number()
- .nonnegative()
- .optional()
- .describe(
- 'Speech-rate / duration multiplier (1.0 = unchanged, <1 slower, >1 faster). Supertonic scales its native duration predictor. Mutually exclusive with `pace`.'
- ),
- // Supertonic maps the pace step onto a multiplier relative to the GGUF's
- // own default_speed. It conditions the engine at construction, so unlike
- // Parler and CosyVoice3 it cannot take a per-request pace.
- pace: ttsPaceSchema
- .optional()
- .describe(
- "Speaking rate: `'slow'`, `'moderate'`, or `'fast'`, applied when the engine is built. Mutually exclusive with `ttsSpeed`; cannot be changed per request."
- ),
- // SupertonicModel::validateConfig rejects negatives ('steps must be >= 0')
- // and the addon narrows with `| 0`, so bound it like its sibling ttsSpeed.
- ttsNumInferenceSteps: ttsNonNegativeInt32Schema
- .optional()
- .describe('Supertonic vector-estimator CFM steps; 0 uses the GGUF default.'),
- useGPU: z.boolean().optional().describe(TTS_USE_GPU_DESC),
- outputSampleRate: ttsOutputSampleRateSchema.optional(),
- threads: ttsPositiveInt32Schema.optional().describe(TTS_THREADS_DESC),
- nGpuLayers: ttsInt32Schema.optional().describe(TTS_NGPU_LAYERS_DESC),
- seed: ttsInt32Schema.optional().describe(TTS_SEED_DESC),
- vulkanCacheDir: z
- .string()
- .min(1)
- .optional()
- .describe(
- 'Supertonic + `useGPU` only: directory where the Vulkan backend persists its compiled pipeline cache.'
- ),
- ...ttsBackendDirFieldsShape,
- ...ttsOpenclCacheFieldShape
- })
+ .object(ttsSupertonicRuntimeConfigShape)
.superRefine(refineSupertonicRateControls)
// A shape rather than a schema so the load schema below can be built from it
@@ -632,7 +737,7 @@ const ttsCosyvoice3RuntimeConfigShape = {
instruct: ttsCosyvoice3InstructSchema
.optional()
.describe(
- 'Natural-language control: a structured object (one of dialect / volume / style) or a raw instruction string. One conditioning control per synthesis.'
+ 'Natural-language control: a structured object (one of dialect / volume / style) or a raw instruction string. One conditioning control per synthesis; a request-level `instruct` replaces it for that synthesis.'
),
// Trimmed for the same reason as the instruct string: a whitespace-only
// transcript would reach the engine as a non-empty prompt.
@@ -644,6 +749,13 @@ const ttsCosyvoice3RuntimeConfigShape = {
.describe(
'Verbatim transcript of `referenceAudioSrc`. Setting it selects zero-shot cloning (best fidelity in the reference’s own language); omitting it selects cross-lingual cloning (timbre only). Without a reference it overrides the baked voice’s transcript metadata.'
),
+ flowCutPrompt: z
+ .boolean()
+ .optional()
+ .describe(
+ 'Treat the baked-voice prompt frames as attention-only conditioning in the flow: a faster flow whose output deviates slightly from the reference (engine default off).'
+ ),
+ vulkanDevice: ttsInt32Schema.min(-1).optional().describe(TTS_VULKAN_DEVICE_DESC),
useGPU: z.boolean().optional().describe(TTS_USE_GPU_DESC),
outputSampleRate: ttsOutputSampleRateSchema.optional(),
streamChunkTokens: ttsNonNegativeInt32Schema.optional().describe(TTS_STREAM_CHUNK_TOKENS_DESC),
@@ -930,10 +1042,55 @@ export const ttsChatterboxLoadConfigSchema = ttsChatterboxRuntimeConfigSchema
})
.superRefine(refineLavasrDenoiserStreaming)
-// Supertonic has no native chunk streaming, so the denoiser is always reachable.
-export const ttsSupertonicLoadConfigSchema = ttsSupertonicRuntimeConfigSchema.extend({
- ...ttsLavasrLoadFieldsShape
-})
+type TtsSupertonicLoadRefinementInput = {
+ ttsSpeed?: number | undefined
+ pace?: string | undefined
+ useGPU?: boolean | undefined
+ nGpuLayers?: number | undefined
+ streamChunkTokens?: number | undefined
+ lavasrEnhancerModelSrc?: ModelSrcInput | undefined
+ lavasrDenoiserModelSrc?: ModelSrcInput | undefined
+}
+
+// Supertonic native chunk streaming rejects BOTH LavaSR stages, not just the
+// denoiser: tts-cpp only has one-shot enhance / denoise for this engine, and
+// it reports no native rate before synthesis. Sentence streaming still works
+// with either stage loaded.
+function refineSupertonicLoadConfig(
+ config: TtsSupertonicLoadRefinementInput,
+ ctx: z.RefinementCtx
+) {
+ refineSupertonicRateControls(config, ctx)
+ if ((config.streamChunkTokens ?? 0) <= 0) return
+ for (const field of ['lavasrEnhancerModelSrc', 'lavasrDenoiserModelSrc'] as const) {
+ if (config[field] === undefined) continue
+ ctx.addIssue({
+ code: 'custom',
+ path: [field],
+ message:
+ 'Supertonic native chunk streaming (streamChunkTokens > 0) cannot be combined with the LavaSR enhancer or denoiser; ' +
+ 'use sentence streaming (stream: true without streamChunkTokens, sentenceStream, or textToSpeechStream) for enhanced output.'
+ })
+ }
+}
+
+// Supertonic's external voice JSON and fixed CFM noise tensor are single files,
+// so they ride the same source resolution as the LavaSR GGUFs and reach the
+// addon as `voiceJsonPath` / `noiseNpyPath`.
+export const ttsSupertonicLoadConfigSchema = z
+ .object({
+ ...ttsSupertonicRuntimeConfigShape,
+ ...ttsLavasrLoadFieldsShape,
+ voiceJsonSrc: modelSrcInputSchema
+ .optional()
+ .describe(
+ 'External voice JSON source (`{ style_ttl, style_dp }`, e.g. a cloned voice) that overrides the baked `voice` preset; the engine checks the tensor sizes against the loaded model.'
+ ),
+ noiseNpySrc: modelSrcInputSchema
+ .optional()
+ .describe('Fixed CFM initial-noise `.npy` tensor source, for reproducible output.')
+ })
+ .superRefine(refineSupertonicLoadConfig)
type TtsParlerLoadRefinementInput = TtsParlerRuntimeRefinementInput & {
lavasrEnhancerModelSrc?: ModelSrcInput | undefined
@@ -1289,6 +1446,72 @@ const ttsRequestIdSchema = z
.optional()
.describe('Client-generated id for targeting this run with `cancel({ requestId })`.')
+// Per-request voice controls the addon takes on `run()`, `runStream()` and
+// `runStreaming()` alike. A request carries only an opaque modelId, so the
+// engine check (CosyVoice3 for `instruct`, Audio8 for the reference pair)
+// happens in the op once the model is known; the shape rules below hold on
+// every engine.
+const ttsRequestVoiceFieldsShape = {
+ instruct: ttsCosyvoice3InstructSchema
+ .optional()
+ .describe(
+ 'CosyVoice3 only: natural-language control for this synthesis (a structured object with one of dialect / volume / style, or a raw instruction string), replacing the loaded `instruct`, `emotion` or `pace`. One conditioning control per synthesis.'
+ ),
+ referenceAudioSrc: modelSrcInputSchema
+ .optional()
+ .describe(
+ 'Audio8 only: reference recording to clone for this request, replacing the loaded voice; requires `referenceText` and a loaded codec encoder (`audio8CodecEncoderModelSrc`). A remote source that is not cached yet downloads inside the request, which holds the model until it finishes: pre-fetch it with `downloadAsset()` or pass a local path.'
+ ),
+ // Trimmed like the load-time referenceText: a whitespace-only transcript
+ // would reach the engine as a non-empty value.
+ referenceText: z
+ .string()
+ .trim()
+ .min(1)
+ .optional()
+ .describe(
+ 'Audio8 only: transcript of the reference recording. With `referenceAudioSrc`, what that recording says; alone, it corrects the transcript of the loaded recording.'
+ )
+}
+
+type TtsRequestVoiceRefinementInput = {
+ instruct?: unknown
+ referenceAudioSrc?: ModelSrcInput | undefined
+ referenceText?: string | undefined
+ emotion?: string | undefined
+ pace?: string | undefined
+}
+
+// Mirrors the addon's per-call rules that hold regardless of the loaded
+// engine: a per-call recording must bring its own transcript (the configured
+// one describes a different recording), and `instruct` is a CosyVoice3
+// control, so pairing it with an emotion or a non-moderate pace always breaks
+// the one-instruction rule.
+function refineTtsRequestVoiceFields(value: TtsRequestVoiceRefinementInput, ctx: z.RefinementCtx) {
+ if (value.referenceAudioSrc !== undefined && value.referenceText === undefined) {
+ ctx.addIssue({
+ code: 'custom',
+ path: ['referenceText'],
+ message:
+ 'referenceText (the transcript of the reference recording) is required with referenceAudioSrc.'
+ })
+ }
+ if (value.instruct === undefined) return
+ const conflicting =
+ value.emotion !== undefined
+ ? 'emotion'
+ : value.pace !== undefined && value.pace !== 'moderate'
+ ? 'pace'
+ : undefined
+ if (conflicting !== undefined) {
+ ctx.addIssue({
+ code: 'custom',
+ path: [conflicting],
+ message: `CosyVoice3 accepts one conditioning control per synthesis; got instruct and ${conflicting}. Set exactly one (pace "moderate" disengages the pace channel).`
+ })
+ }
+}
+
const ttsClientParamsShape = {
modelId: z.string(),
requestId: ttsRequestIdSchema,
@@ -1299,6 +1522,7 @@ const ttsClientParamsShape = {
sentenceStreamLocale: z.string().optional(),
sentenceStreamMaxChunkScalars: z.number().positive().optional(),
...ttsParlerDescriptionFieldsShape,
+ ...ttsRequestVoiceFieldsShape,
...ttsSoundEffectFieldsShape,
...ttsSpeechFieldsShape
}
@@ -1308,6 +1532,7 @@ function refineTtsRequest(
ctx: z.RefinementCtx
) {
refineParlerDescriptionFields(value, ctx)
+ refineTtsRequestVoiceFields(value, ctx)
refineSpeechAudio(value, ctx)
if ((value.replyVoice !== undefined) !== (value.replyVoiceSampleRate !== undefined)) {
ctx.addIssue({
@@ -1344,10 +1569,20 @@ export const ttsRequestSchema = z
// last sentence that reported them, so a chunked run reports where it ran
// just as batch synthesis (`stream: false`) does. A field no sentence
// reported stays absent.
+// Milliseconds, like every other `*Ms` field below.
+const ttsStageMsSchema = (stage: string) =>
+ z.number().optional().describe(`${stage} wall time of the last synthesis, in milliseconds.`)
+
export const ttsStatsSchema = z.object({
audioDuration: z.number().optional(),
totalTime: z.number().optional(),
realTimeFactor: z.number().optional(),
+ firstAudioMs: z
+ .number()
+ .optional()
+ .describe(
+ 'Milliseconds from the start of the run to the first audio, where the engine reports it; a chunked run keeps the first sentence’s value.'
+ ),
tokensPerSecond: z.number().optional(),
totalSamples: z.number().optional(),
// Audio8 (on a fixed 46 ms grid) and MOSS (12.5 per second) count codec
@@ -1382,7 +1617,59 @@ export const ttsStatsSchema = z.object({
.optional()
.describe(
'Audio8: `1` when this synthesis ran its codec on the Core ML sidecar, `0` when it ran on the ggml backend `backendId` reports.'
- )
+ ),
+ // Chatterbox stage timings and counters.
+ t3Ms: ttsStageMsSchema('Chatterbox T3 decode'),
+ s3genMs: ttsStageMsSchema('Chatterbox S3Gen + HiFT'),
+ t3Tokens: z
+ .number()
+ .optional()
+ .describe('Chatterbox: speech tokens T3 emitted in the last synthesis.'),
+ // CosyVoice3 and Audio8: the engine's own wall time, the sum of its stages.
+ stageTotalMs: z
+ .number()
+ .optional()
+ .describe(
+ 'CosyVoice3 / Audio8: the engine’s own wall time for the last synthesis in milliseconds (the sum of its stages), excluding the addon’s post-processing.'
+ ),
+ // CosyVoice3 stage timings.
+ lmPrefillMs: ttsStageMsSchema('CosyVoice3 LM prefill'),
+ lmDecodeMs: ttsStageMsSchema('CosyVoice3 LM decode'),
+ flowFrontendMs: ttsStageMsSchema('CosyVoice3 flow front-end'),
+ ditEulerMs: ttsStageMsSchema('CosyVoice3 DiT Euler'),
+ hiftF0Ms: ttsStageMsSchema('CosyVoice3 HiFT F0'),
+ hiftSourceMs: ttsStageMsSchema('CosyVoice3 HiFT source'),
+ hiftStftMs: ttsStageMsSchema('CosyVoice3 HiFT STFT'),
+ hiftDecodeMs: ttsStageMsSchema('CosyVoice3 HiFT decode'),
+ // CosyVoice3 work counters.
+ decodeSteps: z.number().optional().describe('CosyVoice3: LM decode steps of the last synthesis.'),
+ speechTokens: z
+ .number()
+ .optional()
+ .describe('CosyVoice3: speech tokens generated in the last synthesis.'),
+ flowFrames: z
+ .number()
+ .optional()
+ .describe('CosyVoice3: flow frames in (prompt + generated) of the last synthesis.'),
+ melFrames: z.number().optional().describe('CosyVoice3: mel frames out of the last synthesis.'),
+ textIds: z
+ .number()
+ .optional()
+ .describe('CosyVoice3: text ids in the LM prefill of the last synthesis.'),
+ promptSpeechTokens: z
+ .number()
+ .optional()
+ .describe('CosyVoice3: prompt speech tokens the LM continued from.'),
+ // Audio8 stage timings.
+ voiceEncodeMs: ttsStageMsSchema('Audio8 reference-voice encode'),
+ promptMs: ttsStageMsSchema('Audio8 prompt build'),
+ prefillMs: ttsStageMsSchema('Audio8 prefill'),
+ sampleMs: ttsStageMsSchema('Audio8 sampling'),
+ fastDecodeMs: ttsStageMsSchema('Audio8 fast (local) decoder'),
+ slowDecodeMs: ttsStageMsSchema('Audio8 slow (global) decoder'),
+ codecLatentMs: ttsStageMsSchema('Audio8 codec latent'),
+ codecSynthMs: ttsStageMsSchema('Audio8 codec synthesis'),
+ resampleMs: ttsStageMsSchema('Audio8 resample')
})
// The rate of `buffer`. It is not a constant of the engine: `outputSampleRate`
@@ -1432,7 +1719,16 @@ const textToSpeechStreamRequestBaseShape = {
sentenceDelimiterPreset: z.enum(TTS_SENTENCE_DELIMITER_PRESETS).optional(),
maxBufferScalars: z.number().positive().optional(),
flushAfterMs: z.number().positive().optional(),
- ...ttsParlerDescriptionFieldsShape
+ ...ttsParlerDescriptionFieldsShape,
+ ...ttsRequestVoiceFieldsShape
+}
+
+function refineTextToSpeechStreamRequest(
+ value: z.infer>,
+ ctx: z.RefinementCtx
+) {
+ refineParlerDescriptionFields(value, ctx)
+ refineTtsRequestVoiceFields(value, ctx)
}
export const textToSpeechStreamRequestSchema = z
@@ -1440,7 +1736,7 @@ export const textToSpeechStreamRequestSchema = z
...textToSpeechStreamRequestBaseShape,
type: z.literal('textToSpeechStream')
})
- .superRefine(refineParlerDescriptionFields)
+ .superRefine(refineTextToSpeechStreamRequest)
export const textToSpeechStreamResponseSchema = z.object({
type: z.literal('textToSpeechStream'),
diff --git a/packages/inference/src/utils/addon-responses.ts b/packages/inference/src/utils/addon-responses.ts
index 99dacbe3b35..6e83e73bedf 100644
--- a/packages/inference/src/utils/addon-responses.ts
+++ b/packages/inference/src/utils/addon-responses.ts
@@ -53,6 +53,40 @@ export interface TtsStats {
codecSidecarLoaded?: number
/** Audio8 only: 1 when the synthesis ran its codec on that sidecar, 0 on ggml. */
codecOnCoreml?: number
+ /** Milliseconds to the first audio, where the engine reports it. */
+ firstAudioMs?: number
+ /** Chatterbox: T3 decode and S3Gen + HiFT wall times (ms), speech tokens T3 emitted. */
+ t3Ms?: number
+ s3genMs?: number
+ t3Tokens?: number
+ /** CosyVoice3 / Audio8: the engine's own wall time (ms), the sum of its stages. */
+ stageTotalMs?: number
+ /** CosyVoice3 stage wall times (ms). */
+ lmPrefillMs?: number
+ lmDecodeMs?: number
+ flowFrontendMs?: number
+ ditEulerMs?: number
+ hiftF0Ms?: number
+ hiftSourceMs?: number
+ hiftStftMs?: number
+ hiftDecodeMs?: number
+ /** CosyVoice3 work counters. */
+ decodeSteps?: number
+ speechTokens?: number
+ flowFrames?: number
+ melFrames?: number
+ textIds?: number
+ promptSpeechTokens?: number
+ /** Audio8 stage wall times (ms). */
+ voiceEncodeMs?: number
+ promptMs?: number
+ prefillMs?: number
+ sampleMs?: number
+ fastDecodeMs?: number
+ slowDecodeMs?: number
+ codecLatentMs?: number
+ codecSynthMs?: number
+ resampleMs?: number
}
/**
diff --git a/packages/inference/src/utils/tts-stats.ts b/packages/inference/src/utils/tts-stats.ts
index 6c97d2f46b2..fa24bb06d83 100644
--- a/packages/inference/src/utils/tts-stats.ts
+++ b/packages/inference/src/utils/tts-stats.ts
@@ -77,33 +77,90 @@ export function pcmFrame(samples: ArrayLike): { buffer: number[]; pcm?:
return { buffer: Array.from(samples) }
}
-// Field-for-field, apart from `audioDurationMs` -> `audioDuration`, which keeps
-// the name the SDK has always exposed.
+/**
+ * The addon stats that keep their name on the wire. `audioDurationMs` is the
+ * one rename (`audioDuration`, the name the SDK has always exposed) and is
+ * handled on its own below.
+ *
+ * Two compile-time checks keep this table honest. `satisfies` requires every
+ * entry to be a key of both the addon's stats and `ttsStatsSchema`, and
+ * `UnforwardedTtsStats` below requires every key of either type to be an
+ * entry. A stat added to one side only, or to both without a line here, fails
+ * to compile rather than being dropped silently.
+ */
+const TTS_FORWARDED_STATS = [
+ 'totalTime',
+ 'realTimeFactor',
+ 'tokensPerSecond',
+ 'totalSamples',
+ 'generatedFrames',
+ 'firstAudioMs',
+ 'backendDevice',
+ 'backendId',
+ 'gpuUnsupported',
+ 'enhancerBackendDevice',
+ 'enhancerBackendId',
+ 'denoiserBackendDevice',
+ 'denoiserBackendId',
+ 'codecSidecarLoaded',
+ 'codecOnCoreml',
+ // Chatterbox
+ 't3Ms',
+ 's3genMs',
+ 't3Tokens',
+ // CosyVoice3 / Audio8
+ 'stageTotalMs',
+ // CosyVoice3
+ 'lmPrefillMs',
+ 'lmDecodeMs',
+ 'flowFrontendMs',
+ 'ditEulerMs',
+ 'hiftF0Ms',
+ 'hiftSourceMs',
+ 'hiftStftMs',
+ 'hiftDecodeMs',
+ 'decodeSteps',
+ 'speechTokens',
+ 'flowFrames',
+ 'melFrames',
+ 'textIds',
+ 'promptSpeechTokens',
+ // Audio8
+ 'voiceEncodeMs',
+ 'promptMs',
+ 'prefillMs',
+ 'sampleMs',
+ 'fastDecodeMs',
+ 'slowDecodeMs',
+ 'codecLatentMs',
+ 'codecSynthMs',
+ 'resampleMs'
+] as const satisfies readonly (keyof AddonTtsStats & keyof TtsStats)[]
+
+type ForwardedTtsStat = (typeof TTS_FORWARDED_STATS)[number]
+
+// The stats either side declares that the table does not cover, apart from the
+// renamed pair. Anything left here is a field `collectTtsStats` would drop.
+type UnforwardedTtsStats =
+ | Exclude
+ | Exclude
+
+// Fails with the missing field's name: "Type '"newStat"' does not satisfy the
+// constraint 'never'".
+type AssertNoUnforwardedTtsStats = T
+export type TtsStatsTableIsExhaustive = AssertNoUnforwardedTtsStats
+
+// Presence, not truthiness: `backendDevice: 0` (CPU) and a zero stage time are
+// real reports, so only `undefined` is dropped.
export function collectTtsStats(response: { stats?: AddonTtsStats }): TtsStats {
const stats = response.stats
if (!stats) return {}
- return {
- ...(stats.audioDurationMs !== undefined && { audioDuration: stats.audioDurationMs }),
- ...(stats.totalTime !== undefined && { totalTime: stats.totalTime }),
- ...(stats.realTimeFactor !== undefined && { realTimeFactor: stats.realTimeFactor }),
- ...(stats.tokensPerSecond !== undefined && { tokensPerSecond: stats.tokensPerSecond }),
- ...(stats.totalSamples !== undefined && { totalSamples: stats.totalSamples }),
- ...(stats.generatedFrames !== undefined && { generatedFrames: stats.generatedFrames }),
- ...(stats.backendDevice !== undefined && { backendDevice: stats.backendDevice }),
- ...(stats.backendId !== undefined && { backendId: stats.backendId }),
- ...(stats.gpuUnsupported !== undefined && { gpuUnsupported: stats.gpuUnsupported }),
- ...(stats.enhancerBackendDevice !== undefined && {
- enhancerBackendDevice: stats.enhancerBackendDevice
- }),
- ...(stats.enhancerBackendId !== undefined && { enhancerBackendId: stats.enhancerBackendId }),
- ...(stats.denoiserBackendDevice !== undefined && {
- denoiserBackendDevice: stats.denoiserBackendDevice
- }),
- ...(stats.denoiserBackendId !== undefined && { denoiserBackendId: stats.denoiserBackendId }),
- ...(stats.codecSidecarLoaded !== undefined && {
- codecSidecarLoaded: stats.codecSidecarLoaded
- }),
- ...(stats.codecOnCoreml !== undefined && { codecOnCoreml: stats.codecOnCoreml })
+ const out: TtsStats = {}
+ if (stats.audioDurationMs !== undefined) out.audioDuration = stats.audioDurationMs
+ for (const key of TTS_FORWARDED_STATS) {
+ const value = stats[key]
+ if (value !== undefined) out[key] = value
}
+ return out
}
diff --git a/packages/inference/test/tts-resolve-config.test.ts b/packages/inference/test/tts-resolve-config.test.ts
index de4626d01dc..2c825e54158 100644
--- a/packages/inference/test/tts-resolve-config.test.ts
+++ b/packages/inference/test/tts-resolve-config.test.ts
@@ -56,6 +56,23 @@ type TtsGgmlDebugModel = {
steps?: number
referenceAudio?: string
promptText?: string
+ streamLeftContextTokens?: number
+ batchCfmSteps?: number
+ nPredict?: number
+ maxSentenceChars?: number
+ crossfadeMs?: number
+ repeatPenalty?: number
+ exaggeration?: number
+ cfgWeight?: number
+ minP?: number
+ voiceDir?: string
+ voiceJsonPath?: string
+ noiseNpyPath?: string
+ prewarmText?: string
+ vulkanDevice?: number
+ flowCutPrompt?: boolean
+ streamChunkTolerancePct?: number
+ streamMinChunkTokens?: number
}
}
getEngineType?: () => string
@@ -860,3 +877,130 @@ test('ttsPlugin createModel: wires CosyVoice3 voice cloning', async (t) => {
t.is(model._setup.paths.cosyvoiceS3tokModelPath, '/tmp/s3tok.gguf')
t.is(model._setup.paths.cosyvoiceCampplusModelPath, '/tmp/campplus.gguf')
})
+
+test('ttsPlugin createModel: forwards the Chatterbox sampling, prosody and length controls', async (t) => {
+ const { ttsPlugin } = await import('@/plugins/builtin/tts-ggml/plugin')
+
+ const result = ttsPlugin.createModel({
+ modelId: 'tts-chatterbox-controls',
+ modelPath: '/tmp/chatterbox-t3-mtl.gguf',
+ artifacts: { s3genPath: '/tmp/chatterbox-s3gen-mtl.gguf' },
+ modelConfig: {
+ ttsEngine: 'chatterbox',
+ language: 'en',
+ temperature: 0.8,
+ topK: 1000,
+ topP: 0.95,
+ repeatPenalty: 1.2,
+ exaggeration: 0.7,
+ cfgWeight: 0.5,
+ minP: 0.05,
+ nPredict: 1500,
+ maxSentenceChars: 180,
+ crossfadeMs: 30,
+ batchCfmSteps: 4,
+ streamLeftContextTokens: 32,
+ voiceDir: '/voices/me'
+ }
+ })
+
+ const model = result.model as unknown as TtsGgmlDebugModel
+ t.is(model._setup.settings.temperature, 0.8)
+ t.is(model._setup.settings.topK, 1000)
+ t.is(model._setup.settings.topP, 0.95)
+ t.is(model._setup.settings.repeatPenalty, 1.2)
+ t.is(model._setup.settings.exaggeration, 0.7)
+ t.is(model._setup.settings.cfgWeight, 0.5)
+ t.is(model._setup.settings.minP, 0.05)
+ t.is(model._setup.settings.nPredict, 1500)
+ t.is(model._setup.settings.maxSentenceChars, 180)
+ t.is(model._setup.settings.crossfadeMs, 30)
+ t.is(model._setup.settings.batchCfmSteps, 4)
+ t.is(model._setup.settings.streamLeftContextTokens, 32)
+ t.is(model._setup.settings.voiceDir, '/voices/me')
+})
+
+test('ttsPlugin resolveConfig: resolves the Supertonic voice JSON and noise tensor and strips *Src', async (t) => {
+ const { ttsPlugin } = await import('@/plugins/builtin/tts-ggml/plugin')
+
+ const resolved = await ttsPlugin.resolveConfig!(
+ {
+ ttsEngine: 'supertonic',
+ language: 'en',
+ voiceJsonSrc: 'registry://s3/voices/cloned.json',
+ noiseNpySrc: { src: 'registry://s3/voices/noise.npy', name: 'TTS_SUPERTONIC_NOISE' },
+ prewarmText: 'Warm the pipelines up.',
+ vulkanDevice: -1,
+ streamChunkTokens: 50,
+ lavasrEnhancerModelSrc: undefined
+ },
+ {
+ resolveModelPath: async (src: unknown) =>
+ `/cache/${typeof src === 'string' ? src : (src as { src: string }).src}`,
+ modelSrc: 'registry://s3/supertonic3-q8_0.gguf',
+ modelType: 'tts-ggml'
+ }
+ )
+
+ t.alike(resolved.artifacts, {
+ voiceJsonPath: '/cache/registry://s3/voices/cloned.json',
+ noiseNpyPath: '/cache/registry://s3/voices/noise.npy'
+ })
+ t.is('voiceJsonSrc' in resolved.config, false)
+ t.is('noiseNpySrc' in resolved.config, false)
+ const runtime = resolved.config as {
+ prewarmText?: string
+ vulkanDevice?: number
+ streamChunkTokens?: number
+ }
+ t.is(runtime.prewarmText, 'Warm the pipelines up.')
+ t.is(runtime.vulkanDevice, -1)
+ t.is(runtime.streamChunkTokens, 50)
+})
+
+test('ttsPlugin createModel: forwards the Supertonic streaming, voice and deployment controls', async (t) => {
+ const { ttsPlugin } = await import('@/plugins/builtin/tts-ggml/plugin')
+
+ const result = ttsPlugin.createModel({
+ modelId: 'tts-supertonic-controls',
+ modelPath: '/tmp/supertonic3-q8_0.gguf',
+ artifacts: { voiceJsonPath: '/cache/cloned.json', noiseNpyPath: '/cache/noise.npy' },
+ modelConfig: {
+ ttsEngine: 'supertonic',
+ language: 'en',
+ voice: 'M1',
+ prewarmText: 'Warm the pipelines up.',
+ vulkanDevice: 1,
+ streamChunkTokens: 50,
+ streamFirstChunkTokens: 20,
+ streamChunkTolerancePct: 15,
+ streamMinChunkTokens: 25
+ }
+ })
+
+ const model = result.model as unknown as TtsGgmlDebugModel
+ t.is(model.getEngineType?.(), 'supertonic')
+ t.is(model._setup.settings.voice, 'M1')
+ t.is(model._setup.settings.voiceJsonPath, '/cache/cloned.json')
+ t.is(model._setup.settings.noiseNpyPath, '/cache/noise.npy')
+ t.is(model._setup.settings.prewarmText, 'Warm the pipelines up.')
+ t.is(model._setup.settings.vulkanDevice, 1)
+ t.is(model._setup.settings.streamChunkTokens, 50)
+ t.is(model._setup.settings.streamFirstChunkTokens, 20)
+ t.is(model._setup.settings.streamChunkTolerancePct, 15)
+ t.is(model._setup.settings.streamMinChunkTokens, 25)
+})
+
+test('ttsPlugin createModel: forwards CosyVoice3 flowCutPrompt and vulkanDevice', async (t) => {
+ const { ttsPlugin } = await import('@/plugins/builtin/tts-ggml/plugin')
+
+ const result = ttsPlugin.createModel({
+ modelId: 'tts-cosyvoice3-controls',
+ modelPath: '/tmp/qvac/sets/cosyvoice3/cosyvoice3-llm-q8_0.gguf',
+ modelConfig: { ttsEngine: 'cosyvoice3', flowCutPrompt: true, vulkanDevice: -1 }
+ })
+
+ const model = result.model as unknown as TtsGgmlDebugModel
+ t.is(model._setup.settings.flowCutPrompt, true)
+ t.is(model._setup.settings.vulkanDevice, -1)
+})
diff --git a/packages/inference/test/tts-schemas.test.ts b/packages/inference/test/tts-schemas.test.ts
index 6a73c647e86..adef87326c9 100644
--- a/packages/inference/test/tts-schemas.test.ts
+++ b/packages/inference/test/tts-schemas.test.ts
@@ -207,12 +207,27 @@ test('ttsConfigSchema: accepts inclusive outputSampleRate boundaries', (t) => {
})
test('ttsConfigSchema: rejects Chatterbox-only native streaming options for supertonic', (t) => {
- const r = ttsConfigSchema.safeParse({
- ttsEngine: 'supertonic',
- language: 'en',
- streamChunkTokens: 25
- })
- t.is(r.success, false)
+ // Supertonic streams natively since @qvac/tts-ggml 0.10, so the chunk-size
+ // knobs are shared; the CFM / S3Gen / T3-cache controls stay Chatterbox-only.
+ for (const chatterboxOnly of [
+ { cfmSteps: 1 },
+ { cfgRate: 0.7 },
+ { nCtx: 1000 },
+ { kvCacheType: 'q8_0' },
+ { streamLeftContextTokens: 32 }
+ ]) {
+ const r = ttsConfigSchema.safeParse({
+ ttsEngine: 'supertonic',
+ language: 'en',
+ ...chatterboxOnly
+ })
+ t.is(r.success, false, JSON.stringify(chatterboxOnly))
+ }
+ t.is(
+ ttsConfigSchema.safeParse({ ttsEngine: 'supertonic', language: 'en', streamChunkTokens: 25 })
+ .success,
+ true
+ )
})
test('ttsConfigSchema: accepts GGML supertonic load config', (t) => {
@@ -1475,3 +1490,336 @@ test('TTS_SENTENCE_DELIMITER_PRESETS drives the stream request schema', (t) => {
})
t.is(bad.success, false)
})
+
+test('ttsConfigSchema: accepts the Chatterbox sampling, prosody and length controls', (t) => {
+ const r = ttsConfigSchema.safeParse({
+ ttsEngine: 'chatterbox',
+ language: 'en',
+ s3genModelSrc: 's3:///example/s3gen.gguf',
+ temperature: 0.8,
+ topK: 1000,
+ topP: 0.95,
+ repeatPenalty: 1.2,
+ exaggeration: -0.2,
+ cfgWeight: 0.5,
+ minP: 0.05,
+ nPredict: 1500,
+ maxSentenceChars: 180,
+ crossfadeMs: 30,
+ batchCfmSteps: 4,
+ streamLeftContextTokens: 32,
+ voiceDir: '/voices/me'
+ })
+ t.is(r.success, true)
+ if (r.success) {
+ const data = r.data as Record
+ t.is(data['temperature'], 0.8)
+ t.is(data['topK'], 1000)
+ t.is(data['topP'], 0.95)
+ t.is(data['repeatPenalty'], 1.2)
+ t.is(data['exaggeration'], -0.2)
+ t.is(data['cfgWeight'], 0.5)
+ t.is(data['minP'], 0.05)
+ t.is(data['nPredict'], 1500)
+ t.is(data['maxSentenceChars'], 180)
+ t.is(data['crossfadeMs'], 30)
+ t.is(data['batchCfmSteps'], 4)
+ t.is(data['streamLeftContextTokens'], 32)
+ t.is(data['voiceDir'], '/voices/me')
+ }
+})
+
+test('ttsConfigSchema: bounds the Chatterbox sampling and length controls', (t) => {
+ const base = {
+ ttsEngine: 'chatterbox',
+ language: 'en',
+ s3genModelSrc: 's3:///example/s3gen.gguf'
+ }
+ for (const bad of [
+ { temperature: -0.1 },
+ { topK: -1 },
+ { topP: 0 },
+ { topP: 1.5 },
+ { repeatPenalty: 0 },
+ { cfgWeight: -1 },
+ { minP: -0.1 },
+ { minP: 1.5 },
+ { nPredict: 0 },
+ { maxSentenceChars: -1 },
+ { crossfadeMs: 1.5 },
+ { batchCfmSteps: -1 },
+ { streamLeftContextTokens: 2147483648 },
+ { voiceDir: '' }
+ ]) {
+ t.is(ttsConfigSchema.safeParse({ ...base, ...bad }).success, false, JSON.stringify(bad))
+ }
+ // Exaggeration is signed: below zero means flatter prosody.
+ t.is(ttsConfigSchema.safeParse({ ...base, exaggeration: -1 }).success, true)
+})
+
+test('ttsConfigSchema: rejects the Chatterbox-only controls on other engines', (t) => {
+ for (const bad of [
+ { ttsEngine: 'supertonic', language: 'en', repeatPenalty: 1.1 },
+ { ttsEngine: 'supertonic', language: 'en', voiceDir: '/voices/me' },
+ { ttsEngine: 'cosyvoice3', nPredict: 500 },
+ { ttsEngine: 'audio8', audio8CodecDecoderModelSrc: 's3:///a/dec.gguf', exaggeration: 0.5 }
+ ]) {
+ t.is(ttsConfigSchema.safeParse(bad).success, false, JSON.stringify(bad))
+ }
+})
+
+test('ttsConfigSchema: accepts the Supertonic streaming, voice and deployment controls', (t) => {
+ const r = ttsConfigSchema.safeParse({
+ ttsEngine: 'supertonic',
+ language: 'en',
+ voice: 'F1',
+ voiceJsonSrc: 's3:///voices/cloned.json',
+ noiseNpySrc: { src: 's3:///voices/noise.npy', name: 'TTS_SUPERTONIC_NOISE' },
+ prewarmText: 'A sentence of representative length for the warm-up.',
+ vulkanDevice: -1,
+ streamChunkTokens: 50,
+ streamFirstChunkTokens: 20,
+ streamChunkTolerancePct: 20,
+ streamMinChunkTokens: 30
+ })
+ t.is(r.success, true)
+ if (r.success) {
+ const data = r.data as Record
+ t.is(data['voiceJsonSrc'], 's3:///voices/cloned.json')
+ t.alike(data['noiseNpySrc'], { src: 's3:///voices/noise.npy', name: 'TTS_SUPERTONIC_NOISE' })
+ t.is(data['prewarmText'], 'A sentence of representative length for the warm-up.')
+ t.is(data['vulkanDevice'], -1)
+ t.is(data['streamChunkTokens'], 50)
+ t.is(data['streamFirstChunkTokens'], 20)
+ t.is(data['streamChunkTolerancePct'], 20)
+ t.is(data['streamMinChunkTokens'], 30)
+ }
+ // Whitespace-only pre-warm text would reach the engine as a non-empty prompt.
+ t.is(
+ ttsConfigSchema.safeParse({ ttsEngine: 'supertonic', language: 'en', prewarmText: ' ' })
+ .success,
+ false
+ )
+})
+
+test('ttsConfigSchema: rejects Supertonic native streaming with either LavaSR stage', (t) => {
+ const base = { ttsEngine: 'supertonic', language: 'en', streamChunkTokens: 50 }
+ for (const field of ['lavasrEnhancerModelSrc', 'lavasrDenoiserModelSrc'] as const) {
+ const r = ttsConfigSchema.safeParse({ ...base, [field]: 's3:///lavasr/stage.gguf' })
+ t.is(r.success, false, field)
+ if (!r.success) {
+ t.is(r.error.issues[0]?.path.join('.'), field)
+ t.ok(r.error.issues[0]?.message.includes('Supertonic native chunk streaming'))
+ }
+ }
+ // Both stages at once name both fields.
+ const both = ttsConfigSchema.safeParse({
+ ...base,
+ lavasrEnhancerModelSrc: 's3:///lavasr/enhancer.gguf',
+ lavasrDenoiserModelSrc: 's3:///lavasr/denoiser.gguf'
+ })
+ t.is(both.success, false)
+ if (!both.success) t.is(both.error.issues.length, 2)
+ // 0 means batch; a first-chunk size alone enables nothing, so the stages stay reachable.
+ t.is(
+ ttsConfigSchema.safeParse({
+ ttsEngine: 'supertonic',
+ language: 'en',
+ streamChunkTokens: 0,
+ streamFirstChunkTokens: 20,
+ lavasrEnhancerModelSrc: 's3:///lavasr/enhancer.gguf',
+ lavasrDenoiserModelSrc: 's3:///lavasr/denoiser.gguf'
+ }).success,
+ true
+ )
+})
+
+test('ttsConfigSchema: keeps the Supertonic rate-control rule on the load schema', (t) => {
+ // The load schema is built from the runtime shape, so it has to re-run the
+ // runtime refinement rather than inherit it.
+ const r = ttsConfigSchema.safeParse({
+ ttsEngine: 'supertonic',
+ language: 'en',
+ ttsSpeed: 1.2,
+ pace: 'fast',
+ lavasrEnhancerModelSrc: 's3:///lavasr/enhancer.gguf'
+ })
+ t.is(r.success, false)
+ if (!r.success) t.is(r.error.issues[0]?.path.join('.'), 'pace')
+})
+
+test('ttsConfigSchema: bounds vulkanDevice to -1 and above on the engines that read it', (t) => {
+ for (const device of [-1, 0, 3]) {
+ t.is(
+ ttsConfigSchema.safeParse({ ttsEngine: 'supertonic', language: 'en', vulkanDevice: device })
+ .success,
+ true
+ )
+ t.is(ttsConfigSchema.safeParse({ ttsEngine: 'cosyvoice3', vulkanDevice: device }).success, true)
+ }
+ t.is(
+ ttsConfigSchema.safeParse({ ttsEngine: 'supertonic', language: 'en', vulkanDevice: -2 })
+ .success,
+ false
+ )
+ t.is(ttsConfigSchema.safeParse({ ttsEngine: 'cosyvoice3', vulkanDevice: 1.5 }).success, false)
+ // Audio8 always auto-picks and Chatterbox has no Vulkan adapter control.
+ t.is(
+ ttsConfigSchema.safeParse({
+ ttsEngine: 'chatterbox',
+ language: 'en',
+ s3genModelSrc: 's3:///example/s3gen.gguf',
+ vulkanDevice: 0
+ }).success,
+ false
+ )
+})
+
+test('ttsConfigSchema: accepts CosyVoice3 flowCutPrompt', (t) => {
+ const r = ttsConfigSchema.safeParse({ ttsEngine: 'cosyvoice3', flowCutPrompt: true })
+ t.is(r.success, true)
+ if (r.success) t.is((r.data as Record)['flowCutPrompt'], true)
+ t.is(ttsConfigSchema.safeParse({ ttsEngine: 'cosyvoice3', flowCutPrompt: 'yes' }).success, false)
+ t.is(
+ ttsConfigSchema.safeParse({ ttsEngine: 'supertonic', language: 'en', flowCutPrompt: true })
+ .success,
+ false
+ )
+})
+
+test('ttsRequestSchema: accepts a per-request CosyVoice3 instruct and the Audio8 reference pair', (t) => {
+ const structured = ttsRequestSchema.safeParse({
+ type: 'textToSpeech',
+ modelId: 'cosyvoice3',
+ text: 'Hello.',
+ instruct: { dialect: 'cantonese' }
+ })
+ t.is(structured.success, true)
+ if (structured.success) t.alike(structured.data.instruct, { dialect: 'cantonese' })
+
+ const raw = ttsRequestSchema.safeParse({
+ type: 'textToSpeech',
+ modelId: 'cosyvoice3',
+ text: 'Hello.',
+ instruct: ' 请用四川话表达。 '
+ })
+ t.is(raw.success, true)
+ if (raw.success) t.is(raw.data.instruct, '请用四川话表达。', 'raw instruction is trimmed')
+
+ const reference = ttsRequestSchema.safeParse({
+ type: 'textToSpeech',
+ modelId: 'audio8',
+ text: 'Hello.',
+ referenceAudioSrc: '/voices/someone-else.wav',
+ referenceText: ' What that recording says. '
+ })
+ t.is(reference.success, true)
+ if (reference.success) {
+ t.is(reference.data.referenceAudioSrc, '/voices/someone-else.wav')
+ t.is(reference.data.referenceText, 'What that recording says.')
+ }
+})
+
+test('ttsRequestSchema: enforces the per-request voice rules', (t) => {
+ const base = { type: 'textToSpeech', modelId: 'm', text: 'Hello.' }
+ const cases: Array<[Record, string]> = [
+ [{ referenceAudioSrc: '/voices/x.wav' }, 'referenceText'],
+ [{ referenceAudioSrc: '/voices/x.wav', referenceText: ' ' }, 'referenceText'],
+ [{ instruct: { dialect: 'cantonese' }, emotion: 'happy' }, 'emotion'],
+ [{ instruct: 'loud please', pace: 'fast' }, 'pace'],
+ [{ instruct: '' }, 'instruct'],
+ [{ instruct: {} }, 'instruct'],
+ [{ instruct: { dialekt: 'cantonese' } }, 'instruct']
+ ]
+ for (const [fields, path] of cases) {
+ const r = ttsRequestSchema.safeParse({ ...base, ...fields })
+ t.is(r.success, false, JSON.stringify(fields))
+ if (!r.success) {
+ t.ok(
+ r.error.issues.some((issue) => issue.path[0] === path),
+ `${path} named`
+ )
+ }
+ }
+ // `moderate` disengages the pace channel, so it never conflicts.
+ t.is(
+ ttsRequestSchema.safeParse({ ...base, instruct: { style: 'robot' }, pace: 'moderate' }).success,
+ true
+ )
+ // A transcript alone is allowed: it corrects the loaded recording's transcript.
+ t.is(ttsRequestSchema.safeParse({ ...base, referenceText: 'corrected' }).success, true)
+})
+
+test('textToSpeechStreamRequestSchema: carries the per-request voice fields and rules', (t) => {
+ const ok = textToSpeechStreamRequestSchema.safeParse({
+ type: 'textToSpeechStream',
+ modelId: 'm',
+ instruct: { volume: 'soft' },
+ referenceAudioSrc: { src: 's3:///voices/x.wav', name: 'VOICE' },
+ referenceText: 'What it says.'
+ })
+ t.is(ok.success, true)
+ if (ok.success) {
+ t.alike(ok.data.instruct, { volume: 'soft' })
+ t.alike(ok.data.referenceAudioSrc, { src: 's3:///voices/x.wav', name: 'VOICE' })
+ t.is(ok.data.referenceText, 'What it says.')
+ }
+ const missingTranscript = textToSpeechStreamRequestSchema.safeParse({
+ type: 'textToSpeechStream',
+ modelId: 'm',
+ referenceAudioSrc: '/voices/x.wav'
+ })
+ t.is(missingTranscript.success, false)
+ if (!missingTranscript.success) {
+ t.is(missingTranscript.error.issues[0]?.path.join('.'), 'referenceText')
+ }
+ const twoControls = textToSpeechStreamRequestSchema.safeParse({
+ type: 'textToSpeechStream',
+ modelId: 'm',
+ instruct: 'softly',
+ emotion: 'sad'
+ })
+ t.is(twoControls.success, false)
+ if (!twoControls.success) t.is(twoControls.error.issues[0]?.path.join('.'), 'emotion')
+})
+
+test('ttsStatsSchema: carries the engines’ stage timings and counters', (t) => {
+ const stats = {
+ firstAudioMs: 180,
+ t3Ms: 410,
+ s3genMs: 220,
+ t3Tokens: 125,
+ stageTotalMs: 900,
+ lmPrefillMs: 30,
+ lmDecodeMs: 400,
+ flowFrontendMs: 5,
+ ditEulerMs: 300,
+ hiftF0Ms: 10,
+ hiftSourceMs: 20,
+ hiftStftMs: 15,
+ hiftDecodeMs: 120,
+ decodeSteps: 100,
+ speechTokens: 98,
+ flowFrames: 240,
+ melFrames: 200,
+ textIds: 12,
+ promptSpeechTokens: 140,
+ voiceEncodeMs: 0,
+ promptMs: 2,
+ prefillMs: 40,
+ sampleMs: 350,
+ fastDecodeMs: 200,
+ slowDecodeMs: 150,
+ codecLatentMs: 60,
+ codecSynthMs: 90,
+ resampleMs: 4
+ }
+ for (const [type, schema] of [
+ ['textToSpeech', ttsResponseSchema],
+ ['textToSpeechStream', textToSpeechStreamResponseSchema]
+ ] as const) {
+ const r = schema.safeParse({ type, buffer: [], done: true, stats })
+ t.is(r.success, true, type)
+ if (r.success) t.alike(r.data.stats, stats)
+ }
+})
diff --git a/packages/inference/test/tts-stats.test.ts b/packages/inference/test/tts-stats.test.ts
index 7050b12b9bc..23e4109e596 100644
--- a/packages/inference/test/tts-stats.test.ts
+++ b/packages/inference/test/tts-stats.test.ts
@@ -130,3 +130,46 @@ test('appendPcm: appends each chunk in place, in order', (t) => {
appendPcm(buffer, new Int16Array([32767, -32768]))
t.alike(buffer, [1, -2, 3, 32767, -32768])
})
+
+test('collectTtsStats: forwards the engines’ stage timings and counters, zero included', (t) => {
+ // Chatterbox, CosyVoice3 and Audio8 each report their own stages; a zero
+ // stage time (e.g. no reference to encode) is a real report, not absence.
+ const stats = {
+ firstAudioMs: 180,
+ t3Ms: 410,
+ s3genMs: 220,
+ t3Tokens: 125,
+ stageTotalMs: 900,
+ lmPrefillMs: 30,
+ lmDecodeMs: 400,
+ flowFrontendMs: 5,
+ ditEulerMs: 300,
+ hiftF0Ms: 10,
+ hiftSourceMs: 20,
+ hiftStftMs: 15,
+ hiftDecodeMs: 120,
+ decodeSteps: 100,
+ speechTokens: 98,
+ flowFrames: 240,
+ melFrames: 200,
+ textIds: 12,
+ promptSpeechTokens: 140,
+ voiceEncodeMs: 0,
+ promptMs: 2,
+ prefillMs: 40,
+ sampleMs: 350,
+ fastDecodeMs: 200,
+ slowDecodeMs: 150,
+ codecLatentMs: 60,
+ codecSynthMs: 90,
+ resampleMs: 4
+ }
+ t.alike(collectTtsStats({ stats: { audioDurationMs: 1200, ...stats } }), {
+ audioDuration: 1200,
+ ...stats
+ })
+})
+
+test('collectTtsStats: forwards only the stage fields the addon reported', (t) => {
+ t.alike(collectTtsStats({ stats: { t3Ms: 410 } }), { t3Ms: 410 })
+})
diff --git a/packages/inference/test/tts-voice-options.test.ts b/packages/inference/test/tts-voice-options.test.ts
new file mode 100644
index 00000000000..dad9e91a95d
--- /dev/null
+++ b/packages/inference/test/tts-voice-options.test.ts
@@ -0,0 +1,408 @@
+import test from 'brittle'
+import Buffer from 'bare-buffer'
+import fs from 'bare-fs'
+import http from 'bare-http1'
+import os from 'bare-os'
+import path from 'bare-path'
+import { getRequestRegistry } from '@/runtime/index'
+import { registerModel, unregisterModel } from '@/runtime/model-registry'
+import { textToSpeech } from '@/plugins/builtin/tts-ggml/ops/text-to-speech'
+import { textToSpeechStream } from '@/plugins/builtin/tts-ggml/ops/text-to-speech-stream'
+import type { TtsOpResult } from '@/plugins/builtin/tts-ggml/ops/text-to-speech'
+import { getModelsCacheDir } from '@/utils/cache/paths'
+import { useTestCacheDir } from './fixtures/test-cache'
+
+// The per-request voice controls @qvac/tts-ggml takes on every entry point:
+// CosyVoice3's `instruct` and Audio8's reference recording + transcript. The
+// request schema only knows an opaque modelId, so the engine check runs in the
+// op, and the forwarded job must carry exactly the fields the request set.
+
+const response = {
+ stats: { totalSamples: 2 },
+ async *iterate() {
+ yield { outputArray: new Int16Array([1, 2]), sampleRate: 24000 }
+ }
+}
+
+function fakeModel(engine: string, calls: unknown[]) {
+ return {
+ getEngineType: () => engine,
+ async cancel() {},
+ async run(job: unknown) {
+ calls.push(job)
+ return response
+ },
+ async runStream(text: string, options: unknown) {
+ calls.push({ text, options })
+ return response
+ },
+ async runStreaming(source: AsyncIterable, options: unknown) {
+ const text: string[] = []
+ for await (const fragment of source) text.push(fragment)
+ calls.push({ text: text.join(''), options })
+ return response
+ }
+ }
+}
+
+function register(modelId: string, engine: string, calls: unknown[]) {
+ registerModel(modelId, {
+ model: fakeModel(engine, calls) as never,
+ path: `/tmp/${engine}.gguf`,
+ config: { ttsEngine: engine },
+ modelType: 'tts-ggml'
+ })
+}
+
+async function drain(op: AsyncGenerator) {
+ let result = await op.next()
+ while (!result.done) result = await op.next()
+ return result.value
+}
+
+function duplex(request: Record, text: string) {
+ return textToSpeechStream(
+ { type: 'textToSpeechStream', inputType: 'text', ...request } as never,
+ (async function* () {
+ yield Buffer.from(text)
+ })()
+ )
+}
+
+// A loopback server that accepts the reference download and never answers it,
+// which parks the op in the fetch for as long as a test needs. `requested`
+// settles once the download has reached the server, so a test cancels at a
+// known point instead of racing the op.
+async function startStalledServer() {
+ let onRequest!: () => void
+ const requested = new Promise((resolve) => {
+ onRequest = resolve
+ })
+ const sockets = new Set<{ destroy: () => void }>()
+ const server = http.createServer(() => onRequest())
+ server.on('connection', (socket: { destroy: () => void }) => sockets.add(socket))
+ await new Promise((resolve) => server.listen(0, '127.0.0.1', () => resolve()))
+ const { port } = server.address()!
+ return {
+ url: `http://127.0.0.1:${port}/someone-else.wav`,
+ requested,
+ close: async () => {
+ for (const socket of sockets) socket.destroy()
+ await new Promise((resolve) => server.close(() => resolve()))
+ }
+ }
+}
+
+async function withTimeout(work: Promise, ms: number, message: string): Promise {
+ let timer: ReturnType
+ const expiry = new Promise((_resolve, reject) => {
+ timer = setTimeout(() => reject(new Error(message)), ms)
+ })
+ try {
+ return await Promise.race([work, expiry])
+ } finally {
+ clearTimeout(timer!)
+ }
+}
+
+test('CosyVoice3: a per-request instruct reaches run(), runStream() and runStreaming()', async (t) => {
+ const calls: unknown[] = []
+ register('cosyvoice3-instruct', 'cosyvoice3', calls)
+ try {
+ await drain(
+ textToSpeech({
+ type: 'textToSpeech',
+ modelId: 'cosyvoice3-instruct',
+ inputType: 'text',
+ text: 'Hello there.',
+ stream: false,
+ sentenceStream: false,
+ instruct: { dialect: 'cantonese' }
+ })
+ )
+ t.alike(calls[0], {
+ input: 'Hello there.',
+ type: 'text',
+ instruct: { dialect: 'cantonese' }
+ })
+
+ await drain(
+ textToSpeech({
+ type: 'textToSpeech',
+ modelId: 'cosyvoice3-instruct',
+ inputType: 'text',
+ text: 'Hello there.',
+ stream: true,
+ sentenceStream: true,
+ instruct: '请用四川话表达。'
+ })
+ )
+ t.alike(calls[1], {
+ text: 'Hello there.',
+ options: { instruct: '请用四川话表达。' }
+ })
+
+ await drain(duplex({ modelId: 'cosyvoice3-instruct', instruct: { volume: 'soft' } }, 'Hi.'))
+ t.alike(calls[2], { text: 'Hi.', options: { instruct: { volume: 'soft' } } })
+ } finally {
+ unregisterModel('cosyvoice3-instruct')
+ }
+})
+
+test('CosyVoice3: a request without voice fields forwards no voice keys', async (t) => {
+ const calls: unknown[] = []
+ register('cosyvoice3-plain', 'cosyvoice3', calls)
+ try {
+ await drain(
+ textToSpeech({
+ type: 'textToSpeech',
+ modelId: 'cosyvoice3-plain',
+ inputType: 'text',
+ text: 'Hello there.',
+ stream: false,
+ sentenceStream: false
+ })
+ )
+ // No explicit-undefined keys: the addon's exactOptionalPropertyTypes
+ // typing and its "engine X does not take Y" checks read key presence.
+ t.alike(Object.keys(calls[0] as object).sort(), ['input', 'type'])
+ } finally {
+ unregisterModel('cosyvoice3-plain')
+ }
+})
+
+test('Audio8: the per-request reference pair is resolved to a path and forwarded', async (t) => {
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'tts-voice-options-'))
+ const reference = path.join(dir, 'someone-else.wav')
+ fs.writeFileSync(reference, Buffer.from('RIFF'))
+ const calls: unknown[] = []
+ register('audio8-voice', 'audio8', calls)
+ try {
+ await drain(
+ textToSpeech({
+ type: 'textToSpeech',
+ modelId: 'audio8-voice',
+ inputType: 'text',
+ text: 'Spoken in another voice.',
+ stream: false,
+ sentenceStream: false,
+ referenceAudioSrc: reference,
+ referenceText: 'What that recording says.'
+ })
+ )
+ t.alike(calls[0], {
+ input: 'Spoken in another voice.',
+ type: 'text',
+ referenceAudio: reference,
+ referenceText: 'What that recording says.'
+ })
+
+ // A transcript alone corrects the loaded recording's transcript.
+ await drain(duplex({ modelId: 'audio8-voice', referenceText: 'Corrected transcript.' }, 'Hi.'))
+ t.alike(calls[1], { text: 'Hi.', options: { referenceText: 'Corrected transcript.' } })
+ } finally {
+ unregisterModel('audio8-voice')
+ fs.rmSync(dir, { recursive: true, force: true })
+ }
+})
+
+test('per-request instruct is rejected on engines other than CosyVoice3', async (t) => {
+ const calls: unknown[] = []
+ register('chatterbox-instruct', 'chatterbox', calls)
+ try {
+ await t.exception(
+ drain(
+ textToSpeech({
+ type: 'textToSpeech',
+ modelId: 'chatterbox-instruct',
+ inputType: 'text',
+ text: 'Hello.',
+ stream: false,
+ sentenceStream: false,
+ instruct: 'speak softly'
+ })
+ ),
+ /CosyVoice3/
+ )
+ await t.exception(
+ drain(duplex({ modelId: 'chatterbox-instruct', instruct: 'speak softly' }, 'Hello.')),
+ /CosyVoice3/
+ )
+ t.is(calls.length, 0, 'nothing reached the engine')
+ } finally {
+ unregisterModel('chatterbox-instruct')
+ }
+})
+
+test('per-request referenceText is rejected on engines other than Audio8', async (t) => {
+ const calls: unknown[] = []
+ register('cosyvoice3-reference', 'cosyvoice3', calls)
+ try {
+ await t.exception(
+ drain(
+ textToSpeech({
+ type: 'textToSpeech',
+ modelId: 'cosyvoice3-reference',
+ inputType: 'text',
+ text: 'Hello.',
+ stream: false,
+ sentenceStream: false,
+ referenceText: 'a transcript'
+ })
+ ),
+ /Audio8/
+ )
+ t.is(calls.length, 0, 'nothing reached the engine')
+ } finally {
+ unregisterModel('cosyvoice3-reference')
+ }
+})
+
+// An uncached remote `referenceAudioSrc` downloads before the engine is asked
+// for anything. That wait is part of the request: it has to be in the registry
+// for `cancel({ modelId })` to find it, and the transfer has to be bound to it
+// for either cancel to stop the fetch rather than be followed by synthesis.
+test('Audio8: a model-scoped cancel stops the reference download before any synthesis', async (t) => {
+ useTestCacheDir()
+ const modelId = 'audio8-reference-cancel'
+ const requestId = 'req-reference-cancel'
+ const server = await startStalledServer()
+ const calls: unknown[] = []
+ register(modelId, 'audio8', calls)
+ t.teardown(async () => {
+ unregisterModel(modelId)
+ await server.close()
+ })
+
+ const pending = drain(
+ textToSpeech({
+ type: 'textToSpeech',
+ modelId,
+ requestId,
+ inputType: 'text',
+ text: 'Spoken in another voice.',
+ stream: false,
+ sentenceStream: false,
+ referenceAudioSrc: server.url,
+ referenceText: 'What that recording says.'
+ })
+ )
+ await withTimeout(server.requested, 5000, 'the reference download never reached the server')
+
+ t.is(
+ getRequestRegistry().cancel({ modelId }),
+ 1,
+ 'the request is registered while its reference recording downloads'
+ )
+ const result = await withTimeout(pending, 5000, 'the cancel did not stop the download')
+ t.is(result.cancelled, true, 'the op reports the cancellation')
+ t.is(calls.length, 0, 'nothing reached the engine')
+ t.is(getRequestRegistry().get(requestId), null, 'the model slot is released')
+})
+
+test('Audio8: cancelling by requestId stops a duplex session still fetching its reference', async (t) => {
+ useTestCacheDir()
+ const modelId = 'audio8-reference-cancel-duplex'
+ const requestId = 'req-reference-cancel-duplex'
+ const server = await startStalledServer()
+ const calls: unknown[] = []
+ register(modelId, 'audio8', calls)
+ t.teardown(async () => {
+ unregisterModel(modelId)
+ await server.close()
+ })
+
+ const pending = drain(
+ duplex(
+ {
+ modelId,
+ requestId,
+ referenceAudioSrc: server.url,
+ referenceText: 'What that recording says.'
+ },
+ 'Hi.'
+ )
+ )
+ await withTimeout(server.requested, 5000, 'the reference download never reached the server')
+
+ t.is(getRequestRegistry().cancel({ requestId }), 1, 'the request is addressable by its id')
+ const result = await withTimeout(pending, 5000, 'the cancel did not stop the download')
+ t.is(result.cancelled, true, 'the op reports the cancellation')
+ t.is(calls.length, 0, 'nothing reached the engine')
+ t.is(getRequestRegistry().get(requestId), null, 'the model slot is released')
+})
+
+// Fires `onTouch` the moment the source resolver checks `target` on disk, then
+// lets the check succeed: a cancel that lands while a cached reference is being
+// resolved, at a known point instead of racing the op.
+function whenResolverTouches(target: string, onTouch: () => void) {
+ const promises = fs.promises as unknown as {
+ access: (file: string, ...rest: unknown[]) => Promise
+ }
+ const original = promises.access
+ let touched = false
+ promises.access = async function (file: string, ...rest: unknown[]) {
+ if (!touched && file === target) {
+ touched = true
+ onTouch()
+ }
+ return original.call(promises, file, ...rest)
+ }
+ return {
+ wasTouched: () => touched,
+ restore: () => {
+ promises.access = original
+ }
+ }
+}
+
+// A `referenceAudioSrc` naming a file already in the cache resolves through a
+// file check that no abort signal interrupts, so a cancel during that wait
+// leaves the resolution successful. The op's abort listener has by then spent
+// its once-only `model.cancel()` on a model with no job, so the request must
+// stop here rather than start one.
+for (const entry of ['textToSpeech', 'textToSpeechStream'] as const) {
+ test(`Audio8 ${entry}: a cancel while a cached reference resolves starts no synthesis`, async (t) => {
+ useTestCacheDir()
+ const modelId = `audio8-reference-resolved-cancel-${entry}`
+ const requestId = `req-reference-resolved-cancel-${entry}`
+ // A bare filename is looked up in the models cache.
+ const reference = `someone-else-${entry}.wav`
+ const cached = path.join(getModelsCacheDir(), reference)
+ fs.mkdirSync(path.dirname(cached), { recursive: true })
+ fs.writeFileSync(cached, Buffer.from('RIFF'))
+ const calls: unknown[] = []
+ register(modelId, 'audio8', calls)
+ let cancelled = 0
+ const hook = whenResolverTouches(cached, () => {
+ cancelled = getRequestRegistry().cancel({ requestId })
+ })
+ t.teardown(() => {
+ hook.restore()
+ unregisterModel(modelId)
+ fs.rmSync(cached, { force: true })
+ })
+
+ const voice = { referenceAudioSrc: reference, referenceText: 'What that recording says.' }
+ const op =
+ entry === 'textToSpeech'
+ ? textToSpeech({
+ type: 'textToSpeech',
+ modelId,
+ requestId,
+ inputType: 'text',
+ text: 'Spoken in another voice.',
+ stream: false,
+ sentenceStream: false,
+ ...voice
+ })
+ : duplex({ modelId, requestId, ...voice }, 'Hi.')
+ const result = await withTimeout(drain(op), 5000, 'the cancelled request never settled')
+
+ t.ok(hook.wasTouched(), 'the reference was resolved from the cache')
+ t.is(cancelled, 1, 'the cancel landed on the registered request during the resolution')
+ t.is(result.cancelled, true, 'the op reports the cancellation')
+ t.is(calls.length, 0, 'nothing reached the engine')
+ t.is(getRequestRegistry().get(requestId), null, 'the model slot is released')
+ })
+}
diff --git a/packages/sdk-kotlin/src/commonMain/kotlin/io/tether/qvac/sdk/generated/schema/SchemaTypes.kt b/packages/sdk-kotlin/src/commonMain/kotlin/io/tether/qvac/sdk/generated/schema/SchemaTypes.kt
index 6ed176b3cb7..1f78b6a8db6 100644
--- a/packages/sdk-kotlin/src/commonMain/kotlin/io/tether/qvac/sdk/generated/schema/SchemaTypes.kt
+++ b/packages/sdk-kotlin/src/commonMain/kotlin/io/tether/qvac/sdk/generated/schema/SchemaTypes.kt
@@ -82,7 +82,7 @@ internal object AnyRequestSerializer : KSerializer {
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"type\":\"string\"},\"type\":{\"type\":\"string\",\"const\":\"getModelInfo\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"sample\":{\"type\":\"boolean\"},\"type\":{\"type\":\"string\",\"const\":\"getSystemResources\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"heartbeat\"}}}").jsonObject,
- Json.parseToJsonElement("{\"anyOf\":[{\"anyOf\":[{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-completion\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"ctx_size\":{\"type\":\"number\"},\"temp\":{\"type\":\"number\"},\"top_p\":{\"type\":\"number\"},\"top_k\":{\"type\":\"integer\"},\"seed\":{\"type\":\"number\"},\"gpu_layers\":{\"type\":\"number\"},\"lora\":{\"type\":\"string\"},\"device\":{\"type\":\"string\"},\"predict\":{\"anyOf\":[{\"type\":\"number\",\"const\":-1},{\"type\":\"number\",\"const\":-2},{\"type\":\"integer\"}]},\"system_prompt\":{\"type\":\"string\"},\"load_mode\":{\"type\":\"string\",\"enum\":[\"none\",\"mmap\",\"mlock\",\"mmap+mlock\",\"dio\"]},\"verbosity\":{\"type\":\"number\",\"enum\":[0,1,2,3]},\"presence_penalty\":{\"type\":\"number\"},\"frequency_penalty\":{\"type\":\"number\"},\"repeat_penalty\":{\"type\":\"number\"},\"stop_sequences\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"parallel\":{\"type\":\"integer\"},\"tools\":{\"type\":\"boolean\"},\"cache_checkpoints\":{\"type\":\"integer\"},\"cache_checkpoints_max_bytes\":{\"type\":\"integer\"},\"cache_checkpoint_storage\":{\"type\":\"string\",\"enum\":[\"memory\",\"disk\"]},\"cache_checkpoint_dir\":{\"type\":\"string\"},\"cache_share_across_keys\":{\"type\":\"boolean\"},\"cache_ram_mib\":{\"type\":\"integer\"},\"cache-type-k\":{\"type\":\"string\"},\"cache-type-v\":{\"type\":\"string\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"rpc-servers\":{\"type\":\"string\"},\"devices\":{\"type\":\"string\"},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\",\"tensor\"]},\"flash-attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"tensor-split\":{\"type\":\"string\"},\"batch-size\":{\"type\":\"integer\"},\"ubatch-size\":{\"type\":\"integer\"},\"cpu-moe\":{\"type\":\"boolean\"},\"n-cpu-moe\":{\"type\":\"integer\"},\"kv-offload\":{\"type\":\"boolean\"},\"image-max-tokens\":{\"type\":\"integer\"},\"image-min-tokens\":{\"type\":\"integer\"},\"image-max-megapixels\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"cpu-mask\":{\"type\":\"string\"},\"cpu-mask-batch\":{\"type\":\"string\"},\"override-tensor\":{\"type\":\"string\"},\"n-cpu-ffn\":{\"type\":\"integer\"},\"moe-cache-mib\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"const\":\"auto\"}]},\"prefetch-weights\":{\"anyOf\":[{\"type\":\"boolean\"},{\"type\":\"string\",\"const\":\"auto\"}]},\"tensor-read-lazy\":{\"type\":\"string\",\"enum\":[\"on\",\"auto\",\"off\"]},\"fit\":{\"type\":\"boolean\"},\"fit-target\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\"}]},\"fit-ctx\":{\"type\":\"integer\"},\"openclCacheDir\":{\"type\":\"string\"},\"reasoning_budget\":{\"type\":\"integer\"},\"spec_type\":{\"type\":\"string\",\"enum\":[\"none\",\"draft-mtp\",\"draft-dflash\"]},\"spec_draft_n_max\":{\"type\":\"integer\"},\"spec_draft_n_min\":{\"type\":\"integer\"},\"spec_draft_p_min\":{\"type\":\"number\"},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"draftModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"image_tile_mode\":{\"type\":\"string\",\"enum\":[\"disabled\",\"batched\",\"sequential\"]},\"image_no_upscale\":{\"type\":\"string\",\"enum\":[\"on\",\"off\"]},\"mmproj-use-gpu\":{\"type\":\"boolean\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"whispercpp-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"strategy\":{\"type\":\"string\",\"enum\":[\"greedy\",\"beam_search\"]},\"n_threads\":{\"type\":\"integer\"},\"n_max_text_ctx\":{\"type\":\"integer\"},\"offset_ms\":{\"type\":\"integer\"},\"duration_ms\":{\"type\":\"integer\"},\"audio_ctx\":{\"type\":\"integer\"},\"translate\":{\"type\":\"boolean\"},\"no_context\":{\"type\":\"boolean\"},\"no_timestamps\":{\"type\":\"boolean\"},\"single_segment\":{\"type\":\"boolean\"},\"print_special\":{\"type\":\"boolean\"},\"print_progress\":{\"type\":\"boolean\"},\"print_realtime\":{\"type\":\"boolean\"},\"print_timestamps\":{\"type\":\"boolean\"},\"token_timestamps\":{\"type\":\"boolean\"},\"thold_pt\":{\"type\":\"number\"},\"thold_ptsum\":{\"type\":\"number\"},\"max_len\":{\"type\":\"integer\"},\"split_on_word\":{\"type\":\"boolean\"},\"max_tokens\":{\"type\":\"integer\"},\"debug_mode\":{\"type\":\"boolean\"},\"tdrz_enable\":{\"type\":\"boolean\"},\"suppress_regex\":{\"type\":\"string\"},\"initial_prompt\":{\"type\":\"string\"},\"carry_initial_prompt\":{\"type\":\"boolean\"},\"language\":{\"type\":\"string\"},\"detect_language\":{\"type\":\"boolean\"},\"suppress_blank\":{\"type\":\"boolean\"},\"suppress_nst\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"length_penalty\":{\"type\":\"number\"},\"temperature_inc\":{\"type\":\"number\"},\"entropy_thold\":{\"type\":\"number\"},\"logprob_thold\":{\"type\":\"number\"},\"greedy_best_of\":{\"type\":\"integer\"},\"beam_search_beam_size\":{\"type\":\"integer\"},\"max_initial_ts\":{\"type\":\"number\"},\"no_speech_thold\":{\"type\":\"number\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"vad_params\":{\"type\":\"object\"},\"audio_format\":{\"type\":\"string\",\"enum\":[\"f32le\",\"s16le\"]},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"vadModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"bci-whispercpp-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"whisperConfig\":{\"type\":\"object\"},\"bciConfig\":{\"type\":\"object\"},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"backendsDir\":{\"type\":\"string\"},\"embedderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"parakeet-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"maxThreads\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"sampleRate\":{\"type\":\"integer\"},\"channels\":{\"type\":\"integer\"},\"captionEnabled\":{\"type\":\"boolean\"},\"timestampsEnabled\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"integer\"},\"streaming\":{\"type\":\"boolean\"},\"streamingChunkMs\":{\"type\":\"integer\"},\"streamingHistoryMs\":{\"type\":\"integer\"},\"streamingEmitPartials\":{\"type\":\"boolean\"},\"streamingEnergyVad\":{\"type\":\"boolean\"},\"streamingEnergyVadThresholdDb\":{\"type\":\"number\"},\"streamingEnergyVadWindowMs\":{\"type\":\"integer\"},\"streamingEnergyVadHangoverMs\":{\"type\":\"integer\"},\"streamingLeftContextMs\":{\"type\":\"integer\"},\"streamingRightLookaheadMs\":{\"type\":\"integer\"},\"language\":{\"type\":\"string\"},\"streamingSpeakerVad\":{\"type\":\"boolean\"},\"diarizationThreshold\":{\"type\":\"number\"},\"diarizationMinSegmentMs\":{\"type\":\"integer\"},\"streamingSpkCacheEnable\":{\"type\":\"boolean\"},\"streamingSpkCacheLen\":{\"type\":\"integer\"},\"streamingFifoLen\":{\"type\":\"integer\"},\"streamingChunkLeftContextMs\":{\"type\":\"integer\"},\"streamingChunkRightContextMs\":{\"type\":\"integer\"},\"streamingSpkCacheUpdatePeriod\":{\"type\":\"integer\"},\"prewarm\":{\"type\":\"boolean\"},\"prewarmAudioSeconds\":{\"type\":\"number\"},\"longFormWindowFrames\":{\"type\":\"integer\"},\"longFormContextFrames\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"parakeetEncoderSrc\":{},\"parakeetDecoderSrc\":{},\"parakeetVocabSrc\":{},\"parakeetPreprocessorSrc\":{},\"parakeetCtcModelSrc\":{},\"parakeetTokenizerSrc\":{},\"parakeetSortformerSrc\":{},\"parakeetModelSrc\":{},\"modelType\":{}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"moss-transcribe\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"maxThreads\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"backend\":{\"type\":\"string\"},\"backendsDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-embedding\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"ctxSize\":{\"type\":\"integer\"},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"imageMaxTokens\":{\"type\":\"integer\"},\"imageMinTokens\":{\"type\":\"integer\"},\"mmprojNoAudio\":{\"type\":\"boolean\"},\"mmprojUseGpu\":{\"type\":\"boolean\"},\"imageMaxMegapixels\":{\"type\":\"integer\"},\"audioMaxSeconds\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"gpuLayers\":{\"type\":\"integer\"},\"device\":{\"type\":\"string\",\"enum\":[\"gpu\",\"cpu\"]},\"batchSize\":{\"type\":\"integer\"},\"pooling\":{\"type\":\"string\",\"enum\":[\"none\",\"mean\",\"cls\",\"last\"]},\"attention\":{\"type\":\"string\",\"enum\":[\"causal\",\"non-causal\"]},\"embdNormalize\":{\"type\":\"integer\"},\"flashAttention\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"mainGpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"splitMode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensorSplit\":{\"type\":\"string\"},\"verbosity\":{\"type\":\"number\",\"enum\":[0,1,2,3]},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-decision\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"gpu_layers\":{\"type\":\"integer\"},\"batch_size\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"flash_attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"verbosity\":{\"type\":\"integer\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensor-split\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-rerank\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"gpu_layers\":{\"type\":\"integer\"},\"batch_size\":{\"type\":\"integer\"},\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"flash_attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"verbosity\":{\"type\":\"integer\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensor-split\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"nmtcpp-translation\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"engine\",\"from\",\"to\"],\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"full\"]},\"beamsize\":{\"type\":\"number\"},\"lengthpenalty\":{\"type\":\"number\"},\"maxlength\":{\"type\":\"number\"},\"repetitionpenalty\":{\"type\":\"number\"},\"norepeatngramsize\":{\"type\":\"number\"},\"temperature\":{\"type\":\"number\"},\"topk\":{\"type\":\"number\"},\"topp\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\",\"const\":\"Bergamot\"},\"from\":{\"type\":\"string\",\"enum\":[\"en\",\"ar\",\"bg\",\"ca\",\"cs\",\"de\",\"es\",\"et\",\"fi\",\"fr\",\"hu\",\"is\",\"it\",\"ja\",\"ko\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ru\",\"sk\",\"sl\",\"uk\",\"zh\",\"az\",\"be\",\"bn\",\"bs\",\"da\",\"el\",\"fa\",\"gu\",\"he\",\"hi\",\"hr\",\"id\",\"kn\",\"ml\",\"ms\",\"mt\",\"nb\",\"nn\",\"no\",\"re\",\"ro\",\"sq\",\"sr\",\"sv\",\"ta\",\"te\",\"th\",\"tr\",\"vi\"]},\"to\":{\"type\":\"string\",\"enum\":[\"en\",\"ar\",\"bg\",\"ca\",\"cs\",\"de\",\"es\",\"et\",\"fi\",\"fr\",\"hu\",\"is\",\"it\",\"ja\",\"ko\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ru\",\"sk\",\"sl\",\"uk\",\"zh\",\"az\",\"be\",\"bn\",\"bs\",\"da\",\"el\",\"fa\",\"gu\",\"he\",\"hi\",\"hr\",\"id\",\"kn\",\"ml\",\"ms\",\"mt\",\"nb\",\"nn\",\"no\",\"re\",\"ro\",\"sq\",\"sr\",\"sv\",\"ta\",\"te\",\"th\",\"tr\",\"vi\"]},\"srcVocabSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dstVocabSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"normalize\":{\"type\":\"number\"},\"pivotModel\":{\"type\":\"object\",\"required\":[\"modelSrc\"]}}},{\"type\":\"object\",\"required\":[\"engine\",\"from\",\"to\"],\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"full\"]},\"beamsize\":{\"type\":\"number\"},\"lengthpenalty\":{\"type\":\"number\"},\"maxlength\":{\"type\":\"number\"},\"repetitionpenalty\":{\"type\":\"number\"},\"norepeatngramsize\":{\"type\":\"number\"},\"temperature\":{\"type\":\"number\"},\"topk\":{\"type\":\"number\"},\"topp\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\",\"const\":\"IndicTrans\"},\"from\":{\"type\":\"string\",\"enum\":[\"asm_Beng\",\"ben_Beng\",\"brx_Deva\",\"doi_Deva\",\"eng_Latn\",\"gom_Deva\",\"guj_Gujr\",\"hin_Deva\",\"kan_Knda\",\"kas_Arab\",\"kas_Deva\",\"mai_Deva\",\"mal_Mlym\",\"mar_Deva\",\"mni_Beng\",\"mni_Mtei\",\"npi_Deva\",\"ory_Orya\",\"pan_Guru\",\"san_Deva\",\"sat_Olck\",\"snd_Arab\",\"snd_Deva\",\"tam_Taml\",\"tel_Telu\",\"urd_Arab\"]},\"to\":{\"type\":\"string\",\"enum\":[\"asm_Beng\",\"ben_Beng\",\"brx_Deva\",\"doi_Deva\",\"eng_Latn\",\"gom_Deva\",\"guj_Gujr\",\"hin_Deva\",\"kan_Knda\",\"kas_Arab\",\"kas_Deva\",\"mai_Deva\",\"mal_Mlym\",\"mar_Deva\",\"mni_Beng\",\"mni_Mtei\",\"npi_Deva\",\"ory_Orya\",\"pan_Guru\",\"san_Deva\",\"sat_Olck\",\"snd_Arab\",\"snd_Deva\",\"tam_Taml\",\"tel_Telu\",\"urd_Arab\"]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"tts-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"chatterbox\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"es\",\"fr\",\"de\",\"it\",\"ja\",\"pt\",\"nl\",\"pl\",\"tr\",\"sv\",\"da\",\"fi\",\"no\",\"el\",\"ms\",\"sw\",\"ar\",\"ko\",\"he\",\"ru\",\"zh\",\"hi\"]},\"voice\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"ttsSpeed\":{\"type\":\"number\"},\"nCtx\":{\"type\":\"integer\"},\"kvCacheType\":{\"type\":\"string\",\"enum\":[\"f32\",\"f16\",\"q8_0\"]},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"cfmSteps\":{\"type\":\"integer\"},\"cfgRate\":{\"type\":\"number\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"s3genModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mecabDictSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cangjieTsvSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"supertonic\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"ko\",\"ja\",\"ar\",\"bg\",\"cs\",\"da\",\"de\",\"el\",\"es\",\"et\",\"fi\",\"fr\",\"hi\",\"hr\",\"hu\",\"id\",\"it\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ro\",\"ru\",\"sk\",\"sl\",\"sv\",\"tr\",\"uk\",\"vi\"]},\"voice\":{\"type\":\"string\"},\"ttsSpeed\":{\"type\":\"number\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"ttsNumInferenceSteps\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"vulkanCacheDir\":{\"type\":\"string\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"parler\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"anyOf\":[{\"type\":\"number\",\"const\":0},{\"type\":\"integer\"}]},\"minNewTokens\":{\"type\":\"integer\"},\"normalizeNumbers\":{\"type\":\"boolean\"},\"backendsDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"cosyvoice3\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"anger\",\"happy\",\"neutral\",\"sad\"]},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"instruct\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"promptText\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3S3tokModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3CampplusModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"audio8CodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"audio8\"},\"referenceText\":{\"type\":\"string\"},\"greedy\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"audio8CodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audio8CodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossCodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss\"},\"language\":{\"type\":\"string\"},\"durationTokens\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossCodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mossCodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dialogueReferenceSrcs\":{\"type\":\"array\",\"items\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-sfx\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"seconds\":{\"type\":\"number\"},\"negativePrompt\":{\"type\":\"string\"},\"steps\":{\"type\":\"integer\"},\"guidance\":{\"type\":\"number\"},\"shift\":{\"type\":\"number\"}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossSpeechCodecModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-speech\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossSpeechCodecModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-ocr\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"langList\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"pipelineType\":{\"type\":\"string\",\"enum\":[\"easyocr\",\"doctr\"]},\"magRatio\":{\"type\":\"number\"},\"canvasSize\":{\"type\":\"number\"},\"defaultRotationAngles\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"contrastRetry\":{\"type\":\"boolean\"},\"lowConfidenceThreshold\":{\"type\":\"number\"},\"recognizerBatchSize\":{\"type\":\"number\"},\"nThreads\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"string\",\"enum\":[\"cpu\",\"vulkan\",\"metal\",\"opencl\"]},\"gpuDevice\":{\"type\":\"number\"},\"mainGpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"detectorModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"sdcpp-generation\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"diffusion\",\"upscale\",\"video\",\"world\"]},\"threads\":{\"type\":\"number\"},\"device\":{\"type\":\"string\",\"enum\":[\"gpu\",\"cpu\"]},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"prediction\":{\"type\":\"string\",\"enum\":[\"auto\",\"eps\",\"v\",\"edm_v\",\"flow\",\"flux2_flow\"]},\"type\":{\"type\":\"string\",\"enum\":[\"auto\",\"f32\",\"f16\",\"bf16\",\"q2_k\",\"q3_k\",\"q4_0\",\"q4_1\",\"q4_k\",\"q5_0\",\"q5_1\",\"q5_k\",\"q6_k\",\"q8_0\"]},\"rng\":{\"type\":\"string\",\"enum\":[\"cpu\",\"cuda\",\"std_default\"]},\"sampler_rng\":{\"type\":\"string\",\"enum\":[\"cpu\",\"cuda\",\"std_default\"]},\"vae_auto_cpu_fallback\":{\"type\":\"boolean\"},\"vae_auto_cpu_fallback_memory_ratio\":{\"type\":\"number\"},\"vae_tiling\":{\"type\":\"boolean\"},\"offload_to_cpu\":{\"type\":\"boolean\"},\"control_net_cpu\":{\"not\":{}},\"clip_on_cpu\":{\"not\":{}},\"vae_on_cpu\":{\"not\":{}},\"backend\":{\"type\":\"string\"},\"params_backend\":{\"type\":\"string\"},\"max_vram\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"stream_layers\":{\"type\":\"boolean\"},\"flash_attn\":{\"type\":\"boolean\"},\"diffusion_fa\":{\"type\":\"boolean\"},\"lora_apply_mode\":{\"type\":\"string\",\"enum\":[\"auto\",\"immediately\",\"at_runtime\"]},\"verbosity\":{\"type\":\"number\"},\"clipLModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"clipGModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"t5XxlModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"llmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"vaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"highNoiseDiffusionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"uncondModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"clipVisionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audioVaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"embeddingsConnectorsModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"taehvModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"sceneSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"world\":{\"type\":\"object\"},\"upscaler\":{\"type\":\"object\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"audiogen-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"textEncModelSrc\",\"lmModelSrc\",\"ditModelSrc\",\"vaeModelSrc\"],\"properties\":{\"engine\":{\"type\":\"string\",\"const\":\"acestep\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"inferenceSteps\":{\"type\":\"integer\"},\"shift\":{\"type\":\"number\"},\"nGpuLayers\":{\"type\":\"integer\"},\"textEncModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ditModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"vaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"engine\",\"lmModelSrc\",\"synthModelSrc\"],\"properties\":{\"engine\":{\"type\":\"string\",\"const\":\"minimax\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\",\"auto\"]},\"coremlProfileDir\":{\"type\":\"string\"},\"coremlComputeUnits\":{\"type\":\"string\",\"enum\":[\"CPU_ONLY\",\"CPU_AND_GPU\",\"CPU_AND_NE\",\"ALL\"]},\"inferenceSteps\":{\"type\":\"integer\"},\"cfgScale\":{\"type\":\"number\"},\"lmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"synthModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-vla\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"auto\",\"cpu\",\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"hip\",\"rocm\",\"sycl\"]}},\"verbosity\":{\"type\":\"integer\"},\"embodiment\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"integer\"},{\"type\":\"object\"}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-classification\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"modelPath\":{\"type\":\"string\"},\"topK\":{\"type\":\"integer\"},\"nativeLogger\":{\"type\":\"boolean\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\"},\"modelConfig\":{\"type\":\"object\"}}}]},{\"type\":\"object\",\"required\":[\"type\",\"modelId\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelId\":{\"type\":\"string\"},\"modelSrc\":{\"not\":{}},\"withProgress\":{\"not\":{}},\"seed\":{\"not\":{}},\"modelType\":{\"type\":\"string\",\"enum\":[\"whisper\",\"whispercpp-transcription\"]},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"strategy\":{\"type\":\"string\",\"enum\":[\"greedy\",\"beam_search\"]},\"n_threads\":{\"type\":\"integer\"},\"n_max_text_ctx\":{\"type\":\"integer\"},\"offset_ms\":{\"type\":\"integer\"},\"duration_ms\":{\"type\":\"integer\"},\"audio_ctx\":{\"type\":\"integer\"},\"translate\":{\"type\":\"boolean\"},\"no_context\":{\"type\":\"boolean\"},\"no_timestamps\":{\"type\":\"boolean\"},\"single_segment\":{\"type\":\"boolean\"},\"print_special\":{\"type\":\"boolean\"},\"print_progress\":{\"type\":\"boolean\"},\"print_realtime\":{\"type\":\"boolean\"},\"print_timestamps\":{\"type\":\"boolean\"},\"token_timestamps\":{\"type\":\"boolean\"},\"thold_pt\":{\"type\":\"number\"},\"thold_ptsum\":{\"type\":\"number\"},\"max_len\":{\"type\":\"integer\"},\"split_on_word\":{\"type\":\"boolean\"},\"max_tokens\":{\"type\":\"integer\"},\"debug_mode\":{\"type\":\"boolean\"},\"tdrz_enable\":{\"type\":\"boolean\"},\"suppress_regex\":{\"type\":\"string\"},\"initial_prompt\":{\"type\":\"string\"},\"carry_initial_prompt\":{\"type\":\"boolean\"},\"language\":{\"type\":\"string\"},\"detect_language\":{\"type\":\"boolean\"},\"suppress_blank\":{\"type\":\"boolean\"},\"suppress_nst\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"length_penalty\":{\"type\":\"number\"},\"temperature_inc\":{\"type\":\"number\"},\"entropy_thold\":{\"type\":\"number\"},\"logprob_thold\":{\"type\":\"number\"},\"greedy_best_of\":{\"type\":\"integer\"},\"beam_search_beam_size\":{\"type\":\"integer\"},\"max_initial_ts\":{\"type\":\"number\"},\"no_speech_thold\":{\"type\":\"number\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"vad_params\":{\"type\":\"object\"},\"audio_format\":{\"type\":\"string\",\"enum\":[\"f32le\",\"s16le\"]},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"vadModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}}]}").jsonObject,
+ Json.parseToJsonElement("{\"anyOf\":[{\"anyOf\":[{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-completion\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"ctx_size\":{\"type\":\"number\"},\"temp\":{\"type\":\"number\"},\"top_p\":{\"type\":\"number\"},\"top_k\":{\"type\":\"integer\"},\"seed\":{\"type\":\"number\"},\"gpu_layers\":{\"type\":\"number\"},\"lora\":{\"type\":\"string\"},\"device\":{\"type\":\"string\"},\"predict\":{\"anyOf\":[{\"type\":\"number\",\"const\":-1},{\"type\":\"number\",\"const\":-2},{\"type\":\"integer\"}]},\"system_prompt\":{\"type\":\"string\"},\"load_mode\":{\"type\":\"string\",\"enum\":[\"none\",\"mmap\",\"mlock\",\"mmap+mlock\",\"dio\"]},\"verbosity\":{\"type\":\"number\",\"enum\":[0,1,2,3]},\"presence_penalty\":{\"type\":\"number\"},\"frequency_penalty\":{\"type\":\"number\"},\"repeat_penalty\":{\"type\":\"number\"},\"stop_sequences\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"parallel\":{\"type\":\"integer\"},\"tools\":{\"type\":\"boolean\"},\"cache_checkpoints\":{\"type\":\"integer\"},\"cache_checkpoints_max_bytes\":{\"type\":\"integer\"},\"cache_checkpoint_storage\":{\"type\":\"string\",\"enum\":[\"memory\",\"disk\"]},\"cache_checkpoint_dir\":{\"type\":\"string\"},\"cache_share_across_keys\":{\"type\":\"boolean\"},\"cache_ram_mib\":{\"type\":\"integer\"},\"cache-type-k\":{\"type\":\"string\"},\"cache-type-v\":{\"type\":\"string\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"rpc-servers\":{\"type\":\"string\"},\"devices\":{\"type\":\"string\"},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\",\"tensor\"]},\"flash-attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"tensor-split\":{\"type\":\"string\"},\"batch-size\":{\"type\":\"integer\"},\"ubatch-size\":{\"type\":\"integer\"},\"cpu-moe\":{\"type\":\"boolean\"},\"n-cpu-moe\":{\"type\":\"integer\"},\"kv-offload\":{\"type\":\"boolean\"},\"image-max-tokens\":{\"type\":\"integer\"},\"image-min-tokens\":{\"type\":\"integer\"},\"image-max-megapixels\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"cpu-mask\":{\"type\":\"string\"},\"cpu-mask-batch\":{\"type\":\"string\"},\"override-tensor\":{\"type\":\"string\"},\"n-cpu-ffn\":{\"type\":\"integer\"},\"moe-cache-mib\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"const\":\"auto\"}]},\"prefetch-weights\":{\"anyOf\":[{\"type\":\"boolean\"},{\"type\":\"string\",\"const\":\"auto\"}]},\"tensor-read-lazy\":{\"type\":\"string\",\"enum\":[\"on\",\"auto\",\"off\"]},\"fit\":{\"type\":\"boolean\"},\"fit-target\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\"}]},\"fit-ctx\":{\"type\":\"integer\"},\"openclCacheDir\":{\"type\":\"string\"},\"reasoning_budget\":{\"type\":\"integer\"},\"spec_type\":{\"type\":\"string\",\"enum\":[\"none\",\"draft-mtp\",\"draft-dflash\"]},\"spec_draft_n_max\":{\"type\":\"integer\"},\"spec_draft_n_min\":{\"type\":\"integer\"},\"spec_draft_p_min\":{\"type\":\"number\"},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"draftModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"image_tile_mode\":{\"type\":\"string\",\"enum\":[\"disabled\",\"batched\",\"sequential\"]},\"image_no_upscale\":{\"type\":\"string\",\"enum\":[\"on\",\"off\"]},\"mmproj-use-gpu\":{\"type\":\"boolean\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"whispercpp-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"strategy\":{\"type\":\"string\",\"enum\":[\"greedy\",\"beam_search\"]},\"n_threads\":{\"type\":\"integer\"},\"n_max_text_ctx\":{\"type\":\"integer\"},\"offset_ms\":{\"type\":\"integer\"},\"duration_ms\":{\"type\":\"integer\"},\"audio_ctx\":{\"type\":\"integer\"},\"translate\":{\"type\":\"boolean\"},\"no_context\":{\"type\":\"boolean\"},\"no_timestamps\":{\"type\":\"boolean\"},\"single_segment\":{\"type\":\"boolean\"},\"print_special\":{\"type\":\"boolean\"},\"print_progress\":{\"type\":\"boolean\"},\"print_realtime\":{\"type\":\"boolean\"},\"print_timestamps\":{\"type\":\"boolean\"},\"token_timestamps\":{\"type\":\"boolean\"},\"thold_pt\":{\"type\":\"number\"},\"thold_ptsum\":{\"type\":\"number\"},\"max_len\":{\"type\":\"integer\"},\"split_on_word\":{\"type\":\"boolean\"},\"max_tokens\":{\"type\":\"integer\"},\"debug_mode\":{\"type\":\"boolean\"},\"tdrz_enable\":{\"type\":\"boolean\"},\"suppress_regex\":{\"type\":\"string\"},\"initial_prompt\":{\"type\":\"string\"},\"carry_initial_prompt\":{\"type\":\"boolean\"},\"language\":{\"type\":\"string\"},\"detect_language\":{\"type\":\"boolean\"},\"suppress_blank\":{\"type\":\"boolean\"},\"suppress_nst\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"length_penalty\":{\"type\":\"number\"},\"temperature_inc\":{\"type\":\"number\"},\"entropy_thold\":{\"type\":\"number\"},\"logprob_thold\":{\"type\":\"number\"},\"greedy_best_of\":{\"type\":\"integer\"},\"beam_search_beam_size\":{\"type\":\"integer\"},\"max_initial_ts\":{\"type\":\"number\"},\"no_speech_thold\":{\"type\":\"number\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"vad_params\":{\"type\":\"object\"},\"audio_format\":{\"type\":\"string\",\"enum\":[\"f32le\",\"s16le\"]},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"vadModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"bci-whispercpp-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"whisperConfig\":{\"type\":\"object\"},\"bciConfig\":{\"type\":\"object\"},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"backendsDir\":{\"type\":\"string\"},\"embedderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"parakeet-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"maxThreads\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"sampleRate\":{\"type\":\"integer\"},\"channels\":{\"type\":\"integer\"},\"captionEnabled\":{\"type\":\"boolean\"},\"timestampsEnabled\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"integer\"},\"streaming\":{\"type\":\"boolean\"},\"streamingChunkMs\":{\"type\":\"integer\"},\"streamingHistoryMs\":{\"type\":\"integer\"},\"streamingEmitPartials\":{\"type\":\"boolean\"},\"streamingEnergyVad\":{\"type\":\"boolean\"},\"streamingEnergyVadThresholdDb\":{\"type\":\"number\"},\"streamingEnergyVadWindowMs\":{\"type\":\"integer\"},\"streamingEnergyVadHangoverMs\":{\"type\":\"integer\"},\"streamingLeftContextMs\":{\"type\":\"integer\"},\"streamingRightLookaheadMs\":{\"type\":\"integer\"},\"language\":{\"type\":\"string\"},\"streamingSpeakerVad\":{\"type\":\"boolean\"},\"diarizationThreshold\":{\"type\":\"number\"},\"diarizationMinSegmentMs\":{\"type\":\"integer\"},\"streamingSpkCacheEnable\":{\"type\":\"boolean\"},\"streamingSpkCacheLen\":{\"type\":\"integer\"},\"streamingFifoLen\":{\"type\":\"integer\"},\"streamingChunkLeftContextMs\":{\"type\":\"integer\"},\"streamingChunkRightContextMs\":{\"type\":\"integer\"},\"streamingSpkCacheUpdatePeriod\":{\"type\":\"integer\"},\"prewarm\":{\"type\":\"boolean\"},\"prewarmAudioSeconds\":{\"type\":\"number\"},\"longFormWindowFrames\":{\"type\":\"integer\"},\"longFormContextFrames\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"parakeetEncoderSrc\":{},\"parakeetDecoderSrc\":{},\"parakeetVocabSrc\":{},\"parakeetPreprocessorSrc\":{},\"parakeetCtcModelSrc\":{},\"parakeetTokenizerSrc\":{},\"parakeetSortformerSrc\":{},\"parakeetModelSrc\":{},\"modelType\":{}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"moss-transcribe\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"maxThreads\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"backend\":{\"type\":\"string\"},\"backendsDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-embedding\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"ctxSize\":{\"type\":\"integer\"},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"imageMaxTokens\":{\"type\":\"integer\"},\"imageMinTokens\":{\"type\":\"integer\"},\"mmprojNoAudio\":{\"type\":\"boolean\"},\"mmprojUseGpu\":{\"type\":\"boolean\"},\"imageMaxMegapixels\":{\"type\":\"integer\"},\"audioMaxSeconds\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"gpuLayers\":{\"type\":\"integer\"},\"device\":{\"type\":\"string\",\"enum\":[\"gpu\",\"cpu\"]},\"batchSize\":{\"type\":\"integer\"},\"pooling\":{\"type\":\"string\",\"enum\":[\"none\",\"mean\",\"cls\",\"last\"]},\"attention\":{\"type\":\"string\",\"enum\":[\"causal\",\"non-causal\"]},\"embdNormalize\":{\"type\":\"integer\"},\"flashAttention\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"mainGpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"splitMode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensorSplit\":{\"type\":\"string\"},\"verbosity\":{\"type\":\"number\",\"enum\":[0,1,2,3]},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-decision\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"gpu_layers\":{\"type\":\"integer\"},\"batch_size\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"flash_attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"verbosity\":{\"type\":\"integer\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensor-split\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-rerank\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"gpu_layers\":{\"type\":\"integer\"},\"batch_size\":{\"type\":\"integer\"},\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"flash_attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"verbosity\":{\"type\":\"integer\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensor-split\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"nmtcpp-translation\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"engine\",\"from\",\"to\"],\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"full\"]},\"beamsize\":{\"type\":\"number\"},\"lengthpenalty\":{\"type\":\"number\"},\"maxlength\":{\"type\":\"number\"},\"repetitionpenalty\":{\"type\":\"number\"},\"norepeatngramsize\":{\"type\":\"number\"},\"temperature\":{\"type\":\"number\"},\"topk\":{\"type\":\"number\"},\"topp\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\",\"const\":\"Bergamot\"},\"from\":{\"type\":\"string\",\"enum\":[\"en\",\"ar\",\"bg\",\"ca\",\"cs\",\"de\",\"es\",\"et\",\"fi\",\"fr\",\"hu\",\"is\",\"it\",\"ja\",\"ko\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ru\",\"sk\",\"sl\",\"uk\",\"zh\",\"az\",\"be\",\"bn\",\"bs\",\"da\",\"el\",\"fa\",\"gu\",\"he\",\"hi\",\"hr\",\"id\",\"kn\",\"ml\",\"ms\",\"mt\",\"nb\",\"nn\",\"no\",\"re\",\"ro\",\"sq\",\"sr\",\"sv\",\"ta\",\"te\",\"th\",\"tr\",\"vi\"]},\"to\":{\"type\":\"string\",\"enum\":[\"en\",\"ar\",\"bg\",\"ca\",\"cs\",\"de\",\"es\",\"et\",\"fi\",\"fr\",\"hu\",\"is\",\"it\",\"ja\",\"ko\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ru\",\"sk\",\"sl\",\"uk\",\"zh\",\"az\",\"be\",\"bn\",\"bs\",\"da\",\"el\",\"fa\",\"gu\",\"he\",\"hi\",\"hr\",\"id\",\"kn\",\"ml\",\"ms\",\"mt\",\"nb\",\"nn\",\"no\",\"re\",\"ro\",\"sq\",\"sr\",\"sv\",\"ta\",\"te\",\"th\",\"tr\",\"vi\"]},\"srcVocabSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dstVocabSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"normalize\":{\"type\":\"number\"},\"pivotModel\":{\"type\":\"object\",\"required\":[\"modelSrc\"]}}},{\"type\":\"object\",\"required\":[\"engine\",\"from\",\"to\"],\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"full\"]},\"beamsize\":{\"type\":\"number\"},\"lengthpenalty\":{\"type\":\"number\"},\"maxlength\":{\"type\":\"number\"},\"repetitionpenalty\":{\"type\":\"number\"},\"norepeatngramsize\":{\"type\":\"number\"},\"temperature\":{\"type\":\"number\"},\"topk\":{\"type\":\"number\"},\"topp\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\",\"const\":\"IndicTrans\"},\"from\":{\"type\":\"string\",\"enum\":[\"asm_Beng\",\"ben_Beng\",\"brx_Deva\",\"doi_Deva\",\"eng_Latn\",\"gom_Deva\",\"guj_Gujr\",\"hin_Deva\",\"kan_Knda\",\"kas_Arab\",\"kas_Deva\",\"mai_Deva\",\"mal_Mlym\",\"mar_Deva\",\"mni_Beng\",\"mni_Mtei\",\"npi_Deva\",\"ory_Orya\",\"pan_Guru\",\"san_Deva\",\"sat_Olck\",\"snd_Arab\",\"snd_Deva\",\"tam_Taml\",\"tel_Telu\",\"urd_Arab\"]},\"to\":{\"type\":\"string\",\"enum\":[\"asm_Beng\",\"ben_Beng\",\"brx_Deva\",\"doi_Deva\",\"eng_Latn\",\"gom_Deva\",\"guj_Gujr\",\"hin_Deva\",\"kan_Knda\",\"kas_Arab\",\"kas_Deva\",\"mai_Deva\",\"mal_Mlym\",\"mar_Deva\",\"mni_Beng\",\"mni_Mtei\",\"npi_Deva\",\"ory_Orya\",\"pan_Guru\",\"san_Deva\",\"sat_Olck\",\"snd_Arab\",\"snd_Deva\",\"tam_Taml\",\"tel_Telu\",\"urd_Arab\"]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"tts-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"chatterbox\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"es\",\"fr\",\"de\",\"it\",\"ja\",\"pt\",\"nl\",\"pl\",\"tr\",\"sv\",\"da\",\"fi\",\"no\",\"el\",\"ms\",\"sw\",\"ar\",\"ko\",\"he\",\"ru\",\"zh\",\"hi\"]},\"voice\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"ttsSpeed\":{\"type\":\"number\"},\"nCtx\":{\"type\":\"integer\"},\"kvCacheType\":{\"type\":\"string\",\"enum\":[\"f32\",\"f16\",\"q8_0\"]},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"cfmSteps\":{\"type\":\"integer\"},\"cfgRate\":{\"type\":\"number\"},\"streamLeftContextTokens\":{\"type\":\"integer\"},\"batchCfmSteps\":{\"type\":\"integer\"},\"nPredict\":{\"type\":\"integer\"},\"maxSentenceChars\":{\"type\":\"integer\"},\"crossfadeMs\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"repeatPenalty\":{\"type\":\"number\"},\"exaggeration\":{\"type\":\"number\"},\"cfgWeight\":{\"type\":\"number\"},\"minP\":{\"type\":\"number\"},\"voiceDir\":{\"type\":\"string\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"s3genModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mecabDictSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cangjieTsvSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"supertonic\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"ko\",\"ja\",\"ar\",\"bg\",\"cs\",\"da\",\"de\",\"el\",\"es\",\"et\",\"fi\",\"fr\",\"hi\",\"hr\",\"hu\",\"id\",\"it\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ro\",\"ru\",\"sk\",\"sl\",\"sv\",\"tr\",\"uk\",\"vi\"]},\"voice\":{\"type\":\"string\"},\"ttsSpeed\":{\"type\":\"number\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"ttsNumInferenceSteps\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"vulkanCacheDir\":{\"type\":\"string\"},\"vulkanDevice\":{\"type\":\"integer\"},\"prewarmText\":{\"type\":\"string\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"streamChunkTolerancePct\":{\"type\":\"integer\"},\"streamMinChunkTokens\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"voiceJsonSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"noiseNpySrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"parler\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"anyOf\":[{\"type\":\"number\",\"const\":0},{\"type\":\"integer\"}]},\"minNewTokens\":{\"type\":\"integer\"},\"normalizeNumbers\":{\"type\":\"boolean\"},\"backendsDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"cosyvoice3\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"anger\",\"happy\",\"neutral\",\"sad\"]},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"instruct\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"promptText\":{\"type\":\"string\"},\"flowCutPrompt\":{\"type\":\"boolean\"},\"vulkanDevice\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3S3tokModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3CampplusModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"audio8CodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"audio8\"},\"referenceText\":{\"type\":\"string\"},\"greedy\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"audio8CodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audio8CodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossCodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss\"},\"language\":{\"type\":\"string\"},\"durationTokens\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossCodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mossCodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dialogueReferenceSrcs\":{\"type\":\"array\",\"items\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-sfx\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"seconds\":{\"type\":\"number\"},\"negativePrompt\":{\"type\":\"string\"},\"steps\":{\"type\":\"integer\"},\"guidance\":{\"type\":\"number\"},\"shift\":{\"type\":\"number\"}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossSpeechCodecModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-speech\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossSpeechCodecModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-ocr\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"langList\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"pipelineType\":{\"type\":\"string\",\"enum\":[\"easyocr\",\"doctr\"]},\"magRatio\":{\"type\":\"number\"},\"canvasSize\":{\"type\":\"number\"},\"defaultRotationAngles\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"contrastRetry\":{\"type\":\"boolean\"},\"lowConfidenceThreshold\":{\"type\":\"number\"},\"recognizerBatchSize\":{\"type\":\"number\"},\"nThreads\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"string\",\"enum\":[\"cpu\",\"vulkan\",\"metal\",\"opencl\"]},\"gpuDevice\":{\"type\":\"number\"},\"mainGpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"detectorModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"sdcpp-generation\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"diffusion\",\"upscale\",\"video\",\"world\"]},\"threads\":{\"type\":\"number\"},\"device\":{\"type\":\"string\",\"enum\":[\"gpu\",\"cpu\"]},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"prediction\":{\"type\":\"string\",\"enum\":[\"auto\",\"eps\",\"v\",\"edm_v\",\"flow\",\"flux2_flow\"]},\"type\":{\"type\":\"string\",\"enum\":[\"auto\",\"f32\",\"f16\",\"bf16\",\"q2_k\",\"q3_k\",\"q4_0\",\"q4_1\",\"q4_k\",\"q5_0\",\"q5_1\",\"q5_k\",\"q6_k\",\"q8_0\"]},\"rng\":{\"type\":\"string\",\"enum\":[\"cpu\",\"cuda\",\"std_default\"]},\"sampler_rng\":{\"type\":\"string\",\"enum\":[\"cpu\",\"cuda\",\"std_default\"]},\"vae_auto_cpu_fallback\":{\"type\":\"boolean\"},\"vae_auto_cpu_fallback_memory_ratio\":{\"type\":\"number\"},\"vae_tiling\":{\"type\":\"boolean\"},\"offload_to_cpu\":{\"type\":\"boolean\"},\"control_net_cpu\":{\"not\":{}},\"clip_on_cpu\":{\"not\":{}},\"vae_on_cpu\":{\"not\":{}},\"backend\":{\"type\":\"string\"},\"params_backend\":{\"type\":\"string\"},\"max_vram\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"stream_layers\":{\"type\":\"boolean\"},\"flash_attn\":{\"type\":\"boolean\"},\"diffusion_fa\":{\"type\":\"boolean\"},\"lora_apply_mode\":{\"type\":\"string\",\"enum\":[\"auto\",\"immediately\",\"at_runtime\"]},\"verbosity\":{\"type\":\"number\"},\"clipLModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"clipGModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"t5XxlModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"llmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"vaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"highNoiseDiffusionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"uncondModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"clipVisionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audioVaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"embeddingsConnectorsModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"taehvModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"sceneSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"world\":{\"type\":\"object\"},\"upscaler\":{\"type\":\"object\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"audiogen-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"textEncModelSrc\",\"lmModelSrc\",\"ditModelSrc\",\"vaeModelSrc\"],\"properties\":{\"engine\":{\"type\":\"string\",\"const\":\"acestep\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"inferenceSteps\":{\"type\":\"integer\"},\"shift\":{\"type\":\"number\"},\"nGpuLayers\":{\"type\":\"integer\"},\"textEncModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ditModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"vaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"engine\",\"lmModelSrc\",\"synthModelSrc\"],\"properties\":{\"engine\":{\"type\":\"string\",\"const\":\"minimax\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\",\"auto\"]},\"coremlProfileDir\":{\"type\":\"string\"},\"coremlComputeUnits\":{\"type\":\"string\",\"enum\":[\"CPU_ONLY\",\"CPU_AND_GPU\",\"CPU_AND_NE\",\"ALL\"]},\"inferenceSteps\":{\"type\":\"integer\"},\"cfgScale\":{\"type\":\"number\"},\"lmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"synthModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-vla\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"auto\",\"cpu\",\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"hip\",\"rocm\",\"sycl\"]}},\"verbosity\":{\"type\":\"integer\"},\"embodiment\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"integer\"},{\"type\":\"object\"}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-classification\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"modelPath\":{\"type\":\"string\"},\"topK\":{\"type\":\"integer\"},\"nativeLogger\":{\"type\":\"boolean\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\"},\"modelConfig\":{\"type\":\"object\"}}}]},{\"type\":\"object\",\"required\":[\"type\",\"modelId\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelId\":{\"type\":\"string\"},\"modelSrc\":{\"not\":{}},\"withProgress\":{\"not\":{}},\"seed\":{\"not\":{}},\"modelType\":{\"type\":\"string\",\"enum\":[\"whisper\",\"whispercpp-transcription\"]},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"strategy\":{\"type\":\"string\",\"enum\":[\"greedy\",\"beam_search\"]},\"n_threads\":{\"type\":\"integer\"},\"n_max_text_ctx\":{\"type\":\"integer\"},\"offset_ms\":{\"type\":\"integer\"},\"duration_ms\":{\"type\":\"integer\"},\"audio_ctx\":{\"type\":\"integer\"},\"translate\":{\"type\":\"boolean\"},\"no_context\":{\"type\":\"boolean\"},\"no_timestamps\":{\"type\":\"boolean\"},\"single_segment\":{\"type\":\"boolean\"},\"print_special\":{\"type\":\"boolean\"},\"print_progress\":{\"type\":\"boolean\"},\"print_realtime\":{\"type\":\"boolean\"},\"print_timestamps\":{\"type\":\"boolean\"},\"token_timestamps\":{\"type\":\"boolean\"},\"thold_pt\":{\"type\":\"number\"},\"thold_ptsum\":{\"type\":\"number\"},\"max_len\":{\"type\":\"integer\"},\"split_on_word\":{\"type\":\"boolean\"},\"max_tokens\":{\"type\":\"integer\"},\"debug_mode\":{\"type\":\"boolean\"},\"tdrz_enable\":{\"type\":\"boolean\"},\"suppress_regex\":{\"type\":\"string\"},\"initial_prompt\":{\"type\":\"string\"},\"carry_initial_prompt\":{\"type\":\"boolean\"},\"language\":{\"type\":\"string\"},\"detect_language\":{\"type\":\"boolean\"},\"suppress_blank\":{\"type\":\"boolean\"},\"suppress_nst\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"length_penalty\":{\"type\":\"number\"},\"temperature_inc\":{\"type\":\"number\"},\"entropy_thold\":{\"type\":\"number\"},\"logprob_thold\":{\"type\":\"number\"},\"greedy_best_of\":{\"type\":\"integer\"},\"beam_search_beam_size\":{\"type\":\"integer\"},\"max_initial_ts\":{\"type\":\"number\"},\"no_speech_thold\":{\"type\":\"number\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"vad_params\":{\"type\":\"object\"},\"audio_format\":{\"type\":\"string\",\"enum\":[\"f32le\",\"s16le\"]},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"vadModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}}]}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"id\",\"type\"],\"properties\":{\"id\":{\"type\":\"string\"},\"type\":{\"type\":\"string\",\"const\":\"loggingStream\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"registryPath\",\"registrySource\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"modelRegistryGetModel\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"modelRegistryList\"}}}").jsonObject,
@@ -97,8 +97,8 @@ internal object AnyRequestSerializer : KSerializer {
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"state\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"serverId\",\"type\"],\"properties\":{\"serverId\":{\"type\":\"string\"},\"type\":{\"type\":\"string\",\"const\":\"stopRpcServer\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"suspend\"}}}").jsonObject,
- Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"modelId\",\"type\"],\"properties\":{\"modelId\":{\"type\":\"string\"},\"requestId\":{\"type\":\"string\"},\"inputType\":{\"type\":\"string\"},\"text\":{\"type\":\"string\"},\"stream\":{\"type\":\"boolean\"},\"sentenceStream\":{\"type\":\"boolean\"},\"sentenceStreamLocale\":{\"type\":\"string\"},\"sentenceStreamMaxChunkScalars\":{\"type\":\"number\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"seconds\":{\"type\":\"number\"},\"negativePrompt\":{\"type\":\"string\"},\"steps\":{\"type\":\"integer\"},\"guidance\":{\"type\":\"number\"},\"shift\":{\"type\":\"number\"},\"audio\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"sampleRate\":{\"type\":\"integer\"},\"messages\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"role\"]}},\"systemPrompt\":{\"type\":\"string\"},\"replyVoice\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"replyVoiceSampleRate\":{\"type\":\"integer\"},\"textReply\":{\"type\":\"boolean\"},\"maxReplySeconds\":{\"type\":\"number\"},\"maxNewTokens\":{\"type\":\"integer\"},\"greedy\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"topP\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"type\":{\"type\":\"string\",\"const\":\"textToSpeech\"}}}").jsonObject,
- Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"modelId\",\"type\"],\"properties\":{\"modelId\":{\"type\":\"string\"},\"requestId\":{\"type\":\"string\"},\"inputType\":{\"type\":\"string\"},\"accumulateSentences\":{\"type\":\"boolean\"},\"sentenceDelimiterPreset\":{\"type\":\"string\",\"enum\":[\"latin\",\"cjk\",\"multilingual\"]},\"maxBufferScalars\":{\"type\":\"number\"},\"flushAfterMs\":{\"type\":\"number\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"type\":{\"type\":\"string\",\"const\":\"textToSpeechStream\"}}}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"modelId\",\"type\"],\"properties\":{\"modelId\":{\"type\":\"string\"},\"requestId\":{\"type\":\"string\"},\"inputType\":{\"type\":\"string\"},\"text\":{\"type\":\"string\"},\"stream\":{\"type\":\"boolean\"},\"sentenceStream\":{\"type\":\"boolean\"},\"sentenceStreamLocale\":{\"type\":\"string\"},\"sentenceStreamMaxChunkScalars\":{\"type\":\"number\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"instruct\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"properties\":{\"dialect\":{\"type\":\"string\",\"enum\":[\"cantonese\",\"northeastern\",\"gansu\",\"guizhou\",\"henan\",\"hubei\",\"hunan\",\"jiangxi\",\"minnan\",\"ningxia\",\"shanxi\",\"shaanxi\",\"shandong\",\"shanghai\",\"sichuan\",\"tianjin\",\"yunnan\"]},\"volume\":{\"type\":\"string\",\"enum\":[\"loud\",\"soft\"]},\"style\":{\"type\":\"string\",\"enum\":[\"peppa\",\"robot\"]}}}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"referenceText\":{\"type\":\"string\"},\"seconds\":{\"type\":\"number\"},\"negativePrompt\":{\"type\":\"string\"},\"steps\":{\"type\":\"integer\"},\"guidance\":{\"type\":\"number\"},\"shift\":{\"type\":\"number\"},\"audio\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"sampleRate\":{\"type\":\"integer\"},\"messages\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"role\"]}},\"systemPrompt\":{\"type\":\"string\"},\"replyVoice\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"replyVoiceSampleRate\":{\"type\":\"integer\"},\"textReply\":{\"type\":\"boolean\"},\"maxReplySeconds\":{\"type\":\"number\"},\"maxNewTokens\":{\"type\":\"integer\"},\"greedy\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"topP\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"type\":{\"type\":\"string\",\"const\":\"textToSpeech\"}}}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"modelId\",\"type\"],\"properties\":{\"modelId\":{\"type\":\"string\"},\"requestId\":{\"type\":\"string\"},\"inputType\":{\"type\":\"string\"},\"accumulateSentences\":{\"type\":\"boolean\"},\"sentenceDelimiterPreset\":{\"type\":\"string\",\"enum\":[\"latin\",\"cjk\",\"multilingual\"]},\"maxBufferScalars\":{\"type\":\"number\"},\"flushAfterMs\":{\"type\":\"number\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"instruct\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"properties\":{\"dialect\":{\"type\":\"string\",\"enum\":[\"cantonese\",\"northeastern\",\"gansu\",\"guizhou\",\"henan\",\"hubei\",\"hunan\",\"jiangxi\",\"minnan\",\"ningxia\",\"shanxi\",\"shaanxi\",\"shandong\",\"shanghai\",\"sichuan\",\"tianjin\",\"yunnan\"]},\"volume\":{\"type\":\"string\",\"enum\":[\"loud\",\"soft\"]},\"style\":{\"type\":\"string\",\"enum\":[\"peppa\",\"robot\"]}}}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"referenceText\":{\"type\":\"string\"},\"type\":{\"type\":\"string\",\"const\":\"textToSpeechStream\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"modelId\",\"audioChunk\",\"type\"],\"properties\":{\"modelId\":{\"type\":\"string\"},\"prompt\":{\"type\":\"string\"},\"metadata\":{\"type\":\"boolean\"},\"audioChunk\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"type\",\"value\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"base64\"},\"value\":{\"type\":\"string\"}}},{\"type\":\"object\",\"required\":[\"type\",\"value\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"filePath\"},\"value\":{\"type\":\"string\"}}}]},\"hotwords\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"maxNewTokens\":{\"type\":\"integer\"},\"type\":{\"type\":\"string\",\"const\":\"transcribe\"},\"requestId\":{\"type\":\"string\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"modelId\",\"type\"],\"properties\":{\"modelId\":{\"type\":\"string\"},\"prompt\":{\"type\":\"string\"},\"metadata\":{\"type\":\"boolean\"},\"type\":{\"type\":\"string\",\"const\":\"transcribeStream\"},\"emitVadEvents\":{\"type\":\"boolean\"},\"endOfTurnSilenceMs\":{\"type\":\"integer\"},\"vadRunIntervalMs\":{\"type\":\"integer\"},\"parakeetStreamingConfig\":{\"type\":\"object\",\"properties\":{\"chunkMs\":{\"type\":\"integer\"},\"historyMs\":{\"type\":\"integer\"},\"leftContextMs\":{\"type\":\"integer\"},\"rightLookaheadMs\":{\"type\":\"integer\"},\"emitPartials\":{\"type\":\"boolean\"},\"emitEnergyVad\":{\"type\":\"boolean\"},\"energyVadThresholdDb\":{\"type\":\"number\"},\"energyVadWindowMs\":{\"type\":\"integer\"},\"energyVadHangoverMs\":{\"type\":\"integer\"},\"emitSpeakerVad\":{\"type\":\"boolean\"},\"diarizationThreshold\":{\"type\":\"number\"},\"diarizationMinSegmentMs\":{\"type\":\"integer\"},\"spkCacheEnable\":{\"type\":\"boolean\"},\"spkCacheLen\":{\"type\":\"integer\"},\"fifoLen\":{\"type\":\"integer\"},\"chunkLeftContextMs\":{\"type\":\"integer\"},\"chunkRightContextMs\":{\"type\":\"integer\"},\"spkCacheUpdatePeriod\":{\"type\":\"integer\"}}},\"requestId\":{\"type\":\"string\"}}}").jsonObject,
Json.parseToJsonElement("{\"oneOf\":[{\"type\":\"object\",\"required\":[\"modelId\",\"text\",\"stream\",\"modelType\",\"type\"],\"properties\":{\"modelId\":{\"type\":\"string\"},\"text\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\",\"items\":{\"type\":\"string\"}}]},\"stream\":{\"type\":\"boolean\"},\"modelType\":{\"type\":\"string\",\"enum\":[\"nmt\",\"nmtcpp-translation\"]},\"type\":{\"type\":\"string\",\"const\":\"translate\"},\"requestId\":{\"type\":\"string\"}}},{\"type\":\"object\",\"required\":[\"modelId\",\"text\",\"stream\",\"modelType\",\"to\",\"type\"],\"properties\":{\"modelId\":{\"type\":\"string\"},\"text\":{\"type\":\"string\"},\"stream\":{\"type\":\"boolean\"},\"modelType\":{\"type\":\"string\",\"enum\":[\"llm\",\"llamacpp-completion\"]},\"from\":{\"type\":\"string\"},\"to\":{\"type\":\"string\"},\"context\":{\"type\":\"string\"},\"type\":{\"type\":\"string\",\"const\":\"translate\"},\"requestId\":{\"type\":\"string\"}}}]}").jsonObject,
@@ -2883,7 +2883,7 @@ sealed class LoadModelRequest {
internal object LoadModelRequestSerializer : KSerializer {
override val descriptor = kotlinx.serialization.descriptors.buildClassSerialDescriptor("LoadModelRequest")
private val shapes = listOf(
- Json.parseToJsonElement("{\"anyOf\":[{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-completion\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"ctx_size\":{\"type\":\"number\"},\"temp\":{\"type\":\"number\"},\"top_p\":{\"type\":\"number\"},\"top_k\":{\"type\":\"integer\"},\"seed\":{\"type\":\"number\"},\"gpu_layers\":{\"type\":\"number\"},\"lora\":{\"type\":\"string\"},\"device\":{\"type\":\"string\"},\"predict\":{\"anyOf\":[{\"type\":\"number\",\"const\":-1},{\"type\":\"number\",\"const\":-2},{\"type\":\"integer\"}]},\"system_prompt\":{\"type\":\"string\"},\"load_mode\":{\"type\":\"string\",\"enum\":[\"none\",\"mmap\",\"mlock\",\"mmap+mlock\",\"dio\"]},\"verbosity\":{\"type\":\"number\",\"enum\":[0,1,2,3]},\"presence_penalty\":{\"type\":\"number\"},\"frequency_penalty\":{\"type\":\"number\"},\"repeat_penalty\":{\"type\":\"number\"},\"stop_sequences\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"parallel\":{\"type\":\"integer\"},\"tools\":{\"type\":\"boolean\"},\"cache_checkpoints\":{\"type\":\"integer\"},\"cache_checkpoints_max_bytes\":{\"type\":\"integer\"},\"cache_checkpoint_storage\":{\"type\":\"string\",\"enum\":[\"memory\",\"disk\"]},\"cache_checkpoint_dir\":{\"type\":\"string\"},\"cache_share_across_keys\":{\"type\":\"boolean\"},\"cache_ram_mib\":{\"type\":\"integer\"},\"cache-type-k\":{\"type\":\"string\"},\"cache-type-v\":{\"type\":\"string\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"rpc-servers\":{\"type\":\"string\"},\"devices\":{\"type\":\"string\"},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\",\"tensor\"]},\"flash-attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"tensor-split\":{\"type\":\"string\"},\"batch-size\":{\"type\":\"integer\"},\"ubatch-size\":{\"type\":\"integer\"},\"cpu-moe\":{\"type\":\"boolean\"},\"n-cpu-moe\":{\"type\":\"integer\"},\"kv-offload\":{\"type\":\"boolean\"},\"image-max-tokens\":{\"type\":\"integer\"},\"image-min-tokens\":{\"type\":\"integer\"},\"image-max-megapixels\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"cpu-mask\":{\"type\":\"string\"},\"cpu-mask-batch\":{\"type\":\"string\"},\"override-tensor\":{\"type\":\"string\"},\"n-cpu-ffn\":{\"type\":\"integer\"},\"moe-cache-mib\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"const\":\"auto\"}]},\"prefetch-weights\":{\"anyOf\":[{\"type\":\"boolean\"},{\"type\":\"string\",\"const\":\"auto\"}]},\"tensor-read-lazy\":{\"type\":\"string\",\"enum\":[\"on\",\"auto\",\"off\"]},\"fit\":{\"type\":\"boolean\"},\"fit-target\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\"}]},\"fit-ctx\":{\"type\":\"integer\"},\"openclCacheDir\":{\"type\":\"string\"},\"reasoning_budget\":{\"type\":\"integer\"},\"spec_type\":{\"type\":\"string\",\"enum\":[\"none\",\"draft-mtp\",\"draft-dflash\"]},\"spec_draft_n_max\":{\"type\":\"integer\"},\"spec_draft_n_min\":{\"type\":\"integer\"},\"spec_draft_p_min\":{\"type\":\"number\"},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"draftModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"image_tile_mode\":{\"type\":\"string\",\"enum\":[\"disabled\",\"batched\",\"sequential\"]},\"image_no_upscale\":{\"type\":\"string\",\"enum\":[\"on\",\"off\"]},\"mmproj-use-gpu\":{\"type\":\"boolean\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"whispercpp-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"strategy\":{\"type\":\"string\",\"enum\":[\"greedy\",\"beam_search\"]},\"n_threads\":{\"type\":\"integer\"},\"n_max_text_ctx\":{\"type\":\"integer\"},\"offset_ms\":{\"type\":\"integer\"},\"duration_ms\":{\"type\":\"integer\"},\"audio_ctx\":{\"type\":\"integer\"},\"translate\":{\"type\":\"boolean\"},\"no_context\":{\"type\":\"boolean\"},\"no_timestamps\":{\"type\":\"boolean\"},\"single_segment\":{\"type\":\"boolean\"},\"print_special\":{\"type\":\"boolean\"},\"print_progress\":{\"type\":\"boolean\"},\"print_realtime\":{\"type\":\"boolean\"},\"print_timestamps\":{\"type\":\"boolean\"},\"token_timestamps\":{\"type\":\"boolean\"},\"thold_pt\":{\"type\":\"number\"},\"thold_ptsum\":{\"type\":\"number\"},\"max_len\":{\"type\":\"integer\"},\"split_on_word\":{\"type\":\"boolean\"},\"max_tokens\":{\"type\":\"integer\"},\"debug_mode\":{\"type\":\"boolean\"},\"tdrz_enable\":{\"type\":\"boolean\"},\"suppress_regex\":{\"type\":\"string\"},\"initial_prompt\":{\"type\":\"string\"},\"carry_initial_prompt\":{\"type\":\"boolean\"},\"language\":{\"type\":\"string\"},\"detect_language\":{\"type\":\"boolean\"},\"suppress_blank\":{\"type\":\"boolean\"},\"suppress_nst\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"length_penalty\":{\"type\":\"number\"},\"temperature_inc\":{\"type\":\"number\"},\"entropy_thold\":{\"type\":\"number\"},\"logprob_thold\":{\"type\":\"number\"},\"greedy_best_of\":{\"type\":\"integer\"},\"beam_search_beam_size\":{\"type\":\"integer\"},\"max_initial_ts\":{\"type\":\"number\"},\"no_speech_thold\":{\"type\":\"number\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"vad_params\":{\"type\":\"object\"},\"audio_format\":{\"type\":\"string\",\"enum\":[\"f32le\",\"s16le\"]},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"vadModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"bci-whispercpp-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"whisperConfig\":{\"type\":\"object\"},\"bciConfig\":{\"type\":\"object\"},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"backendsDir\":{\"type\":\"string\"},\"embedderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"parakeet-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"maxThreads\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"sampleRate\":{\"type\":\"integer\"},\"channels\":{\"type\":\"integer\"},\"captionEnabled\":{\"type\":\"boolean\"},\"timestampsEnabled\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"integer\"},\"streaming\":{\"type\":\"boolean\"},\"streamingChunkMs\":{\"type\":\"integer\"},\"streamingHistoryMs\":{\"type\":\"integer\"},\"streamingEmitPartials\":{\"type\":\"boolean\"},\"streamingEnergyVad\":{\"type\":\"boolean\"},\"streamingEnergyVadThresholdDb\":{\"type\":\"number\"},\"streamingEnergyVadWindowMs\":{\"type\":\"integer\"},\"streamingEnergyVadHangoverMs\":{\"type\":\"integer\"},\"streamingLeftContextMs\":{\"type\":\"integer\"},\"streamingRightLookaheadMs\":{\"type\":\"integer\"},\"language\":{\"type\":\"string\"},\"streamingSpeakerVad\":{\"type\":\"boolean\"},\"diarizationThreshold\":{\"type\":\"number\"},\"diarizationMinSegmentMs\":{\"type\":\"integer\"},\"streamingSpkCacheEnable\":{\"type\":\"boolean\"},\"streamingSpkCacheLen\":{\"type\":\"integer\"},\"streamingFifoLen\":{\"type\":\"integer\"},\"streamingChunkLeftContextMs\":{\"type\":\"integer\"},\"streamingChunkRightContextMs\":{\"type\":\"integer\"},\"streamingSpkCacheUpdatePeriod\":{\"type\":\"integer\"},\"prewarm\":{\"type\":\"boolean\"},\"prewarmAudioSeconds\":{\"type\":\"number\"},\"longFormWindowFrames\":{\"type\":\"integer\"},\"longFormContextFrames\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"parakeetEncoderSrc\":{},\"parakeetDecoderSrc\":{},\"parakeetVocabSrc\":{},\"parakeetPreprocessorSrc\":{},\"parakeetCtcModelSrc\":{},\"parakeetTokenizerSrc\":{},\"parakeetSortformerSrc\":{},\"parakeetModelSrc\":{},\"modelType\":{}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"moss-transcribe\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"maxThreads\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"backend\":{\"type\":\"string\"},\"backendsDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-embedding\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"ctxSize\":{\"type\":\"integer\"},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"imageMaxTokens\":{\"type\":\"integer\"},\"imageMinTokens\":{\"type\":\"integer\"},\"mmprojNoAudio\":{\"type\":\"boolean\"},\"mmprojUseGpu\":{\"type\":\"boolean\"},\"imageMaxMegapixels\":{\"type\":\"integer\"},\"audioMaxSeconds\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"gpuLayers\":{\"type\":\"integer\"},\"device\":{\"type\":\"string\",\"enum\":[\"gpu\",\"cpu\"]},\"batchSize\":{\"type\":\"integer\"},\"pooling\":{\"type\":\"string\",\"enum\":[\"none\",\"mean\",\"cls\",\"last\"]},\"attention\":{\"type\":\"string\",\"enum\":[\"causal\",\"non-causal\"]},\"embdNormalize\":{\"type\":\"integer\"},\"flashAttention\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"mainGpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"splitMode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensorSplit\":{\"type\":\"string\"},\"verbosity\":{\"type\":\"number\",\"enum\":[0,1,2,3]},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-decision\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"gpu_layers\":{\"type\":\"integer\"},\"batch_size\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"flash_attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"verbosity\":{\"type\":\"integer\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensor-split\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-rerank\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"gpu_layers\":{\"type\":\"integer\"},\"batch_size\":{\"type\":\"integer\"},\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"flash_attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"verbosity\":{\"type\":\"integer\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensor-split\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"nmtcpp-translation\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"engine\",\"from\",\"to\"],\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"full\"]},\"beamsize\":{\"type\":\"number\"},\"lengthpenalty\":{\"type\":\"number\"},\"maxlength\":{\"type\":\"number\"},\"repetitionpenalty\":{\"type\":\"number\"},\"norepeatngramsize\":{\"type\":\"number\"},\"temperature\":{\"type\":\"number\"},\"topk\":{\"type\":\"number\"},\"topp\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\",\"const\":\"Bergamot\"},\"from\":{\"type\":\"string\",\"enum\":[\"en\",\"ar\",\"bg\",\"ca\",\"cs\",\"de\",\"es\",\"et\",\"fi\",\"fr\",\"hu\",\"is\",\"it\",\"ja\",\"ko\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ru\",\"sk\",\"sl\",\"uk\",\"zh\",\"az\",\"be\",\"bn\",\"bs\",\"da\",\"el\",\"fa\",\"gu\",\"he\",\"hi\",\"hr\",\"id\",\"kn\",\"ml\",\"ms\",\"mt\",\"nb\",\"nn\",\"no\",\"re\",\"ro\",\"sq\",\"sr\",\"sv\",\"ta\",\"te\",\"th\",\"tr\",\"vi\"]},\"to\":{\"type\":\"string\",\"enum\":[\"en\",\"ar\",\"bg\",\"ca\",\"cs\",\"de\",\"es\",\"et\",\"fi\",\"fr\",\"hu\",\"is\",\"it\",\"ja\",\"ko\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ru\",\"sk\",\"sl\",\"uk\",\"zh\",\"az\",\"be\",\"bn\",\"bs\",\"da\",\"el\",\"fa\",\"gu\",\"he\",\"hi\",\"hr\",\"id\",\"kn\",\"ml\",\"ms\",\"mt\",\"nb\",\"nn\",\"no\",\"re\",\"ro\",\"sq\",\"sr\",\"sv\",\"ta\",\"te\",\"th\",\"tr\",\"vi\"]},\"srcVocabSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dstVocabSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"normalize\":{\"type\":\"number\"},\"pivotModel\":{\"type\":\"object\",\"required\":[\"modelSrc\"]}}},{\"type\":\"object\",\"required\":[\"engine\",\"from\",\"to\"],\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"full\"]},\"beamsize\":{\"type\":\"number\"},\"lengthpenalty\":{\"type\":\"number\"},\"maxlength\":{\"type\":\"number\"},\"repetitionpenalty\":{\"type\":\"number\"},\"norepeatngramsize\":{\"type\":\"number\"},\"temperature\":{\"type\":\"number\"},\"topk\":{\"type\":\"number\"},\"topp\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\",\"const\":\"IndicTrans\"},\"from\":{\"type\":\"string\",\"enum\":[\"asm_Beng\",\"ben_Beng\",\"brx_Deva\",\"doi_Deva\",\"eng_Latn\",\"gom_Deva\",\"guj_Gujr\",\"hin_Deva\",\"kan_Knda\",\"kas_Arab\",\"kas_Deva\",\"mai_Deva\",\"mal_Mlym\",\"mar_Deva\",\"mni_Beng\",\"mni_Mtei\",\"npi_Deva\",\"ory_Orya\",\"pan_Guru\",\"san_Deva\",\"sat_Olck\",\"snd_Arab\",\"snd_Deva\",\"tam_Taml\",\"tel_Telu\",\"urd_Arab\"]},\"to\":{\"type\":\"string\",\"enum\":[\"asm_Beng\",\"ben_Beng\",\"brx_Deva\",\"doi_Deva\",\"eng_Latn\",\"gom_Deva\",\"guj_Gujr\",\"hin_Deva\",\"kan_Knda\",\"kas_Arab\",\"kas_Deva\",\"mai_Deva\",\"mal_Mlym\",\"mar_Deva\",\"mni_Beng\",\"mni_Mtei\",\"npi_Deva\",\"ory_Orya\",\"pan_Guru\",\"san_Deva\",\"sat_Olck\",\"snd_Arab\",\"snd_Deva\",\"tam_Taml\",\"tel_Telu\",\"urd_Arab\"]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"tts-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"chatterbox\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"es\",\"fr\",\"de\",\"it\",\"ja\",\"pt\",\"nl\",\"pl\",\"tr\",\"sv\",\"da\",\"fi\",\"no\",\"el\",\"ms\",\"sw\",\"ar\",\"ko\",\"he\",\"ru\",\"zh\",\"hi\"]},\"voice\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"ttsSpeed\":{\"type\":\"number\"},\"nCtx\":{\"type\":\"integer\"},\"kvCacheType\":{\"type\":\"string\",\"enum\":[\"f32\",\"f16\",\"q8_0\"]},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"cfmSteps\":{\"type\":\"integer\"},\"cfgRate\":{\"type\":\"number\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"s3genModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mecabDictSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cangjieTsvSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"supertonic\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"ko\",\"ja\",\"ar\",\"bg\",\"cs\",\"da\",\"de\",\"el\",\"es\",\"et\",\"fi\",\"fr\",\"hi\",\"hr\",\"hu\",\"id\",\"it\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ro\",\"ru\",\"sk\",\"sl\",\"sv\",\"tr\",\"uk\",\"vi\"]},\"voice\":{\"type\":\"string\"},\"ttsSpeed\":{\"type\":\"number\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"ttsNumInferenceSteps\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"vulkanCacheDir\":{\"type\":\"string\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"parler\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"anyOf\":[{\"type\":\"number\",\"const\":0},{\"type\":\"integer\"}]},\"minNewTokens\":{\"type\":\"integer\"},\"normalizeNumbers\":{\"type\":\"boolean\"},\"backendsDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"cosyvoice3\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"anger\",\"happy\",\"neutral\",\"sad\"]},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"instruct\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"promptText\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3S3tokModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3CampplusModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"audio8CodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"audio8\"},\"referenceText\":{\"type\":\"string\"},\"greedy\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"audio8CodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audio8CodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossCodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss\"},\"language\":{\"type\":\"string\"},\"durationTokens\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossCodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mossCodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dialogueReferenceSrcs\":{\"type\":\"array\",\"items\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-sfx\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"seconds\":{\"type\":\"number\"},\"negativePrompt\":{\"type\":\"string\"},\"steps\":{\"type\":\"integer\"},\"guidance\":{\"type\":\"number\"},\"shift\":{\"type\":\"number\"}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossSpeechCodecModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-speech\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossSpeechCodecModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-ocr\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"langList\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"pipelineType\":{\"type\":\"string\",\"enum\":[\"easyocr\",\"doctr\"]},\"magRatio\":{\"type\":\"number\"},\"canvasSize\":{\"type\":\"number\"},\"defaultRotationAngles\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"contrastRetry\":{\"type\":\"boolean\"},\"lowConfidenceThreshold\":{\"type\":\"number\"},\"recognizerBatchSize\":{\"type\":\"number\"},\"nThreads\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"string\",\"enum\":[\"cpu\",\"vulkan\",\"metal\",\"opencl\"]},\"gpuDevice\":{\"type\":\"number\"},\"mainGpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"detectorModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"sdcpp-generation\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"diffusion\",\"upscale\",\"video\",\"world\"]},\"threads\":{\"type\":\"number\"},\"device\":{\"type\":\"string\",\"enum\":[\"gpu\",\"cpu\"]},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"prediction\":{\"type\":\"string\",\"enum\":[\"auto\",\"eps\",\"v\",\"edm_v\",\"flow\",\"flux2_flow\"]},\"type\":{\"type\":\"string\",\"enum\":[\"auto\",\"f32\",\"f16\",\"bf16\",\"q2_k\",\"q3_k\",\"q4_0\",\"q4_1\",\"q4_k\",\"q5_0\",\"q5_1\",\"q5_k\",\"q6_k\",\"q8_0\"]},\"rng\":{\"type\":\"string\",\"enum\":[\"cpu\",\"cuda\",\"std_default\"]},\"sampler_rng\":{\"type\":\"string\",\"enum\":[\"cpu\",\"cuda\",\"std_default\"]},\"vae_auto_cpu_fallback\":{\"type\":\"boolean\"},\"vae_auto_cpu_fallback_memory_ratio\":{\"type\":\"number\"},\"vae_tiling\":{\"type\":\"boolean\"},\"offload_to_cpu\":{\"type\":\"boolean\"},\"control_net_cpu\":{\"not\":{}},\"clip_on_cpu\":{\"not\":{}},\"vae_on_cpu\":{\"not\":{}},\"backend\":{\"type\":\"string\"},\"params_backend\":{\"type\":\"string\"},\"max_vram\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"stream_layers\":{\"type\":\"boolean\"},\"flash_attn\":{\"type\":\"boolean\"},\"diffusion_fa\":{\"type\":\"boolean\"},\"lora_apply_mode\":{\"type\":\"string\",\"enum\":[\"auto\",\"immediately\",\"at_runtime\"]},\"verbosity\":{\"type\":\"number\"},\"clipLModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"clipGModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"t5XxlModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"llmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"vaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"highNoiseDiffusionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"uncondModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"clipVisionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audioVaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"embeddingsConnectorsModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"taehvModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"sceneSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"world\":{\"type\":\"object\"},\"upscaler\":{\"type\":\"object\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"audiogen-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"textEncModelSrc\",\"lmModelSrc\",\"ditModelSrc\",\"vaeModelSrc\"],\"properties\":{\"engine\":{\"type\":\"string\",\"const\":\"acestep\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"inferenceSteps\":{\"type\":\"integer\"},\"shift\":{\"type\":\"number\"},\"nGpuLayers\":{\"type\":\"integer\"},\"textEncModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ditModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"vaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"engine\",\"lmModelSrc\",\"synthModelSrc\"],\"properties\":{\"engine\":{\"type\":\"string\",\"const\":\"minimax\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\",\"auto\"]},\"coremlProfileDir\":{\"type\":\"string\"},\"coremlComputeUnits\":{\"type\":\"string\",\"enum\":[\"CPU_ONLY\",\"CPU_AND_GPU\",\"CPU_AND_NE\",\"ALL\"]},\"inferenceSteps\":{\"type\":\"integer\"},\"cfgScale\":{\"type\":\"number\"},\"lmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"synthModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-vla\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"auto\",\"cpu\",\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"hip\",\"rocm\",\"sycl\"]}},\"verbosity\":{\"type\":\"integer\"},\"embodiment\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"integer\"},{\"type\":\"object\"}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-classification\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"modelPath\":{\"type\":\"string\"},\"topK\":{\"type\":\"integer\"},\"nativeLogger\":{\"type\":\"boolean\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\"},\"modelConfig\":{\"type\":\"object\"}}}]}").jsonObject,
+ Json.parseToJsonElement("{\"anyOf\":[{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-completion\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"ctx_size\":{\"type\":\"number\"},\"temp\":{\"type\":\"number\"},\"top_p\":{\"type\":\"number\"},\"top_k\":{\"type\":\"integer\"},\"seed\":{\"type\":\"number\"},\"gpu_layers\":{\"type\":\"number\"},\"lora\":{\"type\":\"string\"},\"device\":{\"type\":\"string\"},\"predict\":{\"anyOf\":[{\"type\":\"number\",\"const\":-1},{\"type\":\"number\",\"const\":-2},{\"type\":\"integer\"}]},\"system_prompt\":{\"type\":\"string\"},\"load_mode\":{\"type\":\"string\",\"enum\":[\"none\",\"mmap\",\"mlock\",\"mmap+mlock\",\"dio\"]},\"verbosity\":{\"type\":\"number\",\"enum\":[0,1,2,3]},\"presence_penalty\":{\"type\":\"number\"},\"frequency_penalty\":{\"type\":\"number\"},\"repeat_penalty\":{\"type\":\"number\"},\"stop_sequences\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"parallel\":{\"type\":\"integer\"},\"tools\":{\"type\":\"boolean\"},\"cache_checkpoints\":{\"type\":\"integer\"},\"cache_checkpoints_max_bytes\":{\"type\":\"integer\"},\"cache_checkpoint_storage\":{\"type\":\"string\",\"enum\":[\"memory\",\"disk\"]},\"cache_checkpoint_dir\":{\"type\":\"string\"},\"cache_share_across_keys\":{\"type\":\"boolean\"},\"cache_ram_mib\":{\"type\":\"integer\"},\"cache-type-k\":{\"type\":\"string\"},\"cache-type-v\":{\"type\":\"string\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"rpc-servers\":{\"type\":\"string\"},\"devices\":{\"type\":\"string\"},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\",\"tensor\"]},\"flash-attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"tensor-split\":{\"type\":\"string\"},\"batch-size\":{\"type\":\"integer\"},\"ubatch-size\":{\"type\":\"integer\"},\"cpu-moe\":{\"type\":\"boolean\"},\"n-cpu-moe\":{\"type\":\"integer\"},\"kv-offload\":{\"type\":\"boolean\"},\"image-max-tokens\":{\"type\":\"integer\"},\"image-min-tokens\":{\"type\":\"integer\"},\"image-max-megapixels\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"cpu-mask\":{\"type\":\"string\"},\"cpu-mask-batch\":{\"type\":\"string\"},\"override-tensor\":{\"type\":\"string\"},\"n-cpu-ffn\":{\"type\":\"integer\"},\"moe-cache-mib\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"const\":\"auto\"}]},\"prefetch-weights\":{\"anyOf\":[{\"type\":\"boolean\"},{\"type\":\"string\",\"const\":\"auto\"}]},\"tensor-read-lazy\":{\"type\":\"string\",\"enum\":[\"on\",\"auto\",\"off\"]},\"fit\":{\"type\":\"boolean\"},\"fit-target\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\"}]},\"fit-ctx\":{\"type\":\"integer\"},\"openclCacheDir\":{\"type\":\"string\"},\"reasoning_budget\":{\"type\":\"integer\"},\"spec_type\":{\"type\":\"string\",\"enum\":[\"none\",\"draft-mtp\",\"draft-dflash\"]},\"spec_draft_n_max\":{\"type\":\"integer\"},\"spec_draft_n_min\":{\"type\":\"integer\"},\"spec_draft_p_min\":{\"type\":\"number\"},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"draftModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"image_tile_mode\":{\"type\":\"string\",\"enum\":[\"disabled\",\"batched\",\"sequential\"]},\"image_no_upscale\":{\"type\":\"string\",\"enum\":[\"on\",\"off\"]},\"mmproj-use-gpu\":{\"type\":\"boolean\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"whispercpp-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"strategy\":{\"type\":\"string\",\"enum\":[\"greedy\",\"beam_search\"]},\"n_threads\":{\"type\":\"integer\"},\"n_max_text_ctx\":{\"type\":\"integer\"},\"offset_ms\":{\"type\":\"integer\"},\"duration_ms\":{\"type\":\"integer\"},\"audio_ctx\":{\"type\":\"integer\"},\"translate\":{\"type\":\"boolean\"},\"no_context\":{\"type\":\"boolean\"},\"no_timestamps\":{\"type\":\"boolean\"},\"single_segment\":{\"type\":\"boolean\"},\"print_special\":{\"type\":\"boolean\"},\"print_progress\":{\"type\":\"boolean\"},\"print_realtime\":{\"type\":\"boolean\"},\"print_timestamps\":{\"type\":\"boolean\"},\"token_timestamps\":{\"type\":\"boolean\"},\"thold_pt\":{\"type\":\"number\"},\"thold_ptsum\":{\"type\":\"number\"},\"max_len\":{\"type\":\"integer\"},\"split_on_word\":{\"type\":\"boolean\"},\"max_tokens\":{\"type\":\"integer\"},\"debug_mode\":{\"type\":\"boolean\"},\"tdrz_enable\":{\"type\":\"boolean\"},\"suppress_regex\":{\"type\":\"string\"},\"initial_prompt\":{\"type\":\"string\"},\"carry_initial_prompt\":{\"type\":\"boolean\"},\"language\":{\"type\":\"string\"},\"detect_language\":{\"type\":\"boolean\"},\"suppress_blank\":{\"type\":\"boolean\"},\"suppress_nst\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"length_penalty\":{\"type\":\"number\"},\"temperature_inc\":{\"type\":\"number\"},\"entropy_thold\":{\"type\":\"number\"},\"logprob_thold\":{\"type\":\"number\"},\"greedy_best_of\":{\"type\":\"integer\"},\"beam_search_beam_size\":{\"type\":\"integer\"},\"max_initial_ts\":{\"type\":\"number\"},\"no_speech_thold\":{\"type\":\"number\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"vad_params\":{\"type\":\"object\"},\"audio_format\":{\"type\":\"string\",\"enum\":[\"f32le\",\"s16le\"]},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"vadModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"bci-whispercpp-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"whisperConfig\":{\"type\":\"object\"},\"bciConfig\":{\"type\":\"object\"},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"backendsDir\":{\"type\":\"string\"},\"embedderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"parakeet-transcription\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"maxThreads\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"sampleRate\":{\"type\":\"integer\"},\"channels\":{\"type\":\"integer\"},\"captionEnabled\":{\"type\":\"boolean\"},\"timestampsEnabled\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"integer\"},\"streaming\":{\"type\":\"boolean\"},\"streamingChunkMs\":{\"type\":\"integer\"},\"streamingHistoryMs\":{\"type\":\"integer\"},\"streamingEmitPartials\":{\"type\":\"boolean\"},\"streamingEnergyVad\":{\"type\":\"boolean\"},\"streamingEnergyVadThresholdDb\":{\"type\":\"number\"},\"streamingEnergyVadWindowMs\":{\"type\":\"integer\"},\"streamingEnergyVadHangoverMs\":{\"type\":\"integer\"},\"streamingLeftContextMs\":{\"type\":\"integer\"},\"streamingRightLookaheadMs\":{\"type\":\"integer\"},\"language\":{\"type\":\"string\"},\"streamingSpeakerVad\":{\"type\":\"boolean\"},\"diarizationThreshold\":{\"type\":\"number\"},\"diarizationMinSegmentMs\":{\"type\":\"integer\"},\"streamingSpkCacheEnable\":{\"type\":\"boolean\"},\"streamingSpkCacheLen\":{\"type\":\"integer\"},\"streamingFifoLen\":{\"type\":\"integer\"},\"streamingChunkLeftContextMs\":{\"type\":\"integer\"},\"streamingChunkRightContextMs\":{\"type\":\"integer\"},\"streamingSpkCacheUpdatePeriod\":{\"type\":\"integer\"},\"prewarm\":{\"type\":\"boolean\"},\"prewarmAudioSeconds\":{\"type\":\"number\"},\"longFormWindowFrames\":{\"type\":\"integer\"},\"longFormContextFrames\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"parakeetEncoderSrc\":{},\"parakeetDecoderSrc\":{},\"parakeetVocabSrc\":{},\"parakeetPreprocessorSrc\":{},\"parakeetCtcModelSrc\":{},\"parakeetTokenizerSrc\":{},\"parakeetSortformerSrc\":{},\"parakeetModelSrc\":{},\"modelType\":{}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"moss-transcribe\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"maxThreads\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"backend\":{\"type\":\"string\"},\"backendsDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-embedding\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"ctxSize\":{\"type\":\"integer\"},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"imageMaxTokens\":{\"type\":\"integer\"},\"imageMinTokens\":{\"type\":\"integer\"},\"mmprojNoAudio\":{\"type\":\"boolean\"},\"mmprojUseGpu\":{\"type\":\"boolean\"},\"imageMaxMegapixels\":{\"type\":\"integer\"},\"audioMaxSeconds\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"gpuLayers\":{\"type\":\"integer\"},\"device\":{\"type\":\"string\",\"enum\":[\"gpu\",\"cpu\"]},\"batchSize\":{\"type\":\"integer\"},\"pooling\":{\"type\":\"string\",\"enum\":[\"none\",\"mean\",\"cls\",\"last\"]},\"attention\":{\"type\":\"string\",\"enum\":[\"causal\",\"non-causal\"]},\"embdNormalize\":{\"type\":\"integer\"},\"flashAttention\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"mainGpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"splitMode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensorSplit\":{\"type\":\"string\"},\"verbosity\":{\"type\":\"number\",\"enum\":[0,1,2,3]},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-decision\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"gpu_layers\":{\"type\":\"integer\"},\"batch_size\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"flash_attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"verbosity\":{\"type\":\"integer\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensor-split\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-rerank\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"gpu_layers\":{\"type\":\"integer\"},\"batch_size\":{\"type\":\"integer\"},\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"flash_attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"verbosity\":{\"type\":\"integer\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensor-split\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"nmtcpp-translation\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"engine\",\"from\",\"to\"],\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"full\"]},\"beamsize\":{\"type\":\"number\"},\"lengthpenalty\":{\"type\":\"number\"},\"maxlength\":{\"type\":\"number\"},\"repetitionpenalty\":{\"type\":\"number\"},\"norepeatngramsize\":{\"type\":\"number\"},\"temperature\":{\"type\":\"number\"},\"topk\":{\"type\":\"number\"},\"topp\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\",\"const\":\"Bergamot\"},\"from\":{\"type\":\"string\",\"enum\":[\"en\",\"ar\",\"bg\",\"ca\",\"cs\",\"de\",\"es\",\"et\",\"fi\",\"fr\",\"hu\",\"is\",\"it\",\"ja\",\"ko\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ru\",\"sk\",\"sl\",\"uk\",\"zh\",\"az\",\"be\",\"bn\",\"bs\",\"da\",\"el\",\"fa\",\"gu\",\"he\",\"hi\",\"hr\",\"id\",\"kn\",\"ml\",\"ms\",\"mt\",\"nb\",\"nn\",\"no\",\"re\",\"ro\",\"sq\",\"sr\",\"sv\",\"ta\",\"te\",\"th\",\"tr\",\"vi\"]},\"to\":{\"type\":\"string\",\"enum\":[\"en\",\"ar\",\"bg\",\"ca\",\"cs\",\"de\",\"es\",\"et\",\"fi\",\"fr\",\"hu\",\"is\",\"it\",\"ja\",\"ko\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ru\",\"sk\",\"sl\",\"uk\",\"zh\",\"az\",\"be\",\"bn\",\"bs\",\"da\",\"el\",\"fa\",\"gu\",\"he\",\"hi\",\"hr\",\"id\",\"kn\",\"ml\",\"ms\",\"mt\",\"nb\",\"nn\",\"no\",\"re\",\"ro\",\"sq\",\"sr\",\"sv\",\"ta\",\"te\",\"th\",\"tr\",\"vi\"]},\"srcVocabSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dstVocabSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"normalize\":{\"type\":\"number\"},\"pivotModel\":{\"type\":\"object\",\"required\":[\"modelSrc\"]}}},{\"type\":\"object\",\"required\":[\"engine\",\"from\",\"to\"],\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"full\"]},\"beamsize\":{\"type\":\"number\"},\"lengthpenalty\":{\"type\":\"number\"},\"maxlength\":{\"type\":\"number\"},\"repetitionpenalty\":{\"type\":\"number\"},\"norepeatngramsize\":{\"type\":\"number\"},\"temperature\":{\"type\":\"number\"},\"topk\":{\"type\":\"number\"},\"topp\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\",\"const\":\"IndicTrans\"},\"from\":{\"type\":\"string\",\"enum\":[\"asm_Beng\",\"ben_Beng\",\"brx_Deva\",\"doi_Deva\",\"eng_Latn\",\"gom_Deva\",\"guj_Gujr\",\"hin_Deva\",\"kan_Knda\",\"kas_Arab\",\"kas_Deva\",\"mai_Deva\",\"mal_Mlym\",\"mar_Deva\",\"mni_Beng\",\"mni_Mtei\",\"npi_Deva\",\"ory_Orya\",\"pan_Guru\",\"san_Deva\",\"sat_Olck\",\"snd_Arab\",\"snd_Deva\",\"tam_Taml\",\"tel_Telu\",\"urd_Arab\"]},\"to\":{\"type\":\"string\",\"enum\":[\"asm_Beng\",\"ben_Beng\",\"brx_Deva\",\"doi_Deva\",\"eng_Latn\",\"gom_Deva\",\"guj_Gujr\",\"hin_Deva\",\"kan_Knda\",\"kas_Arab\",\"kas_Deva\",\"mai_Deva\",\"mal_Mlym\",\"mar_Deva\",\"mni_Beng\",\"mni_Mtei\",\"npi_Deva\",\"ory_Orya\",\"pan_Guru\",\"san_Deva\",\"sat_Olck\",\"snd_Arab\",\"snd_Deva\",\"tam_Taml\",\"tel_Telu\",\"urd_Arab\"]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"tts-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"chatterbox\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"es\",\"fr\",\"de\",\"it\",\"ja\",\"pt\",\"nl\",\"pl\",\"tr\",\"sv\",\"da\",\"fi\",\"no\",\"el\",\"ms\",\"sw\",\"ar\",\"ko\",\"he\",\"ru\",\"zh\",\"hi\"]},\"voice\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"ttsSpeed\":{\"type\":\"number\"},\"nCtx\":{\"type\":\"integer\"},\"kvCacheType\":{\"type\":\"string\",\"enum\":[\"f32\",\"f16\",\"q8_0\"]},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"cfmSteps\":{\"type\":\"integer\"},\"cfgRate\":{\"type\":\"number\"},\"streamLeftContextTokens\":{\"type\":\"integer\"},\"batchCfmSteps\":{\"type\":\"integer\"},\"nPredict\":{\"type\":\"integer\"},\"maxSentenceChars\":{\"type\":\"integer\"},\"crossfadeMs\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"repeatPenalty\":{\"type\":\"number\"},\"exaggeration\":{\"type\":\"number\"},\"cfgWeight\":{\"type\":\"number\"},\"minP\":{\"type\":\"number\"},\"voiceDir\":{\"type\":\"string\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"s3genModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mecabDictSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cangjieTsvSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"supertonic\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"ko\",\"ja\",\"ar\",\"bg\",\"cs\",\"da\",\"de\",\"el\",\"es\",\"et\",\"fi\",\"fr\",\"hi\",\"hr\",\"hu\",\"id\",\"it\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ro\",\"ru\",\"sk\",\"sl\",\"sv\",\"tr\",\"uk\",\"vi\"]},\"voice\":{\"type\":\"string\"},\"ttsSpeed\":{\"type\":\"number\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"ttsNumInferenceSteps\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"vulkanCacheDir\":{\"type\":\"string\"},\"vulkanDevice\":{\"type\":\"integer\"},\"prewarmText\":{\"type\":\"string\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"streamChunkTolerancePct\":{\"type\":\"integer\"},\"streamMinChunkTokens\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"voiceJsonSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"noiseNpySrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"parler\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"anyOf\":[{\"type\":\"number\",\"const\":0},{\"type\":\"integer\"}]},\"minNewTokens\":{\"type\":\"integer\"},\"normalizeNumbers\":{\"type\":\"boolean\"},\"backendsDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"cosyvoice3\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"anger\",\"happy\",\"neutral\",\"sad\"]},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"instruct\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"promptText\":{\"type\":\"string\"},\"flowCutPrompt\":{\"type\":\"boolean\"},\"vulkanDevice\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3S3tokModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3CampplusModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"audio8CodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"audio8\"},\"referenceText\":{\"type\":\"string\"},\"greedy\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"audio8CodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audio8CodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossCodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss\"},\"language\":{\"type\":\"string\"},\"durationTokens\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossCodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mossCodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dialogueReferenceSrcs\":{\"type\":\"array\",\"items\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-sfx\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"seconds\":{\"type\":\"number\"},\"negativePrompt\":{\"type\":\"string\"},\"steps\":{\"type\":\"integer\"},\"guidance\":{\"type\":\"number\"},\"shift\":{\"type\":\"number\"}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossSpeechCodecModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-speech\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossSpeechCodecModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-ocr\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"langList\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"pipelineType\":{\"type\":\"string\",\"enum\":[\"easyocr\",\"doctr\"]},\"magRatio\":{\"type\":\"number\"},\"canvasSize\":{\"type\":\"number\"},\"defaultRotationAngles\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"contrastRetry\":{\"type\":\"boolean\"},\"lowConfidenceThreshold\":{\"type\":\"number\"},\"recognizerBatchSize\":{\"type\":\"number\"},\"nThreads\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"string\",\"enum\":[\"cpu\",\"vulkan\",\"metal\",\"opencl\"]},\"gpuDevice\":{\"type\":\"number\"},\"mainGpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"detectorModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"sdcpp-generation\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"diffusion\",\"upscale\",\"video\",\"world\"]},\"threads\":{\"type\":\"number\"},\"device\":{\"type\":\"string\",\"enum\":[\"gpu\",\"cpu\"]},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"prediction\":{\"type\":\"string\",\"enum\":[\"auto\",\"eps\",\"v\",\"edm_v\",\"flow\",\"flux2_flow\"]},\"type\":{\"type\":\"string\",\"enum\":[\"auto\",\"f32\",\"f16\",\"bf16\",\"q2_k\",\"q3_k\",\"q4_0\",\"q4_1\",\"q4_k\",\"q5_0\",\"q5_1\",\"q5_k\",\"q6_k\",\"q8_0\"]},\"rng\":{\"type\":\"string\",\"enum\":[\"cpu\",\"cuda\",\"std_default\"]},\"sampler_rng\":{\"type\":\"string\",\"enum\":[\"cpu\",\"cuda\",\"std_default\"]},\"vae_auto_cpu_fallback\":{\"type\":\"boolean\"},\"vae_auto_cpu_fallback_memory_ratio\":{\"type\":\"number\"},\"vae_tiling\":{\"type\":\"boolean\"},\"offload_to_cpu\":{\"type\":\"boolean\"},\"control_net_cpu\":{\"not\":{}},\"clip_on_cpu\":{\"not\":{}},\"vae_on_cpu\":{\"not\":{}},\"backend\":{\"type\":\"string\"},\"params_backend\":{\"type\":\"string\"},\"max_vram\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"stream_layers\":{\"type\":\"boolean\"},\"flash_attn\":{\"type\":\"boolean\"},\"diffusion_fa\":{\"type\":\"boolean\"},\"lora_apply_mode\":{\"type\":\"string\",\"enum\":[\"auto\",\"immediately\",\"at_runtime\"]},\"verbosity\":{\"type\":\"number\"},\"clipLModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"clipGModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"t5XxlModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"llmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"vaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"highNoiseDiffusionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"uncondModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"clipVisionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audioVaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"embeddingsConnectorsModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"taehvModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"sceneSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"world\":{\"type\":\"object\"},\"upscaler\":{\"type\":\"object\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"audiogen-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"textEncModelSrc\",\"lmModelSrc\",\"ditModelSrc\",\"vaeModelSrc\"],\"properties\":{\"engine\":{\"type\":\"string\",\"const\":\"acestep\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"inferenceSteps\":{\"type\":\"integer\"},\"shift\":{\"type\":\"number\"},\"nGpuLayers\":{\"type\":\"integer\"},\"textEncModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ditModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"vaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"engine\",\"lmModelSrc\",\"synthModelSrc\"],\"properties\":{\"engine\":{\"type\":\"string\",\"const\":\"minimax\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\",\"auto\"]},\"coremlProfileDir\":{\"type\":\"string\"},\"coremlComputeUnits\":{\"type\":\"string\",\"enum\":[\"CPU_ONLY\",\"CPU_AND_GPU\",\"CPU_AND_NE\",\"ALL\"]},\"inferenceSteps\":{\"type\":\"integer\"},\"cfgScale\":{\"type\":\"number\"},\"lmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"synthModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-vla\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"auto\",\"cpu\",\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"hip\",\"rocm\",\"sycl\"]}},\"verbosity\":{\"type\":\"integer\"},\"embodiment\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"integer\"},{\"type\":\"object\"}]}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-classification\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"modelPath\":{\"type\":\"string\"},\"topK\":{\"type\":\"integer\"},\"nativeLogger\":{\"type\":\"boolean\"}}}}},{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\"},\"modelConfig\":{\"type\":\"object\"}}}]}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"modelId\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelId\":{\"type\":\"string\"},\"modelSrc\":{\"not\":{}},\"withProgress\":{\"not\":{}},\"seed\":{\"not\":{}},\"modelType\":{\"type\":\"string\",\"enum\":[\"whisper\",\"whispercpp-transcription\"]},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"strategy\":{\"type\":\"string\",\"enum\":[\"greedy\",\"beam_search\"]},\"n_threads\":{\"type\":\"integer\"},\"n_max_text_ctx\":{\"type\":\"integer\"},\"offset_ms\":{\"type\":\"integer\"},\"duration_ms\":{\"type\":\"integer\"},\"audio_ctx\":{\"type\":\"integer\"},\"translate\":{\"type\":\"boolean\"},\"no_context\":{\"type\":\"boolean\"},\"no_timestamps\":{\"type\":\"boolean\"},\"single_segment\":{\"type\":\"boolean\"},\"print_special\":{\"type\":\"boolean\"},\"print_progress\":{\"type\":\"boolean\"},\"print_realtime\":{\"type\":\"boolean\"},\"print_timestamps\":{\"type\":\"boolean\"},\"token_timestamps\":{\"type\":\"boolean\"},\"thold_pt\":{\"type\":\"number\"},\"thold_ptsum\":{\"type\":\"number\"},\"max_len\":{\"type\":\"integer\"},\"split_on_word\":{\"type\":\"boolean\"},\"max_tokens\":{\"type\":\"integer\"},\"debug_mode\":{\"type\":\"boolean\"},\"tdrz_enable\":{\"type\":\"boolean\"},\"suppress_regex\":{\"type\":\"string\"},\"initial_prompt\":{\"type\":\"string\"},\"carry_initial_prompt\":{\"type\":\"boolean\"},\"language\":{\"type\":\"string\"},\"detect_language\":{\"type\":\"boolean\"},\"suppress_blank\":{\"type\":\"boolean\"},\"suppress_nst\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"length_penalty\":{\"type\":\"number\"},\"temperature_inc\":{\"type\":\"number\"},\"entropy_thold\":{\"type\":\"number\"},\"logprob_thold\":{\"type\":\"number\"},\"greedy_best_of\":{\"type\":\"integer\"},\"beam_search_beam_size\":{\"type\":\"integer\"},\"max_initial_ts\":{\"type\":\"number\"},\"no_speech_thold\":{\"type\":\"number\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"vad_params\":{\"type\":\"object\"},\"audio_format\":{\"type\":\"string\",\"enum\":[\"f32le\",\"s16le\"]},\"contextParams\":{\"type\":\"object\"},\"miscConfig\":{\"type\":\"object\"},\"vadModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}}").jsonObject,
)
override fun deserialize(decoder: Decoder): LoadModelRequest {
@@ -2934,7 +2934,7 @@ internal object LoadModelSrcRequestSerializer : KSerializer
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-decision\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"gpu_layers\":{\"type\":\"integer\"},\"batch_size\":{\"type\":\"integer\"},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"flash_attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"verbosity\":{\"type\":\"integer\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensor-split\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"}}}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"llamacpp-rerank\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"gpu_layers\":{\"type\":\"integer\"},\"batch_size\":{\"type\":\"integer\"},\"backend\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"enum\":[\"cuda\",\"vulkan\",\"metal\",\"opencl\",\"auto\"]}},\"poll\":{\"type\":\"integer\"},\"pollBatch\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"threads-batch\":{\"type\":\"integer\"},\"flash_attn\":{\"type\":\"string\",\"enum\":[\"on\",\"off\",\"auto\"]},\"verbosity\":{\"type\":\"integer\"},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"split-mode\":{\"type\":\"string\",\"enum\":[\"none\",\"layer\"]},\"tensor-split\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"}}}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"nmtcpp-translation\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"engine\",\"from\",\"to\"],\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"full\"]},\"beamsize\":{\"type\":\"number\"},\"lengthpenalty\":{\"type\":\"number\"},\"maxlength\":{\"type\":\"number\"},\"repetitionpenalty\":{\"type\":\"number\"},\"norepeatngramsize\":{\"type\":\"number\"},\"temperature\":{\"type\":\"number\"},\"topk\":{\"type\":\"number\"},\"topp\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\",\"const\":\"Bergamot\"},\"from\":{\"type\":\"string\",\"enum\":[\"en\",\"ar\",\"bg\",\"ca\",\"cs\",\"de\",\"es\",\"et\",\"fi\",\"fr\",\"hu\",\"is\",\"it\",\"ja\",\"ko\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ru\",\"sk\",\"sl\",\"uk\",\"zh\",\"az\",\"be\",\"bn\",\"bs\",\"da\",\"el\",\"fa\",\"gu\",\"he\",\"hi\",\"hr\",\"id\",\"kn\",\"ml\",\"ms\",\"mt\",\"nb\",\"nn\",\"no\",\"re\",\"ro\",\"sq\",\"sr\",\"sv\",\"ta\",\"te\",\"th\",\"tr\",\"vi\"]},\"to\":{\"type\":\"string\",\"enum\":[\"en\",\"ar\",\"bg\",\"ca\",\"cs\",\"de\",\"es\",\"et\",\"fi\",\"fr\",\"hu\",\"is\",\"it\",\"ja\",\"ko\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ru\",\"sk\",\"sl\",\"uk\",\"zh\",\"az\",\"be\",\"bn\",\"bs\",\"da\",\"el\",\"fa\",\"gu\",\"he\",\"hi\",\"hr\",\"id\",\"kn\",\"ml\",\"ms\",\"mt\",\"nb\",\"nn\",\"no\",\"re\",\"ro\",\"sq\",\"sr\",\"sv\",\"ta\",\"te\",\"th\",\"tr\",\"vi\"]},\"srcVocabSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dstVocabSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"normalize\":{\"type\":\"number\"},\"pivotModel\":{\"type\":\"object\",\"required\":[\"modelSrc\"]}}},{\"type\":\"object\",\"required\":[\"engine\",\"from\",\"to\"],\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"full\"]},\"beamsize\":{\"type\":\"number\"},\"lengthpenalty\":{\"type\":\"number\"},\"maxlength\":{\"type\":\"number\"},\"repetitionpenalty\":{\"type\":\"number\"},\"norepeatngramsize\":{\"type\":\"number\"},\"temperature\":{\"type\":\"number\"},\"topk\":{\"type\":\"number\"},\"topp\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\",\"const\":\"IndicTrans\"},\"from\":{\"type\":\"string\",\"enum\":[\"asm_Beng\",\"ben_Beng\",\"brx_Deva\",\"doi_Deva\",\"eng_Latn\",\"gom_Deva\",\"guj_Gujr\",\"hin_Deva\",\"kan_Knda\",\"kas_Arab\",\"kas_Deva\",\"mai_Deva\",\"mal_Mlym\",\"mar_Deva\",\"mni_Beng\",\"mni_Mtei\",\"npi_Deva\",\"ory_Orya\",\"pan_Guru\",\"san_Deva\",\"sat_Olck\",\"snd_Arab\",\"snd_Deva\",\"tam_Taml\",\"tel_Telu\",\"urd_Arab\"]},\"to\":{\"type\":\"string\",\"enum\":[\"asm_Beng\",\"ben_Beng\",\"brx_Deva\",\"doi_Deva\",\"eng_Latn\",\"gom_Deva\",\"guj_Gujr\",\"hin_Deva\",\"kan_Knda\",\"kas_Arab\",\"kas_Deva\",\"mai_Deva\",\"mal_Mlym\",\"mar_Deva\",\"mni_Beng\",\"mni_Mtei\",\"npi_Deva\",\"ory_Orya\",\"pan_Guru\",\"san_Deva\",\"sat_Olck\",\"snd_Arab\",\"snd_Deva\",\"tam_Taml\",\"tel_Telu\",\"urd_Arab\"]}}}]}}}").jsonObject,
- Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"tts-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"chatterbox\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"es\",\"fr\",\"de\",\"it\",\"ja\",\"pt\",\"nl\",\"pl\",\"tr\",\"sv\",\"da\",\"fi\",\"no\",\"el\",\"ms\",\"sw\",\"ar\",\"ko\",\"he\",\"ru\",\"zh\",\"hi\"]},\"voice\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"ttsSpeed\":{\"type\":\"number\"},\"nCtx\":{\"type\":\"integer\"},\"kvCacheType\":{\"type\":\"string\",\"enum\":[\"f32\",\"f16\",\"q8_0\"]},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"cfmSteps\":{\"type\":\"integer\"},\"cfgRate\":{\"type\":\"number\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"s3genModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mecabDictSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cangjieTsvSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"supertonic\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"ko\",\"ja\",\"ar\",\"bg\",\"cs\",\"da\",\"de\",\"el\",\"es\",\"et\",\"fi\",\"fr\",\"hi\",\"hr\",\"hu\",\"id\",\"it\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ro\",\"ru\",\"sk\",\"sl\",\"sv\",\"tr\",\"uk\",\"vi\"]},\"voice\":{\"type\":\"string\"},\"ttsSpeed\":{\"type\":\"number\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"ttsNumInferenceSteps\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"vulkanCacheDir\":{\"type\":\"string\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"parler\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"anyOf\":[{\"type\":\"number\",\"const\":0},{\"type\":\"integer\"}]},\"minNewTokens\":{\"type\":\"integer\"},\"normalizeNumbers\":{\"type\":\"boolean\"},\"backendsDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"cosyvoice3\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"anger\",\"happy\",\"neutral\",\"sad\"]},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"instruct\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"promptText\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3S3tokModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3CampplusModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"audio8CodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"audio8\"},\"referenceText\":{\"type\":\"string\"},\"greedy\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"audio8CodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audio8CodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossCodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss\"},\"language\":{\"type\":\"string\"},\"durationTokens\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossCodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mossCodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dialogueReferenceSrcs\":{\"type\":\"array\",\"items\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-sfx\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"seconds\":{\"type\":\"number\"},\"negativePrompt\":{\"type\":\"string\"},\"steps\":{\"type\":\"integer\"},\"guidance\":{\"type\":\"number\"},\"shift\":{\"type\":\"number\"}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossSpeechCodecModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-speech\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossSpeechCodecModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"tts-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"chatterbox\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"es\",\"fr\",\"de\",\"it\",\"ja\",\"pt\",\"nl\",\"pl\",\"tr\",\"sv\",\"da\",\"fi\",\"no\",\"el\",\"ms\",\"sw\",\"ar\",\"ko\",\"he\",\"ru\",\"zh\",\"hi\"]},\"voice\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"ttsSpeed\":{\"type\":\"number\"},\"nCtx\":{\"type\":\"integer\"},\"kvCacheType\":{\"type\":\"string\",\"enum\":[\"f32\",\"f16\",\"q8_0\"]},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"cfmSteps\":{\"type\":\"integer\"},\"cfgRate\":{\"type\":\"number\"},\"streamLeftContextTokens\":{\"type\":\"integer\"},\"batchCfmSteps\":{\"type\":\"integer\"},\"nPredict\":{\"type\":\"integer\"},\"maxSentenceChars\":{\"type\":\"integer\"},\"crossfadeMs\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"repeatPenalty\":{\"type\":\"number\"},\"exaggeration\":{\"type\":\"number\"},\"cfgWeight\":{\"type\":\"number\"},\"minP\":{\"type\":\"number\"},\"voiceDir\":{\"type\":\"string\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"s3genModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mecabDictSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cangjieTsvSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"supertonic\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"ko\",\"ja\",\"ar\",\"bg\",\"cs\",\"da\",\"de\",\"el\",\"es\",\"et\",\"fi\",\"fr\",\"hi\",\"hr\",\"hu\",\"id\",\"it\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ro\",\"ru\",\"sk\",\"sl\",\"sv\",\"tr\",\"uk\",\"vi\"]},\"voice\":{\"type\":\"string\"},\"ttsSpeed\":{\"type\":\"number\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"ttsNumInferenceSteps\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"vulkanCacheDir\":{\"type\":\"string\"},\"vulkanDevice\":{\"type\":\"integer\"},\"prewarmText\":{\"type\":\"string\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"streamChunkTolerancePct\":{\"type\":\"integer\"},\"streamMinChunkTokens\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"voiceJsonSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"noiseNpySrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"parler\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"anyOf\":[{\"type\":\"number\",\"const\":0},{\"type\":\"integer\"}]},\"minNewTokens\":{\"type\":\"integer\"},\"normalizeNumbers\":{\"type\":\"boolean\"},\"backendsDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"cosyvoice3\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"anger\",\"happy\",\"neutral\",\"sad\"]},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"instruct\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"promptText\":{\"type\":\"string\"},\"flowCutPrompt\":{\"type\":\"boolean\"},\"vulkanDevice\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3S3tokModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"cosyvoice3CampplusModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"audio8CodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"audio8\"},\"referenceText\":{\"type\":\"string\"},\"greedy\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"audio8CodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audio8CodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossCodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss\"},\"language\":{\"type\":\"string\"},\"durationTokens\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossCodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"mossCodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"dialogueReferenceSrcs\":{\"type\":\"array\",\"items\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}},{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-sfx\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"seconds\":{\"type\":\"number\"},\"negativePrompt\":{\"type\":\"string\"},\"steps\":{\"type\":\"integer\"},\"guidance\":{\"type\":\"number\"},\"shift\":{\"type\":\"number\"}}},{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossSpeechCodecModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-speech\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossSpeechCodecModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"ggml-ocr\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"langList\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"pipelineType\":{\"type\":\"string\",\"enum\":[\"easyocr\",\"doctr\"]},\"magRatio\":{\"type\":\"number\"},\"canvasSize\":{\"type\":\"number\"},\"defaultRotationAngles\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"contrastRetry\":{\"type\":\"boolean\"},\"lowConfidenceThreshold\":{\"type\":\"number\"},\"recognizerBatchSize\":{\"type\":\"number\"},\"nThreads\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"string\",\"enum\":[\"cpu\",\"vulkan\",\"metal\",\"opencl\"]},\"gpuDevice\":{\"type\":\"number\"},\"mainGpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"detectorModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"sdcpp-generation\"},\"modelConfig\":{\"type\":\"object\",\"properties\":{\"mode\":{\"type\":\"string\",\"enum\":[\"diffusion\",\"upscale\",\"video\",\"world\"]},\"threads\":{\"type\":\"number\"},\"device\":{\"type\":\"string\",\"enum\":[\"gpu\",\"cpu\"]},\"main-gpu\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"string\",\"enum\":[\"integrated\",\"dedicated\"]}]},\"prediction\":{\"type\":\"string\",\"enum\":[\"auto\",\"eps\",\"v\",\"edm_v\",\"flow\",\"flux2_flow\"]},\"type\":{\"type\":\"string\",\"enum\":[\"auto\",\"f32\",\"f16\",\"bf16\",\"q2_k\",\"q3_k\",\"q4_0\",\"q4_1\",\"q4_k\",\"q5_0\",\"q5_1\",\"q5_k\",\"q6_k\",\"q8_0\"]},\"rng\":{\"type\":\"string\",\"enum\":[\"cpu\",\"cuda\",\"std_default\"]},\"sampler_rng\":{\"type\":\"string\",\"enum\":[\"cpu\",\"cuda\",\"std_default\"]},\"vae_auto_cpu_fallback\":{\"type\":\"boolean\"},\"vae_auto_cpu_fallback_memory_ratio\":{\"type\":\"number\"},\"vae_tiling\":{\"type\":\"boolean\"},\"offload_to_cpu\":{\"type\":\"boolean\"},\"control_net_cpu\":{\"not\":{}},\"clip_on_cpu\":{\"not\":{}},\"vae_on_cpu\":{\"not\":{}},\"backend\":{\"type\":\"string\"},\"params_backend\":{\"type\":\"string\"},\"max_vram\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"stream_layers\":{\"type\":\"boolean\"},\"flash_attn\":{\"type\":\"boolean\"},\"diffusion_fa\":{\"type\":\"boolean\"},\"lora_apply_mode\":{\"type\":\"string\",\"enum\":[\"auto\",\"immediately\",\"at_runtime\"]},\"verbosity\":{\"type\":\"number\"},\"clipLModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"clipGModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"t5XxlModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"llmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"projectionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"vaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"highNoiseDiffusionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"uncondModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"clipVisionModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"audioVaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"embeddingsConnectorsModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"taehvModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"sceneSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"world\":{\"type\":\"object\"},\"upscaler\":{\"type\":\"object\"}}}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"modelSrc\",\"modelType\",\"modelConfig\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"loadModel\"},\"modelSrc\":{\"type\":\"string\"},\"modelName\":{\"type\":\"string\"},\"withProgress\":{\"type\":\"boolean\"},\"seed\":{\"type\":\"boolean\"},\"fallbackSrc\":{\"type\":\"string\"},\"requireHttpChecksum\":{\"type\":\"boolean\"},\"requireSecureTransport\":{\"type\":\"boolean\"},\"modelFitPolicy\":{\"type\":\"string\",\"enum\":[\"log\",\"refuse\",\"off\"]},\"requestId\":{\"type\":\"string\"},\"modelType\":{\"type\":\"string\",\"const\":\"audiogen-ggml\"},\"modelConfig\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"textEncModelSrc\",\"lmModelSrc\",\"ditModelSrc\",\"vaeModelSrc\"],\"properties\":{\"engine\":{\"type\":\"string\",\"const\":\"acestep\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"inferenceSteps\":{\"type\":\"integer\"},\"shift\":{\"type\":\"number\"},\"nGpuLayers\":{\"type\":\"integer\"},\"textEncModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"lmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"ditModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"vaeModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}},{\"type\":\"object\",\"required\":[\"engine\",\"lmModelSrc\",\"synthModelSrc\"],\"properties\":{\"engine\":{\"type\":\"string\",\"const\":\"minimax\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"device\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\",\"auto\"]},\"coremlProfileDir\":{\"type\":\"string\"},\"coremlComputeUnits\":{\"type\":\"string\",\"enum\":[\"CPU_ONLY\",\"CPU_AND_GPU\",\"CPU_AND_NE\",\"ALL\"]},\"inferenceSteps\":{\"type\":\"integer\"},\"cfgScale\":{\"type\":\"number\"},\"lmModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]},\"synthModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}]}}}").jsonObject,
@@ -5319,10 +5319,10 @@ sealed class LoadModelSrcRequestTtsGgmlModelConfig {
internal object LoadModelSrcRequestTtsGgmlModelConfigSerializer : KSerializer {
override val descriptor = kotlinx.serialization.descriptors.buildClassSerialDescriptor("LoadModelSrcRequestTtsGgmlModelConfig")
private val shapes = listOf(
- Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"chatterbox\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"es\",\"fr\",\"de\",\"it\",\"ja\",\"pt\",\"nl\",\"pl\",\"tr\",\"sv\",\"da\",\"fi\",\"no\",\"el\",\"ms\",\"sw\",\"ar\",\"ko\",\"he\",\"ru\",\"zh\",\"hi\"]},\"voice\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"ttsSpeed\":{\"type\":\"number\"},\"nCtx\":{\"type\":\"integer\"},\"kvCacheType\":{\"type\":\"string\",\"enum\":[\"f32\",\"f16\",\"q8_0\"]},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"cfmSteps\":{\"type\":\"integer\"},\"cfgRate\":{\"type\":\"number\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"s3genModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"mecabDictSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"cangjieTsvSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}}").jsonObject,
- Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"supertonic\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"ko\",\"ja\",\"ar\",\"bg\",\"cs\",\"da\",\"de\",\"el\",\"es\",\"et\",\"fi\",\"fr\",\"hi\",\"hr\",\"hu\",\"id\",\"it\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ro\",\"ru\",\"sk\",\"sl\",\"sv\",\"tr\",\"uk\",\"vi\"]},\"voice\":{\"type\":\"string\"},\"ttsSpeed\":{\"type\":\"number\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"ttsNumInferenceSteps\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"vulkanCacheDir\":{\"type\":\"string\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"chatterbox\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"es\",\"fr\",\"de\",\"it\",\"ja\",\"pt\",\"nl\",\"pl\",\"tr\",\"sv\",\"da\",\"fi\",\"no\",\"el\",\"ms\",\"sw\",\"ar\",\"ko\",\"he\",\"ru\",\"zh\",\"hi\"]},\"voice\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"ttsSpeed\":{\"type\":\"number\"},\"nCtx\":{\"type\":\"integer\"},\"kvCacheType\":{\"type\":\"string\",\"enum\":[\"f32\",\"f16\",\"q8_0\"]},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"cfmSteps\":{\"type\":\"integer\"},\"cfgRate\":{\"type\":\"number\"},\"streamLeftContextTokens\":{\"type\":\"integer\"},\"batchCfmSteps\":{\"type\":\"integer\"},\"nPredict\":{\"type\":\"integer\"},\"maxSentenceChars\":{\"type\":\"integer\"},\"crossfadeMs\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"repeatPenalty\":{\"type\":\"number\"},\"exaggeration\":{\"type\":\"number\"},\"cfgWeight\":{\"type\":\"number\"},\"minP\":{\"type\":\"number\"},\"voiceDir\":{\"type\":\"string\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"s3genModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"mecabDictSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"cangjieTsvSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"ttsEngine\",\"language\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"supertonic\"},\"language\":{\"type\":\"string\",\"enum\":[\"en\",\"ko\",\"ja\",\"ar\",\"bg\",\"cs\",\"da\",\"de\",\"el\",\"es\",\"et\",\"fi\",\"fr\",\"hi\",\"hr\",\"hu\",\"id\",\"it\",\"lt\",\"lv\",\"nl\",\"pl\",\"pt\",\"ro\",\"ru\",\"sk\",\"sl\",\"sv\",\"tr\",\"uk\",\"vi\"]},\"voice\":{\"type\":\"string\"},\"ttsSpeed\":{\"type\":\"number\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"ttsNumInferenceSteps\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"vulkanCacheDir\":{\"type\":\"string\"},\"vulkanDevice\":{\"type\":\"integer\"},\"prewarmText\":{\"type\":\"string\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"streamChunkTolerancePct\":{\"type\":\"integer\"},\"streamMinChunkTokens\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"voiceJsonSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"noiseNpySrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"ttsSupertonicMultilingual\":{},\"ttsTokenizerSrc\":{},\"ttsSpeechEncoderSrc\":{},\"ttsEmbedTokensSrc\":{},\"ttsConditionalDecoderSrc\":{},\"ttsLanguageModelSrc\":{},\"ttsTextEncoderSrc\":{},\"ttsDurationPredictorSrc\":{},\"ttsVectorEstimatorSrc\":{},\"ttsVocoderSrc\":{},\"ttsUnicodeIndexerSrc\":{},\"ttsTtsConfigSrc\":{},\"ttsVoiceStyleSrc\":{}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"parler\"},\"description\":{\"type\":\"string\"},\"voiceDescription\":{\"type\":\"string\"},\"voice\":{\"type\":\"string\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"command\",\"anger\",\"narration\",\"conversation\",\"disgust\",\"fear\",\"happy\",\"neutral\",\"proper noun\",\"news\",\"sad\",\"surprise\"]},\"pitch\":{\"type\":\"string\"},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"expressivity\":{\"type\":\"string\"},\"noise\":{\"type\":\"string\"},\"reverb\":{\"type\":\"string\"},\"quality\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"anyOf\":[{\"type\":\"number\",\"const\":0},{\"type\":\"integer\"}]},\"minNewTokens\":{\"type\":\"integer\"},\"normalizeNumbers\":{\"type\":\"boolean\"},\"backendsDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]}}}").jsonObject,
- Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"cosyvoice3\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"anger\",\"happy\",\"neutral\",\"sad\"]},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"instruct\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"properties\":{\"dialect\":{\"type\":\"string\",\"enum\":[\"cantonese\",\"northeastern\",\"gansu\",\"guizhou\",\"henan\",\"hubei\",\"hunan\",\"jiangxi\",\"minnan\",\"ningxia\",\"shanxi\",\"shaanxi\",\"shandong\",\"shanghai\",\"sichuan\",\"tianjin\",\"yunnan\"]},\"volume\":{\"type\":\"string\",\"enum\":[\"loud\",\"soft\"]},\"style\":{\"type\":\"string\",\"enum\":[\"peppa\",\"robot\"]}}}]},\"promptText\":{\"type\":\"string\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"cosyvoice3S3tokModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"cosyvoice3CampplusModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]}}}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"cosyvoice3\"},\"emotion\":{\"type\":\"string\",\"enum\":[\"anger\",\"happy\",\"neutral\",\"sad\"]},\"pace\":{\"type\":\"string\",\"enum\":[\"slow\",\"moderate\",\"fast\"]},\"instruct\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"properties\":{\"dialect\":{\"type\":\"string\",\"enum\":[\"cantonese\",\"northeastern\",\"gansu\",\"guizhou\",\"henan\",\"hubei\",\"hunan\",\"jiangxi\",\"minnan\",\"ningxia\",\"shanxi\",\"shaanxi\",\"shandong\",\"shanghai\",\"sichuan\",\"tianjin\",\"yunnan\"]},\"volume\":{\"type\":\"string\",\"enum\":[\"loud\",\"soft\"]},\"style\":{\"type\":\"string\",\"enum\":[\"peppa\",\"robot\"]}}}]},\"promptText\":{\"type\":\"string\"},\"flowCutPrompt\":{\"type\":\"boolean\"},\"vulkanDevice\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"streamFirstChunkTokens\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"openclCacheDir\":{\"type\":\"string\"},\"lavasrEnhancerModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"lavasrDenoiserModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"cosyvoice3S3tokModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"cosyvoice3CampplusModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"ttsEngine\",\"audio8CodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"audio8\"},\"referenceText\":{\"type\":\"string\"},\"greedy\":{\"type\":\"boolean\"},\"temperature\":{\"type\":\"number\"},\"topK\":{\"type\":\"integer\"},\"topP\":{\"type\":\"number\"},\"maxFrames\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"outputSampleRate\":{\"type\":\"integer\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"audio8CodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"audio8CodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"ttsEngine\",\"mossCodecDecoderModelSrc\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss\"},\"language\":{\"type\":\"string\"},\"durationTokens\":{\"type\":\"integer\"},\"streamChunkTokens\":{\"type\":\"integer\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"mossCodecDecoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"mossCodecEncoderModelSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"referenceAudioSrc\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}]},\"dialogueReferenceSrcs\":{\"type\":\"array\",\"items\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"required\":[\"src\"]}]}}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"ttsEngine\"],\"properties\":{\"ttsEngine\":{\"type\":\"string\",\"const\":\"moss-sfx\"},\"useGPU\":{\"type\":\"boolean\"},\"threads\":{\"type\":\"integer\"},\"nGpuLayers\":{\"type\":\"integer\"},\"seed\":{\"type\":\"integer\"},\"backendsDir\":{\"type\":\"string\"},\"seconds\":{\"type\":\"number\"},\"negativePrompt\":{\"type\":\"string\"},\"steps\":{\"type\":\"integer\"},\"guidance\":{\"type\":\"number\"},\"shift\":{\"type\":\"number\"}}}").jsonObject,
@@ -5372,6 +5372,19 @@ data class LoadModelSrcRequestTtsGgmlModelConfigChatterbox(
@SerialName("streamFirstChunkTokens") val `streamFirstChunkTokens`: Long? = null,
@SerialName("cfmSteps") val `cfmSteps`: Long? = null,
@SerialName("cfgRate") val `cfgRate`: Double? = null,
+ @SerialName("streamLeftContextTokens") val `streamLeftContextTokens`: Long? = null,
+ @SerialName("batchCfmSteps") val `batchCfmSteps`: Long? = null,
+ @SerialName("nPredict") val `nPredict`: Long? = null,
+ @SerialName("maxSentenceChars") val `maxSentenceChars`: Long? = null,
+ @SerialName("crossfadeMs") val `crossfadeMs`: Long? = null,
+ @SerialName("temperature") val `temperature`: Double? = null,
+ @SerialName("topK") val `topK`: Long? = null,
+ @SerialName("topP") val `topP`: Double? = null,
+ @SerialName("repeatPenalty") val `repeatPenalty`: Double? = null,
+ @SerialName("exaggeration") val `exaggeration`: Double? = null,
+ @SerialName("cfgWeight") val `cfgWeight`: Double? = null,
+ @SerialName("minP") val `minP`: Double? = null,
+ @SerialName("voiceDir") val `voiceDir`: String? = null,
@SerialName("threads") val `threads`: Long? = null,
@SerialName("nGpuLayers") val `nGpuLayers`: Long? = null,
@SerialName("seed") val `seed`: Long? = null,
@@ -6065,10 +6078,18 @@ data class LoadModelSrcRequestTtsGgmlModelConfigSupertonic(
@SerialName("nGpuLayers") val `nGpuLayers`: Long? = null,
@SerialName("seed") val `seed`: Long? = null,
@SerialName("vulkanCacheDir") val `vulkanCacheDir`: String? = null,
+ @SerialName("vulkanDevice") val `vulkanDevice`: Long? = null,
+ @SerialName("prewarmText") val `prewarmText`: String? = null,
+ @SerialName("streamChunkTokens") val `streamChunkTokens`: Long? = null,
+ @SerialName("streamFirstChunkTokens") val `streamFirstChunkTokens`: Long? = null,
+ @SerialName("streamChunkTolerancePct") val `streamChunkTolerancePct`: Long? = null,
+ @SerialName("streamMinChunkTokens") val `streamMinChunkTokens`: Long? = null,
@SerialName("backendsDir") val `backendsDir`: String? = null,
@SerialName("openclCacheDir") val `openclCacheDir`: String? = null,
@SerialName("lavasrEnhancerModelSrc") val `lavasrEnhancerModelSrc`: LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrEnhancerModelSrc? = null,
@SerialName("lavasrDenoiserModelSrc") val `lavasrDenoiserModelSrc`: LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrDenoiserModelSrc? = null,
+ @SerialName("voiceJsonSrc") val `voiceJsonSrc`: LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc? = null,
+ @SerialName("noiseNpySrc") val `noiseNpySrc`: LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc? = null,
@SerialName("ttsSupertonicMultilingual") val `ttsSupertonicMultilingual`: JsonElement? = null,
@SerialName("ttsTokenizerSrc") val `ttsTokenizerSrc`: JsonElement? = null,
@SerialName("ttsSpeechEncoderSrc") val `ttsSpeechEncoderSrc`: JsonElement? = null,
@@ -6332,6 +6353,212 @@ enum class LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrDenoiserModelSrc
@SerialName("classification") `CLASSIFICATION`,
}
+@Serializable(with = LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcSerializer::class)
+sealed class LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc {
+ data class Variant1(val value: String) : LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc()
+ data class Value3CB30CBF(val value: io.tether.qvac.sdk.generated.schema.LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBF) : LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc()
+}
+internal object LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcSerializer : KSerializer {
+ override val descriptor = kotlinx.serialization.descriptors.buildClassSerialDescriptor("LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc")
+ private val shapes = listOf(
+ Json.parseToJsonElement("{\"type\":\"string\"}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}").jsonObject,
+ )
+ override fun deserialize(decoder: Decoder): LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc {
+ val input = decoder as? JsonDecoder ?: throw SerializationException("QVAC unions require JSON")
+ val element = input.decodeJsonElement()
+ return when (selectWireVariant(element, shapes)) {
+ 0 -> LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc.Variant1(input.json.decodeFromJsonElement(serializer(), element))
+ 1 -> LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc.Value3CB30CBF(input.json.decodeFromJsonElement(serializer(), element))
+ else -> throw SerializationException("No matching LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc variant")
+ }
+ }
+ override fun serialize(encoder: Encoder, value: LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc) {
+ when (value) {
+ is LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc.Variant1 -> encoder.encodeSerializableValue(serializer(), value.value)
+ is LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc.Value3CB30CBF -> encoder.encodeSerializableValue(serializer(), value.value)
+ }
+ }
+}
+
+@Serializable
+data class LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBF(
+ @SerialName("src") val `src`: String,
+ @SerialName("name") val `name`: String? = null,
+ @SerialName("modelId") val `modelId`: String? = null,
+ @SerialName("registryPath") val `registryPath`: String? = null,
+ @SerialName("registrySource") val `registrySource`: String? = null,
+ @SerialName("blobCoreKey") val `blobCoreKey`: String? = null,
+ @SerialName("blobIndex") val `blobIndex`: Double? = null,
+ @SerialName("engine") val `engine`: String? = null,
+ @SerialName("expectedSize") val `expectedSize`: Double? = null,
+ @SerialName("sha256Checksum") val `sha256Checksum`: String? = null,
+ @SerialName("addon") val `addon`: LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon? = null,
+)
+
+@Serializable(with = LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddonSerializer::class)
+sealed class LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon {
+ data class LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcAddon(val value: io.tether.qvac.sdk.generated.schema.LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcAddon) : LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon()
+ data class Variant2(val value: String) : LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon()
+}
+internal object LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddonSerializer : KSerializer {
+ override val descriptor = kotlinx.serialization.descriptors.buildClassSerialDescriptor("LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon")
+ private val shapes = listOf(
+ Json.parseToJsonElement("{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"string\",\"const\":\"vad\"}").jsonObject,
+ )
+ override fun deserialize(decoder: Decoder): LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon {
+ val input = decoder as? JsonDecoder ?: throw SerializationException("QVAC unions require JSON")
+ val element = input.decodeJsonElement()
+ return when (selectWireVariant(element, shapes)) {
+ 0 -> LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon.LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcAddon(input.json.decodeFromJsonElement(serializer(), element))
+ 1 -> LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon.Variant2(input.json.decodeFromJsonElement(serializer(), element))
+ else -> throw SerializationException("No matching LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon variant")
+ }
+ }
+ override fun serialize(encoder: Encoder, value: LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon) {
+ when (value) {
+ is LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon.LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcAddon -> encoder.encodeSerializableValue(serializer(), value.value)
+ is LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc3CB30CBFAddon.Variant2 -> encoder.encodeSerializableValue(serializer(), value.value)
+ }
+ }
+}
+
+@Serializable
+enum class LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcAddon {
+ @SerialName("llamacpp-completion") `LLAMACPPCOMPLETION`,
+ @SerialName("whispercpp-transcription") `WHISPERCPPTRANSCRIPTION`,
+ @SerialName("bci-whispercpp-transcription") `BCIWHISPERCPPTRANSCRIPTION`,
+ @SerialName("llamacpp-embedding") `LLAMACPPEMBEDDING`,
+ @SerialName("llamacpp-decision") `LLAMACPPDECISION`,
+ @SerialName("llamacpp-rerank") `LLAMACPPRERANK`,
+ @SerialName("nmtcpp-translation") `NMTCPPTRANSLATION`,
+ @SerialName("onnx-tts") `ONNXTTS`,
+ @SerialName("tts-ggml") `TTSGGML`,
+ @SerialName("parakeet-transcription") `PARAKEETTRANSCRIPTION`,
+ @SerialName("moss-transcribe") `MOSSTRANSCRIBE`,
+ @SerialName("ggml-ocr") `GGMLOCR`,
+ @SerialName("sdcpp-generation") `SDCPPGENERATION`,
+ @SerialName("audiogen-ggml") `AUDIOGENGGML`,
+ @SerialName("ggml-vla") `GGMLVLA`,
+ @SerialName("ggml-classification") `GGMLCLASSIFICATION`,
+ @SerialName("llm") `LLM`,
+ @SerialName("whisper") `WHISPER`,
+ @SerialName("bci") `BCI`,
+ @SerialName("embeddings") `EMBEDDINGS`,
+ @SerialName("nmt") `NMT`,
+ @SerialName("parakeet") `PARAKEET`,
+ @SerialName("tts") `TTS`,
+ @SerialName("ocr") `OCR`,
+ @SerialName("diffusion") `DIFFUSION`,
+ @SerialName("audiogen") `AUDIOGEN`,
+ @SerialName("vla") `VLA`,
+ @SerialName("classification") `CLASSIFICATION`,
+}
+
+@Serializable(with = LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcSerializer::class)
+sealed class LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc {
+ data class Variant1(val value: String) : LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc()
+ data class Value28BA71CA(val value: io.tether.qvac.sdk.generated.schema.LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CA) : LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc()
+}
+internal object LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcSerializer : KSerializer {
+ override val descriptor = kotlinx.serialization.descriptors.buildClassSerialDescriptor("LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc")
+ private val shapes = listOf(
+ Json.parseToJsonElement("{\"type\":\"string\"}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}").jsonObject,
+ )
+ override fun deserialize(decoder: Decoder): LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc {
+ val input = decoder as? JsonDecoder ?: throw SerializationException("QVAC unions require JSON")
+ val element = input.decodeJsonElement()
+ return when (selectWireVariant(element, shapes)) {
+ 0 -> LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc.Variant1(input.json.decodeFromJsonElement(serializer(), element))
+ 1 -> LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc.Value28BA71CA(input.json.decodeFromJsonElement(serializer(), element))
+ else -> throw SerializationException("No matching LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc variant")
+ }
+ }
+ override fun serialize(encoder: Encoder, value: LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc) {
+ when (value) {
+ is LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc.Variant1 -> encoder.encodeSerializableValue(serializer(), value.value)
+ is LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc.Value28BA71CA -> encoder.encodeSerializableValue(serializer(), value.value)
+ }
+ }
+}
+
+@Serializable
+data class LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CA(
+ @SerialName("src") val `src`: String,
+ @SerialName("name") val `name`: String? = null,
+ @SerialName("modelId") val `modelId`: String? = null,
+ @SerialName("registryPath") val `registryPath`: String? = null,
+ @SerialName("registrySource") val `registrySource`: String? = null,
+ @SerialName("blobCoreKey") val `blobCoreKey`: String? = null,
+ @SerialName("blobIndex") val `blobIndex`: Double? = null,
+ @SerialName("engine") val `engine`: String? = null,
+ @SerialName("expectedSize") val `expectedSize`: Double? = null,
+ @SerialName("sha256Checksum") val `sha256Checksum`: String? = null,
+ @SerialName("addon") val `addon`: LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon? = null,
+)
+
+@Serializable(with = LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddonSerializer::class)
+sealed class LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon {
+ data class LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcAddon(val value: io.tether.qvac.sdk.generated.schema.LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcAddon) : LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon()
+ data class Variant2(val value: String) : LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon()
+}
+internal object LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddonSerializer : KSerializer {
+ override val descriptor = kotlinx.serialization.descriptors.buildClassSerialDescriptor("LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon")
+ private val shapes = listOf(
+ Json.parseToJsonElement("{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"string\",\"const\":\"vad\"}").jsonObject,
+ )
+ override fun deserialize(decoder: Decoder): LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon {
+ val input = decoder as? JsonDecoder ?: throw SerializationException("QVAC unions require JSON")
+ val element = input.decodeJsonElement()
+ return when (selectWireVariant(element, shapes)) {
+ 0 -> LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon.LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcAddon(input.json.decodeFromJsonElement(serializer(), element))
+ 1 -> LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon.Variant2(input.json.decodeFromJsonElement(serializer(), element))
+ else -> throw SerializationException("No matching LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon variant")
+ }
+ }
+ override fun serialize(encoder: Encoder, value: LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon) {
+ when (value) {
+ is LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon.LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcAddon -> encoder.encodeSerializableValue(serializer(), value.value)
+ is LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc28BA71CAAddon.Variant2 -> encoder.encodeSerializableValue(serializer(), value.value)
+ }
+ }
+}
+
+@Serializable
+enum class LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcAddon {
+ @SerialName("llamacpp-completion") `LLAMACPPCOMPLETION`,
+ @SerialName("whispercpp-transcription") `WHISPERCPPTRANSCRIPTION`,
+ @SerialName("bci-whispercpp-transcription") `BCIWHISPERCPPTRANSCRIPTION`,
+ @SerialName("llamacpp-embedding") `LLAMACPPEMBEDDING`,
+ @SerialName("llamacpp-decision") `LLAMACPPDECISION`,
+ @SerialName("llamacpp-rerank") `LLAMACPPRERANK`,
+ @SerialName("nmtcpp-translation") `NMTCPPTRANSLATION`,
+ @SerialName("onnx-tts") `ONNXTTS`,
+ @SerialName("tts-ggml") `TTSGGML`,
+ @SerialName("parakeet-transcription") `PARAKEETTRANSCRIPTION`,
+ @SerialName("moss-transcribe") `MOSSTRANSCRIBE`,
+ @SerialName("ggml-ocr") `GGMLOCR`,
+ @SerialName("sdcpp-generation") `SDCPPGENERATION`,
+ @SerialName("audiogen-ggml") `AUDIOGENGGML`,
+ @SerialName("ggml-vla") `GGMLVLA`,
+ @SerialName("ggml-classification") `GGMLCLASSIFICATION`,
+ @SerialName("llm") `LLM`,
+ @SerialName("whisper") `WHISPER`,
+ @SerialName("bci") `BCI`,
+ @SerialName("embeddings") `EMBEDDINGS`,
+ @SerialName("nmt") `NMT`,
+ @SerialName("parakeet") `PARAKEET`,
+ @SerialName("tts") `TTS`,
+ @SerialName("ocr") `OCR`,
+ @SerialName("diffusion") `DIFFUSION`,
+ @SerialName("audiogen") `AUDIOGEN`,
+ @SerialName("vla") `VLA`,
+ @SerialName("classification") `CLASSIFICATION`,
+}
+
@Serializable
data class LoadModelSrcRequestTtsGgmlModelConfigParler(
@EncodeDefault(EncodeDefault.Mode.ALWAYS)
@@ -6629,6 +6856,8 @@ data class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3(
@SerialName("pace") val `pace`: LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Pace? = null,
@SerialName("instruct") val `instruct`: LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Instruct? = null,
@SerialName("promptText") val `promptText`: String? = null,
+ @SerialName("flowCutPrompt") val `flowCutPrompt`: Boolean? = null,
+ @SerialName("vulkanDevice") val `vulkanDevice`: Long? = null,
@SerialName("useGPU") val `useGPU`: Boolean? = null,
@SerialName("outputSampleRate") val `outputSampleRate`: Long? = null,
@SerialName("streamChunkTokens") val `streamChunkTokens`: Long? = null,
@@ -11706,6 +11935,9 @@ data class TextToSpeechRequest(
@SerialName("noise") val `noise`: String? = null,
@SerialName("reverb") val `reverb`: String? = null,
@SerialName("quality") val `quality`: String? = null,
+ @SerialName("instruct") val `instruct`: TextToSpeechRequestInstruct? = null,
+ @SerialName("referenceAudioSrc") val `referenceAudioSrc`: TextToSpeechRequestReferenceAudioSrc? = null,
+ @SerialName("referenceText") val `referenceText`: String? = null,
@SerialName("seconds") val `seconds`: Double? = null,
@SerialName("negativePrompt") val `negativePrompt`: String? = null,
@SerialName("steps") val `steps`: Long? = null,
@@ -11751,6 +11983,177 @@ enum class TextToSpeechRequestPace {
@SerialName("fast") `FAST`,
}
+@Serializable(with = TextToSpeechRequestInstructSerializer::class)
+sealed class TextToSpeechRequestInstruct {
+ data class Variant1(val value: String) : TextToSpeechRequestInstruct()
+ data class F473B199(val value: io.tether.qvac.sdk.generated.schema.TextToSpeechRequestInstructF473B199) : TextToSpeechRequestInstruct()
+}
+internal object TextToSpeechRequestInstructSerializer : KSerializer {
+ override val descriptor = kotlinx.serialization.descriptors.buildClassSerialDescriptor("TextToSpeechRequestInstruct")
+ private val shapes = listOf(
+ Json.parseToJsonElement("{\"type\":\"string\"}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"properties\":{\"dialect\":{\"type\":\"string\",\"enum\":[\"cantonese\",\"northeastern\",\"gansu\",\"guizhou\",\"henan\",\"hubei\",\"hunan\",\"jiangxi\",\"minnan\",\"ningxia\",\"shanxi\",\"shaanxi\",\"shandong\",\"shanghai\",\"sichuan\",\"tianjin\",\"yunnan\"]},\"volume\":{\"type\":\"string\",\"enum\":[\"loud\",\"soft\"]},\"style\":{\"type\":\"string\",\"enum\":[\"peppa\",\"robot\"]}}}").jsonObject,
+ )
+ override fun deserialize(decoder: Decoder): TextToSpeechRequestInstruct {
+ val input = decoder as? JsonDecoder ?: throw SerializationException("QVAC unions require JSON")
+ val element = input.decodeJsonElement()
+ return when (selectWireVariant(element, shapes)) {
+ 0 -> TextToSpeechRequestInstruct.Variant1(input.json.decodeFromJsonElement(serializer(), element))
+ 1 -> TextToSpeechRequestInstruct.F473B199(input.json.decodeFromJsonElement(serializer(), element))
+ else -> throw SerializationException("No matching TextToSpeechRequestInstruct variant")
+ }
+ }
+ override fun serialize(encoder: Encoder, value: TextToSpeechRequestInstruct) {
+ when (value) {
+ is TextToSpeechRequestInstruct.Variant1 -> encoder.encodeSerializableValue(serializer(), value.value)
+ is TextToSpeechRequestInstruct.F473B199 -> encoder.encodeSerializableValue(serializer(), value.value)
+ }
+ }
+}
+
+@Serializable
+data class TextToSpeechRequestInstructF473B199(
+ @SerialName("dialect") val `dialect`: TextToSpeechRequestInstructDialect? = null,
+ @SerialName("volume") val `volume`: TextToSpeechRequestInstructVolume? = null,
+ @SerialName("style") val `style`: TextToSpeechRequestInstructStyle? = null,
+)
+
+@Serializable
+enum class TextToSpeechRequestInstructDialect {
+ @SerialName("cantonese") `CANTONESE`,
+ @SerialName("northeastern") `NORTHEASTERN`,
+ @SerialName("gansu") `GANSU`,
+ @SerialName("guizhou") `GUIZHOU`,
+ @SerialName("henan") `HENAN`,
+ @SerialName("hubei") `HUBEI`,
+ @SerialName("hunan") `HUNAN`,
+ @SerialName("jiangxi") `JIANGXI`,
+ @SerialName("minnan") `MINNAN`,
+ @SerialName("ningxia") `NINGXIA`,
+ @SerialName("shanxi") `SHANXI`,
+ @SerialName("shaanxi") `SHAANXI`,
+ @SerialName("shandong") `SHANDONG`,
+ @SerialName("shanghai") `SHANGHAI`,
+ @SerialName("sichuan") `SICHUAN`,
+ @SerialName("tianjin") `TIANJIN`,
+ @SerialName("yunnan") `YUNNAN`,
+}
+
+@Serializable
+enum class TextToSpeechRequestInstructVolume {
+ @SerialName("loud") `LOUD`,
+ @SerialName("soft") `SOFT`,
+}
+
+@Serializable
+enum class TextToSpeechRequestInstructStyle {
+ @SerialName("peppa") `PEPPA`,
+ @SerialName("robot") `ROBOT`,
+}
+
+@Serializable(with = TextToSpeechRequestReferenceAudioSrcSerializer::class)
+sealed class TextToSpeechRequestReferenceAudioSrc {
+ data class Variant1(val value: String) : TextToSpeechRequestReferenceAudioSrc()
+ data class Value178355BE(val value: io.tether.qvac.sdk.generated.schema.TextToSpeechRequestReferenceAudioSrc178355BE) : TextToSpeechRequestReferenceAudioSrc()
+}
+internal object TextToSpeechRequestReferenceAudioSrcSerializer : KSerializer {
+ override val descriptor = kotlinx.serialization.descriptors.buildClassSerialDescriptor("TextToSpeechRequestReferenceAudioSrc")
+ private val shapes = listOf(
+ Json.parseToJsonElement("{\"type\":\"string\"}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"src\"],\"properties\":{\"src\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"modelId\":{\"type\":\"string\"},\"registryPath\":{\"type\":\"string\"},\"registrySource\":{\"type\":\"string\"},\"blobCoreKey\":{\"type\":\"string\"},\"blobIndex\":{\"type\":\"number\"},\"engine\":{\"type\":\"string\"},\"expectedSize\":{\"type\":\"number\"},\"sha256Checksum\":{\"type\":\"string\"},\"addon\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]},{\"type\":\"string\",\"const\":\"vad\"}]}}}").jsonObject,
+ )
+ override fun deserialize(decoder: Decoder): TextToSpeechRequestReferenceAudioSrc {
+ val input = decoder as? JsonDecoder ?: throw SerializationException("QVAC unions require JSON")
+ val element = input.decodeJsonElement()
+ return when (selectWireVariant(element, shapes)) {
+ 0 -> TextToSpeechRequestReferenceAudioSrc.Variant1(input.json.decodeFromJsonElement(serializer(), element))
+ 1 -> TextToSpeechRequestReferenceAudioSrc.Value178355BE(input.json.decodeFromJsonElement(serializer(), element))
+ else -> throw SerializationException("No matching TextToSpeechRequestReferenceAudioSrc variant")
+ }
+ }
+ override fun serialize(encoder: Encoder, value: TextToSpeechRequestReferenceAudioSrc) {
+ when (value) {
+ is TextToSpeechRequestReferenceAudioSrc.Variant1 -> encoder.encodeSerializableValue(serializer(), value.value)
+ is TextToSpeechRequestReferenceAudioSrc.Value178355BE -> encoder.encodeSerializableValue(serializer(), value.value)
+ }
+ }
+}
+
+@Serializable
+data class TextToSpeechRequestReferenceAudioSrc178355BE(
+ @SerialName("src") val `src`: String,
+ @SerialName("name") val `name`: String? = null,
+ @SerialName("modelId") val `modelId`: String? = null,
+ @SerialName("registryPath") val `registryPath`: String? = null,
+ @SerialName("registrySource") val `registrySource`: String? = null,
+ @SerialName("blobCoreKey") val `blobCoreKey`: String? = null,
+ @SerialName("blobIndex") val `blobIndex`: Double? = null,
+ @SerialName("engine") val `engine`: String? = null,
+ @SerialName("expectedSize") val `expectedSize`: Double? = null,
+ @SerialName("sha256Checksum") val `sha256Checksum`: String? = null,
+ @SerialName("addon") val `addon`: TextToSpeechRequestReferenceAudioSrc178355BEAddon? = null,
+)
+
+@Serializable(with = TextToSpeechRequestReferenceAudioSrc178355BEAddonSerializer::class)
+sealed class TextToSpeechRequestReferenceAudioSrc178355BEAddon {
+ data class TextToSpeechRequestReferenceAudioSrcAddon(val value: io.tether.qvac.sdk.generated.schema.TextToSpeechRequestReferenceAudioSrcAddon) : TextToSpeechRequestReferenceAudioSrc178355BEAddon()
+ data class Variant2(val value: String) : TextToSpeechRequestReferenceAudioSrc178355BEAddon()
+}
+internal object TextToSpeechRequestReferenceAudioSrc178355BEAddonSerializer : KSerializer {
+ override val descriptor = kotlinx.serialization.descriptors.buildClassSerialDescriptor("TextToSpeechRequestReferenceAudioSrc178355BEAddon")
+ private val shapes = listOf(
+ Json.parseToJsonElement("{\"type\":\"string\",\"enum\":[\"llamacpp-completion\",\"whispercpp-transcription\",\"bci-whispercpp-transcription\",\"llamacpp-embedding\",\"llamacpp-decision\",\"llamacpp-rerank\",\"nmtcpp-translation\",\"onnx-tts\",\"tts-ggml\",\"parakeet-transcription\",\"moss-transcribe\",\"ggml-ocr\",\"sdcpp-generation\",\"audiogen-ggml\",\"ggml-vla\",\"ggml-classification\",\"llm\",\"whisper\",\"bci\",\"embeddings\",\"nmt\",\"parakeet\",\"tts\",\"ocr\",\"diffusion\",\"audiogen\",\"vla\",\"classification\"]}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"string\",\"const\":\"vad\"}").jsonObject,
+ )
+ override fun deserialize(decoder: Decoder): TextToSpeechRequestReferenceAudioSrc178355BEAddon {
+ val input = decoder as? JsonDecoder ?: throw SerializationException("QVAC unions require JSON")
+ val element = input.decodeJsonElement()
+ return when (selectWireVariant(element, shapes)) {
+ 0 -> TextToSpeechRequestReferenceAudioSrc178355BEAddon.TextToSpeechRequestReferenceAudioSrcAddon(input.json.decodeFromJsonElement(serializer(), element))
+ 1 -> TextToSpeechRequestReferenceAudioSrc178355BEAddon.Variant2(input.json.decodeFromJsonElement(serializer(), element))
+ else -> throw SerializationException("No matching TextToSpeechRequestReferenceAudioSrc178355BEAddon variant")
+ }
+ }
+ override fun serialize(encoder: Encoder, value: TextToSpeechRequestReferenceAudioSrc178355BEAddon) {
+ when (value) {
+ is TextToSpeechRequestReferenceAudioSrc178355BEAddon.TextToSpeechRequestReferenceAudioSrcAddon -> encoder.encodeSerializableValue(serializer(), value.value)
+ is TextToSpeechRequestReferenceAudioSrc178355BEAddon.Variant2 -> encoder.encodeSerializableValue(serializer(), value.value)
+ }
+ }
+}
+
+@Serializable
+enum class TextToSpeechRequestReferenceAudioSrcAddon {
+ @SerialName("llamacpp-completion") `LLAMACPPCOMPLETION`,
+ @SerialName("whispercpp-transcription") `WHISPERCPPTRANSCRIPTION`,
+ @SerialName("bci-whispercpp-transcription") `BCIWHISPERCPPTRANSCRIPTION`,
+ @SerialName("llamacpp-embedding") `LLAMACPPEMBEDDING`,
+ @SerialName("llamacpp-decision") `LLAMACPPDECISION`,
+ @SerialName("llamacpp-rerank") `LLAMACPPRERANK`,
+ @SerialName("nmtcpp-translation") `NMTCPPTRANSLATION`,
+ @SerialName("onnx-tts") `ONNXTTS`,
+ @SerialName("tts-ggml") `TTSGGML`,
+ @SerialName("parakeet-transcription") `PARAKEETTRANSCRIPTION`,
+ @SerialName("moss-transcribe") `MOSSTRANSCRIBE`,
+ @SerialName("ggml-ocr") `GGMLOCR`,
+ @SerialName("sdcpp-generation") `SDCPPGENERATION`,
+ @SerialName("audiogen-ggml") `AUDIOGENGGML`,
+ @SerialName("ggml-vla") `GGMLVLA`,
+ @SerialName("ggml-classification") `GGMLCLASSIFICATION`,
+ @SerialName("llm") `LLM`,
+ @SerialName("whisper") `WHISPER`,
+ @SerialName("bci") `BCI`,
+ @SerialName("embeddings") `EMBEDDINGS`,
+ @SerialName("nmt") `NMT`,
+ @SerialName("parakeet") `PARAKEET`,
+ @SerialName("tts") `TTS`,
+ @SerialName("ocr") `OCR`,
+ @SerialName("diffusion") `DIFFUSION`,
+ @SerialName("audiogen") `AUDIOGEN`,
+ @SerialName("vla") `VLA`,
+ @SerialName("classification") `CLASSIFICATION`,
+}
+
@Serializable
data class TextToSpeechRequestMessagesItem(
@SerialName("role") val `role`: TextToSpeechRequestMessagesItemRole,
@@ -11785,6 +12188,9 @@ data class TextToSpeechStreamRequest(
@SerialName("noise") val `noise`: String? = null,
@SerialName("reverb") val `reverb`: String? = null,
@SerialName("quality") val `quality`: String? = null,
+ @SerialName("instruct") val `instruct`: TextToSpeechRequestInstruct? = null,
+ @SerialName("referenceAudioSrc") val `referenceAudioSrc`: TextToSpeechRequestReferenceAudioSrc? = null,
+ @SerialName("referenceText") val `referenceText`: String? = null,
@EncodeDefault(EncodeDefault.Mode.ALWAYS)
@SerialName("type") val `type`: String = "textToSpeechStream",
)
@@ -12455,8 +12861,8 @@ internal object AnyResponseSerializer : KSerializer {
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"state\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"state\"},\"state\":{\"type\":\"string\",\"enum\":[\"active\",\"suspending\",\"suspended\",\"resuming\"]}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"stopRpcServer\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"suspend\"}}}").jsonObject,
- Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"buffer\",\"done\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"textToSpeech\"},\"text\":{\"type\":\"string\"},\"buffer\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"pcm\":{\"type\":\"string\"},\"done\":{\"type\":\"boolean\"},\"sampleRate\":{\"type\":\"integer\"},\"stats\":{\"type\":\"object\",\"properties\":{\"audioDuration\":{\"type\":\"number\"},\"totalTime\":{\"type\":\"number\"},\"realTimeFactor\":{\"type\":\"number\"},\"tokensPerSecond\":{\"type\":\"number\"},\"totalSamples\":{\"type\":\"number\"},\"generatedFrames\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"number\"},\"backendId\":{\"type\":\"number\"},\"gpuUnsupported\":{\"type\":\"number\"},\"enhancerBackendDevice\":{\"type\":\"number\"},\"enhancerBackendId\":{\"type\":\"number\"},\"denoiserBackendDevice\":{\"type\":\"number\"},\"denoiserBackendId\":{\"type\":\"number\"},\"codecSidecarLoaded\":{\"type\":\"number\"},\"codecOnCoreml\":{\"type\":\"number\"}}},\"chunkIndex\":{\"type\":\"integer\"},\"sentenceChunk\":{\"type\":\"string\"},\"isLast\":{\"type\":\"boolean\"},\"stopReason\":{\"type\":\"string\",\"enum\":[\"completed\",\"cancelled\"]}}}").jsonObject,
- Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"buffer\",\"done\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"textToSpeechStream\"},\"buffer\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"pcm\":{\"type\":\"string\"},\"done\":{\"type\":\"boolean\"},\"sampleRate\":{\"type\":\"integer\"},\"stats\":{\"type\":\"object\",\"properties\":{\"audioDuration\":{\"type\":\"number\"},\"totalTime\":{\"type\":\"number\"},\"realTimeFactor\":{\"type\":\"number\"},\"tokensPerSecond\":{\"type\":\"number\"},\"totalSamples\":{\"type\":\"number\"},\"generatedFrames\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"number\"},\"backendId\":{\"type\":\"number\"},\"gpuUnsupported\":{\"type\":\"number\"},\"enhancerBackendDevice\":{\"type\":\"number\"},\"enhancerBackendId\":{\"type\":\"number\"},\"denoiserBackendDevice\":{\"type\":\"number\"},\"denoiserBackendId\":{\"type\":\"number\"},\"codecSidecarLoaded\":{\"type\":\"number\"},\"codecOnCoreml\":{\"type\":\"number\"}}},\"chunkIndex\":{\"type\":\"integer\"},\"sentenceChunk\":{\"type\":\"string\"},\"isLast\":{\"type\":\"boolean\"},\"stopReason\":{\"type\":\"string\",\"enum\":[\"completed\",\"cancelled\"]}}}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"buffer\",\"done\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"textToSpeech\"},\"text\":{\"type\":\"string\"},\"buffer\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"pcm\":{\"type\":\"string\"},\"done\":{\"type\":\"boolean\"},\"sampleRate\":{\"type\":\"integer\"},\"stats\":{\"type\":\"object\",\"properties\":{\"audioDuration\":{\"type\":\"number\"},\"totalTime\":{\"type\":\"number\"},\"realTimeFactor\":{\"type\":\"number\"},\"firstAudioMs\":{\"type\":\"number\"},\"tokensPerSecond\":{\"type\":\"number\"},\"totalSamples\":{\"type\":\"number\"},\"generatedFrames\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"number\"},\"backendId\":{\"type\":\"number\"},\"gpuUnsupported\":{\"type\":\"number\"},\"enhancerBackendDevice\":{\"type\":\"number\"},\"enhancerBackendId\":{\"type\":\"number\"},\"denoiserBackendDevice\":{\"type\":\"number\"},\"denoiserBackendId\":{\"type\":\"number\"},\"codecSidecarLoaded\":{\"type\":\"number\"},\"codecOnCoreml\":{\"type\":\"number\"},\"t3Ms\":{\"type\":\"number\"},\"s3genMs\":{\"type\":\"number\"},\"t3Tokens\":{\"type\":\"number\"},\"stageTotalMs\":{\"type\":\"number\"},\"lmPrefillMs\":{\"type\":\"number\"},\"lmDecodeMs\":{\"type\":\"number\"},\"flowFrontendMs\":{\"type\":\"number\"},\"ditEulerMs\":{\"type\":\"number\"},\"hiftF0Ms\":{\"type\":\"number\"},\"hiftSourceMs\":{\"type\":\"number\"},\"hiftStftMs\":{\"type\":\"number\"},\"hiftDecodeMs\":{\"type\":\"number\"},\"decodeSteps\":{\"type\":\"number\"},\"speechTokens\":{\"type\":\"number\"},\"flowFrames\":{\"type\":\"number\"},\"melFrames\":{\"type\":\"number\"},\"textIds\":{\"type\":\"number\"},\"promptSpeechTokens\":{\"type\":\"number\"},\"voiceEncodeMs\":{\"type\":\"number\"},\"promptMs\":{\"type\":\"number\"},\"prefillMs\":{\"type\":\"number\"},\"sampleMs\":{\"type\":\"number\"},\"fastDecodeMs\":{\"type\":\"number\"},\"slowDecodeMs\":{\"type\":\"number\"},\"codecLatentMs\":{\"type\":\"number\"},\"codecSynthMs\":{\"type\":\"number\"},\"resampleMs\":{\"type\":\"number\"}}},\"chunkIndex\":{\"type\":\"integer\"},\"sentenceChunk\":{\"type\":\"string\"},\"isLast\":{\"type\":\"boolean\"},\"stopReason\":{\"type\":\"string\",\"enum\":[\"completed\",\"cancelled\"]}}}").jsonObject,
+ Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"buffer\",\"done\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"textToSpeechStream\"},\"buffer\":{\"type\":\"array\",\"items\":{\"type\":\"number\"}},\"pcm\":{\"type\":\"string\"},\"done\":{\"type\":\"boolean\"},\"sampleRate\":{\"type\":\"integer\"},\"stats\":{\"type\":\"object\",\"properties\":{\"audioDuration\":{\"type\":\"number\"},\"totalTime\":{\"type\":\"number\"},\"realTimeFactor\":{\"type\":\"number\"},\"firstAudioMs\":{\"type\":\"number\"},\"tokensPerSecond\":{\"type\":\"number\"},\"totalSamples\":{\"type\":\"number\"},\"generatedFrames\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"number\"},\"backendId\":{\"type\":\"number\"},\"gpuUnsupported\":{\"type\":\"number\"},\"enhancerBackendDevice\":{\"type\":\"number\"},\"enhancerBackendId\":{\"type\":\"number\"},\"denoiserBackendDevice\":{\"type\":\"number\"},\"denoiserBackendId\":{\"type\":\"number\"},\"codecSidecarLoaded\":{\"type\":\"number\"},\"codecOnCoreml\":{\"type\":\"number\"},\"t3Ms\":{\"type\":\"number\"},\"s3genMs\":{\"type\":\"number\"},\"t3Tokens\":{\"type\":\"number\"},\"stageTotalMs\":{\"type\":\"number\"},\"lmPrefillMs\":{\"type\":\"number\"},\"lmDecodeMs\":{\"type\":\"number\"},\"flowFrontendMs\":{\"type\":\"number\"},\"ditEulerMs\":{\"type\":\"number\"},\"hiftF0Ms\":{\"type\":\"number\"},\"hiftSourceMs\":{\"type\":\"number\"},\"hiftStftMs\":{\"type\":\"number\"},\"hiftDecodeMs\":{\"type\":\"number\"},\"decodeSteps\":{\"type\":\"number\"},\"speechTokens\":{\"type\":\"number\"},\"flowFrames\":{\"type\":\"number\"},\"melFrames\":{\"type\":\"number\"},\"textIds\":{\"type\":\"number\"},\"promptSpeechTokens\":{\"type\":\"number\"},\"voiceEncodeMs\":{\"type\":\"number\"},\"promptMs\":{\"type\":\"number\"},\"prefillMs\":{\"type\":\"number\"},\"sampleMs\":{\"type\":\"number\"},\"fastDecodeMs\":{\"type\":\"number\"},\"slowDecodeMs\":{\"type\":\"number\"},\"codecLatentMs\":{\"type\":\"number\"},\"codecSynthMs\":{\"type\":\"number\"},\"resampleMs\":{\"type\":\"number\"}}},\"chunkIndex\":{\"type\":\"integer\"},\"sentenceChunk\":{\"type\":\"string\"},\"isLast\":{\"type\":\"boolean\"},\"stopReason\":{\"type\":\"string\",\"enum\":[\"completed\",\"cancelled\"]}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"text\":{\"type\":\"string\"},\"done\":{\"type\":\"boolean\"},\"stats\":{\"type\":\"object\",\"properties\":{\"audioDuration\":{\"type\":\"number\"},\"realTimeFactor\":{\"type\":\"number\"},\"tokensPerSecond\":{\"type\":\"number\"},\"totalTokens\":{\"type\":\"number\"},\"totalSegments\":{\"type\":\"number\"},\"whisperEncodeTime\":{\"type\":\"number\"},\"whisperDecodeTime\":{\"type\":\"number\"},\"encoderTime\":{\"type\":\"number\"},\"decoderTime\":{\"type\":\"number\"},\"melSpecTime\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"number\"},\"backendId\":{\"type\":\"number\"},\"gpuUnsupported\":{\"type\":\"number\"},\"gpuMemTotalMb\":{\"type\":\"number\"},\"gpuMemFreeMb\":{\"type\":\"number\"},\"totalTime\":{\"type\":\"number\"},\"totalWallMs\":{\"type\":\"number\"},\"totalSamples\":{\"type\":\"number\"},\"processCalls\":{\"type\":\"number\"},\"whisperSampleMs\":{\"type\":\"number\"},\"whisperBatchdMs\":{\"type\":\"number\"},\"whisperPromptMs\":{\"type\":\"number\"},\"totalTranscriptions\":{\"type\":\"number\"},\"modelLoadMs\":{\"type\":\"number\"},\"totalEncodedFrames\":{\"type\":\"number\"},\"encoderOnCoreml\":{\"type\":\"number\"},\"encoderUsedCoreml\":{\"type\":\"number\"},\"aoscActive\":{\"type\":\"number\"},\"prefillTime\":{\"type\":\"number\"},\"audioTokens\":{\"type\":\"number\"},\"promptTokens\":{\"type\":\"number\"},\"generatedTokens\":{\"type\":\"number\"}}},\"error\":{\"type\":\"string\"},\"segment\":{\"type\":\"object\",\"required\":[\"text\",\"startMs\",\"endMs\",\"append\",\"id\"],\"properties\":{\"text\":{\"type\":\"string\"},\"startMs\":{\"type\":\"number\"},\"endMs\":{\"type\":\"number\"},\"append\":{\"type\":\"boolean\"},\"id\":{\"type\":\"number\"},\"speakerId\":{\"type\":\"integer\"},\"speaker\":{\"type\":\"string\"},\"speakerSegments\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"speakerId\",\"startMs\",\"endMs\"]}},\"isEndOfTurn\":{\"type\":\"boolean\"},\"startsWord\":{\"type\":\"boolean\"},\"language\":{\"type\":\"string\"},\"noSpeechProb\":{\"type\":\"number\"},\"speakerTurnNext\":{\"type\":\"boolean\"},\"tokens\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"text\",\"startMs\",\"endMs\",\"probability\"]}}}},\"vad\":{\"type\":\"object\",\"required\":[\"speaking\",\"probability\"],\"properties\":{\"speakerId\":{\"type\":\"integer\"},\"speaking\":{\"type\":\"boolean\"},\"probability\":{\"type\":\"number\"},\"timestamp\":{\"type\":\"number\"},\"source\":{\"type\":\"string\",\"enum\":[\"silero\",\"energy\",\"sortformer\"]}}},\"endOfTurn\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"source\",\"silenceDurationMs\"],\"properties\":{\"source\":{\"type\":\"string\",\"const\":\"whisper\"},\"silenceDurationMs\":{\"type\":\"number\"}}},{\"type\":\"object\",\"required\":[\"source\"],\"properties\":{\"source\":{\"type\":\"string\",\"const\":\"parakeet\"}}}]},\"diagnostics\":{\"type\":\"object\",\"required\":[\"selectedBackend\",\"selectedDevice\"],\"properties\":{\"selectedBackend\":{\"type\":\"string\"},\"selectedDevice\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"graphicsApi\":{\"type\":\"string\",\"enum\":[\"vulkan\",\"opencl\",\"opengl\",\"webgpu\",\"metal\",\"direct3d11\",\"direct3d12\",\"cuda\",\"levelZero\",\"rocm\"]},\"driver\":{\"type\":\"object\",\"required\":[\"name\"]},\"gpuId\":{\"type\":\"string\"},\"fallback\":{\"type\":\"object\",\"required\":[\"reason\"]},\"probe\":{\"type\":\"object\",\"required\":[\"status\",\"backend\"]}}},\"type\":{\"type\":\"string\",\"const\":\"transcribe\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"text\":{\"type\":\"string\"},\"done\":{\"type\":\"boolean\"},\"stats\":{\"type\":\"object\",\"properties\":{\"audioDuration\":{\"type\":\"number\"},\"realTimeFactor\":{\"type\":\"number\"},\"tokensPerSecond\":{\"type\":\"number\"},\"totalTokens\":{\"type\":\"number\"},\"totalSegments\":{\"type\":\"number\"},\"whisperEncodeTime\":{\"type\":\"number\"},\"whisperDecodeTime\":{\"type\":\"number\"},\"encoderTime\":{\"type\":\"number\"},\"decoderTime\":{\"type\":\"number\"},\"melSpecTime\":{\"type\":\"number\"},\"backendDevice\":{\"type\":\"number\"},\"backendId\":{\"type\":\"number\"},\"gpuUnsupported\":{\"type\":\"number\"},\"gpuMemTotalMb\":{\"type\":\"number\"},\"gpuMemFreeMb\":{\"type\":\"number\"},\"totalTime\":{\"type\":\"number\"},\"totalWallMs\":{\"type\":\"number\"},\"totalSamples\":{\"type\":\"number\"},\"processCalls\":{\"type\":\"number\"},\"whisperSampleMs\":{\"type\":\"number\"},\"whisperBatchdMs\":{\"type\":\"number\"},\"whisperPromptMs\":{\"type\":\"number\"},\"totalTranscriptions\":{\"type\":\"number\"},\"modelLoadMs\":{\"type\":\"number\"},\"totalEncodedFrames\":{\"type\":\"number\"},\"encoderOnCoreml\":{\"type\":\"number\"},\"encoderUsedCoreml\":{\"type\":\"number\"},\"aoscActive\":{\"type\":\"number\"},\"prefillTime\":{\"type\":\"number\"},\"audioTokens\":{\"type\":\"number\"},\"promptTokens\":{\"type\":\"number\"},\"generatedTokens\":{\"type\":\"number\"}}},\"error\":{\"type\":\"string\"},\"segment\":{\"type\":\"object\",\"required\":[\"text\",\"startMs\",\"endMs\",\"append\",\"id\"],\"properties\":{\"text\":{\"type\":\"string\"},\"startMs\":{\"type\":\"number\"},\"endMs\":{\"type\":\"number\"},\"append\":{\"type\":\"boolean\"},\"id\":{\"type\":\"number\"},\"speakerId\":{\"type\":\"integer\"},\"speaker\":{\"type\":\"string\"},\"speakerSegments\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"speakerId\",\"startMs\",\"endMs\"]}},\"isEndOfTurn\":{\"type\":\"boolean\"},\"startsWord\":{\"type\":\"boolean\"},\"language\":{\"type\":\"string\"},\"noSpeechProb\":{\"type\":\"number\"},\"speakerTurnNext\":{\"type\":\"boolean\"},\"tokens\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"text\",\"startMs\",\"endMs\",\"probability\"]}}}},\"vad\":{\"type\":\"object\",\"required\":[\"speaking\",\"probability\"],\"properties\":{\"speakerId\":{\"type\":\"integer\"},\"speaking\":{\"type\":\"boolean\"},\"probability\":{\"type\":\"number\"},\"timestamp\":{\"type\":\"number\"},\"source\":{\"type\":\"string\",\"enum\":[\"silero\",\"energy\",\"sortformer\"]}}},\"endOfTurn\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"source\",\"silenceDurationMs\"],\"properties\":{\"source\":{\"type\":\"string\",\"const\":\"whisper\"},\"silenceDurationMs\":{\"type\":\"number\"}}},{\"type\":\"object\",\"required\":[\"source\"],\"properties\":{\"source\":{\"type\":\"string\",\"const\":\"parakeet\"}}}]},\"diagnostics\":{\"type\":\"object\",\"required\":[\"selectedBackend\",\"selectedDevice\"],\"properties\":{\"selectedBackend\":{\"type\":\"string\"},\"selectedDevice\":{\"type\":\"string\",\"enum\":[\"cpu\",\"gpu\"]},\"graphicsApi\":{\"type\":\"string\",\"enum\":[\"vulkan\",\"opencl\",\"opengl\",\"webgpu\",\"metal\",\"direct3d11\",\"direct3d12\",\"cuda\",\"levelZero\",\"rocm\"]},\"driver\":{\"type\":\"object\",\"required\":[\"name\"]},\"gpuId\":{\"type\":\"string\"},\"fallback\":{\"type\":\"object\",\"required\":[\"reason\"]},\"probe\":{\"type\":\"object\",\"required\":[\"status\",\"backend\"]}}},\"type\":{\"type\":\"string\",\"const\":\"transcribeStream\"}}}").jsonObject,
Json.parseToJsonElement("{\"type\":\"object\",\"required\":[\"type\",\"token\"],\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"translate\"},\"token\":{\"type\":\"string\"},\"done\":{\"type\":\"boolean\"},\"stats\":{\"type\":\"object\",\"properties\":{\"totalTime\":{\"type\":\"number\"},\"totalTokens\":{\"type\":\"number\"},\"tokensPerSecond\":{\"type\":\"number\"},\"timeToFirstToken\":{\"type\":\"number\"},\"decodeTime\":{\"type\":\"number\"},\"encodeTime\":{\"type\":\"number\"},\"cacheTokens\":{\"type\":\"number\"}}},\"error\":{\"type\":\"string\"}}}").jsonObject,
@@ -18388,6 +18794,7 @@ data class TextToSpeechResponseStats(
@SerialName("audioDuration") val `audioDuration`: Double? = null,
@SerialName("totalTime") val `totalTime`: Double? = null,
@SerialName("realTimeFactor") val `realTimeFactor`: Double? = null,
+ @SerialName("firstAudioMs") val `firstAudioMs`: Double? = null,
@SerialName("tokensPerSecond") val `tokensPerSecond`: Double? = null,
@SerialName("totalSamples") val `totalSamples`: Double? = null,
@SerialName("generatedFrames") val `generatedFrames`: Double? = null,
@@ -18400,6 +18807,33 @@ data class TextToSpeechResponseStats(
@SerialName("denoiserBackendId") val `denoiserBackendId`: Double? = null,
@SerialName("codecSidecarLoaded") val `codecSidecarLoaded`: Double? = null,
@SerialName("codecOnCoreml") val `codecOnCoreml`: Double? = null,
+ @SerialName("t3Ms") val `t3Ms`: Double? = null,
+ @SerialName("s3genMs") val `s3genMs`: Double? = null,
+ @SerialName("t3Tokens") val `t3Tokens`: Double? = null,
+ @SerialName("stageTotalMs") val `stageTotalMs`: Double? = null,
+ @SerialName("lmPrefillMs") val `lmPrefillMs`: Double? = null,
+ @SerialName("lmDecodeMs") val `lmDecodeMs`: Double? = null,
+ @SerialName("flowFrontendMs") val `flowFrontendMs`: Double? = null,
+ @SerialName("ditEulerMs") val `ditEulerMs`: Double? = null,
+ @SerialName("hiftF0Ms") val `hiftF0Ms`: Double? = null,
+ @SerialName("hiftSourceMs") val `hiftSourceMs`: Double? = null,
+ @SerialName("hiftStftMs") val `hiftStftMs`: Double? = null,
+ @SerialName("hiftDecodeMs") val `hiftDecodeMs`: Double? = null,
+ @SerialName("decodeSteps") val `decodeSteps`: Double? = null,
+ @SerialName("speechTokens") val `speechTokens`: Double? = null,
+ @SerialName("flowFrames") val `flowFrames`: Double? = null,
+ @SerialName("melFrames") val `melFrames`: Double? = null,
+ @SerialName("textIds") val `textIds`: Double? = null,
+ @SerialName("promptSpeechTokens") val `promptSpeechTokens`: Double? = null,
+ @SerialName("voiceEncodeMs") val `voiceEncodeMs`: Double? = null,
+ @SerialName("promptMs") val `promptMs`: Double? = null,
+ @SerialName("prefillMs") val `prefillMs`: Double? = null,
+ @SerialName("sampleMs") val `sampleMs`: Double? = null,
+ @SerialName("fastDecodeMs") val `fastDecodeMs`: Double? = null,
+ @SerialName("slowDecodeMs") val `slowDecodeMs`: Double? = null,
+ @SerialName("codecLatentMs") val `codecLatentMs`: Double? = null,
+ @SerialName("codecSynthMs") val `codecSynthMs`: Double? = null,
+ @SerialName("resampleMs") val `resampleMs`: Double? = null,
)
@Serializable
diff --git a/packages/sdk-python/src/tetherto/qvac_sdk/_generated/models/__init__.py b/packages/sdk-python/src/tetherto/qvac_sdk/_generated/models/__init__.py
index cdb0a037a7b..37c9cbec915 100644
--- a/packages/sdk-python/src/tetherto/qvac_sdk/_generated/models/__init__.py
+++ b/packages/sdk-python/src/tetherto/qvac_sdk/_generated/models/__init__.py
@@ -640,6 +640,7 @@
Hotword,
InitImage,
Instruct,
+ Instruct1,
KvCache,
LlamaFitStats,
LoadedModelInfo,
@@ -873,7 +874,11 @@
LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrDenoiserModelSrcAddon,
LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrEnhancerModelSrc,
LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrEnhancerModelSrcAddon,
+ LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc,
+ LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcAddon,
LoadModelSrcRequestTtsGgmlModelConfigSupertonicPace,
+ LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc,
+ LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcAddon,
LoadModelSrcRequestTtsGgmlModelFitPolicy,
LoadModelSrcRequestWhispercppTranscription,
LoadModelSrcRequestWhispercppTranscriptionModelConfig,
@@ -1022,15 +1027,27 @@
Text3Item,
TextToSpeechRequest,
TextToSpeechRequestEmotion,
+ TextToSpeechRequestInstruct,
+ TextToSpeechRequestInstructDialect,
+ TextToSpeechRequestInstructStyle,
+ TextToSpeechRequestInstructVolume,
TextToSpeechRequestMessagesItem,
TextToSpeechRequestMessagesItemRole,
TextToSpeechRequestPace,
+ TextToSpeechRequestReferenceAudioSrc,
+ TextToSpeechRequestReferenceAudioSrcAddon,
TextToSpeechResponse,
TextToSpeechResponseStats,
TextToSpeechResponseStopReason,
TextToSpeechStreamRequest,
TextToSpeechStreamRequestEmotion,
+ TextToSpeechStreamRequestInstruct,
+ TextToSpeechStreamRequestInstructDialect,
+ TextToSpeechStreamRequestInstructStyle,
+ TextToSpeechStreamRequestInstructVolume,
TextToSpeechStreamRequestPace,
+ TextToSpeechStreamRequestReferenceAudioSrc,
+ TextToSpeechStreamRequestReferenceAudioSrcAddon,
TextToSpeechStreamRequestSentenceDelimiterPreset,
TextToSpeechStreamResponse,
TextToSpeechStreamResponseStats,
@@ -1790,6 +1807,7 @@
"Hotword",
"InitImage",
"Instruct",
+ "Instruct1",
"KvCache",
"LlamaFitStats",
"LoadModelCustomPluginRequest",
@@ -2021,7 +2039,11 @@
"LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrDenoiserModelSrcAddon",
"LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrEnhancerModelSrc",
"LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrEnhancerModelSrcAddon",
+ "LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc",
+ "LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcAddon",
"LoadModelSrcRequestTtsGgmlModelConfigSupertonicPace",
+ "LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc",
+ "LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcAddon",
"LoadModelSrcRequestTtsGgmlModelFitPolicy",
"LoadModelSrcRequestWhispercppTranscription",
"LoadModelSrcRequestWhispercppTranscriptionModelConfig",
@@ -2172,15 +2194,27 @@
"Text3Item",
"TextToSpeechRequest",
"TextToSpeechRequestEmotion",
+ "TextToSpeechRequestInstruct",
+ "TextToSpeechRequestInstructDialect",
+ "TextToSpeechRequestInstructStyle",
+ "TextToSpeechRequestInstructVolume",
"TextToSpeechRequestMessagesItem",
"TextToSpeechRequestMessagesItemRole",
"TextToSpeechRequestPace",
+ "TextToSpeechRequestReferenceAudioSrc",
+ "TextToSpeechRequestReferenceAudioSrcAddon",
"TextToSpeechResponse",
"TextToSpeechResponseStats",
"TextToSpeechResponseStopReason",
"TextToSpeechStreamRequest",
"TextToSpeechStreamRequestEmotion",
+ "TextToSpeechStreamRequestInstruct",
+ "TextToSpeechStreamRequestInstructDialect",
+ "TextToSpeechStreamRequestInstructStyle",
+ "TextToSpeechStreamRequestInstructVolume",
"TextToSpeechStreamRequestPace",
+ "TextToSpeechStreamRequestReferenceAudioSrc",
+ "TextToSpeechStreamRequestReferenceAudioSrcAddon",
"TextToSpeechStreamRequestSentenceDelimiterPreset",
"TextToSpeechStreamResponse",
"TextToSpeechStreamResponseStats",
diff --git a/packages/sdk-python/src/tetherto/qvac_sdk/_generated/models/_internal.py b/packages/sdk-python/src/tetherto/qvac_sdk/_generated/models/_internal.py
index 3201b514262..b281aff0344 100644
--- a/packages/sdk-python/src/tetherto/qvac_sdk/_generated/models/_internal.py
+++ b/packages/sdk-python/src/tetherto/qvac_sdk/_generated/models/_internal.py
@@ -15917,6 +15917,115 @@ class LoadModelSrcRequestTtsGgmlModelConfigChatterbox(GeneratedBaseModel):
ge=0.0,
),
] = None
+ stream_left_context_tokens: Annotated[
+ int | None,
+ Field(
+ alias="streamLeftContextTokens",
+ description="Already-emitted speech tokens S3Gen keeps as left context per native streaming chunk (typically 25–50), bounding the per-chunk cost on long utterances; 0 = the whole emitted prefix.",
+ ge=0,
+ le=2147483647,
+ ),
+ ] = None
+ batch_cfm_steps: Annotated[
+ int | None,
+ Field(
+ alias="batchCfmSteps",
+ description="CFM Euler step count for batch synthesis; 0 = the library default (2-step meanflow on Turbo, the model’s full schedule on multilingual). The multilingual engine does not floor it, so values well below its schedule under-integrate. `cfmSteps` keeps driving native streaming.",
+ ge=0,
+ le=2147483647,
+ ),
+ ] = None
+ n_predict: Annotated[
+ int | None,
+ Field(
+ alias="nPredict",
+ description="Cap on speech tokens T3 decodes per synthesis (~25 tokens ≈ 1 s); engine default 1000 (~40 s). Longer single calls also need `nCtx` to cover prompt plus generated tokens, or use `maxSentenceChars`.",
+ gt=0,
+ le=2147483647,
+ ),
+ ] = None
+ max_sentence_chars: Annotated[
+ int | None,
+ Field(
+ alias="maxSentenceChars",
+ description="Sentence auto-split: T3 + S3Gen run per segment of at most this many bytes (the reference CLI uses 180); 0 = off. `nPredict` then applies per segment.",
+ ge=0,
+ le=2147483647,
+ ),
+ ] = None
+ crossfade_ms: Annotated[
+ int | None,
+ Field(
+ alias="crossfadeMs",
+ description="Raised-cosine crossfade between auto-split batch segments, in milliseconds (engine default 30). Native streaming stays gapless.",
+ ge=0,
+ le=2147483647,
+ ),
+ ] = None
+ temperature: Annotated[
+ float | None,
+ Field(
+ description="T3 sampling temperature (engine default 0.8); 0 decodes greedily.",
+ ge=0.0,
+ ),
+ ] = None
+ top_k: Annotated[
+ int | None,
+ Field(
+ alias="topK",
+ description="T3 top-k sampling cutoff (engine default 1000); 0 disables the cutoff.",
+ ge=0,
+ le=2147483647,
+ ),
+ ] = None
+ top_p: Annotated[
+ float | None,
+ Field(
+ alias="topP",
+ description="T3 top-p (nucleus) sampling cutoff, 0 < p ≤ 1 (engine default 0.95).",
+ gt=0.0,
+ le=1.0,
+ ),
+ ] = None
+ repeat_penalty: Annotated[
+ float | None,
+ Field(
+ alias="repeatPenalty",
+ description="T3 repetition penalty (engine default 1.2); 1 = off.",
+ gt=0.0,
+ ),
+ ] = None
+ exaggeration: Annotated[
+ float | None,
+ Field(
+ description="Multilingual only: prosody intensity, above 0 more expressive, below 0 flatter (engine default 0.5). The Turbo variant ignores it."
+ ),
+ ] = None
+ cfg_weight: Annotated[
+ float | None,
+ Field(
+ alias="cfgWeight",
+ description="Multilingual only: T3 classifier-free-guidance scale (engine default 0.5); 0 disables it. Separate from `cfgRate`, which steers S3Gen.",
+ ge=0.0,
+ ),
+ ] = None
+ min_p: Annotated[
+ float | None,
+ Field(
+ alias="minP",
+ description="Multilingual only: min-p sampling threshold (engine default 0); 0 = off.",
+ ge=0.0,
+ le=1.0,
+ ),
+ ] = None
+ voice_dir: Annotated[
+ str | None,
+ Field(
+ alias="voiceDir",
+ description="Directory of pre-baked voice-conditioning tensors (the upstream CLI’s `--save-voice` output), loaded instead of preprocessing a reference recording. With `referenceAudioSrc` too, tensors missing from the directory are backfilled from the recording.",
+ min_length=1,
+ ),
+ ] = None
threads: Annotated[
int | None,
Field(
@@ -16295,193 +16404,116 @@ class LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrDenoiserModelSrc(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigSupertonic(GeneratedBaseModel):
- model_config = ConfigDict(
- extra="forbid",
- )
- tts_engine: Annotated[
- Literal["supertonic"],
- Field(alias="ttsEngine", description="TTS engine: Supertonic."),
- ] = "supertonic"
- language: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigSupertonicLanguage,
+class LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcAddon(Enum):
+ llamacpp_completion = "llamacpp-completion"
+ whispercpp_transcription = "whispercpp-transcription"
+ bci_whispercpp_transcription = "bci-whispercpp-transcription"
+ llamacpp_embedding = "llamacpp-embedding"
+ llamacpp_decision = "llamacpp-decision"
+ llamacpp_rerank = "llamacpp-rerank"
+ nmtcpp_translation = "nmtcpp-translation"
+ onnx_tts = "onnx-tts"
+ tts_ggml = "tts-ggml"
+ parakeet_transcription = "parakeet-transcription"
+ moss_transcribe = "moss-transcribe"
+ ggml_ocr = "ggml-ocr"
+ sdcpp_generation = "sdcpp-generation"
+ audiogen_ggml = "audiogen-ggml"
+ ggml_vla = "ggml-vla"
+ ggml_classification = "ggml-classification"
+ llm = "llm"
+ whisper = "whisper"
+ bci = "bci"
+ embeddings = "embeddings"
+ nmt = "nmt"
+ parakeet = "parakeet"
+ tts = "tts"
+ ocr = "ocr"
+ diffusion = "diffusion"
+ audiogen = "audiogen"
+ vla = "vla"
+ classification = "classification"
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc(GeneratedBaseModel):
+ src: Annotated[
+ str,
Field(
- description="Language code. Default `en`.",
- title="LoadModelSrcRequestTtsGgmlModelConfigSupertonicLanguage",
+ description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
),
]
- voice: Annotated[
- str | None, Field(description="Supertonic baked voice id, e.g. `F1` or `M1`.")
- ] = None
- tts_speed: Annotated[
- float | None,
- Field(
- alias="ttsSpeed",
- description="Speech-rate / duration multiplier (1.0 = unchanged, <1 slower, >1 faster). Supertonic scales its native duration predictor. Mutually exclusive with `pace`.",
- ge=0.0,
- ),
- ] = None
- pace: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigSupertonicPace | None,
- Field(
- description="Speaking rate: `'slow'`, `'moderate'`, or `'fast'`, applied when the engine is built. Mutually exclusive with `ttsSpeed`; cannot be changed per request.",
- title="LoadModelSrcRequestTtsGgmlModelConfigSupertonicPace",
- ),
- ] = None
- tts_num_inference_steps: Annotated[
- int | None,
+ name: Annotated[
+ str | None,
Field(
- alias="ttsNumInferenceSteps",
- description="Supertonic vector-estimator CFM steps; 0 uses the GGUF default.",
- ge=0,
- le=2147483647,
+ description="Display name for this model instance; overrides the name derived from the source."
),
] = None
- use_gpu: Annotated[
- bool | None,
+ model_id: Annotated[
+ str | None,
Field(
- alias="useGPU",
- description="Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
+ alias="modelId",
+ description="Unique identifier used to reference the model in QVAC calls.",
),
] = None
- output_sample_rate: Annotated[
- int | None,
+ registry_path: Annotated[
+ str | None,
Field(
- alias="outputSampleRate",
- description="Desired output sample rate in Hz (8000–192000); omit to keep the engine’s native rate (or 48 kHz when the LavaSR enhancer is active).",
- ge=8000,
- le=192000,
+ alias="registryPath",
+ description="Registry-relative path to the model (set for registry-backed models).",
),
] = None
- threads: Annotated[
- int | None,
+ registry_source: Annotated[
+ str | None,
Field(
- description="CPU thread count; overrides the hardware default.",
- gt=0,
- le=2147483647,
+ alias="registrySource",
+ description="Registry source identifier, e.g. `huggingface`.",
),
] = None
- n_gpu_layers: Annotated[
- int | None,
+ blob_core_key: Annotated[
+ str | None,
Field(
- alias="nGpuLayers",
- description="Model layers to offload to the GPU backend (99 = all, 0 = CPU). Takes effect on its own and wins over `useGPU`; when both are set they must agree.",
- ge=-2147483648,
- le=2147483647,
+ alias="blobCoreKey",
+ description="Hyperdrive blob core key for the model file.",
),
] = None
- seed: Annotated[
- int | None,
+ blob_index: Annotated[
+ float | None,
Field(
- description="RNG seed for the engine’s stochastic stages (e.g. Chatterbox CFM/SineGen, Supertonic latent generation).",
- ge=-2147483648,
- le=2147483647,
+ alias="blobIndex",
+ description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
),
] = None
- vulkan_cache_dir: Annotated[
+ engine: Annotated[
str | None,
Field(
- alias="vulkanCacheDir",
- description="Supertonic + `useGPU` only: directory where the Vulkan backend persists its compiled pipeline cache.",
- min_length=1,
+ description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
),
] = None
- backends_dir: Annotated[
- str | None,
+ expected_size: Annotated[
+ float | None,
Field(
- alias="backendsDir",
- description="Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
- min_length=1,
+ alias="expectedSize",
+ description="Expected total size of the model file in bytes.",
),
] = None
- opencl_cache_dir: Annotated[
+ sha256_checksum: Annotated[
str | None,
Field(
- alias="openclCacheDir",
- description="Persistent directory for ggml-opencl's compiled-program cache (Android only).",
- min_length=1,
- ),
- ] = None
- lavasr_enhancer_model_src: Annotated[
- str
- | LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrEnhancerModelSrc
- | None,
- Field(
- alias="lavasrEnhancerModelSrc",
- description="LavaSR enhancer model source; bandwidth-extends the output to 48 kHz.",
+ alias="sha256Checksum",
+ description="Expected SHA-256 checksum of the model file.",
),
] = None
- lavasr_denoiser_model_src: Annotated[
- str
- | LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrDenoiserModelSrc
+ addon: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcAddon
+ | Literal["vad"]
| None,
Field(
- alias="lavasrDenoiserModelSrc",
- description="LavaSR denoiser model source; runs before the enhancer, rate-preserving (batch synthesis only).",
+ description="Inference addon / capability category this model belongs to."
),
] = None
- tts_supertonic_multilingual: Annotated[
- Any | None, Field(alias="ttsSupertonicMultilingual")
- ] = None
- tts_tokenizer_src: Annotated[Any | None, Field(alias="ttsTokenizerSrc")] = None
- tts_speech_encoder_src: Annotated[
- Any | None, Field(alias="ttsSpeechEncoderSrc")
- ] = None
- tts_embed_tokens_src: Annotated[Any | None, Field(alias="ttsEmbedTokensSrc")] = None
- tts_conditional_decoder_src: Annotated[
- Any | None, Field(alias="ttsConditionalDecoderSrc")
- ] = None
- tts_language_model_src: Annotated[
- Any | None, Field(alias="ttsLanguageModelSrc")
- ] = None
- tts_text_encoder_src: Annotated[Any | None, Field(alias="ttsTextEncoderSrc")] = None
- tts_duration_predictor_src: Annotated[
- Any | None, Field(alias="ttsDurationPredictorSrc")
- ] = None
- tts_vector_estimator_src: Annotated[
- Any | None, Field(alias="ttsVectorEstimatorSrc")
- ] = None
- tts_vocoder_src: Annotated[Any | None, Field(alias="ttsVocoderSrc")] = None
- tts_unicode_indexer_src: Annotated[
- Any | None, Field(alias="ttsUnicodeIndexerSrc")
- ] = None
- tts_tts_config_src: Annotated[Any | None, Field(alias="ttsTtsConfigSrc")] = None
- tts_voice_style_src: Annotated[Any | None, Field(alias="ttsVoiceStyleSrc")] = None
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigParlerEmotion(Enum):
- command = "command"
- anger = "anger"
- narration = "narration"
- conversation = "conversation"
- disgust = "disgust"
- fear = "fear"
- happy = "happy"
- neutral = "neutral"
- proper_noun = "proper noun"
- news = "news"
- sad = "sad"
- surprise = "surprise"
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigParlerPace(Enum):
- slow = "slow"
- moderate = "moderate"
- fast = "fast"
-
-
-class MaxFrames(RootModel[int]):
- root: Annotated[
- int,
- Field(
- description="Generation-length cap in decoder frames; 0 = engine default (Parler ≈86 frames/s, Audio8 ≈21.5).",
- ge=10,
- le=2147483647,
- ),
- ]
-class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -16512,9 +16544,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrcAddon(Enu
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrc(
- GeneratedBaseModel
-):
+class LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc(GeneratedBaseModel):
src: Annotated[
str,
Field(
@@ -16583,7 +16613,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcAddon
| Literal["vad"]
| None,
Field(
@@ -16592,399 +16622,260 @@ class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrc(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrDenoiserModelSrcAddon(Enum):
- llamacpp_completion = "llamacpp-completion"
- whispercpp_transcription = "whispercpp-transcription"
- bci_whispercpp_transcription = "bci-whispercpp-transcription"
- llamacpp_embedding = "llamacpp-embedding"
- llamacpp_decision = "llamacpp-decision"
- llamacpp_rerank = "llamacpp-rerank"
- nmtcpp_translation = "nmtcpp-translation"
- onnx_tts = "onnx-tts"
- tts_ggml = "tts-ggml"
- parakeet_transcription = "parakeet-transcription"
- moss_transcribe = "moss-transcribe"
- ggml_ocr = "ggml-ocr"
- sdcpp_generation = "sdcpp-generation"
- audiogen_ggml = "audiogen-ggml"
- ggml_vla = "ggml-vla"
- ggml_classification = "ggml-classification"
- llm = "llm"
- whisper = "whisper"
- bci = "bci"
- embeddings = "embeddings"
- nmt = "nmt"
- parakeet = "parakeet"
- tts = "tts"
- ocr = "ocr"
- diffusion = "diffusion"
- audiogen = "audiogen"
- vla = "vla"
- classification = "classification"
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrDenoiserModelSrc(
- GeneratedBaseModel
-):
- src: Annotated[
- str,
+class LoadModelSrcRequestTtsGgmlModelConfigSupertonic(GeneratedBaseModel):
+ model_config = ConfigDict(
+ extra="forbid",
+ )
+ tts_engine: Annotated[
+ Literal["supertonic"],
+ Field(alias="ttsEngine", description="TTS engine: Supertonic."),
+ ] = "supertonic"
+ language: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigSupertonicLanguage,
Field(
- description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ description="Language code. Default `en`.",
+ title="LoadModelSrcRequestTtsGgmlModelConfigSupertonicLanguage",
),
]
- name: Annotated[
- str | None,
+ voice: Annotated[
+ str | None, Field(description="Supertonic baked voice id, e.g. `F1` or `M1`.")
+ ] = None
+ tts_speed: Annotated[
+ float | None,
Field(
- description="Display name for this model instance; overrides the name derived from the source."
+ alias="ttsSpeed",
+ description="Speech-rate / duration multiplier (1.0 = unchanged, <1 slower, >1 faster). Supertonic scales its native duration predictor. Mutually exclusive with `pace`.",
+ ge=0.0,
),
] = None
- model_id: Annotated[
- str | None,
+ pace: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigSupertonicPace | None,
Field(
- alias="modelId",
- description="Unique identifier used to reference the model in QVAC calls.",
+ description="Speaking rate: `'slow'`, `'moderate'`, or `'fast'`, applied when the engine is built. Mutually exclusive with `ttsSpeed`; cannot be changed per request.",
+ title="LoadModelSrcRequestTtsGgmlModelConfigSupertonicPace",
),
] = None
- registry_path: Annotated[
- str | None,
+ tts_num_inference_steps: Annotated[
+ int | None,
Field(
- alias="registryPath",
- description="Registry-relative path to the model (set for registry-backed models).",
+ alias="ttsNumInferenceSteps",
+ description="Supertonic vector-estimator CFM steps; 0 uses the GGUF default.",
+ ge=0,
+ le=2147483647,
),
] = None
- registry_source: Annotated[
- str | None,
+ use_gpu: Annotated[
+ bool | None,
Field(
- alias="registrySource",
- description="Registry source identifier, e.g. `huggingface`.",
+ alias="useGPU",
+ description="Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
),
] = None
- blob_core_key: Annotated[
- str | None,
+ output_sample_rate: Annotated[
+ int | None,
Field(
- alias="blobCoreKey",
- description="Hyperdrive blob core key for the model file.",
+ alias="outputSampleRate",
+ description="Desired output sample rate in Hz (8000–192000); omit to keep the engine’s native rate (or 48 kHz when the LavaSR enhancer is active).",
+ ge=8000,
+ le=192000,
),
] = None
- blob_index: Annotated[
- float | None,
+ threads: Annotated[
+ int | None,
Field(
- alias="blobIndex",
- description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ description="CPU thread count; overrides the hardware default.",
+ gt=0,
+ le=2147483647,
),
] = None
- engine: Annotated[
- str | None,
+ n_gpu_layers: Annotated[
+ int | None,
Field(
- description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
+ alias="nGpuLayers",
+ description="Model layers to offload to the GPU backend (99 = all, 0 = CPU). Takes effect on its own and wins over `useGPU`; when both are set they must agree.",
+ ge=-2147483648,
+ le=2147483647,
),
] = None
- expected_size: Annotated[
- float | None,
+ seed: Annotated[
+ int | None,
Field(
- alias="expectedSize",
- description="Expected total size of the model file in bytes.",
+ description="RNG seed for the engine’s stochastic stages (e.g. Chatterbox CFM/SineGen, Supertonic latent generation).",
+ ge=-2147483648,
+ le=2147483647,
),
] = None
- sha256_checksum: Annotated[
+ vulkan_cache_dir: Annotated[
str | None,
Field(
- alias="sha256Checksum",
- description="Expected SHA-256 checksum of the model file.",
+ alias="vulkanCacheDir",
+ description="Supertonic + `useGPU` only: directory where the Vulkan backend persists its compiled pipeline cache.",
+ min_length=1,
),
] = None
- addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrDenoiserModelSrcAddon
- | Literal["vad"]
- | None,
+ vulkan_device: Annotated[
+ int | None,
Field(
- description="Inference addon / capability category this model belongs to."
+ alias="vulkanDevice",
+ description="Vulkan adapter index, also used by the LavaSR enhancer: 0 = the first adapter, N = the Nth, -1 = auto-pick by free VRAM preferring a discrete adapter. Only consulted on Vulkan.",
+ ge=-1,
+ le=2147483647,
),
] = None
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigParler(GeneratedBaseModel):
- model_config = ConfigDict(
- extra="forbid",
- )
- tts_engine: Annotated[
- Literal["parler"], Field(alias="ttsEngine", description="TTS engine: Parler.")
- ] = "parler"
- description: Annotated[
+ prewarm_text: Annotated[
str | None,
Field(
- description="Parler free-text voice description (alias `voiceDescription`). Mutually exclusive with the voice-template fields.",
+ alias="prewarmText",
+ description="Text synthesized once at load so GPU pipelines (and a Core ML vocoder sidecar) are ready before the first request; skipped on a plain CPU run. Use a sentence of representative length. Wins over the `vulkanCacheDir` default pre-warm.",
min_length=1,
),
] = None
- voice_description: Annotated[
- str | None,
+ stream_chunk_tokens: Annotated[
+ int | None,
Field(
- alias="voiceDescription",
- description="Alias of `description`; mutually exclusive with the voice-template fields.",
- min_length=1,
+ alias="streamChunkTokens",
+ description="Text tokens (Unicode code points) per native streaming chunk, about 50 for English and 25–30 for CJK; 0 disables native chunk streaming. Cannot be combined with the LavaSR enhancer or denoiser.",
+ ge=0,
+ le=2147483647,
),
] = None
- voice: Annotated[
- str | None,
+ stream_first_chunk_tokens: Annotated[
+ int | None,
Field(
- description="Parler voice-template speaker name; also Supertonic’s baked voice id.",
- min_length=1,
+ alias="streamFirstChunkTokens",
+ description="Smaller first streaming chunk for lower first-audio latency.",
+ ge=0,
+ le=2147483647,
),
] = None
- emotion: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigParlerEmotion | None,
+ stream_chunk_tolerance_pct: Annotated[
+ int | None,
Field(
- description="Speaking style (Parler voice-template field).",
- title="LoadModelSrcRequestTtsGgmlModelConfigParlerEmotion",
+ alias="streamChunkTolerancePct",
+ description="Boundary-snap window for clause and whitespace chunk boundaries, as a percentage of the chunk target (engine default 20).",
+ ge=0,
+ le=2147483647,
),
] = None
- pitch: Annotated[
- str | None,
- Field(description="Parler voice-template pitch descriptor.", min_length=1),
- ] = None
- pace: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigParlerPace | None,
+ stream_min_chunk_tokens: Annotated[
+ int | None,
Field(
- description="Speaking rate: `'slow'`, `'moderate'`, or `'fast'`.",
- title="LoadModelSrcRequestTtsGgmlModelConfigParlerPace",
+ alias="streamMinChunkTokens",
+ description="Floor on every streamed chunk’s size in text tokens (engine default 30); shorter trailing chunks merge into the previous one.",
+ ge=0,
+ le=2147483647,
),
] = None
- expressivity: Annotated[
+ backends_dir: Annotated[
str | None,
Field(
- description="Parler voice-template expressivity descriptor.", min_length=1
+ alias="backendsDir",
+ description="Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
+ min_length=1,
),
] = None
- noise: Annotated[
+ opencl_cache_dir: Annotated[
str | None,
Field(
- description="Parler voice-template background-noise descriptor.",
+ alias="openclCacheDir",
+ description="Persistent directory for ggml-opencl's compiled-program cache (Android only).",
min_length=1,
),
] = None
- reverb: Annotated[
- str | None,
- Field(description="Parler voice-template reverb descriptor.", min_length=1),
- ] = None
- quality: Annotated[
- str | None,
+ lavasr_enhancer_model_src: Annotated[
+ str
+ | LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrEnhancerModelSrc
+ | None,
Field(
- description="Parler voice-template audio-quality descriptor.", min_length=1
+ alias="lavasrEnhancerModelSrc",
+ description="LavaSR enhancer model source; bandwidth-extends the output to 48 kHz.",
),
] = None
- use_gpu: Annotated[
- bool | None,
- Field(
- alias="useGPU",
- description="Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
- ),
- ] = None
- output_sample_rate: Annotated[
- int | None,
- Field(
- alias="outputSampleRate",
- description="Desired output sample rate in Hz (8000–192000); omit to keep the engine’s native rate (or 48 kHz when the LavaSR enhancer is active).",
- ge=8000,
- le=192000,
- ),
- ] = None
- stream_chunk_tokens: Annotated[
- int | None,
- Field(
- alias="streamChunkTokens",
- description="Speech tokens per native streaming chunk; 0 disables native chunk streaming.",
- ge=0,
- le=2147483647,
- ),
- ] = None
- stream_first_chunk_tokens: Annotated[
- int | None,
- Field(
- alias="streamFirstChunkTokens",
- description="Smaller first streaming chunk for lower first-audio latency.",
- ge=0,
- le=2147483647,
- ),
- ] = None
- threads: Annotated[
- int | None,
- Field(
- description="CPU thread count; overrides the hardware default.",
- gt=0,
- le=2147483647,
- ),
- ] = None
- n_gpu_layers: Annotated[
- int | None,
- Field(
- alias="nGpuLayers",
- description="Model layers to offload to the GPU backend (99 = all, 0 = CPU). Takes effect on its own and wins over `useGPU`; when both are set they must agree.",
- ge=-2147483648,
- le=2147483647,
- ),
- ] = None
- seed: Annotated[
- int | None,
+ lavasr_denoiser_model_src: Annotated[
+ str
+ | LoadModelSrcRequestTtsGgmlModelConfigSupertonicLavasrDenoiserModelSrc
+ | None,
Field(
- description="RNG seed for the engine’s stochastic stages (e.g. Chatterbox CFM/SineGen, Supertonic latent generation).",
- ge=-2147483648,
- le=2147483647,
+ alias="lavasrDenoiserModelSrc",
+ description="LavaSR denoiser model source; runs before the enhancer, rate-preserving (batch synthesis only).",
),
] = None
- temperature: Annotated[
- float | None,
+ voice_json_src: Annotated[
+ str | LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc | None,
Field(
- description="Sampling temperature; unset defers to the engine default (Parler 1.0, Audio8 0.7).",
- ge=0.0,
+ alias="voiceJsonSrc",
+ description="External voice JSON source (`{ style_ttl, style_dp }`, e.g. a cloned voice) that overrides the baked `voice` preset; the engine checks the tensor sizes against the loaded model.",
),
] = None
- top_k: Annotated[
- int | None,
+ noise_npy_src: Annotated[
+ str | LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc | None,
Field(
- alias="topK",
- description="Top-k sampling cutoff; unset defers to the engine default (50).",
- ge=0,
- le=2147483647,
+ alias="noiseNpySrc",
+ description="Fixed CFM initial-noise `.npy` tensor source, for reproducible output.",
),
] = None
- top_p: Annotated[
- float | None,
- Field(
- alias="topP",
- description="Top-p (nucleus) sampling cutoff (0 < p ≤ 1); unset defers to the engine default.",
- gt=0.0,
- le=1.0,
- ),
+ tts_supertonic_multilingual: Annotated[
+ Any | None, Field(alias="ttsSupertonicMultilingual")
] = None
- max_frames: Annotated[
- Literal[0] | MaxFrames | None,
- Field(
- alias="maxFrames",
- description="Generation-length cap in decoder frames; 0 = engine default (Parler ≈86 frames/s, Audio8 ≈21.5).",
- ),
+ tts_tokenizer_src: Annotated[Any | None, Field(alias="ttsTokenizerSrc")] = None
+ tts_speech_encoder_src: Annotated[
+ Any | None, Field(alias="ttsSpeechEncoderSrc")
] = None
- min_new_tokens: Annotated[
- int | None,
- Field(
- alias="minNewTokens",
- description="Parler minimum tokens before EOS; `-1` uses the model default.",
- ge=-1,
- le=2147483647,
- ),
+ tts_embed_tokens_src: Annotated[Any | None, Field(alias="ttsEmbedTokensSrc")] = None
+ tts_conditional_decoder_src: Annotated[
+ Any | None, Field(alias="ttsConditionalDecoderSrc")
] = None
- normalize_numbers: Annotated[
- bool | None,
- Field(
- alias="normalizeNumbers",
- description="Parler prompt digit expansion (engine default: enabled).",
- ),
+ tts_language_model_src: Annotated[
+ Any | None, Field(alias="ttsLanguageModelSrc")
] = None
- backends_dir: Annotated[
- str | None,
- Field(
- alias="backendsDir",
- description="Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
- min_length=1,
- ),
+ tts_text_encoder_src: Annotated[Any | None, Field(alias="ttsTextEncoderSrc")] = None
+ tts_duration_predictor_src: Annotated[
+ Any | None, Field(alias="ttsDurationPredictorSrc")
] = None
- lavasr_enhancer_model_src: Annotated[
- str | LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrc | None,
- Field(
- alias="lavasrEnhancerModelSrc",
- description="LavaSR enhancer model source; bandwidth-extends the output to 48 kHz.",
- ),
+ tts_vector_estimator_src: Annotated[
+ Any | None, Field(alias="ttsVectorEstimatorSrc")
] = None
- lavasr_denoiser_model_src: Annotated[
- str | LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrDenoiserModelSrc | None,
- Field(
- alias="lavasrDenoiserModelSrc",
- description="LavaSR denoiser model source; runs before the enhancer, rate-preserving (batch synthesis only).",
- ),
+ tts_vocoder_src: Annotated[Any | None, Field(alias="ttsVocoderSrc")] = None
+ tts_unicode_indexer_src: Annotated[
+ Any | None, Field(alias="ttsUnicodeIndexerSrc")
] = None
+ tts_tts_config_src: Annotated[Any | None, Field(alias="ttsTtsConfigSrc")] = None
+ tts_voice_style_src: Annotated[Any | None, Field(alias="ttsVoiceStyleSrc")] = None
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Emotion(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigParlerEmotion(Enum):
+ command = "command"
anger = "anger"
+ narration = "narration"
+ conversation = "conversation"
+ disgust = "disgust"
+ fear = "fear"
happy = "happy"
neutral = "neutral"
+ proper_noun = "proper noun"
+ news = "news"
sad = "sad"
+ surprise = "surprise"
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Pace(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigParlerPace(Enum):
slow = "slow"
moderate = "moderate"
fast = "fast"
-class Instruct(RootModel[str]):
+class MaxFrames(RootModel[int]):
root: Annotated[
- str,
+ int,
Field(
- description="Natural-language control: a structured object (one of dialect / volume / style) or a raw instruction string. One conditioning control per synthesis.",
- min_length=1,
+ description="Generation-length cap in decoder frames; 0 = engine default (Parler ≈86 frames/s, Audio8 ≈21.5).",
+ ge=10,
+ le=2147483647,
),
]
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructDialect(Enum):
- cantonese = "cantonese"
- northeastern = "northeastern"
- gansu = "gansu"
- guizhou = "guizhou"
- henan = "henan"
- hubei = "hubei"
- hunan = "hunan"
- jiangxi = "jiangxi"
- minnan = "minnan"
- ningxia = "ningxia"
- shanxi = "shanxi"
- shaanxi = "shaanxi"
- shandong = "shandong"
- shanghai = "shanghai"
- sichuan = "sichuan"
- tianjin = "tianjin"
- yunnan = "yunnan"
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructVolume(Enum):
- loud = "loud"
- soft = "soft"
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructStyle(Enum):
- peppa = "peppa"
- robot = "robot"
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Instruct(GeneratedBaseModel):
- model_config = ConfigDict(
- extra="forbid",
- )
- dialect: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructDialect | None,
- Field(
- description="Chinese dialect to render (e.g. `cantonese`, `sichuan`).",
- title="LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructDialect",
- ),
- ] = None
- volume: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructVolume | None,
- Field(
- description="Speaking volume: `loud` or `soft`.",
- title="LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructVolume",
- ),
- ] = None
- style: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructStyle | None,
- Field(
- description="Speaking style: `peppa` or `robot`.",
- title="LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructStyle",
- ),
- ] = None
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -17015,7 +16906,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrcAddon
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrc(
+class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -17086,7 +16977,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -17095,7 +16986,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrc(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrDenoiserModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -17126,7 +17017,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrcAddon
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrc(
+class LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrDenoiserModelSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -17197,7 +17088,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrDenoiserModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -17206,237 +17097,294 @@ class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrc(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3ReferenceAudioSrcAddon(Enum):
- llamacpp_completion = "llamacpp-completion"
- whispercpp_transcription = "whispercpp-transcription"
- bci_whispercpp_transcription = "bci-whispercpp-transcription"
- llamacpp_embedding = "llamacpp-embedding"
- llamacpp_decision = "llamacpp-decision"
- llamacpp_rerank = "llamacpp-rerank"
- nmtcpp_translation = "nmtcpp-translation"
- onnx_tts = "onnx-tts"
- tts_ggml = "tts-ggml"
- parakeet_transcription = "parakeet-transcription"
- moss_transcribe = "moss-transcribe"
- ggml_ocr = "ggml-ocr"
- sdcpp_generation = "sdcpp-generation"
- audiogen_ggml = "audiogen-ggml"
- ggml_vla = "ggml-vla"
- ggml_classification = "ggml-classification"
- llm = "llm"
- whisper = "whisper"
- bci = "bci"
- embeddings = "embeddings"
- nmt = "nmt"
- parakeet = "parakeet"
- tts = "tts"
- ocr = "ocr"
- diffusion = "diffusion"
- audiogen = "audiogen"
- vla = "vla"
- classification = "classification"
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3ReferenceAudioSrc(
- GeneratedBaseModel
-):
- src: Annotated[
- str,
+class LoadModelSrcRequestTtsGgmlModelConfigParler(GeneratedBaseModel):
+ model_config = ConfigDict(
+ extra="forbid",
+ )
+ tts_engine: Annotated[
+ Literal["parler"], Field(alias="ttsEngine", description="TTS engine: Parler.")
+ ] = "parler"
+ description: Annotated[
+ str | None,
Field(
- description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ description="Parler free-text voice description (alias `voiceDescription`). Mutually exclusive with the voice-template fields.",
+ min_length=1,
),
- ]
- name: Annotated[
+ ] = None
+ voice_description: Annotated[
str | None,
Field(
- description="Display name for this model instance; overrides the name derived from the source."
+ alias="voiceDescription",
+ description="Alias of `description`; mutually exclusive with the voice-template fields.",
+ min_length=1,
),
] = None
- model_id: Annotated[
+ voice: Annotated[
str | None,
Field(
- alias="modelId",
- description="Unique identifier used to reference the model in QVAC calls.",
+ description="Parler voice-template speaker name; also Supertonic’s baked voice id.",
+ min_length=1,
),
] = None
- registry_path: Annotated[
- str | None,
+ emotion: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigParlerEmotion | None,
Field(
- alias="registryPath",
- description="Registry-relative path to the model (set for registry-backed models).",
+ description="Speaking style (Parler voice-template field).",
+ title="LoadModelSrcRequestTtsGgmlModelConfigParlerEmotion",
),
] = None
- registry_source: Annotated[
+ pitch: Annotated[
str | None,
+ Field(description="Parler voice-template pitch descriptor.", min_length=1),
+ ] = None
+ pace: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigParlerPace | None,
Field(
- alias="registrySource",
- description="Registry source identifier, e.g. `huggingface`.",
+ description="Speaking rate: `'slow'`, `'moderate'`, or `'fast'`.",
+ title="LoadModelSrcRequestTtsGgmlModelConfigParlerPace",
),
] = None
- blob_core_key: Annotated[
+ expressivity: Annotated[
str | None,
Field(
- alias="blobCoreKey",
- description="Hyperdrive blob core key for the model file.",
+ description="Parler voice-template expressivity descriptor.", min_length=1
),
] = None
- blob_index: Annotated[
- float | None,
+ noise: Annotated[
+ str | None,
Field(
- alias="blobIndex",
- description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ description="Parler voice-template background-noise descriptor.",
+ min_length=1,
),
] = None
- engine: Annotated[
+ reverb: Annotated[
+ str | None,
+ Field(description="Parler voice-template reverb descriptor.", min_length=1),
+ ] = None
+ quality: Annotated[
str | None,
Field(
- description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
+ description="Parler voice-template audio-quality descriptor.", min_length=1
),
] = None
- expected_size: Annotated[
- float | None,
+ use_gpu: Annotated[
+ bool | None,
Field(
- alias="expectedSize",
- description="Expected total size of the model file in bytes.",
+ alias="useGPU",
+ description="Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
),
] = None
- sha256_checksum: Annotated[
- str | None,
+ output_sample_rate: Annotated[
+ int | None,
Field(
- alias="sha256Checksum",
- description="Expected SHA-256 checksum of the model file.",
+ alias="outputSampleRate",
+ description="Desired output sample rate in Hz (8000–192000); omit to keep the engine’s native rate (or 48 kHz when the LavaSR enhancer is active).",
+ ge=8000,
+ le=192000,
),
] = None
- addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3ReferenceAudioSrcAddon
- | Literal["vad"]
- | None,
+ stream_chunk_tokens: Annotated[
+ int | None,
Field(
- description="Inference addon / capability category this model belongs to."
+ alias="streamChunkTokens",
+ description="Speech tokens per native streaming chunk; 0 disables native chunk streaming.",
+ ge=0,
+ le=2147483647,
),
] = None
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3S3tokModelSrcAddon(Enum):
- llamacpp_completion = "llamacpp-completion"
- whispercpp_transcription = "whispercpp-transcription"
- bci_whispercpp_transcription = "bci-whispercpp-transcription"
- llamacpp_embedding = "llamacpp-embedding"
- llamacpp_decision = "llamacpp-decision"
- llamacpp_rerank = "llamacpp-rerank"
- nmtcpp_translation = "nmtcpp-translation"
- onnx_tts = "onnx-tts"
- tts_ggml = "tts-ggml"
- parakeet_transcription = "parakeet-transcription"
- moss_transcribe = "moss-transcribe"
- ggml_ocr = "ggml-ocr"
- sdcpp_generation = "sdcpp-generation"
- audiogen_ggml = "audiogen-ggml"
- ggml_vla = "ggml-vla"
- ggml_classification = "ggml-classification"
- llm = "llm"
- whisper = "whisper"
- bci = "bci"
- embeddings = "embeddings"
- nmt = "nmt"
- parakeet = "parakeet"
- tts = "tts"
- ocr = "ocr"
- diffusion = "diffusion"
- audiogen = "audiogen"
- vla = "vla"
- classification = "classification"
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3S3tokModelSrc(
- GeneratedBaseModel
-):
- src: Annotated[
- str,
+ stream_first_chunk_tokens: Annotated[
+ int | None,
Field(
- description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ alias="streamFirstChunkTokens",
+ description="Smaller first streaming chunk for lower first-audio latency.",
+ ge=0,
+ le=2147483647,
),
- ]
- name: Annotated[
- str | None,
+ ] = None
+ threads: Annotated[
+ int | None,
Field(
- description="Display name for this model instance; overrides the name derived from the source."
+ description="CPU thread count; overrides the hardware default.",
+ gt=0,
+ le=2147483647,
),
] = None
- model_id: Annotated[
- str | None,
+ n_gpu_layers: Annotated[
+ int | None,
Field(
- alias="modelId",
- description="Unique identifier used to reference the model in QVAC calls.",
+ alias="nGpuLayers",
+ description="Model layers to offload to the GPU backend (99 = all, 0 = CPU). Takes effect on its own and wins over `useGPU`; when both are set they must agree.",
+ ge=-2147483648,
+ le=2147483647,
),
] = None
- registry_path: Annotated[
- str | None,
+ seed: Annotated[
+ int | None,
Field(
- alias="registryPath",
- description="Registry-relative path to the model (set for registry-backed models).",
+ description="RNG seed for the engine’s stochastic stages (e.g. Chatterbox CFM/SineGen, Supertonic latent generation).",
+ ge=-2147483648,
+ le=2147483647,
),
] = None
- registry_source: Annotated[
- str | None,
+ temperature: Annotated[
+ float | None,
Field(
- alias="registrySource",
- description="Registry source identifier, e.g. `huggingface`.",
+ description="Sampling temperature; unset defers to the engine default (Parler 1.0, Audio8 0.7).",
+ ge=0.0,
),
] = None
- blob_core_key: Annotated[
- str | None,
+ top_k: Annotated[
+ int | None,
Field(
- alias="blobCoreKey",
- description="Hyperdrive blob core key for the model file.",
+ alias="topK",
+ description="Top-k sampling cutoff; unset defers to the engine default (50).",
+ ge=0,
+ le=2147483647,
),
] = None
- blob_index: Annotated[
+ top_p: Annotated[
float | None,
Field(
- alias="blobIndex",
- description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ alias="topP",
+ description="Top-p (nucleus) sampling cutoff (0 < p ≤ 1); unset defers to the engine default.",
+ gt=0.0,
+ le=1.0,
),
] = None
- engine: Annotated[
- str | None,
+ max_frames: Annotated[
+ Literal[0] | MaxFrames | None,
Field(
- description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
+ alias="maxFrames",
+ description="Generation-length cap in decoder frames; 0 = engine default (Parler ≈86 frames/s, Audio8 ≈21.5).",
),
] = None
- expected_size: Annotated[
- float | None,
+ min_new_tokens: Annotated[
+ int | None,
Field(
- alias="expectedSize",
- description="Expected total size of the model file in bytes.",
+ alias="minNewTokens",
+ description="Parler minimum tokens before EOS; `-1` uses the model default.",
+ ge=-1,
+ le=2147483647,
),
] = None
- sha256_checksum: Annotated[
+ normalize_numbers: Annotated[
+ bool | None,
+ Field(
+ alias="normalizeNumbers",
+ description="Parler prompt digit expansion (engine default: enabled).",
+ ),
+ ] = None
+ backends_dir: Annotated[
str | None,
Field(
- alias="sha256Checksum",
- description="Expected SHA-256 checksum of the model file.",
+ alias="backendsDir",
+ description="Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
+ min_length=1,
),
] = None
- addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3S3tokModelSrcAddon
- | Literal["vad"]
- | None,
+ lavasr_enhancer_model_src: Annotated[
+ str | LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrEnhancerModelSrc | None,
Field(
- description="Inference addon / capability category this model belongs to."
+ alias="lavasrEnhancerModelSrc",
+ description="LavaSR enhancer model source; bandwidth-extends the output to 48 kHz.",
+ ),
+ ] = None
+ lavasr_denoiser_model_src: Annotated[
+ str | LoadModelSrcRequestTtsGgmlModelConfigParlerLavasrDenoiserModelSrc | None,
+ Field(
+ alias="lavasrDenoiserModelSrc",
+ description="LavaSR denoiser model source; runs before the enhancer, rate-preserving (batch synthesis only).",
),
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrcAddon(
- Enum
-):
- llamacpp_completion = "llamacpp-completion"
- whispercpp_transcription = "whispercpp-transcription"
- bci_whispercpp_transcription = "bci-whispercpp-transcription"
- llamacpp_embedding = "llamacpp-embedding"
- llamacpp_decision = "llamacpp-decision"
- llamacpp_rerank = "llamacpp-rerank"
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Emotion(Enum):
+ anger = "anger"
+ happy = "happy"
+ neutral = "neutral"
+ sad = "sad"
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Pace(Enum):
+ slow = "slow"
+ moderate = "moderate"
+ fast = "fast"
+
+
+class Instruct(RootModel[str]):
+ root: Annotated[
+ str,
+ Field(
+ description="Natural-language control: a structured object (one of dialect / volume / style) or a raw instruction string. One conditioning control per synthesis; a request-level `instruct` replaces it for that synthesis.",
+ min_length=1,
+ ),
+ ]
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructDialect(Enum):
+ cantonese = "cantonese"
+ northeastern = "northeastern"
+ gansu = "gansu"
+ guizhou = "guizhou"
+ henan = "henan"
+ hubei = "hubei"
+ hunan = "hunan"
+ jiangxi = "jiangxi"
+ minnan = "minnan"
+ ningxia = "ningxia"
+ shanxi = "shanxi"
+ shaanxi = "shaanxi"
+ shandong = "shandong"
+ shanghai = "shanghai"
+ sichuan = "sichuan"
+ tianjin = "tianjin"
+ yunnan = "yunnan"
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructVolume(Enum):
+ loud = "loud"
+ soft = "soft"
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructStyle(Enum):
+ peppa = "peppa"
+ robot = "robot"
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Instruct(GeneratedBaseModel):
+ model_config = ConfigDict(
+ extra="forbid",
+ )
+ dialect: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructDialect | None,
+ Field(
+ description="Chinese dialect to render (e.g. `cantonese`, `sichuan`).",
+ title="LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructDialect",
+ ),
+ ] = None
+ volume: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructVolume | None,
+ Field(
+ description="Speaking volume: `loud` or `soft`.",
+ title="LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructVolume",
+ ),
+ ] = None
+ style: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructStyle | None,
+ Field(
+ description="Speaking style: `peppa` or `robot`.",
+ title="LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3InstructStyle",
+ ),
+ ] = None
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrcAddon(Enum):
+ llamacpp_completion = "llamacpp-completion"
+ whispercpp_transcription = "whispercpp-transcription"
+ bci_whispercpp_transcription = "bci-whispercpp-transcription"
+ llamacpp_embedding = "llamacpp-embedding"
+ llamacpp_decision = "llamacpp-decision"
+ llamacpp_rerank = "llamacpp-rerank"
nmtcpp_translation = "nmtcpp-translation"
onnx_tts = "onnx-tts"
tts_ggml = "tts-ggml"
@@ -17461,7 +17409,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrcA
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrc(
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -17532,7 +17480,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -17541,163 +17489,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrc(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3(GeneratedBaseModel):
- model_config = ConfigDict(
- extra="forbid",
- )
- tts_engine: Annotated[
- Literal["cosyvoice3"],
- Field(alias="ttsEngine", description="TTS engine: CosyVoice3."),
- ] = "cosyvoice3"
- emotion: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Emotion | None,
- Field(
- description="Speaking style: `'anger'`, `'happy'`, `'neutral'`, or `'sad'`. One conditioning control per synthesis (emotion / non-moderate pace / instruct).",
- title="LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Emotion",
- ),
- ] = None
- pace: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Pace | None,
- Field(
- description="Speaking rate: `'slow'`, `'moderate'`, or `'fast'`; `'moderate'` disengages the pace channel.",
- title="LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Pace",
- ),
- ] = None
- instruct: Annotated[
- Instruct | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Instruct | None,
- Field(
- description="Natural-language control: a structured object (one of dialect / volume / style) or a raw instruction string. One conditioning control per synthesis."
- ),
- ] = None
- prompt_text: Annotated[
- str | None,
- Field(
- alias="promptText",
- description="Verbatim transcript of `referenceAudioSrc`. Setting it selects zero-shot cloning (best fidelity in the reference’s own language); omitting it selects cross-lingual cloning (timbre only). Without a reference it overrides the baked voice’s transcript metadata.",
- min_length=1,
- ),
- ] = None
- use_gpu: Annotated[
- bool | None,
- Field(
- alias="useGPU",
- description="Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
- ),
- ] = None
- output_sample_rate: Annotated[
- int | None,
- Field(
- alias="outputSampleRate",
- description="Desired output sample rate in Hz (8000–192000); omit to keep the engine’s native rate (or 48 kHz when the LavaSR enhancer is active).",
- ge=8000,
- le=192000,
- ),
- ] = None
- stream_chunk_tokens: Annotated[
- int | None,
- Field(
- alias="streamChunkTokens",
- description="Speech tokens per native streaming chunk; 0 disables native chunk streaming.",
- ge=0,
- le=2147483647,
- ),
- ] = None
- stream_first_chunk_tokens: Annotated[
- int | None,
- Field(
- alias="streamFirstChunkTokens",
- description="Smaller first streaming chunk for lower first-audio latency.",
- ge=0,
- le=2147483647,
- ),
- ] = None
- threads: Annotated[
- int | None,
- Field(
- description="CPU thread count; overrides the hardware default.",
- gt=0,
- le=2147483647,
- ),
- ] = None
- n_gpu_layers: Annotated[
- int | None,
- Field(
- alias="nGpuLayers",
- description="Model layers to offload to the GPU backend (99 = all, 0 = CPU). Takes effect on its own and wins over `useGPU`; when both are set they must agree.",
- ge=-2147483648,
- le=2147483647,
- ),
- ] = None
- seed: Annotated[
- int | None,
- Field(
- description="RNG seed for the engine’s stochastic stages (e.g. Chatterbox CFM/SineGen, Supertonic latent generation).",
- ge=-2147483648,
- le=2147483647,
- ),
- ] = None
- backends_dir: Annotated[
- str | None,
- Field(
- alias="backendsDir",
- description="Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
- min_length=1,
- ),
- ] = None
- opencl_cache_dir: Annotated[
- str | None,
- Field(
- alias="openclCacheDir",
- description="Persistent directory for ggml-opencl's compiled-program cache (Android only).",
- min_length=1,
- ),
- ] = None
- lavasr_enhancer_model_src: Annotated[
- str
- | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrc
- | None,
- Field(
- alias="lavasrEnhancerModelSrc",
- description="LavaSR enhancer model source; bandwidth-extends the output to 48 kHz.",
- ),
- ] = None
- lavasr_denoiser_model_src: Annotated[
- str
- | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrc
- | None,
- Field(
- alias="lavasrDenoiserModelSrc",
- description="LavaSR denoiser model source; runs before the enhancer, rate-preserving (batch synthesis only).",
- ),
- ] = None
- reference_audio_src: Annotated[
- str | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3ReferenceAudioSrc | None,
- Field(
- alias="referenceAudioSrc",
- description="CosyVoice3 voice-cloning reference recording source (wav; 0.5–30 s, 5–15 s of clean speech recommended). Replaces the baked voice.",
- ),
- ] = None
- cosyvoice3_s3tok_model_src: Annotated[
- str
- | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3S3tokModelSrc
- | None,
- Field(
- alias="cosyvoice3S3tokModelSrc",
- description="CosyVoice3 speech-tokenizer (speech_tokenizer_v3) model source; required with `referenceAudioSrc`.",
- ),
- ] = None
- cosyvoice3_campplus_model_src: Annotated[
- str
- | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrc
- | None,
- Field(
- alias="cosyvoice3CampplusModelSrc",
- description="CosyVoice3 CAM++ speaker-encoder model source; required with `referenceAudioSrc`.",
- ),
- ] = None
-
-
-class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -17728,7 +17520,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrcAddon
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrc(
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -17799,7 +17591,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -17808,7 +17600,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrc(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3ReferenceAudioSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -17839,7 +17631,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrcAddon
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrc(
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3ReferenceAudioSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -17910,7 +17702,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3ReferenceAudioSrcAddon
| Literal["vad"]
| None,
Field(
@@ -17919,7 +17711,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrc(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3S3tokModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -17950,7 +17742,9 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrcAddon(Enum):
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrc(GeneratedBaseModel):
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3S3tokModelSrc(
+ GeneratedBaseModel
+):
src: Annotated[
str,
Field(
@@ -18019,7 +17813,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrc(GeneratedBase
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3S3tokModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -18028,55 +17822,168 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrc(GeneratedBase
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigAudio8(GeneratedBaseModel):
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrcAddon(
+ Enum
+):
+ llamacpp_completion = "llamacpp-completion"
+ whispercpp_transcription = "whispercpp-transcription"
+ bci_whispercpp_transcription = "bci-whispercpp-transcription"
+ llamacpp_embedding = "llamacpp-embedding"
+ llamacpp_decision = "llamacpp-decision"
+ llamacpp_rerank = "llamacpp-rerank"
+ nmtcpp_translation = "nmtcpp-translation"
+ onnx_tts = "onnx-tts"
+ tts_ggml = "tts-ggml"
+ parakeet_transcription = "parakeet-transcription"
+ moss_transcribe = "moss-transcribe"
+ ggml_ocr = "ggml-ocr"
+ sdcpp_generation = "sdcpp-generation"
+ audiogen_ggml = "audiogen-ggml"
+ ggml_vla = "ggml-vla"
+ ggml_classification = "ggml-classification"
+ llm = "llm"
+ whisper = "whisper"
+ bci = "bci"
+ embeddings = "embeddings"
+ nmt = "nmt"
+ parakeet = "parakeet"
+ tts = "tts"
+ ocr = "ocr"
+ diffusion = "diffusion"
+ audiogen = "audiogen"
+ vla = "vla"
+ classification = "classification"
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrc(
+ GeneratedBaseModel
+):
+ src: Annotated[
+ str,
+ Field(
+ description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ ),
+ ]
+ name: Annotated[
+ str | None,
+ Field(
+ description="Display name for this model instance; overrides the name derived from the source."
+ ),
+ ] = None
+ model_id: Annotated[
+ str | None,
+ Field(
+ alias="modelId",
+ description="Unique identifier used to reference the model in QVAC calls.",
+ ),
+ ] = None
+ registry_path: Annotated[
+ str | None,
+ Field(
+ alias="registryPath",
+ description="Registry-relative path to the model (set for registry-backed models).",
+ ),
+ ] = None
+ registry_source: Annotated[
+ str | None,
+ Field(
+ alias="registrySource",
+ description="Registry source identifier, e.g. `huggingface`.",
+ ),
+ ] = None
+ blob_core_key: Annotated[
+ str | None,
+ Field(
+ alias="blobCoreKey",
+ description="Hyperdrive blob core key for the model file.",
+ ),
+ ] = None
+ blob_index: Annotated[
+ float | None,
+ Field(
+ alias="blobIndex",
+ description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ ),
+ ] = None
+ engine: Annotated[
+ str | None,
+ Field(
+ description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
+ ),
+ ] = None
+ expected_size: Annotated[
+ float | None,
+ Field(
+ alias="expectedSize",
+ description="Expected total size of the model file in bytes.",
+ ),
+ ] = None
+ sha256_checksum: Annotated[
+ str | None,
+ Field(
+ alias="sha256Checksum",
+ description="Expected SHA-256 checksum of the model file.",
+ ),
+ ] = None
+ addon: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrcAddon
+ | Literal["vad"]
+ | None,
+ Field(
+ description="Inference addon / capability category this model belongs to."
+ ),
+ ] = None
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3(GeneratedBaseModel):
model_config = ConfigDict(
extra="forbid",
)
tts_engine: Annotated[
- Literal["audio8"], Field(alias="ttsEngine", description="TTS engine: Audio8.")
- ] = "audio8"
- reference_text: Annotated[
- str | None,
+ Literal["cosyvoice3"],
+ Field(alias="ttsEngine", description="TTS engine: CosyVoice3."),
+ ] = "cosyvoice3"
+ emotion: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Emotion | None,
Field(
- alias="referenceText",
- description="Transcript of `referenceAudioSrc`; required when cloning a voice.",
- min_length=1,
+ description="Speaking style: `'anger'`, `'happy'`, `'neutral'`, or `'sad'`. One conditioning control per synthesis (emotion / non-moderate pace / instruct).",
+ title="LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Emotion",
),
] = None
- greedy: Annotated[
- bool | None, Field(description="Audio8: take the argmax instead of sampling.")
+ pace: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Pace | None,
+ Field(
+ description="Speaking rate: `'slow'`, `'moderate'`, or `'fast'`; `'moderate'` disengages the pace channel.",
+ title="LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Pace",
+ ),
] = None
- temperature: Annotated[
- float | None,
+ instruct: Annotated[
+ Instruct | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Instruct | None,
Field(
- description="Sampling temperature; unset defers to the engine default (Parler 1.0, Audio8 0.7).",
- ge=0.0,
+ description="Natural-language control: a structured object (one of dialect / volume / style) or a raw instruction string. One conditioning control per synthesis; a request-level `instruct` replaces it for that synthesis."
),
] = None
- top_k: Annotated[
- int | None,
+ prompt_text: Annotated[
+ str | None,
Field(
- alias="topK",
- description="Top-k sampling cutoff; unset defers to the engine default (50).",
- ge=0,
- le=2147483647,
+ alias="promptText",
+ description="Verbatim transcript of `referenceAudioSrc`. Setting it selects zero-shot cloning (best fidelity in the reference’s own language); omitting it selects cross-lingual cloning (timbre only). Without a reference it overrides the baked voice’s transcript metadata.",
+ min_length=1,
),
] = None
- top_p: Annotated[
- float | None,
+ flow_cut_prompt: Annotated[
+ bool | None,
Field(
- alias="topP",
- description="Top-p (nucleus) sampling cutoff (0 < p ≤ 1); unset defers to the engine default.",
- gt=0.0,
- le=1.0,
+ alias="flowCutPrompt",
+ description="Treat the baked-voice prompt frames as attention-only conditioning in the flow: a faster flow whose output deviates slightly from the reference (engine default off).",
),
] = None
- max_frames: Annotated[
+ vulkan_device: Annotated[
int | None,
Field(
- alias="maxFrames",
- description="Generation-length cap in decoder frames; 0 = engine default (Parler ≈86 frames/s, Audio8 ≈21.5).",
- ge=0,
+ alias="vulkanDevice",
+ description="Vulkan adapter index, also used by the LavaSR enhancer: 0 = the first adapter, N = the Nth, -1 = auto-pick by free VRAM preferring a discrete adapter. Only consulted on Vulkan.",
+ ge=-1,
le=2147483647,
),
] = None
@@ -18096,6 +18003,24 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8(GeneratedBaseModel):
le=192000,
),
] = None
+ stream_chunk_tokens: Annotated[
+ int | None,
+ Field(
+ alias="streamChunkTokens",
+ description="Speech tokens per native streaming chunk; 0 disables native chunk streaming.",
+ ge=0,
+ le=2147483647,
+ ),
+ ] = None
+ stream_first_chunk_tokens: Annotated[
+ int | None,
+ Field(
+ alias="streamFirstChunkTokens",
+ description="Smaller first streaming chunk for lower first-audio latency.",
+ ge=0,
+ le=2147483647,
+ ),
+ ] = None
threads: Annotated[
int | None,
Field(
@@ -18129,32 +18054,60 @@ class LoadModelSrcRequestTtsGgmlModelConfigAudio8(GeneratedBaseModel):
min_length=1,
),
] = None
- audio8_codec_decoder_model_src: Annotated[
- str | LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrc,
+ opencl_cache_dir: Annotated[
+ str | None,
Field(
- alias="audio8CodecDecoderModelSrc",
- description="Audio8 codec decoder model source (codes to 44.1 kHz waveform).",
+ alias="openclCacheDir",
+ description="Persistent directory for ggml-opencl's compiled-program cache (Android only).",
+ min_length=1,
),
- ]
- audio8_codec_encoder_model_src: Annotated[
+ ] = None
+ lavasr_enhancer_model_src: Annotated[
str
- | LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrc
+ | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrEnhancerModelSrc
| None,
Field(
- alias="audio8CodecEncoderModelSrc",
- description="Audio8 codec encoder model source (waveform to codes); required only for voice cloning.",
+ alias="lavasrEnhancerModelSrc",
+ description="LavaSR enhancer model source; bandwidth-extends the output to 48 kHz.",
+ ),
+ ] = None
+ lavasr_denoiser_model_src: Annotated[
+ str
+ | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3LavasrDenoiserModelSrc
+ | None,
+ Field(
+ alias="lavasrDenoiserModelSrc",
+ description="LavaSR denoiser model source; runs before the enhancer, rate-preserving (batch synthesis only).",
),
] = None
reference_audio_src: Annotated[
- str | LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrc | None,
+ str | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3ReferenceAudioSrc | None,
Field(
alias="referenceAudioSrc",
- description="Audio8 voice-cloning reference recording source; pair with `referenceText`.",
+ description="CosyVoice3 voice-cloning reference recording source (wav; 0.5–30 s, 5–15 s of clean speech recommended). Replaces the baked voice.",
+ ),
+ ] = None
+ cosyvoice3_s3tok_model_src: Annotated[
+ str
+ | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3S3tokModelSrc
+ | None,
+ Field(
+ alias="cosyvoice3S3tokModelSrc",
+ description="CosyVoice3 speech-tokenizer (speech_tokenizer_v3) model source; required with `referenceAudioSrc`.",
+ ),
+ ] = None
+ cosyvoice3_campplus_model_src: Annotated[
+ str
+ | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Cosyvoice3CampplusModelSrc
+ | None,
+ Field(
+ alias="cosyvoice3CampplusModelSrc",
+ description="CosyVoice3 CAM++ speaker-encoder model source; required with `referenceAudioSrc`.",
),
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -18185,7 +18138,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrcAddon(Enu
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrc(
+class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -18256,7 +18209,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -18265,7 +18218,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrc(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -18296,7 +18249,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrcAddon(Enu
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrc(
+class LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -18367,7 +18320,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -18376,7 +18329,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrc(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -18407,7 +18360,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrcAddon(Enum):
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrc(GeneratedBaseModel):
+class LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrc(GeneratedBaseModel):
src: Annotated[
str,
Field(
@@ -18476,7 +18429,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrc(GeneratedBaseMo
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrcAddon
| Literal["vad"]
| None,
Field(
@@ -18485,7 +18438,133 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrc(GeneratedBaseMo
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItemAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigAudio8(GeneratedBaseModel):
+ model_config = ConfigDict(
+ extra="forbid",
+ )
+ tts_engine: Annotated[
+ Literal["audio8"], Field(alias="ttsEngine", description="TTS engine: Audio8.")
+ ] = "audio8"
+ reference_text: Annotated[
+ str | None,
+ Field(
+ alias="referenceText",
+ description="Transcript of `referenceAudioSrc`; required when cloning a voice.",
+ min_length=1,
+ ),
+ ] = None
+ greedy: Annotated[
+ bool | None, Field(description="Audio8: take the argmax instead of sampling.")
+ ] = None
+ temperature: Annotated[
+ float | None,
+ Field(
+ description="Sampling temperature; unset defers to the engine default (Parler 1.0, Audio8 0.7).",
+ ge=0.0,
+ ),
+ ] = None
+ top_k: Annotated[
+ int | None,
+ Field(
+ alias="topK",
+ description="Top-k sampling cutoff; unset defers to the engine default (50).",
+ ge=0,
+ le=2147483647,
+ ),
+ ] = None
+ top_p: Annotated[
+ float | None,
+ Field(
+ alias="topP",
+ description="Top-p (nucleus) sampling cutoff (0 < p ≤ 1); unset defers to the engine default.",
+ gt=0.0,
+ le=1.0,
+ ),
+ ] = None
+ max_frames: Annotated[
+ int | None,
+ Field(
+ alias="maxFrames",
+ description="Generation-length cap in decoder frames; 0 = engine default (Parler ≈86 frames/s, Audio8 ≈21.5).",
+ ge=0,
+ le=2147483647,
+ ),
+ ] = None
+ use_gpu: Annotated[
+ bool | None,
+ Field(
+ alias="useGPU",
+ description="Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
+ ),
+ ] = None
+ output_sample_rate: Annotated[
+ int | None,
+ Field(
+ alias="outputSampleRate",
+ description="Desired output sample rate in Hz (8000–192000); omit to keep the engine’s native rate (or 48 kHz when the LavaSR enhancer is active).",
+ ge=8000,
+ le=192000,
+ ),
+ ] = None
+ threads: Annotated[
+ int | None,
+ Field(
+ description="CPU thread count; overrides the hardware default.",
+ gt=0,
+ le=2147483647,
+ ),
+ ] = None
+ n_gpu_layers: Annotated[
+ int | None,
+ Field(
+ alias="nGpuLayers",
+ description="Model layers to offload to the GPU backend (99 = all, 0 = CPU). Takes effect on its own and wins over `useGPU`; when both are set they must agree.",
+ ge=-2147483648,
+ le=2147483647,
+ ),
+ ] = None
+ seed: Annotated[
+ int | None,
+ Field(
+ description="RNG seed for the engine’s stochastic stages (e.g. Chatterbox CFM/SineGen, Supertonic latent generation).",
+ ge=-2147483648,
+ le=2147483647,
+ ),
+ ] = None
+ backends_dir: Annotated[
+ str | None,
+ Field(
+ alias="backendsDir",
+ description="Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
+ min_length=1,
+ ),
+ ] = None
+ audio8_codec_decoder_model_src: Annotated[
+ str | LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecDecoderModelSrc,
+ Field(
+ alias="audio8CodecDecoderModelSrc",
+ description="Audio8 codec decoder model source (codes to 44.1 kHz waveform).",
+ ),
+ ]
+ audio8_codec_encoder_model_src: Annotated[
+ str
+ | LoadModelSrcRequestTtsGgmlModelConfigAudio8Audio8CodecEncoderModelSrc
+ | None,
+ Field(
+ alias="audio8CodecEncoderModelSrc",
+ description="Audio8 codec encoder model source (waveform to codes); required only for voice cloning.",
+ ),
+ ] = None
+ reference_audio_src: Annotated[
+ str | LoadModelSrcRequestTtsGgmlModelConfigAudio8ReferenceAudioSrc | None,
+ Field(
+ alias="referenceAudioSrc",
+ description="Audio8 voice-cloning reference recording source; pair with `referenceText`.",
+ ),
+ ] = None
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -18516,7 +18595,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItemAddon(En
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItem(
+class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -18587,7 +18666,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItem(
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItemAddon
+ LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -18596,203 +18675,227 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItem(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigMoss(GeneratedBaseModel):
- model_config = ConfigDict(
- extra="forbid",
- )
- tts_engine: Annotated[
- Literal["moss"],
+class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrcAddon(Enum):
+ llamacpp_completion = "llamacpp-completion"
+ whispercpp_transcription = "whispercpp-transcription"
+ bci_whispercpp_transcription = "bci-whispercpp-transcription"
+ llamacpp_embedding = "llamacpp-embedding"
+ llamacpp_decision = "llamacpp-decision"
+ llamacpp_rerank = "llamacpp-rerank"
+ nmtcpp_translation = "nmtcpp-translation"
+ onnx_tts = "onnx-tts"
+ tts_ggml = "tts-ggml"
+ parakeet_transcription = "parakeet-transcription"
+ moss_transcribe = "moss-transcribe"
+ ggml_ocr = "ggml-ocr"
+ sdcpp_generation = "sdcpp-generation"
+ audiogen_ggml = "audiogen-ggml"
+ ggml_vla = "ggml-vla"
+ ggml_classification = "ggml-classification"
+ llm = "llm"
+ whisper = "whisper"
+ bci = "bci"
+ embeddings = "embeddings"
+ nmt = "nmt"
+ parakeet = "parakeet"
+ tts = "tts"
+ ocr = "ocr"
+ diffusion = "diffusion"
+ audiogen = "audiogen"
+ vla = "vla"
+ classification = "classification"
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrc(
+ GeneratedBaseModel
+):
+ src: Annotated[
+ str,
Field(
- alias="ttsEngine",
- description="TTS engine: MOSS (OpenMOSS MOSS-TTS v1.5 / MOSS-TTSD Delay; 24 kHz, 8B backbone, desktop only).",
+ description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
),
- ] = "moss"
- language: Annotated[
+ ]
+ name: Annotated[
str | None,
Field(
- description="Language hint written into the model prompt, e.g. `en` or `zh`. Default `en`.",
- min_length=1,
+ description="Display name for this model instance; overrides the name derived from the source."
),
] = None
- duration_tokens: Annotated[
- int | None,
+ model_id: Annotated[
+ str | None,
Field(
- alias="durationTokens",
- description="Target length of each synthesis in codec frames (12.5 per second, so 38 ≈ 3 s), 0–2015; 0 or unset keeps the length free.",
- ge=0,
- le=2015,
+ alias="modelId",
+ description="Unique identifier used to reference the model in QVAC calls.",
),
] = None
- stream_chunk_tokens: Annotated[
- int | None,
+ registry_path: Annotated[
+ str | None,
Field(
- alias="streamChunkTokens",
- description="Codec frames per native streaming chunk (12.5 per second, so 25 ≈ 2 s); 0 or unset synthesizes the whole text before emitting.",
- ge=0,
- le=2147483647,
+ alias="registryPath",
+ description="Registry-relative path to the model (set for registry-backed models).",
),
] = None
- use_gpu: Annotated[
- bool | None,
+ registry_source: Annotated[
+ str | None,
Field(
- alias="useGPU",
- description="Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
+ alias="registrySource",
+ description="Registry source identifier, e.g. `huggingface`.",
),
] = None
- threads: Annotated[
- int | None,
+ blob_core_key: Annotated[
+ str | None,
Field(
- description="CPU thread count; overrides the hardware default.",
- gt=0,
- le=2147483647,
+ alias="blobCoreKey",
+ description="Hyperdrive blob core key for the model file.",
),
] = None
- n_gpu_layers: Annotated[
- int | None,
+ blob_index: Annotated[
+ float | None,
Field(
- alias="nGpuLayers",
- description="Any non-zero value selects the GPU backend, 0 keeps MOSS on the CPU. Wins over `useGPU`; when both are set they must agree.",
- ge=-2147483648,
- le=2147483647,
+ alias="blobIndex",
+ description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
),
] = None
- seed: Annotated[
- int | None,
+ engine: Annotated[
+ str | None,
Field(
- description="RNG seed for the engine’s stochastic stages (e.g. Chatterbox CFM/SineGen, Supertonic latent generation).",
- ge=-2147483648,
- le=2147483647,
+ description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
),
] = None
- backends_dir: Annotated[
- str | None,
+ expected_size: Annotated[
+ float | None,
Field(
- alias="backendsDir",
- description="Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
- min_length=1,
+ alias="expectedSize",
+ description="Expected total size of the model file in bytes.",
),
] = None
- moss_codec_decoder_model_src: Annotated[
- str | LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrc,
- Field(
- alias="mossCodecDecoderModelSrc",
- description="MOSS codec decoder model source (codes to 24 kHz waveform).",
- ),
- ]
- moss_codec_encoder_model_src: Annotated[
- str | LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrc | None,
- Field(
- alias="mossCodecEncoderModelSrc",
- description="MOSS codec encoder model source (waveform to codes); required only with `referenceAudioSrc` or `dialogueReferenceSrcs`.",
- ),
- ] = None
- reference_audio_src: Annotated[
- str | LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrc | None,
+ sha256_checksum: Annotated[
+ str | None,
Field(
- alias="referenceAudioSrc",
- description="MOSS voice-cloning reference recording source: a 24 kHz WAV (no resampling; multichannel is downmixed, at most 60 s). No transcript needed. Fixed for the loaded model.",
+ alias="sha256Checksum",
+ description="Expected SHA-256 checksum of the model file.",
),
] = None
- dialogue_reference_srcs: Annotated[
- list[str | LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItem]
+ addon: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrcAddon
+ | Literal["vad"]
| None,
Field(
- alias="dialogueReferenceSrcs",
- description="MOSS-TTSD dialogue: one 24 kHz WAV per speaker (one to five, at most 60 s combined), in the order the text tags them (`[S1]`, `[S2]`, …). The text must open with each recording’s transcript under its tag, followed by the lines to generate. Needs a MOSS-TTSD backbone as `modelSrc`; fixed for the loaded model.",
- max_length=5,
- min_length=1,
+ description="Inference addon / capability category this model belongs to."
),
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigMossSfx(GeneratedBaseModel):
- model_config = ConfigDict(
- extra="forbid",
- )
- tts_engine: Annotated[
- Literal["moss-sfx"],
- Field(alias="ttsEngine", description="TTS engine: MOSS-SoundEffect-v2."),
- ] = "moss-sfx"
- use_gpu: Annotated[
- bool | None,
+class LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrcAddon(Enum):
+ llamacpp_completion = "llamacpp-completion"
+ whispercpp_transcription = "whispercpp-transcription"
+ bci_whispercpp_transcription = "bci-whispercpp-transcription"
+ llamacpp_embedding = "llamacpp-embedding"
+ llamacpp_decision = "llamacpp-decision"
+ llamacpp_rerank = "llamacpp-rerank"
+ nmtcpp_translation = "nmtcpp-translation"
+ onnx_tts = "onnx-tts"
+ tts_ggml = "tts-ggml"
+ parakeet_transcription = "parakeet-transcription"
+ moss_transcribe = "moss-transcribe"
+ ggml_ocr = "ggml-ocr"
+ sdcpp_generation = "sdcpp-generation"
+ audiogen_ggml = "audiogen-ggml"
+ ggml_vla = "ggml-vla"
+ ggml_classification = "ggml-classification"
+ llm = "llm"
+ whisper = "whisper"
+ bci = "bci"
+ embeddings = "embeddings"
+ nmt = "nmt"
+ parakeet = "parakeet"
+ tts = "tts"
+ ocr = "ocr"
+ diffusion = "diffusion"
+ audiogen = "audiogen"
+ vla = "vla"
+ classification = "classification"
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrc(GeneratedBaseModel):
+ src: Annotated[
+ str,
Field(
- alias="useGPU",
- description="Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
+ description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ ),
+ ]
+ name: Annotated[
+ str | None,
+ Field(
+ description="Display name for this model instance; overrides the name derived from the source."
),
] = None
- threads: Annotated[
- int | None,
+ model_id: Annotated[
+ str | None,
Field(
- description="CPU thread count; overrides the hardware default.",
- gt=0,
- le=2147483647,
+ alias="modelId",
+ description="Unique identifier used to reference the model in QVAC calls.",
),
] = None
- n_gpu_layers: Annotated[
- int | None,
+ registry_path: Annotated[
+ str | None,
Field(
- alias="nGpuLayers",
- description="Model layers to offload to the GPU backend (99 = all, 0 = CPU). Takes effect on its own and wins over `useGPU`; when both are set they must agree.",
- ge=-2147483648,
- le=2147483647,
+ alias="registryPath",
+ description="Registry-relative path to the model (set for registry-backed models).",
),
] = None
- seed: Annotated[
- int | None,
+ registry_source: Annotated[
+ str | None,
Field(
- description="RNG seed for the engine’s stochastic stages (e.g. Chatterbox CFM/SineGen, Supertonic latent generation).",
- ge=-2147483648,
- le=2147483647,
+ alias="registrySource",
+ description="Registry source identifier, e.g. `huggingface`.",
),
] = None
- backends_dir: Annotated[
+ blob_core_key: Annotated[
str | None,
Field(
- alias="backendsDir",
- description="Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
- min_length=1,
+ alias="blobCoreKey",
+ description="Hyperdrive blob core key for the model file.",
),
] = None
- seconds: Annotated[
+ blob_index: Annotated[
float | None,
Field(
- description="Sound-effect duration in seconds, up to 30.", gt=0.0, le=30.0
+ alias="blobIndex",
+ description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
),
] = None
- negative_prompt: Annotated[
+ engine: Annotated[
str | None,
Field(
- alias="negativePrompt",
- description="Description of sounds to avoid in the generated effect.",
+ description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
),
] = None
- steps: Annotated[
- int | None,
+ expected_size: Annotated[
+ float | None,
Field(
- description="Diffusion denoising steps; the native default is 100.",
- ge=1,
- le=1000,
+ alias="expectedSize",
+ description="Expected total size of the model file in bytes.",
),
] = None
- guidance: Annotated[
- float | None,
+ sha256_checksum: Annotated[
+ str | None,
Field(
- description="Classifier-free guidance scale for sound-effect generation.",
- ge=1.0,
- le=50.0,
+ alias="sha256Checksum",
+ description="Expected SHA-256 checksum of the model file.",
),
] = None
- shift: Annotated[
- float | None,
+ addon: Annotated[
+ LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrcAddon
+ | Literal["vad"]
+ | None,
Field(
- description="Diffusion timestep schedule shift for sound-effect generation.",
- gt=0.0,
- le=100.0,
+ description="Inference addon / capability category this model belongs to."
),
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItemAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -18823,7 +18926,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrcAddo
classification = "classification"
-class LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrc(
+class LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItem(
GeneratedBaseModel
):
src: Annotated[
@@ -18894,7 +18997,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItemAddon
| Literal["vad"]
| None,
Field(
@@ -18903,14 +19006,42 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrc(
] = None
-class LoadModelSrcRequestTtsGgmlModelConfigMossSpeech(GeneratedBaseModel):
+class LoadModelSrcRequestTtsGgmlModelConfigMoss(GeneratedBaseModel):
model_config = ConfigDict(
extra="forbid",
)
tts_engine: Annotated[
- Literal["moss-speech"],
- Field(alias="ttsEngine", description="TTS engine: MOSS-Speech."),
- ] = "moss-speech"
+ Literal["moss"],
+ Field(
+ alias="ttsEngine",
+ description="TTS engine: MOSS (OpenMOSS MOSS-TTS v1.5 / MOSS-TTSD Delay; 24 kHz, 8B backbone, desktop only).",
+ ),
+ ] = "moss"
+ language: Annotated[
+ str | None,
+ Field(
+ description="Language hint written into the model prompt, e.g. `en` or `zh`. Default `en`.",
+ min_length=1,
+ ),
+ ] = None
+ duration_tokens: Annotated[
+ int | None,
+ Field(
+ alias="durationTokens",
+ description="Target length of each synthesis in codec frames (12.5 per second, so 38 ≈ 3 s), 0–2015; 0 or unset keeps the length free.",
+ ge=0,
+ le=2015,
+ ),
+ ] = None
+ stream_chunk_tokens: Annotated[
+ int | None,
+ Field(
+ alias="streamChunkTokens",
+ description="Codec frames per native streaming chunk (12.5 per second, so 25 ≈ 2 s); 0 or unset synthesizes the whole text before emitting.",
+ ge=0,
+ le=2147483647,
+ ),
+ ] = None
use_gpu: Annotated[
bool | None,
Field(
@@ -18930,7 +19061,7 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossSpeech(GeneratedBaseModel):
int | None,
Field(
alias="nGpuLayers",
- description="Model layers to offload to the GPU backend (99 = all, 0 = CPU). Takes effect on its own and wins over `useGPU`; when both are set they must agree.",
+ description="Any non-zero value selects the GPU backend, 0 keeps MOSS on the CPU. Wins over `useGPU`; when both are set they must agree.",
ge=-2147483648,
le=2147483647,
),
@@ -18951,117 +19082,127 @@ class LoadModelSrcRequestTtsGgmlModelConfigMossSpeech(GeneratedBaseModel):
min_length=1,
),
] = None
- moss_speech_codec_model_src: Annotated[
- str | LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrc,
- Field(
- alias="mossSpeechCodecModelSrc",
- description="MOSS-Speech codec GGUF source; modelSrc is the language model.",
- ),
- ]
-
-
-class LoadModelSrcRequestTtsGgml(GeneratedBaseModel):
- model_config = ConfigDict(
- extra="forbid",
- )
- type: Literal["loadModel"] = "loadModel"
- model_src: Annotated[
- str,
+ moss_codec_decoder_model_src: Annotated[
+ str | LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecDecoderModelSrc,
Field(
- alias="modelSrc",
- description="The model to load: a registry model constant for a built-in model, or a model source — a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI — for HTTP, local, or P2P models.",
+ alias="mossCodecDecoderModelSrc",
+ description="MOSS codec decoder model source (codes to 24 kHz waveform).",
),
]
- model_name: Annotated[str | None, Field(alias="modelName")] = None
- with_progress: Annotated[bool | None, Field(alias="withProgress")] = None
- seed: bool | None = None
- fallback_src: Annotated[
- str | None,
+ moss_codec_encoder_model_src: Annotated[
+ str | LoadModelSrcRequestTtsGgmlModelConfigMossMossCodecEncoderModelSrc | None,
Field(
- alias="fallbackSrc",
- description="Alternate source — an HTTP URL or local file path — used to load a built-in registry model when it cannot be downloaded from the registry. The bytes are validated against the model checksum before use.",
+ alias="mossCodecEncoderModelSrc",
+ description="MOSS codec encoder model source (waveform to codes); required only with `referenceAudioSrc` or `dialogueReferenceSrcs`.",
),
] = None
- require_http_checksum: Annotated[
- bool | None,
+ reference_audio_src: Annotated[
+ str | LoadModelSrcRequestTtsGgmlModelConfigMossReferenceAudioSrc | None,
Field(
- alias="requireHttpChecksum",
- description="Reject a Hugging Face HTTP download that exposes no usable SHA-256 instead of downloading it unverified. Overrides the engine config for this call; defaults to the config value (false).",
+ alias="referenceAudioSrc",
+ description="MOSS voice-cloning reference recording source: a 24 kHz WAV (no resampling; multichannel is downmixed, at most 60 s). No transcript needed. Fixed for the loaded model.",
),
] = None
- require_secure_transport: Annotated[
- bool | None,
+ dialogue_reference_srcs: Annotated[
+ list[str | LoadModelSrcRequestTtsGgmlModelConfigMossDialogueReferenceSrcsItem]
+ | None,
Field(
- alias="requireSecureTransport",
- description="Reject plaintext http:// and HTTPS→HTTP downgrades for every HTTP source on this call (loopback exempt); when unset, only Hugging Face transport is hardened. Overrides the engine config for this call; defaults to the config value (false).",
+ alias="dialogueReferenceSrcs",
+ description="MOSS-TTSD dialogue: one 24 kHz WAV per speaker (one to five, at most 60 s combined), in the order the text tags them (`[S1]`, `[S2]`, …). The text must open with each recording’s transcript under its tag, followed by the lines to generate. Needs a MOSS-TTSD backbone as `modelSrc`; fixed for the loaded model.",
+ max_length=5,
+ min_length=1,
),
] = None
- model_fit_policy: Annotated[
- LoadModelSrcRequestTtsGgmlModelFitPolicy | None,
- Field(
- alias="modelFitPolicy",
- description="What the engine fitter's verdict does to this load: `log` reports it and loads anyway, `refuse` rejects a load the fitter projects will not fit, `off` skips the check. Overrides the engine config for this call; defaults to the config value (`log`).",
- title="LoadModelSrcRequestTtsGgmlModelFitPolicy",
+
+
+class LoadModelSrcRequestTtsGgmlModelConfigMossSfx(GeneratedBaseModel):
+ model_config = ConfigDict(
+ extra="forbid",
+ )
+ tts_engine: Annotated[
+ Literal["moss-sfx"],
+ Field(alias="ttsEngine", description="TTS engine: MOSS-SoundEffect-v2."),
+ ] = "moss-sfx"
+ use_gpu: Annotated[
+ bool | None,
+ Field(
+ alias="useGPU",
+ description="Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
),
] = None
- request_id: Annotated[
+ threads: Annotated[
+ int | None,
+ Field(
+ description="CPU thread count; overrides the hardware default.",
+ gt=0,
+ le=2147483647,
+ ),
+ ] = None
+ n_gpu_layers: Annotated[
+ int | None,
+ Field(
+ alias="nGpuLayers",
+ description="Model layers to offload to the GPU backend (99 = all, 0 = CPU). Takes effect on its own and wins over `useGPU`; when both are set they must agree.",
+ ge=-2147483648,
+ le=2147483647,
+ ),
+ ] = None
+ seed: Annotated[
+ int | None,
+ Field(
+ description="RNG seed for the engine’s stochastic stages (e.g. Chatterbox CFM/SineGen, Supertonic latent generation).",
+ ge=-2147483648,
+ le=2147483647,
+ ),
+ ] = None
+ backends_dir: Annotated[
str | None,
Field(
- alias="requestId",
- description="Stable identifier for this in-flight load, generated by the client at call time. Optional on the wire so legacy clients keep working — the server falls back to a server-generated id when the field is missing. Exposed on the client-side decorated promise so callers can target this load with `cancel({ requestId })`.",
+ alias="backendsDir",
+ description="Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
min_length=1,
),
] = None
- model_type: Annotated[Literal["tts-ggml"], Field(alias="modelType")] = "tts-ggml"
- model_config_: Annotated[
- LoadModelSrcRequestTtsGgmlModelConfigChatterbox
- | LoadModelSrcRequestTtsGgmlModelConfigSupertonic
- | LoadModelSrcRequestTtsGgmlModelConfigParler
- | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3
- | LoadModelSrcRequestTtsGgmlModelConfigAudio8
- | LoadModelSrcRequestTtsGgmlModelConfigMoss
- | LoadModelSrcRequestTtsGgmlModelConfigMossSfx
- | LoadModelSrcRequestTtsGgmlModelConfigMossSpeech,
- Field(alias="modelConfig"),
- ]
-
-
-class LoadModelSrcRequestGgmlOcrModelFitPolicy(Enum):
- log = "log"
- refuse = "refuse"
- off = "off"
-
-
-class LoadModelSrcRequestGgmlOcrModelConfigPipelineType(Enum):
- easyocr = "easyocr"
- doctr = "doctr"
-
-
-class LoadModelSrcRequestGgmlOcrModelConfigBackendDevice(Enum):
- cpu = "cpu"
- vulkan = "vulkan"
- metal = "metal"
- opencl = "opencl"
-
-
-class OcrMainGpuIndex(RootModel[int]):
- root: Annotated[
- int,
+ seconds: Annotated[
+ float | None,
Field(
- description="GPU to use on multi-GPU systems: a ggml registry index, or `'integrated'`/`'dedicated'` to restrict selection to that class. Requires `backendDevice` `'vulkan'`, `'metal'`, or `'opencl'`; cannot be combined with `gpuDevice`. An unavailable class or refused device falls back to CPU; an out-of-range index uses automatic selection. Stripped on mobile.",
- ge=0,
- le=2147483647,
- title="OcrMainGpuIndex",
+ description="Sound-effect duration in seconds, up to 30.", gt=0.0, le=30.0
),
- ]
-
-
-class LoadModelSrcRequestGgmlOcrModelConfigMainGpu(Enum):
- integrated = "integrated"
- dedicated = "dedicated"
+ ] = None
+ negative_prompt: Annotated[
+ str | None,
+ Field(
+ alias="negativePrompt",
+ description="Description of sounds to avoid in the generated effect.",
+ ),
+ ] = None
+ steps: Annotated[
+ int | None,
+ Field(
+ description="Diffusion denoising steps; the native default is 100.",
+ ge=1,
+ le=1000,
+ ),
+ ] = None
+ guidance: Annotated[
+ float | None,
+ Field(
+ description="Classifier-free guidance scale for sound-effect generation.",
+ ge=1.0,
+ le=50.0,
+ ),
+ ] = None
+ shift: Annotated[
+ float | None,
+ Field(
+ description="Diffusion timestep schedule shift for sound-effect generation.",
+ gt=0.0,
+ le=100.0,
+ ),
+ ] = None
-class LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrcAddon(Enum):
+class LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -19092,7 +19233,9 @@ class LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrcAddon(Enum):
classification = "classification"
-class LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrc(GeneratedBaseModel):
+class LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrc(
+ GeneratedBaseModel
+):
src: Annotated[
str,
Field(
@@ -19161,7 +19304,7 @@ class LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrc(GeneratedBaseModel):
),
] = None
addon: Annotated[
- LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrcAddon
+ LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -19170,103 +19313,64 @@ class LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrc(GeneratedBaseModel):
] = None
-class LoadModelSrcRequestGgmlOcrModelConfig(GeneratedBaseModel):
- lang_list: Annotated[
- list[str] | None,
- Field(
- alias="langList",
- description="Languages handled by the recognizer, e.g. `['en']` or `['en', 'fr']`. Required for `easyocr`; ignored by the language-agnostic `doctr` pipeline.",
- ),
- ] = None
- pipeline_type: Annotated[
- LoadModelSrcRequestGgmlOcrModelConfigPipelineType | None,
- Field(
- alias="pipelineType",
- description="OCR pipeline: `'easyocr'` (CRAFT detector + CRNN recognizer, default) or `'doctr'` (DBNet detector + doctr recognizer, language-agnostic).",
- title="LoadModelSrcRequestGgmlOcrModelConfigPipelineType",
- ),
- ] = None
- mag_ratio: Annotated[
- float | None,
- Field(
- alias="magRatio",
- description="Detection magnification ratio (easyocr only). Default 1.5.",
- ),
- ] = None
- canvas_size: Annotated[
- float | None,
- Field(
- alias="canvasSize",
- description="Detection canvas cap (long side, px) applied after `magRatio` scaling; lower it on memory-constrained targets. Default 2560. easyocr only.",
- ),
- ] = None
- default_rotation_angles: Annotated[
- list[float] | None,
- Field(
- alias="defaultRotationAngles",
- description="Rotation angles tried when the primary pass is low-confidence (easyocr only). Default [90, 270].",
- ),
- ] = None
- contrast_retry: Annotated[
+class LoadModelSrcRequestTtsGgmlModelConfigMossSpeech(GeneratedBaseModel):
+ model_config = ConfigDict(
+ extra="forbid",
+ )
+ tts_engine: Annotated[
+ Literal["moss-speech"],
+ Field(alias="ttsEngine", description="TTS engine: MOSS-Speech."),
+ ] = "moss-speech"
+ use_gpu: Annotated[
bool | None,
Field(
- alias="contrastRetry",
- description="Retry low-confidence boxes with contrast adjustment (easyocr only). Default false.",
- ),
- ] = None
- low_confidence_threshold: Annotated[
- float | None,
- Field(
- alias="lowConfidenceThreshold",
- description="Confidence threshold below which contrast-retry kicks in (easyocr only). Default 0.4.",
- ),
- ] = None
- recognizer_batch_size: Annotated[
- float | None,
- Field(
- alias="recognizerBatchSize",
- description="Recognizer batch size (easyocr only). Default 32.",
+ alias="useGPU",
+ description="Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
),
] = None
- n_threads: Annotated[
- float | None,
+ threads: Annotated[
+ int | None,
Field(
- alias="nThreads",
- description="GGML CPU thread count: `0` (default) auto-detects physical cores, `> 0` sets an explicit count, `< 0` leaves the backend's default unchanged.",
+ description="CPU thread count; overrides the hardware default.",
+ gt=0,
+ le=2147483647,
),
] = None
- backend_device: Annotated[
- LoadModelSrcRequestGgmlOcrModelConfigBackendDevice | None,
+ n_gpu_layers: Annotated[
+ int | None,
Field(
- alias="backendDevice",
- description="ggml backend device: `'cpu'` (default), `'vulkan'`, `'metal'`, or `'opencl'`. Falls back to CPU when the requested GPU device is unavailable.",
- title="LoadModelSrcRequestGgmlOcrModelConfigBackendDevice",
+ alias="nGpuLayers",
+ description="Model layers to offload to the GPU backend (99 = all, 0 = CPU). Takes effect on its own and wins over `useGPU`; when both are set they must agree.",
+ ge=-2147483648,
+ le=2147483647,
),
] = None
- gpu_device: Annotated[
- float | None,
+ seed: Annotated[
+ int | None,
Field(
- alias="gpuDevice",
- description="0-based GPU device index for `'vulkan'`/`'metal'`/`'opencl'`; when omitted, prefers a discrete GPU. Ignored for `'cpu'`.",
+ description="RNG seed for the engine’s stochastic stages (e.g. Chatterbox CFM/SineGen, Supertonic latent generation).",
+ ge=-2147483648,
+ le=2147483647,
),
] = None
- main_gpu: Annotated[
- OcrMainGpuIndex | LoadModelSrcRequestGgmlOcrModelConfigMainGpu | None,
+ backends_dir: Annotated[
+ str | None,
Field(
- alias="mainGpu",
- description="GPU to use on multi-GPU systems: a ggml registry index, or `'integrated'`/`'dedicated'` to restrict selection to that class. Requires `backendDevice` `'vulkan'`, `'metal'`, or `'opencl'`; cannot be combined with `gpuDevice`. An unavailable class or refused device falls back to CPU; an out-of-range index uses automatic selection. Stripped on mobile.",
+ alias="backendsDir",
+ description="Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
+ min_length=1,
),
] = None
- detector_model_src: Annotated[
- str | LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrc | None,
+ moss_speech_codec_model_src: Annotated[
+ str | LoadModelSrcRequestTtsGgmlModelConfigMossSpeechMossSpeechCodecModelSrc,
Field(
- alias="detectorModelSrc",
- description="Text-detector model source (easyocr: CRAFT; doctr: DBNet). Derived from the recognizer model source when omitted.",
+ alias="mossSpeechCodecModelSrc",
+ description="MOSS-Speech codec GGUF source; modelSrc is the language model.",
),
- ] = None
+ ]
-class LoadModelSrcRequestGgmlOcr(GeneratedBaseModel):
+class LoadModelSrcRequestTtsGgml(GeneratedBaseModel):
model_config = ConfigDict(
extra="forbid",
)
@@ -19303,11 +19407,11 @@ class LoadModelSrcRequestGgmlOcr(GeneratedBaseModel):
),
] = None
model_fit_policy: Annotated[
- LoadModelSrcRequestGgmlOcrModelFitPolicy | None,
+ LoadModelSrcRequestTtsGgmlModelFitPolicy | None,
Field(
alias="modelFitPolicy",
description="What the engine fitter's verdict does to this load: `log` reports it and loads anyway, `refuse` rejects a load the fitter projects will not fit, `off` skips the check. Overrides the engine config for this call; defaults to the config value (`log`).",
- title="LoadModelSrcRequestGgmlOcrModelFitPolicy",
+ title="LoadModelSrcRequestTtsGgmlModelFitPolicy",
),
] = None
request_id: Annotated[
@@ -19318,92 +19422,56 @@ class LoadModelSrcRequestGgmlOcr(GeneratedBaseModel):
min_length=1,
),
] = None
- model_type: Annotated[Literal["ggml-ocr"], Field(alias="modelType")] = "ggml-ocr"
+ model_type: Annotated[Literal["tts-ggml"], Field(alias="modelType")] = "tts-ggml"
model_config_: Annotated[
- LoadModelSrcRequestGgmlOcrModelConfig,
- Field(alias="modelConfig", title="LoadModelSrcRequestGgmlOcrModelConfig"),
+ LoadModelSrcRequestTtsGgmlModelConfigChatterbox
+ | LoadModelSrcRequestTtsGgmlModelConfigSupertonic
+ | LoadModelSrcRequestTtsGgmlModelConfigParler
+ | LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3
+ | LoadModelSrcRequestTtsGgmlModelConfigAudio8
+ | LoadModelSrcRequestTtsGgmlModelConfigMoss
+ | LoadModelSrcRequestTtsGgmlModelConfigMossSfx
+ | LoadModelSrcRequestTtsGgmlModelConfigMossSpeech,
+ Field(alias="modelConfig"),
]
-class LoadModelSrcRequestSdcppGenerationModelFitPolicy(Enum):
+class LoadModelSrcRequestGgmlOcrModelFitPolicy(Enum):
log = "log"
refuse = "refuse"
off = "off"
-class LoadModelSrcRequestSdcppGenerationModelConfigMode(Enum):
- diffusion = "diffusion"
- upscale = "upscale"
- video = "video"
- world = "world"
+class LoadModelSrcRequestGgmlOcrModelConfigPipelineType(Enum):
+ easyocr = "easyocr"
+ doctr = "doctr"
-class LoadModelSrcRequestSdcppGenerationModelConfigDevice(Enum):
- gpu = "gpu"
+class LoadModelSrcRequestGgmlOcrModelConfigBackendDevice(Enum):
cpu = "cpu"
+ vulkan = "vulkan"
+ metal = "metal"
+ opencl = "opencl"
-class MainGpu6(RootModel[int]):
+class OcrMainGpuIndex(RootModel[int]):
root: Annotated[
int,
Field(
- description='GPU to pin when `device` is "gpu": a GPU-device index, "integrated", or "dedicated" (the discrete GPU with the most VRAM). Omit to let the backend choose the first enumerated device. Resolved against the addon\'s own ggml device enumeration, so it cannot desync from the device list the backend actually uses. If an explicit request cannot be satisfied (e.g. "integrated" with no integrated GPU, "dedicated" with no discrete GPU, or an out-of-range index) the addon falls back to CPU rather than substituting a different GPU. Stripped on mobile (single-GPU devices).',
+ description="GPU to use on multi-GPU systems: a ggml registry index, or `'integrated'`/`'dedicated'` to restrict selection to that class. Requires `backendDevice` `'vulkan'`, `'metal'`, or `'opencl'`; cannot be combined with `gpuDevice`. An unavailable class or refused device falls back to CPU; an out-of-range index uses automatic selection. Stripped on mobile.",
ge=0,
- le=9007199254740991,
+ le=2147483647,
+ title="OcrMainGpuIndex",
),
]
-class LoadModelSrcRequestSdcppGenerationModelConfigMainGpu(Enum):
+class LoadModelSrcRequestGgmlOcrModelConfigMainGpu(Enum):
integrated = "integrated"
dedicated = "dedicated"
-class LoadModelSrcRequestSdcppGenerationModelConfigPrediction(Enum):
- auto = "auto"
- eps = "eps"
- v = "v"
- edm_v = "edm_v"
- flow = "flow"
- flux2_flow = "flux2_flow"
-
-
-class LoadModelSrcRequestSdcppGenerationModelConfigType(Enum):
- auto = "auto"
- f32 = "f32"
- f16 = "f16"
- bf16 = "bf16"
- q2_k = "q2_k"
- q3_k = "q3_k"
- q4_0 = "q4_0"
- q4_1 = "q4_1"
- q4_k = "q4_k"
- q5_0 = "q5_0"
- q5_1 = "q5_1"
- q5_k = "q5_k"
- q6_k = "q6_k"
- q8_0 = "q8_0"
-
-
-class LoadModelSrcRequestSdcppGenerationModelConfigRng(Enum):
- cpu = "cpu"
- cuda = "cuda"
- std_default = "std_default"
-
-
-class LoadModelSrcRequestSdcppGenerationModelConfigSamplerRng(Enum):
- cpu = "cpu"
- cuda = "cuda"
- std_default = "std_default"
-
-
-class LoadModelSrcRequestSdcppGenerationModelConfigLoraApplyMode(Enum):
- auto = "auto"
- immediately = "immediately"
- at_runtime = "at_runtime"
-
-
-class LoadModelSrcRequestSdcppGenerationModelConfigClipLModelSrcAddon(Enum):
+class LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -19434,7 +19502,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigClipLModelSrcAddon(Enum):
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigClipLModelSrc(GeneratedBaseModel):
+class LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrc(GeneratedBaseModel):
src: Annotated[
str,
Field(
@@ -19503,7 +19571,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigClipLModelSrc(GeneratedBaseMo
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigClipLModelSrcAddon
+ LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -19512,160 +19580,284 @@ class LoadModelSrcRequestSdcppGenerationModelConfigClipLModelSrc(GeneratedBaseMo
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigClipGModelSrcAddon(Enum):
- llamacpp_completion = "llamacpp-completion"
- whispercpp_transcription = "whispercpp-transcription"
- bci_whispercpp_transcription = "bci-whispercpp-transcription"
- llamacpp_embedding = "llamacpp-embedding"
- llamacpp_decision = "llamacpp-decision"
- llamacpp_rerank = "llamacpp-rerank"
- nmtcpp_translation = "nmtcpp-translation"
- onnx_tts = "onnx-tts"
- tts_ggml = "tts-ggml"
- parakeet_transcription = "parakeet-transcription"
- moss_transcribe = "moss-transcribe"
- ggml_ocr = "ggml-ocr"
- sdcpp_generation = "sdcpp-generation"
- audiogen_ggml = "audiogen-ggml"
- ggml_vla = "ggml-vla"
- ggml_classification = "ggml-classification"
- llm = "llm"
- whisper = "whisper"
- bci = "bci"
- embeddings = "embeddings"
- nmt = "nmt"
- parakeet = "parakeet"
- tts = "tts"
- ocr = "ocr"
- diffusion = "diffusion"
- audiogen = "audiogen"
- vla = "vla"
- classification = "classification"
-
-
-class LoadModelSrcRequestSdcppGenerationModelConfigClipGModelSrc(GeneratedBaseModel):
- src: Annotated[
- str,
+class LoadModelSrcRequestGgmlOcrModelConfig(GeneratedBaseModel):
+ lang_list: Annotated[
+ list[str] | None,
Field(
- description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ alias="langList",
+ description="Languages handled by the recognizer, e.g. `['en']` or `['en', 'fr']`. Required for `easyocr`; ignored by the language-agnostic `doctr` pipeline.",
),
- ]
- name: Annotated[
- str | None,
+ ] = None
+ pipeline_type: Annotated[
+ LoadModelSrcRequestGgmlOcrModelConfigPipelineType | None,
Field(
- description="Display name for this model instance; overrides the name derived from the source."
+ alias="pipelineType",
+ description="OCR pipeline: `'easyocr'` (CRAFT detector + CRNN recognizer, default) or `'doctr'` (DBNet detector + doctr recognizer, language-agnostic).",
+ title="LoadModelSrcRequestGgmlOcrModelConfigPipelineType",
),
] = None
- model_id: Annotated[
- str | None,
+ mag_ratio: Annotated[
+ float | None,
Field(
- alias="modelId",
- description="Unique identifier used to reference the model in QVAC calls.",
+ alias="magRatio",
+ description="Detection magnification ratio (easyocr only). Default 1.5.",
),
] = None
- registry_path: Annotated[
- str | None,
+ canvas_size: Annotated[
+ float | None,
Field(
- alias="registryPath",
- description="Registry-relative path to the model (set for registry-backed models).",
+ alias="canvasSize",
+ description="Detection canvas cap (long side, px) applied after `magRatio` scaling; lower it on memory-constrained targets. Default 2560. easyocr only.",
),
] = None
- registry_source: Annotated[
- str | None,
+ default_rotation_angles: Annotated[
+ list[float] | None,
Field(
- alias="registrySource",
- description="Registry source identifier, e.g. `huggingface`.",
+ alias="defaultRotationAngles",
+ description="Rotation angles tried when the primary pass is low-confidence (easyocr only). Default [90, 270].",
),
] = None
- blob_core_key: Annotated[
- str | None,
+ contrast_retry: Annotated[
+ bool | None,
Field(
- alias="blobCoreKey",
- description="Hyperdrive blob core key for the model file.",
+ alias="contrastRetry",
+ description="Retry low-confidence boxes with contrast adjustment (easyocr only). Default false.",
),
] = None
- blob_index: Annotated[
+ low_confidence_threshold: Annotated[
float | None,
Field(
- alias="blobIndex",
- description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ alias="lowConfidenceThreshold",
+ description="Confidence threshold below which contrast-retry kicks in (easyocr only). Default 0.4.",
),
] = None
- engine: Annotated[
- str | None,
+ recognizer_batch_size: Annotated[
+ float | None,
Field(
- description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
+ alias="recognizerBatchSize",
+ description="Recognizer batch size (easyocr only). Default 32.",
),
] = None
- expected_size: Annotated[
+ n_threads: Annotated[
float | None,
Field(
- alias="expectedSize",
- description="Expected total size of the model file in bytes.",
+ alias="nThreads",
+ description="GGML CPU thread count: `0` (default) auto-detects physical cores, `> 0` sets an explicit count, `< 0` leaves the backend's default unchanged.",
),
] = None
- sha256_checksum: Annotated[
- str | None,
+ backend_device: Annotated[
+ LoadModelSrcRequestGgmlOcrModelConfigBackendDevice | None,
Field(
- alias="sha256Checksum",
- description="Expected SHA-256 checksum of the model file.",
+ alias="backendDevice",
+ description="ggml backend device: `'cpu'` (default), `'vulkan'`, `'metal'`, or `'opencl'`. Falls back to CPU when the requested GPU device is unavailable.",
+ title="LoadModelSrcRequestGgmlOcrModelConfigBackendDevice",
),
] = None
- addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigClipGModelSrcAddon
- | Literal["vad"]
- | None,
+ gpu_device: Annotated[
+ float | None,
Field(
- description="Inference addon / capability category this model belongs to."
+ alias="gpuDevice",
+ description="0-based GPU device index for `'vulkan'`/`'metal'`/`'opencl'`; when omitted, prefers a discrete GPU. Ignored for `'cpu'`.",
),
] = None
-
-
-class LoadModelSrcRequestSdcppGenerationModelConfigT5XxlModelSrcAddon(Enum):
- llamacpp_completion = "llamacpp-completion"
- whispercpp_transcription = "whispercpp-transcription"
- bci_whispercpp_transcription = "bci-whispercpp-transcription"
- llamacpp_embedding = "llamacpp-embedding"
- llamacpp_decision = "llamacpp-decision"
- llamacpp_rerank = "llamacpp-rerank"
- nmtcpp_translation = "nmtcpp-translation"
- onnx_tts = "onnx-tts"
- tts_ggml = "tts-ggml"
- parakeet_transcription = "parakeet-transcription"
- moss_transcribe = "moss-transcribe"
- ggml_ocr = "ggml-ocr"
- sdcpp_generation = "sdcpp-generation"
- audiogen_ggml = "audiogen-ggml"
- ggml_vla = "ggml-vla"
- ggml_classification = "ggml-classification"
- llm = "llm"
- whisper = "whisper"
- bci = "bci"
- embeddings = "embeddings"
- nmt = "nmt"
- parakeet = "parakeet"
- tts = "tts"
- ocr = "ocr"
- diffusion = "diffusion"
- audiogen = "audiogen"
- vla = "vla"
- classification = "classification"
-
-
-class LoadModelSrcRequestSdcppGenerationModelConfigT5XxlModelSrc(GeneratedBaseModel):
- src: Annotated[
- str,
+ main_gpu: Annotated[
+ OcrMainGpuIndex | LoadModelSrcRequestGgmlOcrModelConfigMainGpu | None,
Field(
- description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ alias="mainGpu",
+ description="GPU to use on multi-GPU systems: a ggml registry index, or `'integrated'`/`'dedicated'` to restrict selection to that class. Requires `backendDevice` `'vulkan'`, `'metal'`, or `'opencl'`; cannot be combined with `gpuDevice`. An unavailable class or refused device falls back to CPU; an out-of-range index uses automatic selection. Stripped on mobile.",
),
- ]
- name: Annotated[
- str | None,
+ ] = None
+ detector_model_src: Annotated[
+ str | LoadModelSrcRequestGgmlOcrModelConfigDetectorModelSrc | None,
Field(
- description="Display name for this model instance; overrides the name derived from the source."
+ alias="detectorModelSrc",
+ description="Text-detector model source (easyocr: CRAFT; doctr: DBNet). Derived from the recognizer model source when omitted.",
),
] = None
- model_id: Annotated[
+
+
+class LoadModelSrcRequestGgmlOcr(GeneratedBaseModel):
+ model_config = ConfigDict(
+ extra="forbid",
+ )
+ type: Literal["loadModel"] = "loadModel"
+ model_src: Annotated[
+ str,
+ Field(
+ alias="modelSrc",
+ description="The model to load: a registry model constant for a built-in model, or a model source — a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI — for HTTP, local, or P2P models.",
+ ),
+ ]
+ model_name: Annotated[str | None, Field(alias="modelName")] = None
+ with_progress: Annotated[bool | None, Field(alias="withProgress")] = None
+ seed: bool | None = None
+ fallback_src: Annotated[
+ str | None,
+ Field(
+ alias="fallbackSrc",
+ description="Alternate source — an HTTP URL or local file path — used to load a built-in registry model when it cannot be downloaded from the registry. The bytes are validated against the model checksum before use.",
+ ),
+ ] = None
+ require_http_checksum: Annotated[
+ bool | None,
+ Field(
+ alias="requireHttpChecksum",
+ description="Reject a Hugging Face HTTP download that exposes no usable SHA-256 instead of downloading it unverified. Overrides the engine config for this call; defaults to the config value (false).",
+ ),
+ ] = None
+ require_secure_transport: Annotated[
+ bool | None,
+ Field(
+ alias="requireSecureTransport",
+ description="Reject plaintext http:// and HTTPS→HTTP downgrades for every HTTP source on this call (loopback exempt); when unset, only Hugging Face transport is hardened. Overrides the engine config for this call; defaults to the config value (false).",
+ ),
+ ] = None
+ model_fit_policy: Annotated[
+ LoadModelSrcRequestGgmlOcrModelFitPolicy | None,
+ Field(
+ alias="modelFitPolicy",
+ description="What the engine fitter's verdict does to this load: `log` reports it and loads anyway, `refuse` rejects a load the fitter projects will not fit, `off` skips the check. Overrides the engine config for this call; defaults to the config value (`log`).",
+ title="LoadModelSrcRequestGgmlOcrModelFitPolicy",
+ ),
+ ] = None
+ request_id: Annotated[
+ str | None,
+ Field(
+ alias="requestId",
+ description="Stable identifier for this in-flight load, generated by the client at call time. Optional on the wire so legacy clients keep working — the server falls back to a server-generated id when the field is missing. Exposed on the client-side decorated promise so callers can target this load with `cancel({ requestId })`.",
+ min_length=1,
+ ),
+ ] = None
+ model_type: Annotated[Literal["ggml-ocr"], Field(alias="modelType")] = "ggml-ocr"
+ model_config_: Annotated[
+ LoadModelSrcRequestGgmlOcrModelConfig,
+ Field(alias="modelConfig", title="LoadModelSrcRequestGgmlOcrModelConfig"),
+ ]
+
+
+class LoadModelSrcRequestSdcppGenerationModelFitPolicy(Enum):
+ log = "log"
+ refuse = "refuse"
+ off = "off"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigMode(Enum):
+ diffusion = "diffusion"
+ upscale = "upscale"
+ video = "video"
+ world = "world"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigDevice(Enum):
+ gpu = "gpu"
+ cpu = "cpu"
+
+
+class MainGpu6(RootModel[int]):
+ root: Annotated[
+ int,
+ Field(
+ description='GPU to pin when `device` is "gpu": a GPU-device index, "integrated", or "dedicated" (the discrete GPU with the most VRAM). Omit to let the backend choose the first enumerated device. Resolved against the addon\'s own ggml device enumeration, so it cannot desync from the device list the backend actually uses. If an explicit request cannot be satisfied (e.g. "integrated" with no integrated GPU, "dedicated" with no discrete GPU, or an out-of-range index) the addon falls back to CPU rather than substituting a different GPU. Stripped on mobile (single-GPU devices).',
+ ge=0,
+ le=9007199254740991,
+ ),
+ ]
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigMainGpu(Enum):
+ integrated = "integrated"
+ dedicated = "dedicated"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigPrediction(Enum):
+ auto = "auto"
+ eps = "eps"
+ v = "v"
+ edm_v = "edm_v"
+ flow = "flow"
+ flux2_flow = "flux2_flow"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigType(Enum):
+ auto = "auto"
+ f32 = "f32"
+ f16 = "f16"
+ bf16 = "bf16"
+ q2_k = "q2_k"
+ q3_k = "q3_k"
+ q4_0 = "q4_0"
+ q4_1 = "q4_1"
+ q4_k = "q4_k"
+ q5_0 = "q5_0"
+ q5_1 = "q5_1"
+ q5_k = "q5_k"
+ q6_k = "q6_k"
+ q8_0 = "q8_0"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigRng(Enum):
+ cpu = "cpu"
+ cuda = "cuda"
+ std_default = "std_default"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigSamplerRng(Enum):
+ cpu = "cpu"
+ cuda = "cuda"
+ std_default = "std_default"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigLoraApplyMode(Enum):
+ auto = "auto"
+ immediately = "immediately"
+ at_runtime = "at_runtime"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigClipLModelSrcAddon(Enum):
+ llamacpp_completion = "llamacpp-completion"
+ whispercpp_transcription = "whispercpp-transcription"
+ bci_whispercpp_transcription = "bci-whispercpp-transcription"
+ llamacpp_embedding = "llamacpp-embedding"
+ llamacpp_decision = "llamacpp-decision"
+ llamacpp_rerank = "llamacpp-rerank"
+ nmtcpp_translation = "nmtcpp-translation"
+ onnx_tts = "onnx-tts"
+ tts_ggml = "tts-ggml"
+ parakeet_transcription = "parakeet-transcription"
+ moss_transcribe = "moss-transcribe"
+ ggml_ocr = "ggml-ocr"
+ sdcpp_generation = "sdcpp-generation"
+ audiogen_ggml = "audiogen-ggml"
+ ggml_vla = "ggml-vla"
+ ggml_classification = "ggml-classification"
+ llm = "llm"
+ whisper = "whisper"
+ bci = "bci"
+ embeddings = "embeddings"
+ nmt = "nmt"
+ parakeet = "parakeet"
+ tts = "tts"
+ ocr = "ocr"
+ diffusion = "diffusion"
+ audiogen = "audiogen"
+ vla = "vla"
+ classification = "classification"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigClipLModelSrc(GeneratedBaseModel):
+ src: Annotated[
+ str,
+ Field(
+ description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ ),
+ ]
+ name: Annotated[
+ str | None,
+ Field(
+ description="Display name for this model instance; overrides the name derived from the source."
+ ),
+ ] = None
+ model_id: Annotated[
str | None,
Field(
alias="modelId",
@@ -19721,7 +19913,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigT5XxlModelSrc(GeneratedBaseMo
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigT5XxlModelSrcAddon
+ LoadModelSrcRequestSdcppGenerationModelConfigClipLModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -19730,7 +19922,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigT5XxlModelSrc(GeneratedBaseMo
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigLlmModelSrcAddon(Enum):
+class LoadModelSrcRequestSdcppGenerationModelConfigClipGModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -19761,7 +19953,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigLlmModelSrcAddon(Enum):
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigLlmModelSrc(GeneratedBaseModel):
+class LoadModelSrcRequestSdcppGenerationModelConfigClipGModelSrc(GeneratedBaseModel):
src: Annotated[
str,
Field(
@@ -19830,7 +20022,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigLlmModelSrc(GeneratedBaseMode
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigLlmModelSrcAddon
+ LoadModelSrcRequestSdcppGenerationModelConfigClipGModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -19839,7 +20031,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigLlmModelSrc(GeneratedBaseMode
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigProjectionModelSrcAddon(Enum):
+class LoadModelSrcRequestSdcppGenerationModelConfigT5XxlModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -19870,9 +20062,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigProjectionModelSrcAddon(Enum)
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigProjectionModelSrc(
- GeneratedBaseModel
-):
+class LoadModelSrcRequestSdcppGenerationModelConfigT5XxlModelSrc(GeneratedBaseModel):
src: Annotated[
str,
Field(
@@ -19941,7 +20131,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigProjectionModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigProjectionModelSrcAddon
+ LoadModelSrcRequestSdcppGenerationModelConfigT5XxlModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -19950,7 +20140,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigProjectionModelSrc(
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigVaeModelSrcAddon(Enum):
+class LoadModelSrcRequestSdcppGenerationModelConfigLlmModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -19981,7 +20171,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigVaeModelSrcAddon(Enum):
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigVaeModelSrc(GeneratedBaseModel):
+class LoadModelSrcRequestSdcppGenerationModelConfigLlmModelSrc(GeneratedBaseModel):
src: Annotated[
str,
Field(
@@ -20050,7 +20240,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigVaeModelSrc(GeneratedBaseMode
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigVaeModelSrcAddon
+ LoadModelSrcRequestSdcppGenerationModelConfigLlmModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -20059,9 +20249,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigVaeModelSrc(GeneratedBaseMode
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigHighNoiseDiffusionModelSrcAddon(
- Enum
-):
+class LoadModelSrcRequestSdcppGenerationModelConfigProjectionModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -20092,7 +20280,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigHighNoiseDiffusionModelSrcAdd
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigHighNoiseDiffusionModelSrc(
+class LoadModelSrcRequestSdcppGenerationModelConfigProjectionModelSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -20163,7 +20351,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigHighNoiseDiffusionModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigHighNoiseDiffusionModelSrcAddon
+ LoadModelSrcRequestSdcppGenerationModelConfigProjectionModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -20172,7 +20360,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigHighNoiseDiffusionModelSrc(
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigUncondModelSrcAddon(Enum):
+class LoadModelSrcRequestSdcppGenerationModelConfigVaeModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -20203,7 +20391,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigUncondModelSrcAddon(Enum):
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigUncondModelSrc(GeneratedBaseModel):
+class LoadModelSrcRequestSdcppGenerationModelConfigVaeModelSrc(GeneratedBaseModel):
src: Annotated[
str,
Field(
@@ -20272,7 +20460,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigUncondModelSrc(GeneratedBaseM
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigUncondModelSrcAddon
+ LoadModelSrcRequestSdcppGenerationModelConfigVaeModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -20281,7 +20469,9 @@ class LoadModelSrcRequestSdcppGenerationModelConfigUncondModelSrc(GeneratedBaseM
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigClipVisionModelSrcAddon(Enum):
+class LoadModelSrcRequestSdcppGenerationModelConfigHighNoiseDiffusionModelSrcAddon(
+ Enum
+):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -20312,7 +20502,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigClipVisionModelSrcAddon(Enum)
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigClipVisionModelSrc(
+class LoadModelSrcRequestSdcppGenerationModelConfigHighNoiseDiffusionModelSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -20383,7 +20573,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigClipVisionModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigClipVisionModelSrcAddon
+ LoadModelSrcRequestSdcppGenerationModelConfigHighNoiseDiffusionModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -20392,7 +20582,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigClipVisionModelSrc(
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigAudioVaeModelSrcAddon(Enum):
+class LoadModelSrcRequestSdcppGenerationModelConfigUncondModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -20423,7 +20613,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigAudioVaeModelSrcAddon(Enum):
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigAudioVaeModelSrc(GeneratedBaseModel):
+class LoadModelSrcRequestSdcppGenerationModelConfigUncondModelSrc(GeneratedBaseModel):
src: Annotated[
str,
Field(
@@ -20492,7 +20682,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigAudioVaeModelSrc(GeneratedBas
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigAudioVaeModelSrcAddon
+ LoadModelSrcRequestSdcppGenerationModelConfigUncondModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -20501,9 +20691,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigAudioVaeModelSrc(GeneratedBas
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigEmbeddingsConnectorsModelSrcAddon(
- Enum
-):
+class LoadModelSrcRequestSdcppGenerationModelConfigClipVisionModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -20534,7 +20722,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigEmbeddingsConnectorsModelSrcA
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigEmbeddingsConnectorsModelSrc(
+class LoadModelSrcRequestSdcppGenerationModelConfigClipVisionModelSrc(
GeneratedBaseModel
):
src: Annotated[
@@ -20605,7 +20793,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigEmbeddingsConnectorsModelSrc(
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigEmbeddingsConnectorsModelSrcAddon
+ LoadModelSrcRequestSdcppGenerationModelConfigClipVisionModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -20614,7 +20802,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigEmbeddingsConnectorsModelSrc(
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigTaehvModelSrcAddon(Enum):
+class LoadModelSrcRequestSdcppGenerationModelConfigAudioVaeModelSrcAddon(Enum):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -20645,7 +20833,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigTaehvModelSrcAddon(Enum):
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigTaehvModelSrc(GeneratedBaseModel):
+class LoadModelSrcRequestSdcppGenerationModelConfigAudioVaeModelSrc(GeneratedBaseModel):
src: Annotated[
str,
Field(
@@ -20714,7 +20902,7 @@ class LoadModelSrcRequestSdcppGenerationModelConfigTaehvModelSrc(GeneratedBaseMo
),
] = None
addon: Annotated[
- LoadModelSrcRequestSdcppGenerationModelConfigTaehvModelSrcAddon
+ LoadModelSrcRequestSdcppGenerationModelConfigAudioVaeModelSrcAddon
| Literal["vad"]
| None,
Field(
@@ -20723,7 +20911,9 @@ class LoadModelSrcRequestSdcppGenerationModelConfigTaehvModelSrc(GeneratedBaseMo
] = None
-class LoadModelSrcRequestSdcppGenerationModelConfigSceneSrcAddon(Enum):
+class LoadModelSrcRequestSdcppGenerationModelConfigEmbeddingsConnectorsModelSrcAddon(
+ Enum
+):
llamacpp_completion = "llamacpp-completion"
whispercpp_transcription = "whispercpp-transcription"
bci_whispercpp_transcription = "bci-whispercpp-transcription"
@@ -20754,7 +20944,227 @@ class LoadModelSrcRequestSdcppGenerationModelConfigSceneSrcAddon(Enum):
classification = "classification"
-class LoadModelSrcRequestSdcppGenerationModelConfigSceneSrc(GeneratedBaseModel):
+class LoadModelSrcRequestSdcppGenerationModelConfigEmbeddingsConnectorsModelSrc(
+ GeneratedBaseModel
+):
+ src: Annotated[
+ str,
+ Field(
+ description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ ),
+ ]
+ name: Annotated[
+ str | None,
+ Field(
+ description="Display name for this model instance; overrides the name derived from the source."
+ ),
+ ] = None
+ model_id: Annotated[
+ str | None,
+ Field(
+ alias="modelId",
+ description="Unique identifier used to reference the model in QVAC calls.",
+ ),
+ ] = None
+ registry_path: Annotated[
+ str | None,
+ Field(
+ alias="registryPath",
+ description="Registry-relative path to the model (set for registry-backed models).",
+ ),
+ ] = None
+ registry_source: Annotated[
+ str | None,
+ Field(
+ alias="registrySource",
+ description="Registry source identifier, e.g. `huggingface`.",
+ ),
+ ] = None
+ blob_core_key: Annotated[
+ str | None,
+ Field(
+ alias="blobCoreKey",
+ description="Hyperdrive blob core key for the model file.",
+ ),
+ ] = None
+ blob_index: Annotated[
+ float | None,
+ Field(
+ alias="blobIndex",
+ description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ ),
+ ] = None
+ engine: Annotated[
+ str | None,
+ Field(
+ description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
+ ),
+ ] = None
+ expected_size: Annotated[
+ float | None,
+ Field(
+ alias="expectedSize",
+ description="Expected total size of the model file in bytes.",
+ ),
+ ] = None
+ sha256_checksum: Annotated[
+ str | None,
+ Field(
+ alias="sha256Checksum",
+ description="Expected SHA-256 checksum of the model file.",
+ ),
+ ] = None
+ addon: Annotated[
+ LoadModelSrcRequestSdcppGenerationModelConfigEmbeddingsConnectorsModelSrcAddon
+ | Literal["vad"]
+ | None,
+ Field(
+ description="Inference addon / capability category this model belongs to."
+ ),
+ ] = None
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigTaehvModelSrcAddon(Enum):
+ llamacpp_completion = "llamacpp-completion"
+ whispercpp_transcription = "whispercpp-transcription"
+ bci_whispercpp_transcription = "bci-whispercpp-transcription"
+ llamacpp_embedding = "llamacpp-embedding"
+ llamacpp_decision = "llamacpp-decision"
+ llamacpp_rerank = "llamacpp-rerank"
+ nmtcpp_translation = "nmtcpp-translation"
+ onnx_tts = "onnx-tts"
+ tts_ggml = "tts-ggml"
+ parakeet_transcription = "parakeet-transcription"
+ moss_transcribe = "moss-transcribe"
+ ggml_ocr = "ggml-ocr"
+ sdcpp_generation = "sdcpp-generation"
+ audiogen_ggml = "audiogen-ggml"
+ ggml_vla = "ggml-vla"
+ ggml_classification = "ggml-classification"
+ llm = "llm"
+ whisper = "whisper"
+ bci = "bci"
+ embeddings = "embeddings"
+ nmt = "nmt"
+ parakeet = "parakeet"
+ tts = "tts"
+ ocr = "ocr"
+ diffusion = "diffusion"
+ audiogen = "audiogen"
+ vla = "vla"
+ classification = "classification"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigTaehvModelSrc(GeneratedBaseModel):
+ src: Annotated[
+ str,
+ Field(
+ description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ ),
+ ]
+ name: Annotated[
+ str | None,
+ Field(
+ description="Display name for this model instance; overrides the name derived from the source."
+ ),
+ ] = None
+ model_id: Annotated[
+ str | None,
+ Field(
+ alias="modelId",
+ description="Unique identifier used to reference the model in QVAC calls.",
+ ),
+ ] = None
+ registry_path: Annotated[
+ str | None,
+ Field(
+ alias="registryPath",
+ description="Registry-relative path to the model (set for registry-backed models).",
+ ),
+ ] = None
+ registry_source: Annotated[
+ str | None,
+ Field(
+ alias="registrySource",
+ description="Registry source identifier, e.g. `huggingface`.",
+ ),
+ ] = None
+ blob_core_key: Annotated[
+ str | None,
+ Field(
+ alias="blobCoreKey",
+ description="Hyperdrive blob core key for the model file.",
+ ),
+ ] = None
+ blob_index: Annotated[
+ float | None,
+ Field(
+ alias="blobIndex",
+ description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ ),
+ ] = None
+ engine: Annotated[
+ str | None,
+ Field(
+ description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
+ ),
+ ] = None
+ expected_size: Annotated[
+ float | None,
+ Field(
+ alias="expectedSize",
+ description="Expected total size of the model file in bytes.",
+ ),
+ ] = None
+ sha256_checksum: Annotated[
+ str | None,
+ Field(
+ alias="sha256Checksum",
+ description="Expected SHA-256 checksum of the model file.",
+ ),
+ ] = None
+ addon: Annotated[
+ LoadModelSrcRequestSdcppGenerationModelConfigTaehvModelSrcAddon
+ | Literal["vad"]
+ | None,
+ Field(
+ description="Inference addon / capability category this model belongs to."
+ ),
+ ] = None
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigSceneSrcAddon(Enum):
+ llamacpp_completion = "llamacpp-completion"
+ whispercpp_transcription = "whispercpp-transcription"
+ bci_whispercpp_transcription = "bci-whispercpp-transcription"
+ llamacpp_embedding = "llamacpp-embedding"
+ llamacpp_decision = "llamacpp-decision"
+ llamacpp_rerank = "llamacpp-rerank"
+ nmtcpp_translation = "nmtcpp-translation"
+ onnx_tts = "onnx-tts"
+ tts_ggml = "tts-ggml"
+ parakeet_transcription = "parakeet-transcription"
+ moss_transcribe = "moss-transcribe"
+ ggml_ocr = "ggml-ocr"
+ sdcpp_generation = "sdcpp-generation"
+ audiogen_ggml = "audiogen-ggml"
+ ggml_vla = "ggml-vla"
+ ggml_classification = "ggml-classification"
+ llm = "llm"
+ whisper = "whisper"
+ bci = "bci"
+ embeddings = "embeddings"
+ nmt = "nmt"
+ parakeet = "parakeet"
+ tts = "tts"
+ ocr = "ocr"
+ diffusion = "diffusion"
+ audiogen = "audiogen"
+ vla = "vla"
+ classification = "classification"
+
+
+class LoadModelSrcRequestSdcppGenerationModelConfigSceneSrc(GeneratedBaseModel):
src: Annotated[
str,
Field(
@@ -24368,25 +24778,199 @@ class TextToSpeechRequestPace(Enum):
fast = "fast"
-class AudioItem(RootModel[float]):
- root: Annotated[float, Field(ge=-1.0, le=1.0)]
+class Instruct1(RootModel[str]):
+ root: Annotated[
+ str,
+ Field(
+ description="CosyVoice3 only: natural-language control for this synthesis (a structured object with one of dialect / volume / style, or a raw instruction string), replacing the loaded `instruct`, `emotion` or `pace`. One conditioning control per synthesis.",
+ min_length=1,
+ ),
+ ]
-class TextToSpeechRequestMessagesItemRole(Enum):
- system = "system"
- user = "user"
- assistant = "assistant"
+class TextToSpeechRequestInstructDialect(Enum):
+ cantonese = "cantonese"
+ northeastern = "northeastern"
+ gansu = "gansu"
+ guizhou = "guizhou"
+ henan = "henan"
+ hubei = "hubei"
+ hunan = "hunan"
+ jiangxi = "jiangxi"
+ minnan = "minnan"
+ ningxia = "ningxia"
+ shanxi = "shanxi"
+ shaanxi = "shaanxi"
+ shandong = "shandong"
+ shanghai = "shanghai"
+ sichuan = "sichuan"
+ tianjin = "tianjin"
+ yunnan = "yunnan"
-class TextToSpeechRequestMessagesItem(GeneratedBaseModel):
- role: Annotated[
- TextToSpeechRequestMessagesItemRole,
- Field(title="TextToSpeechRequestMessagesItemRole"),
- ]
- text: Annotated[str | None, Field(min_length=1)] = None
- audio: Annotated[list[AudioItem] | None, Field(min_length=1)] = None
- sample_rate: Annotated[
- int | None, Field(alias="sampleRate", ge=8000, le=192000)
+class TextToSpeechRequestInstructVolume(Enum):
+ loud = "loud"
+ soft = "soft"
+
+
+class TextToSpeechRequestInstructStyle(Enum):
+ peppa = "peppa"
+ robot = "robot"
+
+
+class TextToSpeechRequestInstruct(GeneratedBaseModel):
+ model_config = ConfigDict(
+ extra="forbid",
+ )
+ dialect: Annotated[
+ TextToSpeechRequestInstructDialect | None,
+ Field(
+ description="Chinese dialect to render (e.g. `cantonese`, `sichuan`).",
+ title="TextToSpeechRequestInstructDialect",
+ ),
+ ] = None
+ volume: Annotated[
+ TextToSpeechRequestInstructVolume | None,
+ Field(
+ description="Speaking volume: `loud` or `soft`.",
+ title="TextToSpeechRequestInstructVolume",
+ ),
+ ] = None
+ style: Annotated[
+ TextToSpeechRequestInstructStyle | None,
+ Field(
+ description="Speaking style: `peppa` or `robot`.",
+ title="TextToSpeechRequestInstructStyle",
+ ),
+ ] = None
+
+
+class TextToSpeechRequestReferenceAudioSrcAddon(Enum):
+ llamacpp_completion = "llamacpp-completion"
+ whispercpp_transcription = "whispercpp-transcription"
+ bci_whispercpp_transcription = "bci-whispercpp-transcription"
+ llamacpp_embedding = "llamacpp-embedding"
+ llamacpp_decision = "llamacpp-decision"
+ llamacpp_rerank = "llamacpp-rerank"
+ nmtcpp_translation = "nmtcpp-translation"
+ onnx_tts = "onnx-tts"
+ tts_ggml = "tts-ggml"
+ parakeet_transcription = "parakeet-transcription"
+ moss_transcribe = "moss-transcribe"
+ ggml_ocr = "ggml-ocr"
+ sdcpp_generation = "sdcpp-generation"
+ audiogen_ggml = "audiogen-ggml"
+ ggml_vla = "ggml-vla"
+ ggml_classification = "ggml-classification"
+ llm = "llm"
+ whisper = "whisper"
+ bci = "bci"
+ embeddings = "embeddings"
+ nmt = "nmt"
+ parakeet = "parakeet"
+ tts = "tts"
+ ocr = "ocr"
+ diffusion = "diffusion"
+ audiogen = "audiogen"
+ vla = "vla"
+ classification = "classification"
+
+
+class TextToSpeechRequestReferenceAudioSrc(GeneratedBaseModel):
+ src: Annotated[
+ str,
+ Field(
+ description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ ),
+ ]
+ name: Annotated[
+ str | None,
+ Field(
+ description="Display name for this model instance; overrides the name derived from the source."
+ ),
+ ] = None
+ model_id: Annotated[
+ str | None,
+ Field(
+ alias="modelId",
+ description="Unique identifier used to reference the model in QVAC calls.",
+ ),
+ ] = None
+ registry_path: Annotated[
+ str | None,
+ Field(
+ alias="registryPath",
+ description="Registry-relative path to the model (set for registry-backed models).",
+ ),
+ ] = None
+ registry_source: Annotated[
+ str | None,
+ Field(
+ alias="registrySource",
+ description="Registry source identifier, e.g. `huggingface`.",
+ ),
+ ] = None
+ blob_core_key: Annotated[
+ str | None,
+ Field(
+ alias="blobCoreKey",
+ description="Hyperdrive blob core key for the model file.",
+ ),
+ ] = None
+ blob_index: Annotated[
+ float | None,
+ Field(
+ alias="blobIndex",
+ description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ ),
+ ] = None
+ engine: Annotated[
+ str | None,
+ Field(
+ description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
+ ),
+ ] = None
+ expected_size: Annotated[
+ float | None,
+ Field(
+ alias="expectedSize",
+ description="Expected total size of the model file in bytes.",
+ ),
+ ] = None
+ sha256_checksum: Annotated[
+ str | None,
+ Field(
+ alias="sha256Checksum",
+ description="Expected SHA-256 checksum of the model file.",
+ ),
+ ] = None
+ addon: Annotated[
+ TextToSpeechRequestReferenceAudioSrcAddon | Literal["vad"] | None,
+ Field(
+ description="Inference addon / capability category this model belongs to."
+ ),
+ ] = None
+
+
+class AudioItem(RootModel[float]):
+ root: Annotated[float, Field(ge=-1.0, le=1.0)]
+
+
+class TextToSpeechRequestMessagesItemRole(Enum):
+ system = "system"
+ user = "user"
+ assistant = "assistant"
+
+
+class TextToSpeechRequestMessagesItem(GeneratedBaseModel):
+ role: Annotated[
+ TextToSpeechRequestMessagesItemRole,
+ Field(title="TextToSpeechRequestMessagesItemRole"),
+ ]
+ text: Annotated[str | None, Field(min_length=1)] = None
+ audio: Annotated[list[AudioItem] | None, Field(min_length=1)] = None
+ sample_rate: Annotated[
+ int | None, Field(alias="sampleRate", ge=8000, le=192000)
] = None
@@ -24477,6 +25061,27 @@ class TextToSpeechRequest(GeneratedBaseModel):
description="Parler voice-template audio-quality descriptor.", min_length=1
),
] = None
+ instruct: Annotated[
+ Instruct1 | TextToSpeechRequestInstruct | None,
+ Field(
+ description="CosyVoice3 only: natural-language control for this synthesis (a structured object with one of dialect / volume / style, or a raw instruction string), replacing the loaded `instruct`, `emotion` or `pace`. One conditioning control per synthesis."
+ ),
+ ] = None
+ reference_audio_src: Annotated[
+ str | TextToSpeechRequestReferenceAudioSrc | None,
+ Field(
+ alias="referenceAudioSrc",
+ description="Audio8 only: reference recording to clone for this request, replacing the loaded voice; requires `referenceText` and a loaded codec encoder (`audio8CodecEncoderModelSrc`). A remote source that is not cached yet downloads inside the request, which holds the model until it finishes: pre-fetch it with `downloadAsset()` or pass a local path.",
+ ),
+ ] = None
+ reference_text: Annotated[
+ str | None,
+ Field(
+ alias="referenceText",
+ description="Audio8 only: transcript of the reference recording. With `referenceAudioSrc`, what that recording says; alone, it corrects the transcript of the loaded recording.",
+ min_length=1,
+ ),
+ ] = None
seconds: Annotated[
float | None,
Field(
@@ -24547,6 +25152,13 @@ class TextToSpeechResponseStats(GeneratedBaseModel):
audio_duration: Annotated[float | None, Field(alias="audioDuration")] = None
total_time: Annotated[float | None, Field(alias="totalTime")] = None
real_time_factor: Annotated[float | None, Field(alias="realTimeFactor")] = None
+ first_audio_ms: Annotated[
+ float | None,
+ Field(
+ alias="firstAudioMs",
+ description="Milliseconds from the start of the run to the first audio, where the engine reports it; a chunked run keeps the first sentence’s value.",
+ ),
+ ] = None
tokens_per_second: Annotated[float | None, Field(alias="tokensPerSecond")] = None
total_samples: Annotated[float | None, Field(alias="totalSamples")] = None
generated_frames: Annotated[float | None, Field(alias="generatedFrames")] = None
@@ -24562,111 +25174,464 @@ class TextToSpeechResponseStats(GeneratedBaseModel):
denoiser_backend_device: Annotated[
float | None,
Field(
- alias="denoiserBackendDevice",
- description="LavaSR denoiser device: `-1` not loaded, `0` CPU, `1` GPU, `2` Core ML-managed.",
+ alias="denoiserBackendDevice",
+ description="LavaSR denoiser device: `-1` not loaded, `0` CPU, `1` GPU, `2` Core ML-managed.",
+ ),
+ ] = None
+ denoiser_backend_id: Annotated[
+ float | None,
+ Field(
+ alias="denoiserBackendId",
+ description="LavaSR denoiser backend family, same codes as `backendId`.",
+ ),
+ ] = None
+ codec_sidecar_loaded: Annotated[
+ float | None,
+ Field(
+ alias="codecSidecarLoaded",
+ description="Audio8 on macOS / iOS: `1` while the Core ML codec sidecar is attached, `0` without one or once a failing sidecar was retired.",
+ ),
+ ] = None
+ codec_on_coreml: Annotated[
+ float | None,
+ Field(
+ alias="codecOnCoreml",
+ description="Audio8: `1` when this synthesis ran its codec on the Core ML sidecar, `0` when it ran on the ggml backend `backendId` reports.",
+ ),
+ ] = None
+ t3_ms: Annotated[
+ float | None,
+ Field(
+ alias="t3Ms",
+ description="Chatterbox T3 decode wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ s3gen_ms: Annotated[
+ float | None,
+ Field(
+ alias="s3genMs",
+ description="Chatterbox S3Gen + HiFT wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ t3_tokens: Annotated[
+ float | None,
+ Field(
+ alias="t3Tokens",
+ description="Chatterbox: speech tokens T3 emitted in the last synthesis.",
+ ),
+ ] = None
+ stage_total_ms: Annotated[
+ float | None,
+ Field(
+ alias="stageTotalMs",
+ description="CosyVoice3 / Audio8: the engine’s own wall time for the last synthesis in milliseconds (the sum of its stages), excluding the addon’s post-processing.",
+ ),
+ ] = None
+ lm_prefill_ms: Annotated[
+ float | None,
+ Field(
+ alias="lmPrefillMs",
+ description="CosyVoice3 LM prefill wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ lm_decode_ms: Annotated[
+ float | None,
+ Field(
+ alias="lmDecodeMs",
+ description="CosyVoice3 LM decode wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ flow_frontend_ms: Annotated[
+ float | None,
+ Field(
+ alias="flowFrontendMs",
+ description="CosyVoice3 flow front-end wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ dit_euler_ms: Annotated[
+ float | None,
+ Field(
+ alias="ditEulerMs",
+ description="CosyVoice3 DiT Euler wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ hift_f0_ms: Annotated[
+ float | None,
+ Field(
+ alias="hiftF0Ms",
+ description="CosyVoice3 HiFT F0 wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ hift_source_ms: Annotated[
+ float | None,
+ Field(
+ alias="hiftSourceMs",
+ description="CosyVoice3 HiFT source wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ hift_stft_ms: Annotated[
+ float | None,
+ Field(
+ alias="hiftStftMs",
+ description="CosyVoice3 HiFT STFT wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ hift_decode_ms: Annotated[
+ float | None,
+ Field(
+ alias="hiftDecodeMs",
+ description="CosyVoice3 HiFT decode wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ decode_steps: Annotated[
+ float | None,
+ Field(
+ alias="decodeSteps",
+ description="CosyVoice3: LM decode steps of the last synthesis.",
+ ),
+ ] = None
+ speech_tokens: Annotated[
+ float | None,
+ Field(
+ alias="speechTokens",
+ description="CosyVoice3: speech tokens generated in the last synthesis.",
+ ),
+ ] = None
+ flow_frames: Annotated[
+ float | None,
+ Field(
+ alias="flowFrames",
+ description="CosyVoice3: flow frames in (prompt + generated) of the last synthesis.",
+ ),
+ ] = None
+ mel_frames: Annotated[
+ float | None,
+ Field(
+ alias="melFrames",
+ description="CosyVoice3: mel frames out of the last synthesis.",
+ ),
+ ] = None
+ text_ids: Annotated[
+ float | None,
+ Field(
+ alias="textIds",
+ description="CosyVoice3: text ids in the LM prefill of the last synthesis.",
+ ),
+ ] = None
+ prompt_speech_tokens: Annotated[
+ float | None,
+ Field(
+ alias="promptSpeechTokens",
+ description="CosyVoice3: prompt speech tokens the LM continued from.",
+ ),
+ ] = None
+ voice_encode_ms: Annotated[
+ float | None,
+ Field(
+ alias="voiceEncodeMs",
+ description="Audio8 reference-voice encode wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ prompt_ms: Annotated[
+ float | None,
+ Field(
+ alias="promptMs",
+ description="Audio8 prompt build wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ prefill_ms: Annotated[
+ float | None,
+ Field(
+ alias="prefillMs",
+ description="Audio8 prefill wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ sample_ms: Annotated[
+ float | None,
+ Field(
+ alias="sampleMs",
+ description="Audio8 sampling wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ fast_decode_ms: Annotated[
+ float | None,
+ Field(
+ alias="fastDecodeMs",
+ description="Audio8 fast (local) decoder wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ slow_decode_ms: Annotated[
+ float | None,
+ Field(
+ alias="slowDecodeMs",
+ description="Audio8 slow (global) decoder wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ codec_latent_ms: Annotated[
+ float | None,
+ Field(
+ alias="codecLatentMs",
+ description="Audio8 codec latent wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ codec_synth_ms: Annotated[
+ float | None,
+ Field(
+ alias="codecSynthMs",
+ description="Audio8 codec synthesis wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ resample_ms: Annotated[
+ float | None,
+ Field(
+ alias="resampleMs",
+ description="Audio8 resample wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+
+
+class TextToSpeechResponseStopReason(Enum):
+ completed = "completed"
+ cancelled = "cancelled"
+
+
+class TextToSpeechResponse(GeneratedBaseModel):
+ model_config = ConfigDict(
+ extra="forbid",
+ )
+ type: Literal["textToSpeech"] = "textToSpeech"
+ text: Annotated[
+ str | None,
+ Field(description="MOSS-Speech reply text, including text-only replies."),
+ ] = None
+ buffer: list[float]
+ pcm: Annotated[
+ str | None,
+ Field(
+ description="Base64 of the little-endian signed 16-bit PCM of this frame. When present, `buffer` is empty and this field carries the samples; decode with `withDecodedTtsPcm`."
+ ),
+ ] = None
+ done: bool
+ sample_rate: Annotated[
+ int | None,
+ Field(
+ alias="sampleRate",
+ description="Sample rate in Hz of the signed 16-bit mono PCM in `buffer`.",
+ gt=0,
+ le=9007199254740991,
+ ),
+ ] = None
+ stats: Annotated[
+ TextToSpeechResponseStats | None, Field(title="TextToSpeechResponseStats")
+ ] = None
+ chunk_index: Annotated[
+ int | None, Field(alias="chunkIndex", ge=0, le=9007199254740991)
+ ] = None
+ sentence_chunk: Annotated[str | None, Field(alias="sentenceChunk")] = None
+ is_last: Annotated[
+ bool | None,
+ Field(
+ alias="isLast",
+ description="True on the final audio-bearing chunk of a pre-chunked synthesis. Absent when the chunk count is not known up front (streamed text in).",
+ ),
+ ] = None
+ stop_reason: Annotated[
+ TextToSpeechResponseStopReason | None,
+ Field(alias="stopReason", title="TextToSpeechResponseStopReason"),
+ ] = None
+
+
+class TextToSpeechStreamRequestSentenceDelimiterPreset(Enum):
+ latin = "latin"
+ cjk = "cjk"
+ multilingual = "multilingual"
+
+
+class TextToSpeechStreamRequestEmotion(Enum):
+ command = "command"
+ anger = "anger"
+ narration = "narration"
+ conversation = "conversation"
+ disgust = "disgust"
+ fear = "fear"
+ happy = "happy"
+ neutral = "neutral"
+ proper_noun = "proper noun"
+ news = "news"
+ sad = "sad"
+ surprise = "surprise"
+
+
+class TextToSpeechStreamRequestPace(Enum):
+ slow = "slow"
+ moderate = "moderate"
+ fast = "fast"
+
+
+class TextToSpeechStreamRequestInstructDialect(Enum):
+ cantonese = "cantonese"
+ northeastern = "northeastern"
+ gansu = "gansu"
+ guizhou = "guizhou"
+ henan = "henan"
+ hubei = "hubei"
+ hunan = "hunan"
+ jiangxi = "jiangxi"
+ minnan = "minnan"
+ ningxia = "ningxia"
+ shanxi = "shanxi"
+ shaanxi = "shaanxi"
+ shandong = "shandong"
+ shanghai = "shanghai"
+ sichuan = "sichuan"
+ tianjin = "tianjin"
+ yunnan = "yunnan"
+
+
+class TextToSpeechStreamRequestInstructVolume(Enum):
+ loud = "loud"
+ soft = "soft"
+
+
+class TextToSpeechStreamRequestInstructStyle(Enum):
+ peppa = "peppa"
+ robot = "robot"
+
+
+class TextToSpeechStreamRequestInstruct(GeneratedBaseModel):
+ model_config = ConfigDict(
+ extra="forbid",
+ )
+ dialect: Annotated[
+ TextToSpeechStreamRequestInstructDialect | None,
+ Field(
+ description="Chinese dialect to render (e.g. `cantonese`, `sichuan`).",
+ title="TextToSpeechStreamRequestInstructDialect",
+ ),
+ ] = None
+ volume: Annotated[
+ TextToSpeechStreamRequestInstructVolume | None,
+ Field(
+ description="Speaking volume: `loud` or `soft`.",
+ title="TextToSpeechStreamRequestInstructVolume",
+ ),
+ ] = None
+ style: Annotated[
+ TextToSpeechStreamRequestInstructStyle | None,
+ Field(
+ description="Speaking style: `peppa` or `robot`.",
+ title="TextToSpeechStreamRequestInstructStyle",
+ ),
+ ] = None
+
+
+class TextToSpeechStreamRequestReferenceAudioSrcAddon(Enum):
+ llamacpp_completion = "llamacpp-completion"
+ whispercpp_transcription = "whispercpp-transcription"
+ bci_whispercpp_transcription = "bci-whispercpp-transcription"
+ llamacpp_embedding = "llamacpp-embedding"
+ llamacpp_decision = "llamacpp-decision"
+ llamacpp_rerank = "llamacpp-rerank"
+ nmtcpp_translation = "nmtcpp-translation"
+ onnx_tts = "onnx-tts"
+ tts_ggml = "tts-ggml"
+ parakeet_transcription = "parakeet-transcription"
+ moss_transcribe = "moss-transcribe"
+ ggml_ocr = "ggml-ocr"
+ sdcpp_generation = "sdcpp-generation"
+ audiogen_ggml = "audiogen-ggml"
+ ggml_vla = "ggml-vla"
+ ggml_classification = "ggml-classification"
+ llm = "llm"
+ whisper = "whisper"
+ bci = "bci"
+ embeddings = "embeddings"
+ nmt = "nmt"
+ parakeet = "parakeet"
+ tts = "tts"
+ ocr = "ocr"
+ diffusion = "diffusion"
+ audiogen = "audiogen"
+ vla = "vla"
+ classification = "classification"
+
+
+class TextToSpeechStreamRequestReferenceAudioSrc(GeneratedBaseModel):
+ src: Annotated[
+ str,
+ Field(
+ description="Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
),
- ] = None
- denoiser_backend_id: Annotated[
- float | None,
+ ]
+ name: Annotated[
+ str | None,
Field(
- alias="denoiserBackendId",
- description="LavaSR denoiser backend family, same codes as `backendId`.",
+ description="Display name for this model instance; overrides the name derived from the source."
),
] = None
- codec_sidecar_loaded: Annotated[
- float | None,
+ model_id: Annotated[
+ str | None,
Field(
- alias="codecSidecarLoaded",
- description="Audio8 on macOS / iOS: `1` while the Core ML codec sidecar is attached, `0` without one or once a failing sidecar was retired.",
+ alias="modelId",
+ description="Unique identifier used to reference the model in QVAC calls.",
),
] = None
- codec_on_coreml: Annotated[
- float | None,
+ registry_path: Annotated[
+ str | None,
Field(
- alias="codecOnCoreml",
- description="Audio8: `1` when this synthesis ran its codec on the Core ML sidecar, `0` when it ran on the ggml backend `backendId` reports.",
+ alias="registryPath",
+ description="Registry-relative path to the model (set for registry-backed models).",
),
] = None
-
-
-class TextToSpeechResponseStopReason(Enum):
- completed = "completed"
- cancelled = "cancelled"
-
-
-class TextToSpeechResponse(GeneratedBaseModel):
- model_config = ConfigDict(
- extra="forbid",
- )
- type: Literal["textToSpeech"] = "textToSpeech"
- text: Annotated[
+ registry_source: Annotated[
str | None,
- Field(description="MOSS-Speech reply text, including text-only replies."),
+ Field(
+ alias="registrySource",
+ description="Registry source identifier, e.g. `huggingface`.",
+ ),
] = None
- buffer: list[float]
- pcm: Annotated[
+ blob_core_key: Annotated[
str | None,
Field(
- description="Base64 of the little-endian signed 16-bit PCM of this frame. When present, `buffer` is empty and this field carries the samples; decode with `withDecodedTtsPcm`."
+ alias="blobCoreKey",
+ description="Hyperdrive blob core key for the model file.",
),
] = None
- done: bool
- sample_rate: Annotated[
- int | None,
+ blob_index: Annotated[
+ float | None,
Field(
- alias="sampleRate",
- description="Sample rate in Hz of the signed 16-bit mono PCM in `buffer`.",
- gt=0,
- le=9007199254740991,
+ alias="blobIndex",
+ description="Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
),
] = None
- stats: Annotated[
- TextToSpeechResponseStats | None, Field(title="TextToSpeechResponseStats")
+ engine: Annotated[
+ str | None,
+ Field(
+ description="Canonical inference engine identifier, e.g. `llamacpp-completion`."
+ ),
] = None
- chunk_index: Annotated[
- int | None, Field(alias="chunkIndex", ge=0, le=9007199254740991)
+ expected_size: Annotated[
+ float | None,
+ Field(
+ alias="expectedSize",
+ description="Expected total size of the model file in bytes.",
+ ),
] = None
- sentence_chunk: Annotated[str | None, Field(alias="sentenceChunk")] = None
- is_last: Annotated[
- bool | None,
+ sha256_checksum: Annotated[
+ str | None,
Field(
- alias="isLast",
- description="True on the final audio-bearing chunk of a pre-chunked synthesis. Absent when the chunk count is not known up front (streamed text in).",
+ alias="sha256Checksum",
+ description="Expected SHA-256 checksum of the model file.",
),
] = None
- stop_reason: Annotated[
- TextToSpeechResponseStopReason | None,
- Field(alias="stopReason", title="TextToSpeechResponseStopReason"),
+ addon: Annotated[
+ TextToSpeechStreamRequestReferenceAudioSrcAddon | Literal["vad"] | None,
+ Field(
+ description="Inference addon / capability category this model belongs to."
+ ),
] = None
-class TextToSpeechStreamRequestSentenceDelimiterPreset(Enum):
- latin = "latin"
- cjk = "cjk"
- multilingual = "multilingual"
-
-
-class TextToSpeechStreamRequestEmotion(Enum):
- command = "command"
- anger = "anger"
- narration = "narration"
- conversation = "conversation"
- disgust = "disgust"
- fear = "fear"
- happy = "happy"
- neutral = "neutral"
- proper_noun = "proper noun"
- news = "news"
- sad = "sad"
- surprise = "surprise"
-
-
-class TextToSpeechStreamRequestPace(Enum):
- slow = "slow"
- moderate = "moderate"
- fast = "fast"
-
-
class TextToSpeechStreamRequest(GeneratedBaseModel):
model_id: Annotated[str, Field(alias="modelId")]
request_id: Annotated[
@@ -24755,6 +25720,27 @@ class TextToSpeechStreamRequest(GeneratedBaseModel):
description="Parler voice-template audio-quality descriptor.", min_length=1
),
] = None
+ instruct: Annotated[
+ Instruct1 | TextToSpeechStreamRequestInstruct | None,
+ Field(
+ description="CosyVoice3 only: natural-language control for this synthesis (a structured object with one of dialect / volume / style, or a raw instruction string), replacing the loaded `instruct`, `emotion` or `pace`. One conditioning control per synthesis."
+ ),
+ ] = None
+ reference_audio_src: Annotated[
+ str | TextToSpeechStreamRequestReferenceAudioSrc | None,
+ Field(
+ alias="referenceAudioSrc",
+ description="Audio8 only: reference recording to clone for this request, replacing the loaded voice; requires `referenceText` and a loaded codec encoder (`audio8CodecEncoderModelSrc`). A remote source that is not cached yet downloads inside the request, which holds the model until it finishes: pre-fetch it with `downloadAsset()` or pass a local path.",
+ ),
+ ] = None
+ reference_text: Annotated[
+ str | None,
+ Field(
+ alias="referenceText",
+ description="Audio8 only: transcript of the reference recording. With `referenceAudioSrc`, what that recording says; alone, it corrects the transcript of the loaded recording.",
+ min_length=1,
+ ),
+ ] = None
type: Literal["textToSpeechStream"] = "textToSpeechStream"
@@ -24765,6 +25751,13 @@ class TextToSpeechStreamResponseStats(GeneratedBaseModel):
audio_duration: Annotated[float | None, Field(alias="audioDuration")] = None
total_time: Annotated[float | None, Field(alias="totalTime")] = None
real_time_factor: Annotated[float | None, Field(alias="realTimeFactor")] = None
+ first_audio_ms: Annotated[
+ float | None,
+ Field(
+ alias="firstAudioMs",
+ description="Milliseconds from the start of the run to the first audio, where the engine reports it; a chunked run keeps the first sentence’s value.",
+ ),
+ ] = None
tokens_per_second: Annotated[float | None, Field(alias="tokensPerSecond")] = None
total_samples: Annotated[float | None, Field(alias="totalSamples")] = None
generated_frames: Annotated[float | None, Field(alias="generatedFrames")] = None
@@ -24805,6 +25798,195 @@ class TextToSpeechStreamResponseStats(GeneratedBaseModel):
description="Audio8: `1` when this synthesis ran its codec on the Core ML sidecar, `0` when it ran on the ggml backend `backendId` reports.",
),
] = None
+ t3_ms: Annotated[
+ float | None,
+ Field(
+ alias="t3Ms",
+ description="Chatterbox T3 decode wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ s3gen_ms: Annotated[
+ float | None,
+ Field(
+ alias="s3genMs",
+ description="Chatterbox S3Gen + HiFT wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ t3_tokens: Annotated[
+ float | None,
+ Field(
+ alias="t3Tokens",
+ description="Chatterbox: speech tokens T3 emitted in the last synthesis.",
+ ),
+ ] = None
+ stage_total_ms: Annotated[
+ float | None,
+ Field(
+ alias="stageTotalMs",
+ description="CosyVoice3 / Audio8: the engine’s own wall time for the last synthesis in milliseconds (the sum of its stages), excluding the addon’s post-processing.",
+ ),
+ ] = None
+ lm_prefill_ms: Annotated[
+ float | None,
+ Field(
+ alias="lmPrefillMs",
+ description="CosyVoice3 LM prefill wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ lm_decode_ms: Annotated[
+ float | None,
+ Field(
+ alias="lmDecodeMs",
+ description="CosyVoice3 LM decode wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ flow_frontend_ms: Annotated[
+ float | None,
+ Field(
+ alias="flowFrontendMs",
+ description="CosyVoice3 flow front-end wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ dit_euler_ms: Annotated[
+ float | None,
+ Field(
+ alias="ditEulerMs",
+ description="CosyVoice3 DiT Euler wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ hift_f0_ms: Annotated[
+ float | None,
+ Field(
+ alias="hiftF0Ms",
+ description="CosyVoice3 HiFT F0 wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ hift_source_ms: Annotated[
+ float | None,
+ Field(
+ alias="hiftSourceMs",
+ description="CosyVoice3 HiFT source wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ hift_stft_ms: Annotated[
+ float | None,
+ Field(
+ alias="hiftStftMs",
+ description="CosyVoice3 HiFT STFT wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ hift_decode_ms: Annotated[
+ float | None,
+ Field(
+ alias="hiftDecodeMs",
+ description="CosyVoice3 HiFT decode wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ decode_steps: Annotated[
+ float | None,
+ Field(
+ alias="decodeSteps",
+ description="CosyVoice3: LM decode steps of the last synthesis.",
+ ),
+ ] = None
+ speech_tokens: Annotated[
+ float | None,
+ Field(
+ alias="speechTokens",
+ description="CosyVoice3: speech tokens generated in the last synthesis.",
+ ),
+ ] = None
+ flow_frames: Annotated[
+ float | None,
+ Field(
+ alias="flowFrames",
+ description="CosyVoice3: flow frames in (prompt + generated) of the last synthesis.",
+ ),
+ ] = None
+ mel_frames: Annotated[
+ float | None,
+ Field(
+ alias="melFrames",
+ description="CosyVoice3: mel frames out of the last synthesis.",
+ ),
+ ] = None
+ text_ids: Annotated[
+ float | None,
+ Field(
+ alias="textIds",
+ description="CosyVoice3: text ids in the LM prefill of the last synthesis.",
+ ),
+ ] = None
+ prompt_speech_tokens: Annotated[
+ float | None,
+ Field(
+ alias="promptSpeechTokens",
+ description="CosyVoice3: prompt speech tokens the LM continued from.",
+ ),
+ ] = None
+ voice_encode_ms: Annotated[
+ float | None,
+ Field(
+ alias="voiceEncodeMs",
+ description="Audio8 reference-voice encode wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ prompt_ms: Annotated[
+ float | None,
+ Field(
+ alias="promptMs",
+ description="Audio8 prompt build wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ prefill_ms: Annotated[
+ float | None,
+ Field(
+ alias="prefillMs",
+ description="Audio8 prefill wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ sample_ms: Annotated[
+ float | None,
+ Field(
+ alias="sampleMs",
+ description="Audio8 sampling wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ fast_decode_ms: Annotated[
+ float | None,
+ Field(
+ alias="fastDecodeMs",
+ description="Audio8 fast (local) decoder wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ slow_decode_ms: Annotated[
+ float | None,
+ Field(
+ alias="slowDecodeMs",
+ description="Audio8 slow (global) decoder wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ codec_latent_ms: Annotated[
+ float | None,
+ Field(
+ alias="codecLatentMs",
+ description="Audio8 codec latent wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ codec_synth_ms: Annotated[
+ float | None,
+ Field(
+ alias="codecSynthMs",
+ description="Audio8 codec synthesis wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
+ resample_ms: Annotated[
+ float | None,
+ Field(
+ alias="resampleMs",
+ description="Audio8 resample wall time of the last synthesis, in milliseconds.",
+ ),
+ ] = None
class TextToSpeechStreamResponseStopReason(Enum):
diff --git a/packages/sdk/contract/schema.json b/packages/sdk/contract/schema.json
index 44fd6f0f7ae..dbbb73a0173 100644
--- a/packages/sdk/contract/schema.json
+++ b/packages/sdk/contract/schema.json
@@ -16006,6 +16006,78 @@
"type": "number",
"minimum": 0
},
+ "streamLeftContextTokens": {
+ "description": "Already-emitted speech tokens S3Gen keeps as left context per native streaming chunk (typically 25–50), bounding the per-chunk cost on long utterances; 0 = the whole emitted prefix.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2147483647
+ },
+ "batchCfmSteps": {
+ "description": "CFM Euler step count for batch synthesis; 0 = the library default (2-step meanflow on Turbo, the model’s full schedule on multilingual). The multilingual engine does not floor it, so values well below its schedule under-integrate. `cfmSteps` keeps driving native streaming.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2147483647
+ },
+ "nPredict": {
+ "description": "Cap on speech tokens T3 decodes per synthesis (~25 tokens ≈ 1 s); engine default 1000 (~40 s). Longer single calls also need `nCtx` to cover prompt plus generated tokens, or use `maxSentenceChars`.",
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 2147483647
+ },
+ "maxSentenceChars": {
+ "description": "Sentence auto-split: T3 + S3Gen run per segment of at most this many bytes (the reference CLI uses 180); 0 = off. `nPredict` then applies per segment.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2147483647
+ },
+ "crossfadeMs": {
+ "description": "Raised-cosine crossfade between auto-split batch segments, in milliseconds (engine default 30). Native streaming stays gapless.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2147483647
+ },
+ "temperature": {
+ "description": "T3 sampling temperature (engine default 0.8); 0 decodes greedily.",
+ "type": "number",
+ "minimum": 0
+ },
+ "topK": {
+ "description": "T3 top-k sampling cutoff (engine default 1000); 0 disables the cutoff.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2147483647
+ },
+ "topP": {
+ "description": "T3 top-p (nucleus) sampling cutoff, 0 < p ≤ 1 (engine default 0.95).",
+ "type": "number",
+ "exclusiveMinimum": 0,
+ "maximum": 1
+ },
+ "repeatPenalty": {
+ "description": "T3 repetition penalty (engine default 1.2); 1 = off.",
+ "type": "number",
+ "exclusiveMinimum": 0
+ },
+ "exaggeration": {
+ "description": "Multilingual only: prosody intensity, above 0 more expressive, below 0 flatter (engine default 0.5). The Turbo variant ignores it.",
+ "type": "number"
+ },
+ "cfgWeight": {
+ "description": "Multilingual only: T3 classifier-free-guidance scale (engine default 0.5); 0 disables it. Separate from `cfgRate`, which steers S3Gen.",
+ "type": "number",
+ "minimum": 0
+ },
+ "minP": {
+ "description": "Multilingual only: min-p sampling threshold (engine default 0); 0 = off.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1
+ },
+ "voiceDir": {
+ "description": "Directory of pre-baked voice-conditioning tensors (the upstream CLI’s `--save-voice` output), loaded instead of preprocessing a reference recording. With `referenceAudioSrc` too, tensors missing from the directory are backfilled from the recording.",
+ "type": "string",
+ "minLength": 1
+ },
"threads": {
"description": "CPU thread count; overrides the hardware default.",
"type": "integer",
@@ -16740,6 +16812,41 @@
"type": "string",
"minLength": 1
},
+ "vulkanDevice": {
+ "description": "Vulkan adapter index, also used by the LavaSR enhancer: 0 = the first adapter, N = the Nth, -1 = auto-pick by free VRAM preferring a discrete adapter. Only consulted on Vulkan.",
+ "type": "integer",
+ "minimum": -1,
+ "maximum": 2147483647
+ },
+ "prewarmText": {
+ "description": "Text synthesized once at load so GPU pipelines (and a Core ML vocoder sidecar) are ready before the first request; skipped on a plain CPU run. Use a sentence of representative length. Wins over the `vulkanCacheDir` default pre-warm.",
+ "type": "string",
+ "minLength": 1
+ },
+ "streamChunkTokens": {
+ "description": "Text tokens (Unicode code points) per native streaming chunk, about 50 for English and 25–30 for CJK; 0 disables native chunk streaming. Cannot be combined with the LavaSR enhancer or denoiser.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2147483647
+ },
+ "streamFirstChunkTokens": {
+ "description": "Smaller first streaming chunk for lower first-audio latency.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2147483647
+ },
+ "streamChunkTolerancePct": {
+ "description": "Boundary-snap window for clause and whitespace chunk boundaries, as a percentage of the chunk target (engine default 20).",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2147483647
+ },
+ "streamMinChunkTokens": {
+ "description": "Floor on every streamed chunk’s size in text tokens (engine default 30); shorter trailing chunks merge into the previous one.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2147483647
+ },
"backendsDir": {
"description": "Directory scanned as given for dynamically-loaded ggml backend `.so` files. Unset scans the directory the native module was loaded from.",
"type": "string",
@@ -16946,6 +17053,202 @@
}
]
},
+ "voiceJsonSrc": {
+ "description": "External voice JSON source (`{ style_ttl, style_dp }`, e.g. a cloned voice) that overrides the baked `voice` preset; the engine checks the tensor sizes against the loaded model.",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "src": {
+ "type": "string",
+ "description": "Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ },
+ "name": {
+ "description": "Display name for this model instance; overrides the name derived from the source.",
+ "type": "string"
+ },
+ "modelId": {
+ "description": "Unique identifier used to reference the model in QVAC calls.",
+ "type": "string"
+ },
+ "registryPath": {
+ "description": "Registry-relative path to the model (set for registry-backed models).",
+ "type": "string"
+ },
+ "registrySource": {
+ "description": "Registry source identifier, e.g. `huggingface`.",
+ "type": "string"
+ },
+ "blobCoreKey": {
+ "description": "Hyperdrive blob core key for the model file.",
+ "type": "string"
+ },
+ "blobIndex": {
+ "description": "Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ "type": "number"
+ },
+ "engine": {
+ "description": "Canonical inference engine identifier, e.g. `llamacpp-completion`.",
+ "type": "string"
+ },
+ "expectedSize": {
+ "description": "Expected total size of the model file in bytes.",
+ "type": "number"
+ },
+ "sha256Checksum": {
+ "description": "Expected SHA-256 checksum of the model file.",
+ "type": "string"
+ },
+ "addon": {
+ "description": "Inference addon / capability category this model belongs to.",
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "llamacpp-completion",
+ "whispercpp-transcription",
+ "bci-whispercpp-transcription",
+ "llamacpp-embedding",
+ "llamacpp-decision",
+ "llamacpp-rerank",
+ "nmtcpp-translation",
+ "onnx-tts",
+ "tts-ggml",
+ "parakeet-transcription",
+ "moss-transcribe",
+ "ggml-ocr",
+ "sdcpp-generation",
+ "audiogen-ggml",
+ "ggml-vla",
+ "ggml-classification",
+ "llm",
+ "whisper",
+ "bci",
+ "embeddings",
+ "nmt",
+ "parakeet",
+ "tts",
+ "ocr",
+ "diffusion",
+ "audiogen",
+ "vla",
+ "classification"
+ ],
+ "title": "LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrcAddon"
+ },
+ {
+ "type": "string",
+ "const": "vad"
+ }
+ ]
+ }
+ },
+ "required": ["src"],
+ "title": "LoadModelSrcRequestTtsGgmlModelConfigSupertonicVoiceJsonSrc"
+ }
+ ]
+ },
+ "noiseNpySrc": {
+ "description": "Fixed CFM initial-noise `.npy` tensor source, for reproducible output.",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "src": {
+ "type": "string",
+ "description": "Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ },
+ "name": {
+ "description": "Display name for this model instance; overrides the name derived from the source.",
+ "type": "string"
+ },
+ "modelId": {
+ "description": "Unique identifier used to reference the model in QVAC calls.",
+ "type": "string"
+ },
+ "registryPath": {
+ "description": "Registry-relative path to the model (set for registry-backed models).",
+ "type": "string"
+ },
+ "registrySource": {
+ "description": "Registry source identifier, e.g. `huggingface`.",
+ "type": "string"
+ },
+ "blobCoreKey": {
+ "description": "Hyperdrive blob core key for the model file.",
+ "type": "string"
+ },
+ "blobIndex": {
+ "description": "Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ "type": "number"
+ },
+ "engine": {
+ "description": "Canonical inference engine identifier, e.g. `llamacpp-completion`.",
+ "type": "string"
+ },
+ "expectedSize": {
+ "description": "Expected total size of the model file in bytes.",
+ "type": "number"
+ },
+ "sha256Checksum": {
+ "description": "Expected SHA-256 checksum of the model file.",
+ "type": "string"
+ },
+ "addon": {
+ "description": "Inference addon / capability category this model belongs to.",
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "llamacpp-completion",
+ "whispercpp-transcription",
+ "bci-whispercpp-transcription",
+ "llamacpp-embedding",
+ "llamacpp-decision",
+ "llamacpp-rerank",
+ "nmtcpp-translation",
+ "onnx-tts",
+ "tts-ggml",
+ "parakeet-transcription",
+ "moss-transcribe",
+ "ggml-ocr",
+ "sdcpp-generation",
+ "audiogen-ggml",
+ "ggml-vla",
+ "ggml-classification",
+ "llm",
+ "whisper",
+ "bci",
+ "embeddings",
+ "nmt",
+ "parakeet",
+ "tts",
+ "ocr",
+ "diffusion",
+ "audiogen",
+ "vla",
+ "classification"
+ ],
+ "title": "LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrcAddon"
+ },
+ {
+ "type": "string",
+ "const": "vad"
+ }
+ ]
+ }
+ },
+ "required": ["src"],
+ "title": "LoadModelSrcRequestTtsGgmlModelConfigSupertonicNoiseNpySrc"
+ }
+ ]
+ },
"ttsSupertonicMultilingual": {},
"ttsTokenizerSrc": {},
"ttsSpeechEncoderSrc": {},
@@ -17345,7 +17648,7 @@
"title": "LoadModelSrcRequestTtsGgmlModelConfigCosyvoice3Pace"
},
"instruct": {
- "description": "Natural-language control: a structured object (one of dialect / volume / style) or a raw instruction string. One conditioning control per synthesis.",
+ "description": "Natural-language control: a structured object (one of dialect / volume / style) or a raw instruction string. One conditioning control per synthesis; a request-level `instruct` replaces it for that synthesis.",
"anyOf": [
{
"type": "string",
@@ -17401,6 +17704,16 @@
"type": "string",
"minLength": 1
},
+ "flowCutPrompt": {
+ "description": "Treat the baked-voice prompt frames as attention-only conditioning in the flow: a faster flow whose output deviates slightly from the reference (engine default off).",
+ "type": "boolean"
+ },
+ "vulkanDevice": {
+ "description": "Vulkan adapter index, also used by the LavaSR enhancer: 0 = the first adapter, N = the Nth, -1 = auto-pick by free VRAM preferring a discrete adapter. Only consulted on Vulkan.",
+ "type": "integer",
+ "minimum": -1,
+ "maximum": 2147483647
+ },
"useGPU": {
"description": "Route inference through a GPU backend (Metal / CUDA / Vulkan / OpenCL) when available. Default false.",
"type": "boolean"
@@ -24253,6 +24566,161 @@
"type": "string",
"minLength": 1
},
+ "instruct": {
+ "description": "CosyVoice3 only: natural-language control for this synthesis (a structured object with one of dialect / volume / style, or a raw instruction string), replacing the loaded `instruct`, `emotion` or `pace`. One conditioning control per synthesis.",
+ "anyOf": [
+ {
+ "type": "string",
+ "minLength": 1
+ },
+ {
+ "type": "object",
+ "properties": {
+ "dialect": {
+ "description": "Chinese dialect to render (e.g. `cantonese`, `sichuan`).",
+ "type": "string",
+ "enum": [
+ "cantonese",
+ "northeastern",
+ "gansu",
+ "guizhou",
+ "henan",
+ "hubei",
+ "hunan",
+ "jiangxi",
+ "minnan",
+ "ningxia",
+ "shanxi",
+ "shaanxi",
+ "shandong",
+ "shanghai",
+ "sichuan",
+ "tianjin",
+ "yunnan"
+ ],
+ "title": "TextToSpeechRequestInstructDialect"
+ },
+ "volume": {
+ "description": "Speaking volume: `loud` or `soft`.",
+ "type": "string",
+ "enum": ["loud", "soft"],
+ "title": "TextToSpeechRequestInstructVolume"
+ },
+ "style": {
+ "description": "Speaking style: `peppa` or `robot`.",
+ "type": "string",
+ "enum": ["peppa", "robot"],
+ "title": "TextToSpeechRequestInstructStyle"
+ }
+ },
+ "additionalProperties": false,
+ "title": "TextToSpeechRequestInstruct"
+ }
+ ]
+ },
+ "referenceAudioSrc": {
+ "description": "Audio8 only: reference recording to clone for this request, replacing the loaded voice; requires `referenceText` and a loaded codec encoder (`audio8CodecEncoderModelSrc`). A remote source that is not cached yet downloads inside the request, which holds the model until it finishes: pre-fetch it with `downloadAsset()` or pass a local path.",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "src": {
+ "type": "string",
+ "description": "Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ },
+ "name": {
+ "description": "Display name for this model instance; overrides the name derived from the source.",
+ "type": "string"
+ },
+ "modelId": {
+ "description": "Unique identifier used to reference the model in QVAC calls.",
+ "type": "string"
+ },
+ "registryPath": {
+ "description": "Registry-relative path to the model (set for registry-backed models).",
+ "type": "string"
+ },
+ "registrySource": {
+ "description": "Registry source identifier, e.g. `huggingface`.",
+ "type": "string"
+ },
+ "blobCoreKey": {
+ "description": "Hyperdrive blob core key for the model file.",
+ "type": "string"
+ },
+ "blobIndex": {
+ "description": "Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ "type": "number"
+ },
+ "engine": {
+ "description": "Canonical inference engine identifier, e.g. `llamacpp-completion`.",
+ "type": "string"
+ },
+ "expectedSize": {
+ "description": "Expected total size of the model file in bytes.",
+ "type": "number"
+ },
+ "sha256Checksum": {
+ "description": "Expected SHA-256 checksum of the model file.",
+ "type": "string"
+ },
+ "addon": {
+ "description": "Inference addon / capability category this model belongs to.",
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "llamacpp-completion",
+ "whispercpp-transcription",
+ "bci-whispercpp-transcription",
+ "llamacpp-embedding",
+ "llamacpp-decision",
+ "llamacpp-rerank",
+ "nmtcpp-translation",
+ "onnx-tts",
+ "tts-ggml",
+ "parakeet-transcription",
+ "moss-transcribe",
+ "ggml-ocr",
+ "sdcpp-generation",
+ "audiogen-ggml",
+ "ggml-vla",
+ "ggml-classification",
+ "llm",
+ "whisper",
+ "bci",
+ "embeddings",
+ "nmt",
+ "parakeet",
+ "tts",
+ "ocr",
+ "diffusion",
+ "audiogen",
+ "vla",
+ "classification"
+ ],
+ "title": "TextToSpeechRequestReferenceAudioSrcAddon"
+ },
+ {
+ "type": "string",
+ "const": "vad"
+ }
+ ]
+ }
+ },
+ "required": ["src"],
+ "title": "TextToSpeechRequestReferenceAudioSrc"
+ }
+ ]
+ },
+ "referenceText": {
+ "description": "Audio8 only: transcript of the reference recording. With `referenceAudioSrc`, what that recording says; alone, it corrects the transcript of the loaded recording.",
+ "type": "string",
+ "minLength": 1
+ },
"seconds": {
"description": "Sound-effect duration in seconds, up to 30.",
"type": "number",
@@ -24427,6 +24895,10 @@
"realTimeFactor": {
"type": "number"
},
+ "firstAudioMs": {
+ "description": "Milliseconds from the start of the run to the first audio, where the engine reports it; a chunked run keeps the first sentence’s value.",
+ "type": "number"
+ },
"tokensPerSecond": {
"type": "number"
},
@@ -24466,6 +24938,114 @@
"codecOnCoreml": {
"description": "Audio8: `1` when this synthesis ran its codec on the Core ML sidecar, `0` when it ran on the ggml backend `backendId` reports.",
"type": "number"
+ },
+ "t3Ms": {
+ "description": "Chatterbox T3 decode wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "s3genMs": {
+ "description": "Chatterbox S3Gen + HiFT wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "t3Tokens": {
+ "description": "Chatterbox: speech tokens T3 emitted in the last synthesis.",
+ "type": "number"
+ },
+ "stageTotalMs": {
+ "description": "CosyVoice3 / Audio8: the engine’s own wall time for the last synthesis in milliseconds (the sum of its stages), excluding the addon’s post-processing.",
+ "type": "number"
+ },
+ "lmPrefillMs": {
+ "description": "CosyVoice3 LM prefill wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "lmDecodeMs": {
+ "description": "CosyVoice3 LM decode wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "flowFrontendMs": {
+ "description": "CosyVoice3 flow front-end wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "ditEulerMs": {
+ "description": "CosyVoice3 DiT Euler wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "hiftF0Ms": {
+ "description": "CosyVoice3 HiFT F0 wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "hiftSourceMs": {
+ "description": "CosyVoice3 HiFT source wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "hiftStftMs": {
+ "description": "CosyVoice3 HiFT STFT wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "hiftDecodeMs": {
+ "description": "CosyVoice3 HiFT decode wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "decodeSteps": {
+ "description": "CosyVoice3: LM decode steps of the last synthesis.",
+ "type": "number"
+ },
+ "speechTokens": {
+ "description": "CosyVoice3: speech tokens generated in the last synthesis.",
+ "type": "number"
+ },
+ "flowFrames": {
+ "description": "CosyVoice3: flow frames in (prompt + generated) of the last synthesis.",
+ "type": "number"
+ },
+ "melFrames": {
+ "description": "CosyVoice3: mel frames out of the last synthesis.",
+ "type": "number"
+ },
+ "textIds": {
+ "description": "CosyVoice3: text ids in the LM prefill of the last synthesis.",
+ "type": "number"
+ },
+ "promptSpeechTokens": {
+ "description": "CosyVoice3: prompt speech tokens the LM continued from.",
+ "type": "number"
+ },
+ "voiceEncodeMs": {
+ "description": "Audio8 reference-voice encode wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "promptMs": {
+ "description": "Audio8 prompt build wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "prefillMs": {
+ "description": "Audio8 prefill wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "sampleMs": {
+ "description": "Audio8 sampling wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "fastDecodeMs": {
+ "description": "Audio8 fast (local) decoder wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "slowDecodeMs": {
+ "description": "Audio8 slow (global) decoder wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "codecLatentMs": {
+ "description": "Audio8 codec latent wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "codecSynthMs": {
+ "description": "Audio8 codec synthesis wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "resampleMs": {
+ "description": "Audio8 resample wall time of the last synthesis, in milliseconds.",
+ "type": "number"
}
},
"additionalProperties": false,
@@ -24589,6 +25169,161 @@
"type": "string",
"minLength": 1
},
+ "instruct": {
+ "description": "CosyVoice3 only: natural-language control for this synthesis (a structured object with one of dialect / volume / style, or a raw instruction string), replacing the loaded `instruct`, `emotion` or `pace`. One conditioning control per synthesis.",
+ "anyOf": [
+ {
+ "type": "string",
+ "minLength": 1
+ },
+ {
+ "type": "object",
+ "properties": {
+ "dialect": {
+ "description": "Chinese dialect to render (e.g. `cantonese`, `sichuan`).",
+ "type": "string",
+ "enum": [
+ "cantonese",
+ "northeastern",
+ "gansu",
+ "guizhou",
+ "henan",
+ "hubei",
+ "hunan",
+ "jiangxi",
+ "minnan",
+ "ningxia",
+ "shanxi",
+ "shaanxi",
+ "shandong",
+ "shanghai",
+ "sichuan",
+ "tianjin",
+ "yunnan"
+ ],
+ "title": "TextToSpeechStreamRequestInstructDialect"
+ },
+ "volume": {
+ "description": "Speaking volume: `loud` or `soft`.",
+ "type": "string",
+ "enum": ["loud", "soft"],
+ "title": "TextToSpeechStreamRequestInstructVolume"
+ },
+ "style": {
+ "description": "Speaking style: `peppa` or `robot`.",
+ "type": "string",
+ "enum": ["peppa", "robot"],
+ "title": "TextToSpeechStreamRequestInstructStyle"
+ }
+ },
+ "additionalProperties": false,
+ "title": "TextToSpeechStreamRequestInstruct"
+ }
+ ]
+ },
+ "referenceAudioSrc": {
+ "description": "Audio8 only: reference recording to clone for this request, replacing the loaded voice; requires `referenceText` and a loaded codec encoder (`audio8CodecEncoderModelSrc`). A remote source that is not cached yet downloads inside the request, which holds the model until it finishes: pre-fetch it with `downloadAsset()` or pass a local path.",
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "src": {
+ "type": "string",
+ "description": "Location of the model file: a local file path, an HTTP(S) URL, or a `registry://` / `pear://` URI."
+ },
+ "name": {
+ "description": "Display name for this model instance; overrides the name derived from the source.",
+ "type": "string"
+ },
+ "modelId": {
+ "description": "Unique identifier used to reference the model in QVAC calls.",
+ "type": "string"
+ },
+ "registryPath": {
+ "description": "Registry-relative path to the model (set for registry-backed models).",
+ "type": "string"
+ },
+ "registrySource": {
+ "description": "Registry source identifier, e.g. `huggingface`.",
+ "type": "string"
+ },
+ "blobCoreKey": {
+ "description": "Hyperdrive blob core key for the model file.",
+ "type": "string"
+ },
+ "blobIndex": {
+ "description": "Internal: index of this shard within its Hyperdrive blob core, for sharded models.",
+ "type": "number"
+ },
+ "engine": {
+ "description": "Canonical inference engine identifier, e.g. `llamacpp-completion`.",
+ "type": "string"
+ },
+ "expectedSize": {
+ "description": "Expected total size of the model file in bytes.",
+ "type": "number"
+ },
+ "sha256Checksum": {
+ "description": "Expected SHA-256 checksum of the model file.",
+ "type": "string"
+ },
+ "addon": {
+ "description": "Inference addon / capability category this model belongs to.",
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "llamacpp-completion",
+ "whispercpp-transcription",
+ "bci-whispercpp-transcription",
+ "llamacpp-embedding",
+ "llamacpp-decision",
+ "llamacpp-rerank",
+ "nmtcpp-translation",
+ "onnx-tts",
+ "tts-ggml",
+ "parakeet-transcription",
+ "moss-transcribe",
+ "ggml-ocr",
+ "sdcpp-generation",
+ "audiogen-ggml",
+ "ggml-vla",
+ "ggml-classification",
+ "llm",
+ "whisper",
+ "bci",
+ "embeddings",
+ "nmt",
+ "parakeet",
+ "tts",
+ "ocr",
+ "diffusion",
+ "audiogen",
+ "vla",
+ "classification"
+ ],
+ "title": "TextToSpeechStreamRequestReferenceAudioSrcAddon"
+ },
+ {
+ "type": "string",
+ "const": "vad"
+ }
+ ]
+ }
+ },
+ "required": ["src"],
+ "title": "TextToSpeechStreamRequestReferenceAudioSrc"
+ }
+ ]
+ },
+ "referenceText": {
+ "description": "Audio8 only: transcript of the reference recording. With `referenceAudioSrc`, what that recording says; alone, it corrects the transcript of the loaded recording.",
+ "type": "string",
+ "minLength": 1
+ },
"type": {
"type": "string",
"const": "textToSpeechStream"
@@ -24636,6 +25371,10 @@
"realTimeFactor": {
"type": "number"
},
+ "firstAudioMs": {
+ "description": "Milliseconds from the start of the run to the first audio, where the engine reports it; a chunked run keeps the first sentence’s value.",
+ "type": "number"
+ },
"tokensPerSecond": {
"type": "number"
},
@@ -24675,6 +25414,114 @@
"codecOnCoreml": {
"description": "Audio8: `1` when this synthesis ran its codec on the Core ML sidecar, `0` when it ran on the ggml backend `backendId` reports.",
"type": "number"
+ },
+ "t3Ms": {
+ "description": "Chatterbox T3 decode wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "s3genMs": {
+ "description": "Chatterbox S3Gen + HiFT wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "t3Tokens": {
+ "description": "Chatterbox: speech tokens T3 emitted in the last synthesis.",
+ "type": "number"
+ },
+ "stageTotalMs": {
+ "description": "CosyVoice3 / Audio8: the engine’s own wall time for the last synthesis in milliseconds (the sum of its stages), excluding the addon’s post-processing.",
+ "type": "number"
+ },
+ "lmPrefillMs": {
+ "description": "CosyVoice3 LM prefill wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "lmDecodeMs": {
+ "description": "CosyVoice3 LM decode wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "flowFrontendMs": {
+ "description": "CosyVoice3 flow front-end wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "ditEulerMs": {
+ "description": "CosyVoice3 DiT Euler wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "hiftF0Ms": {
+ "description": "CosyVoice3 HiFT F0 wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "hiftSourceMs": {
+ "description": "CosyVoice3 HiFT source wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "hiftStftMs": {
+ "description": "CosyVoice3 HiFT STFT wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "hiftDecodeMs": {
+ "description": "CosyVoice3 HiFT decode wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "decodeSteps": {
+ "description": "CosyVoice3: LM decode steps of the last synthesis.",
+ "type": "number"
+ },
+ "speechTokens": {
+ "description": "CosyVoice3: speech tokens generated in the last synthesis.",
+ "type": "number"
+ },
+ "flowFrames": {
+ "description": "CosyVoice3: flow frames in (prompt + generated) of the last synthesis.",
+ "type": "number"
+ },
+ "melFrames": {
+ "description": "CosyVoice3: mel frames out of the last synthesis.",
+ "type": "number"
+ },
+ "textIds": {
+ "description": "CosyVoice3: text ids in the LM prefill of the last synthesis.",
+ "type": "number"
+ },
+ "promptSpeechTokens": {
+ "description": "CosyVoice3: prompt speech tokens the LM continued from.",
+ "type": "number"
+ },
+ "voiceEncodeMs": {
+ "description": "Audio8 reference-voice encode wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "promptMs": {
+ "description": "Audio8 prompt build wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "prefillMs": {
+ "description": "Audio8 prefill wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "sampleMs": {
+ "description": "Audio8 sampling wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "fastDecodeMs": {
+ "description": "Audio8 fast (local) decoder wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "slowDecodeMs": {
+ "description": "Audio8 slow (global) decoder wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "codecLatentMs": {
+ "description": "Audio8 codec latent wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "codecSynthMs": {
+ "description": "Audio8 codec synthesis wall time of the last synthesis, in milliseconds.",
+ "type": "number"
+ },
+ "resampleMs": {
+ "description": "Audio8 resample wall time of the last synthesis, in milliseconds.",
+ "type": "number"
}
},
"additionalProperties": false,
diff --git a/packages/sdk/src/client/api/text-to-speech.ts b/packages/sdk/src/client/api/text-to-speech.ts
index 3380f375f3e..4b2ea8058a2 100644
--- a/packages/sdk/src/client/api/text-to-speech.ts
+++ b/packages/sdk/src/client/api/text-to-speech.ts
@@ -186,7 +186,13 @@ function buildTextToSpeechStreamRequest(
...(params.expressivity !== undefined && { expressivity: params.expressivity }),
...(params.noise !== undefined && { noise: params.noise }),
...(params.reverb !== undefined && { reverb: params.reverb }),
- ...(params.quality !== undefined && { quality: params.quality })
+ ...(params.quality !== undefined && { quality: params.quality }),
+ // Per-request voice controls: CosyVoice3's instruct, Audio8's reference pair.
+ ...(params.instruct !== undefined && { instruct: params.instruct }),
+ ...(params.referenceAudioSrc !== undefined && {
+ referenceAudioSrc: params.referenceAudioSrc
+ }),
+ ...(params.referenceText !== undefined && { referenceText: params.referenceText })
}
}
diff --git a/packages/sdk/test/text-to-speech-stream-client.test.ts b/packages/sdk/test/text-to-speech-stream-client.test.ts
index b6055c502a9..deb7e9fc96d 100644
--- a/packages/sdk/test/text-to-speech-stream-client.test.ts
+++ b/packages/sdk/test/text-to-speech-stream-client.test.ts
@@ -44,3 +44,22 @@ test('textToSpeechStream preserves Uint8Array fragments', (t) => {
t.is(encodeTextToSpeechFragment(fragment), fragment)
})
+
+test('textToSpeechStream validates the per-request voice rules before opening the RPC', async (t) => {
+ // A per-request recording must bring its own transcript.
+ const missingTranscript = await captureValidationError({
+ modelId: 'audio8',
+ referenceAudioSrc: '/voices/someone-else.wav'
+ })
+ t.ok(missingTranscript instanceof RequestValidationFailedError)
+ t.ok((missingTranscript as Error).message.includes('referenceText'))
+
+ // `instruct` is a CosyVoice3 control, and CosyVoice3 takes one control per synthesis.
+ const twoControls = await captureValidationError({
+ modelId: 'cosyvoice3',
+ instruct: { dialect: 'cantonese' },
+ emotion: 'happy'
+ })
+ t.ok(twoControls instanceof RequestValidationFailedError)
+ t.ok((twoControls as Error).message.includes('emotion'))
+})