Skip to content

Model Extension Options

lqdflying edited this page Sep 30, 2026 · 21 revisions

Model Extension Options (Gear Menu)

The gear icon appears when the current model lists settings.extendParams in the model bank (packages/model-bank/src/aiModels/*.ts). ChatHub routes the popover by runtime provider id so only API-backed toggles appear for that vendor.

Provider Panels

Provider id UI module Typical controls
moonshot MoonshotOptions Kimi K2.6 thinking + preserved reasoning
minimax MinimaxOptions OpenAI-compat reasoning_split (interleaved thinking vs body), including MiniMax-M3
anthropic / anthropiccompatible AnthropicOptions Prompt cache; enable deep thinking (Claude 5 except Fable); reasoning intensity (output_config.effort); adaptive-only vs fixed budget
openai / openaicompatible OpenAIOptions reasoning_effort (o-style), model-specific GPT-5 reasoning effort, text verbosity
xai XaiOptions Grok family reasoning effort (grok-4.7 and grok-4.7-build-fast low/medium/high/xhigh; grok-4.6 low/medium/high/xhigh; grok-4.5 low/medium/high; grok-4.3 none/low/medium/high)
deepseek DeepSeekOptions Enable reasoning toggle; deepseek-flash also accepts image input with the same thinking gear
mimo MimoOptions Enable reasoning toggle (thinking.type)
zhipu ZhipuOptions GLM deep thinking (thinking.type) when the vendor allows disable; reasoning_effort (GLM-5.2: Max/High/Skip → API none; GLM-5.3 / Flash: Low/High/Max, thinking cannot be disabled); Preserved Thinking (thinking.clear_thinking: false, ON = preserve)

UX Conventions

  • Popover minWidth 320px for dedicated panels; Anthropic/OpenAI panels use vertical slider rows, scroll (maxHeight) when deep thinking exposes several rows.
  • Anthropic reasoning intensity is exposed only on models that declare reasoningEffort in extendParams (Claude adaptive-capable ids); maps to chatConfig.reasoningEffort → API output_config.effort. Opus 5, Sonnet 5, Opus 4.8, and Opus 4.7 are adaptive-only — ChatHub never sends thinking: { type: "enabled", budget_tokens }, which Anthropic rejects with HTTP 400. Fable 5.1 is always-on adaptive thinking; there is no off switch, and ChatHub omits a disabled payload. Fixed token budgets remain only for models through Claude 4.6. To turn thinking off on Opus 5 / Sonnet 5, ChatHub sends thinking: { type: "disabled" } (omitting the field would leave adaptive thinking on). Official: API primer, Sonnet 5 behavior.
  • OpenAI sliders (ReasoningEffortSlider, GPT5ReasoningEffortSlider, TextVerbositySlider) use a full-width compact track.
  • GPT-5 reasoning effort uses model-specific stable slider positions: gpt-6-astra exposes low, medium, high, xhigh, max (unset / none / minimal send high); gpt-6.1-sol exposes the same set (unset / none / minimal send xhigh); gpt-5.6-sol exposes high, xhigh, max (floor high); GPT-5.6 Terra/Luna expose none through max (default medium); GPT-5.5 exposes high / xhigh; earlier leftover GPT-5 models expose minimal through high. A saved value unsupported by the newly selected model displays and sends the family default (xhigh for GPT-6.1 Sol, high for Astra / GPT-5.6 Sol / GPT-5.5, medium otherwise).
  • Compatible providers (openaicompatible, anthropiccompatible) reuse the native provider panels only for model-bank-declared extendParams. They use fixed built-in model lists and hide arbitrary model add/fetch UI. Native model search is opt-in: model cards keep abilities.search: false (not auto-tagged as search models) but retain settings.searchImpl: 'params', so the "Use the model's built-in search engine" toggle appears in the search panel. When the toggle is OFF (default), ChatHub uses its own web-browsing tools; when ON, search params are sent to the gateway API. OpenAI-compatible Responses API mode is opt-in and should be enabled only for gateways that implement /v1/responses plus typed Responses streaming/tool semantics.
  • DeepSeek reasoning toggle gates reasoning_effort behind enableReasoning and forwards thinking.type to the API for proper disable behavior. deepseek-flash accepts image input (JPEG/PNG/GIF/WebP via Chat Completions image_url) and uses the same thinking gear. Official: Vision.
  • Xiaomi MiMo gear exposes only Enable Deep Thinking. ChatHub sends thinking.type explicitly; off overrides the vendor default-on. Native web search is the search-panel opt-in (type: web_search), not a gear control. There is no reasoningEffort field on Chat Completions.
  • Zhipu GLM panel: GLM-5.2 shows Enable Deep Thinking, then reasoning_effort Max/High/Skip (Skip maps to API none, not minimal) and Preserved Thinking, gated behind thinking-on. GLM-5.3 and GLM-5.3-Flash force thinking — the vendor rejects thinking.type: "disabled" — so those cards ship no Enable Deep Thinking toggle; the gear shows Low/High/Max (default max) plus Preserved Thinking. Leftover Skip from a 5.2 assistant maps to API low. Leftover fetched glm-4.7* still force thinking at runtime and expose Preserved Thinking only (no enable/disable switch). Built-in web search or JSON mode does not force thinking off. Text model cards declare settings.searchImpl: 'params' so the "Use the model's built-in search engine" toggle appears in the search panel; glm-5.3-flash and glm-5v-turbo do not (vision request schema has no web_search tool). The runtime strips Anthropic-style budget_tokens and Moonshot-style keep before sending, coerces tool_choice to auto, sets do_sample: false when temperature is 0, and never sends tool_stream (gateway backends reject it intermittently). Connectivity Check still disables thinking on glm-5.2 and older; for glm-5.3* it omits thinking and sends reasoning_effort: low.
  • xAI gear exposes only Grok reasoning effort. grok-4.7 and grok-4.7-build-fast use the same set as 4.6 (low / medium / high / xhigh, default high) and cannot disable thinking. Leftover 4.5 xhigh is sent as high. Grok 4.3 none is sent as reasoning_effort: none. Native Grok search is the search-panel opt-in and only ships on Responses as tools: [{ type: "web_search" }].
  • Fetched provider models can receive read-time-only settings.extendParams when the remote model table lacks settings storage. This is provider-scoped: DeepSeek V4 / deepseek-flash get enableReasoning + reasoningEffort, MiniMax M-series gets minimaxReasoningSplit, Xiaomi MiMo V2.5 gets enableReasoning, Moonshot K2.6 gets thinking + preserved reasoning (leftover kimi-k2.5 still gets thinking only), OpenAI/Azure fetched gpt-5.*, gpt-6-astra*, and gpt-6.1-sol* ids get gpt5ReasoningEffort + textVerbosity, xAI fetched ids containing grok-4.7 (including grok-4.7-build-fast), plus grok-4.6 / grok-4.5 / grok-4.3, get xaiReasoningEffort, Zhipu reasoning models get enableReasoning + zhipuPreservedThinking (plus zhipuReasoningEffort on glm-5.2 and above; glm-5.3* get zhipuReasoningEffort + zhipuPreservedThinking only since thinking is forced; leftover fetched glm-4.7* get Preserved Thinking only, with no enable/disable switch), and Kimi K2.7 Code / K3 intentionally get no toggle because thinking/preserved reasoning is forced by the provider. OpenAI-compatible clones gpt-6-astra, gpt-6.1-sol, gpt-5.6-sol, and gpt-5.5 (not Terra/Luna).

Legacy Sampling Controls

Generic sampling controls (temperature, top_p, frequency_penalty, presence_penalty) are intentionally not exposed in the chat toolbar. OpenAI and Moonshot request paths strip these legacy fields before provider calls so undocumented or unsupported defaults cannot leak into reasoning/tool-call payloads. Provider-specific controls should be added only through documented model gear panels and settings.extendParams.

MiniMax Context Trimming

Heavy tool/plugin payloads can exceed MiniMax's effective input budget. Before the provider call, trimMinimaxChatContext (src/services/chat/trimMinimaxContext.ts) estimates size for messages + tools, derives a safe input budget from the model card, and drops oldest user/assistant turns until the estimate fits. This reduces bad_request_error / "context window exceeds limit (2013)".

Clone this wiki locally