Skip to content

The model listing says whether a model reasons and takes images, and its output limit; both can be set by hand, v0.64.0 - #294

Merged
fylorn merged 1 commit into
mainfrom
feat/model-capabilities
Oct 6, 2026
Merged

fylorn merged 1 commit into
mainfrom
feat/model-capabilities

Conversation

@fylorn

@fylorn fylorn commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

This release tells clients more about each model. The model listing now says, for every model it knows, how much it can write in one answer, whether it reasons and whether it takes images, besides its context window. An upstream's model can have the last two set by hand, like the context window and output limit before.

Upgrade notes

  • The control-plane protocol version (CONTROL_API_VERSION) goes from 39 to 40. ThinkWatch Lite connects only to a core with the same protocol version: ThinkWatch Lite 2026.10.6 includes 0.63.0 (protocol 39) and does not connect to 0.64.0. A server used with it stays on 0.63.0 until the app is updated to a release that includes 0.64.0; sudo twcore upgrade --version 0.63.0 --restart switches a server back.
  • The request store's schema is unchanged: upgrading from 0.63.0 keeps the request history.
  • The configuration format only gains fields (providers[].model_specs.*.reasoning and .image_input); every 0.63.0 configuration loads.
  • Changed in the protocol:
    • ModelRow gains reasoning, reasoning_source, image_input and image_input_source (SpecSource).
    • ModelSpecSave gains reasoning and image_input. An entry is removed when all four fields are empty. A client written for protocol 39 drops the two new fields when it saves a model spec.
  • Message codes, compared with 0.63.0:
    • New: config.model_spec_nothing_set.
    • Removed: config.model_spec_empty, replaced by config.model_spec_nothing_set because the sentence now names four fields.

What the model listing carries. GET /v1/models adds three fields to each model in the OpenAI and Anthropic shapes, each only when it is known:

  • max_output_tokens, the most tokens one answer can have;
  • supports_reasoning, whether the model reasons;
  • input_modalities, ["text", "image"] or ["text"].

The Gemini shape adds thinking. The values come from the same place as the context window: the upstream's hand-written model spec first, then the price table. When neither says, the field is left out rather than guessed. Clients then use their own defaults: a client told "does not reason" hides its reasoning levels, and that is not something to guess. The price table now keeps "not stated" apart from "no" for reasoning, and reads image support from the dataset's supports_vision.

Reasoning and image input set by hand. providers[].model_specs takes reasoning and image_input (true or false) next to context_window and max_output_tokens, each overriding the price table on its own. PUT /provider-model-spec sets them. The speed test also uses the result: a model set by hand to reason gets room to reason in its probe request, as models the price table marks as reasoning already did.

🤖 Generated with Claude Code

…its output limit; both can be set by hand, v0.64.0

- /v1/models carries max_output_tokens, supports_reasoning and
  input_modalities (OpenAI/Anthropic shapes) and thinking (Gemini),
  each only when known
- model_specs gain reasoning and image_input; the price table keeps
  'not stated' apart from 'no' and reads supports_vision
- ModelRow/ModelSpecSave gain the two fields; protocol 40
- the speed probe leaves room to reason by the resolved spec

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@fylorn
fylorn merged commit f2d4caf into main Oct 6, 2026
5 checks passed
@fylorn
fylorn deleted the feat/model-capabilities branch October 6, 2026 02:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant