Skip to content

feat(inworld): default to inworld-tts-2 (Realtime TTS-2)#77921

Open
cshape wants to merge 6 commits intoopenclaw:mainfrom
cshape:tts-2
Open

feat(inworld): default to inworld-tts-2 (Realtime TTS-2)#77921
cshape wants to merge 6 commits intoopenclaw:mainfrom
cshape:tts-2

Conversation

@cshape
Copy link
Copy Markdown
Contributor

@cshape cshape commented May 5, 2026

Summary

Adds inworld-tts-2 to the bundled Inworld TTS provider as the new default,
while keeping inworld-tts-1.5-max and inworld-tts-1.5-mini as valid
options. Updates types, the plugin manifest, and docs accordingly.

Changes

  • extensions/inworld/tts.ts: flip DEFAULT_INWORLD_MODEL_ID to
    inworld-tts-2; prepend inworld-tts-2 to the INWORLD_TTS_MODELS
    literal union.
  • extensions/inworld/openclaw.plugin.json: update the modelId
    description so the surfaced default is inworld-tts-2.
  • docs/providers/inworld.md: default model now inworld-tts-2
    (Realtime TTS-2); configuration example, options table, and Models
    accordion updated; existing 1.5-max / 1.5-mini entries kept and
    surfaced with their human-readable names (Realtime TTS-1.5-Max /
    Realtime TTS-1.5-Mini).
  • docs/tools/tts.md: Inworld preset config example uses
    inworld-tts-2; Inworld primary modelId ParamField lists
    inworld-tts-2 as the default and keeps the older ids as
    alternatives.

Backwards compatibility

inworld-tts-1.5-max, inworld-tts-1.5-mini, inworld-tts-1-max,
and inworld-tts-1 remain in INWORLD_TTS_MODELS and are accepted
as valid modelId values. Existing configurations that pin a 1.5
model continue to work unchanged; only the default flips.

