























@@ -5,7 +5,8 @@ import type {
55SpeechProviderOverrides,
66SpeechProviderPlugin,
77} from "openclaw/plugin-sdk/speech-core";
8-import { asFiniteNumber, asObject, trimToUndefined } from "openclaw/plugin-sdk/speech-core";
8+import { asObject, trimToUndefined } from "openclaw/plugin-sdk/speech-core";
9+import { asFiniteNumberInRange } from "openclaw/plugin-sdk/string-coerce-runtime";
910import {
1011DEFAULT_INWORLD_MODEL_ID,
1112DEFAULT_INWORLD_VOICE_ID,
@@ -30,6 +31,10 @@ type InworldProviderOverrides = {
3031temperature?: number;
3132};
323334+function normalizeInworldTemperature(value: unknown): number | undefined {
35+return asFiniteNumberInRange(value, { min: 0, minExclusive: true, max: 2 });
36+}
37+3338function normalizeInworldProviderConfig(rawConfig: Record<string, unknown>): InworldProviderConfig {
3439const providers = asObject(rawConfig.providers);
3540const raw = asObject(providers?.inworld) ?? asObject(rawConfig.inworld);
@@ -41,7 +46,7 @@ function normalizeInworldProviderConfig(rawConfig: Record<string, unknown>): Inw
4146baseUrl: normalizeInworldBaseUrl(trimToUndefined(raw?.baseUrl)),
4247voiceId: trimToUndefined(raw?.voiceId) ?? DEFAULT_INWORLD_VOICE_ID,
4348modelId: trimToUndefined(raw?.modelId) ?? DEFAULT_INWORLD_MODEL_ID,
44-temperature: asFiniteNumber(raw?.temperature),
49+temperature: normalizeInworldTemperature(raw?.temperature),
4550};
4651}
4752@@ -52,7 +57,7 @@ function readInworldProviderConfig(config: SpeechProviderConfig): InworldProvide
5257baseUrl: normalizeInworldBaseUrl(trimToUndefined(config.baseUrl) ?? defaults.baseUrl),
5358voiceId: trimToUndefined(config.voiceId) ?? defaults.voiceId,
5459modelId: trimToUndefined(config.modelId) ?? defaults.modelId,
55-temperature: asFiniteNumber(config.temperature) ?? defaults.temperature,
60+temperature: normalizeInworldTemperature(config.temperature) ?? defaults.temperature,
5661};
5762}
5863@@ -65,7 +70,7 @@ function readInworldOverrides(
6570return {
6671voiceId: trimToUndefined(overrides.voiceId ?? overrides.voice),
6772modelId: trimToUndefined(overrides.modelId ?? overrides.model),
68-temperature: asFiniteNumber(overrides.temperature),
73+temperature: normalizeInworldTemperature(overrides.temperature),
6974};
7075}
7176@@ -97,8 +102,8 @@ function parseDirectiveToken(ctx: SpeechDirectiveTokenParseContext): {
97102if (!ctx.policy.allowVoiceSettings) {
98103return { handled: true };
99104}
100-const temperature = Number(ctx.value);
101-if (!Number.isFinite(temperature) || temperature < 0 || temperature > 2) {
105+const temperature = normalizeInworldTemperature(Number(ctx.value));
106+if (temperature === undefined) {
102107return { handled: true, warnings: [`invalid Inworld temperature "${ctx.value}"`] };
103108}
104109return { handled: true, overrides: { temperature } };
@@ -137,9 +142,9 @@ export function buildInworldSpeechProvider(): SpeechProviderPlugin {
137142 ...(trimToUndefined(talkProviderConfig.modelId) == null
138143 ? {}
139144 : { modelId: trimToUndefined(talkProviderConfig.modelId) }),
140- ...(asFiniteNumber(talkProviderConfig.temperature) == null
145+ ...(normalizeInworldTemperature(talkProviderConfig.temperature) == null
141146 ? {}
142- : { temperature: asFiniteNumber(talkProviderConfig.temperature) }),
147+ : { temperature: normalizeInworldTemperature(talkProviderConfig.temperature) }),
143148};
144149},
145150resolveTalkOverrides: ({ params }) => ({
@@ -149,9 +154,9 @@ export function buildInworldSpeechProvider(): SpeechProviderPlugin {
149154 ...(trimToUndefined(params.modelId) == null
150155 ? {}
151156 : { modelId: trimToUndefined(params.modelId) }),
152- ...(asFiniteNumber(params.temperature) == null
157+ ...(normalizeInworldTemperature(params.temperature) == null
153158 ? {}
154- : { temperature: asFiniteNumber(params.temperature) }),
159+ : { temperature: normalizeInworldTemperature(params.temperature) }),
155160}),
156161listVoices: async (req) => {
157162const config = req.providerConfig ? readInworldProviderConfig(req.providerConfig) : undefined;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。