Changelog

Chat tools, current models, and read-aloud

  • New
  • Improved

Dashboard chat can do a bit of work now, not only answer. The model picker matches the current Gateway catalog, vision is an actual capability instead of a leftover attach button, and you can listen to an answer without a TTS model.

Tools on the stream

get_workspace and rename_chat run on send and regenerate. The first returns the organization's plan, member count, and remaining responses. The second updates the conversation title. Both are closed over the current turn, so the model never picks a tenant, and both stay off when web search is on.

Completed tool calls persist as cards in the transcript. Reload keeps them. A follow-up that already has the result does not call the tool again. A rename from the model, or a manual rename, is not overwritten by the first-turn auto-title.

The add-a-chat-tool skill in the kit is the extension path. You do not add an oRPC endpoint to give the model another action.

The catalog, vision, and what survives reload

The picker now ships GPT-5.5 as the free default, plus GPT-5.6 Sol, Claude Sonnet and Opus 5, Grok 4.6, Gemini 3.8 Flash, Kimi K3, and GLM 5.3 Flash. Reasoning effort is mapped for OpenAI, Anthropic, Google, xAI, Moonshot, and Z.ai. Unknown, disabled, and directly requested web-search models are rejected before usage is reserved.

Image attach only appears when private attachment storage is on, web search is off, and the selected model declared vision. The server rejects image parts otherwise. Public image storage is not enough.

Thinking blocks and citation sources are stored with the assistant message. Reload reconstructs them. The next model turn still only sees text and files, not the reasoning.

First-turn titles now use Gemini 2.5 Flash Lite.

Read the answer out loud

A speaker control sits next to Copy on assistant turns that have text. It uses the browser's speechSynthesis, speaks only the visible answer, and skips the thinking block. Press again to stop. Switching chats or regenerating cancels playback. The UI locale picks the voice: English becomes en-US, German becomes de-DE. The composer mic uses the same language tag, and it hides entirely when the browser has no speech recognition and you have not wired a server transcription callback.