mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-10-25 17:54:34 +08:00
Adds a lightbulb button next to the model switcher in ChatStatusBar that lets users choose the thinking intensity for each reasoning model, with the choice remembered per model slot (configId:modelId). Key changes: - packages/core/src/ai/thinking.ts (new): per-model-type thinking level table inspired by cherry-studio's MODEL_SUPPORTED_REASONING_EFFORT. Covers Qwen/GLM (on/off), DeepSeek V4 (high/max), o-series (low/medium/high), gpt-5.x (minimal–xhigh), Kimi/Doubao/Grok and a default bucket. Exports getSupportedThinkingLevels, isReasoningModel, getThinkingCompat. - packages/node-runtime/src/ai/llm-builder.ts: inferReasoning now calls getThinkingCompat() which sets compat.supportsReasoningEffort and compat.thinkingLevelMap so pi-ai can inject the correct request param (reasoning_effort for OpenAI/DeepSeek, enable_thinking for Qwen/GLM). - packages/node-runtime/src/ai/agent/types.ts + core.ts: AgentCoreOptions gains an optional thinkingLevel; core.ts:93 uses clampThinkingLevel() (from pi-ai) to honour it safely. - Full transparent pass-through: desktop Agent → IPC handler → preload → agentApi.runStream; CLI HTTP route → runServerAgent → runAgentCore. - src/stores/prompt.ts: thinkingLevels Record<configId:modelId, ThinkingLevel> persisted in backendPersist; getThinkingLevel/ setThinkingLevel helpers. - src/stores/aiChat.ts: reads current model slot and passes remembered level to both sendMessage and editCurrentRoundOnly runStream calls. - ChatStatusBar.vue: UPopover thinking selector appears only for reasoning models, shows only the levels that model supports, highlights current choice, hides for non-reasoning models. - 46 tests passing (26 new in thinking.test.ts + 20 in llm-builder). Scope: openai-completions path only (Qwen, DeepSeek, OpenAI, xAI, Kimi, Doubao, SiliconFlow, OpenRouter…). Anthropic/Gemini native thinking is out of scope for this version. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>