Test plan

  • pnpm tsgo (or repo's typecheck lane) on extensions/inworld
  • pnpm test extensions/inworld
  • Manual: smoke test a reply through the Inworld provider with no
    modelId configured and confirm the request payload sends
    inworld-tts-2
openclawtts2.mp4

@openclaw-barnacle openclaw-barnacle Bot added triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. docs Improvements or additions to documentation extensions: tts-local-cli extensions: inworld Extension: inworld plugin: azure-speech Azure Speech plugin size: XS labels May 5, 2026
@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented May 5, 2026

Codex review: needs maintainer review before merge.

Summary
The PR changes the bundled Inworld TTS default/model list to inworld-tts-2, adds X-User-Agent: openclaw on Inworld requests, and updates docs, manifest metadata, tests, generated config hash, and changelog.

Reproducibility: yes. for the changed behavior, not as a bug: current main resolves omitted Inworld modelId through DEFAULT_INWORLD_MODEL_ID, and the PR changes that source path and assertion to inworld-tts-2.

Real behavior proof
Sufficient (recording): The PR body includes a GitHub-hosted recording; downloaded metadata confirms a real video/audio artifact, and the discussion/prior inspection ties it to the unpinned Inworld path using inworld-tts-2 and returning audio.

Next step before merge
Human approval is needed for the bundled Inworld default/research-preview model choice and exact-head CI/proof-gate resolution; there is no narrow automated code repair to queue.

Security
Cleared: No concrete security or supply-chain concern found; the diff is provider-local code/docs/tests/generated metadata and does not change dependencies, workflows, secrets handling, package scripts, or SSRF guard boundaries.

Review details

Best possible solution:

Land the provider-local default/model/docs/test update after maintainer approval and green exact-head gates, while preserving existing pinned model IDs.

Do we have a high-confidence way to reproduce the issue?

Yes for the changed behavior, not as a bug: current main resolves omitted Inworld modelId through DEFAULT_INWORLD_MODEL_ID, and the PR changes that source path and assertion to inworld-tts-2.

Is this the best way to solve the issue?

Yes, subject to maintainer approval and CI: the patch stays inside the Inworld plugin surface, updates docs/manifest/tests/changelog, and keeps older model IDs accepted. The remaining blocker is default-model policy and gate completion, not a narrower code repair.

Acceptance criteria:

  • pnpm test extensions/inworld
  • pnpm config:docs:check
  • Exact-head CI for 752d864, including the Real behavior proof gate

What I checked:

  • Current main default: Current main still exports DEFAULT_INWORLD_MODEL_ID = "inworld-tts-1.5-max" and does not include inworld-tts-2 in the model list. (extensions/inworld/tts.ts:6, 3a452a029ca4)
  • Unpinned runtime path: When modelId is omitted, provider config resolves through DEFAULT_INWORLD_MODEL_ID, and synthesis passes that resolved value into inworldTTS. (extensions/inworld/speech-provider.ts:43, 3a452a029ca4)
  • PR head implementation: The PR head sets the default to inworld-tts-2, prepends it to the accepted model list, and adds X-User-Agent: openclaw to TTS and voice-list requests. (extensions/inworld/tts.ts:6, 752d8645c7f0)
  • Regression coverage in PR: The PR head updates the default request-body test to expect modelId: "inworld-tts-2" and asserts the new x-user-agent header. (extensions/inworld/tts.test.ts:242, 752d8645c7f0)
  • Docs and manifest alignment: The PR head updates the Inworld provider docs to show inworld-tts-2 as the default and documents model-scoped temperature behavior. Public docs: docs/providers/inworld.md. (docs/providers/inworld.md:25, 752d8645c7f0)
  • Upstream model contract: Official Inworld docs list Llama Realtime TTS-2 with model ID inworld-tts-2 and also retain the older 1.5 and 1 model IDs.

Likely related people:

  • cshape: Merged feat(tts): add Inworld as built-in speech provider #55972 added the bundled Inworld speech provider, docs, tests, manifest, and original default that this PR updates. (role: introduced behavior / provider domain contributor; confidence: high; commits: 0bcb4c95c185; files: extensions/inworld/tts.ts, extensions/inworld/speech-provider.ts, extensions/inworld/tts.test.ts)
  • steipete: Recent path history shows maintenance on the Inworld TTS client constants after the provider landed. (role: recent adjacent maintainer; confidence: medium; commits: 678ef019f370; files: extensions/inworld/tts.ts)
  • vincentkoc: Recent path history shows adjacent maintenance on Inworld speech-provider behavior and Inworld provider docs. (role: recent adjacent maintainer; confidence: medium; commits: 361737d1f1cb, fcb188a41a48; files: extensions/inworld/speech-provider.ts, docs/providers/inworld.md)

Remaining risk / open question:

  • Exact-head CI is not green yet: 30 checks were queued and the automated Real behavior proof check was failing at review time.
  • Defaulting unpinned users to Inworld's research-preview TTS-2 can affect runtime behavior, cost, or model quality expectations, so maintainer approval is needed.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 3a452a029ca4.

@cshape
Copy link
Copy Markdown
Contributor Author

cshape commented May 5, 2026

@clawsweeper I've added proof of human-ness :)

@cshape
Copy link
Copy Markdown
Contributor Author

cshape commented May 5, 2026

Re Codex P0 "Real behavior proof": the smoke video is already linked at the bottom of the PR description (user-attachments/assets/998782bb-…); it shows the no-modelId path resolving to inworld-tts-2 and returning audio.

P2 (default-model assertion in extensions/inworld/tts.test.ts) and P3 (Unreleased ### Changes entry) are addressed in 39b321ecdb. Local proof: pnpm test extensions/inworld 26/26 green; pnpm config:docs:check clean (baseline regen included).

@cshape
Copy link
Copy Markdown
Contributor Author

cshape commented May 5, 2026

@clawsweeper we can continue to send temperature and it's OK - it will be safely ignored in tts-2 and used in tts-1.5-max and mini.

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 6, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 6, 2026
@cshape
Copy link
Copy Markdown
Contributor Author

cshape commented May 6, 2026

Re Codex P3 (docs/tools/tts.md:191 — TTS-2 temperature behavior): clarified in e972b30f08.

  • docs/tools/tts.md: dropped the temperature: 0.7 line from the Inworld TTS-2 example (it was misleading next to the new default) and replaced it with an inline comment noting that temperature is honored by inworld-tts-1.5-* / inworld-tts-1* and ignored by inworld-tts-2.
  • docs/providers/inworld.md: added the same model-scoped clarification to the temperature row in the Configuration options table and to the Models accordion. As I noted earlier, sending temperature against inworld-tts-2 is safe — Inworld silently ignores it — so existing pinned configs continue to work; the docs now make that explicit.

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 6, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 6, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 6, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 6, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 7, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Improvements or additions to documentation extensions: inworld Extension: inworld extensions: tts-local-cli plugin: azure-speech Azure Speech plugin size: XS triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant