Skip to content

fix(llm): 通过 LM Studio preset 控制思考 - #1009

Merged
H-Chris233 merged 3 commits into
Open-Less:betafrom
lededev:ScrLk
Sep 13, 2026
Merged

H-Chris233 merged 3 commits into
Open-Less:betafrom
lededev:ScrLk

Conversation

@lededev

@lededev lededev commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

新增显式的 LM Studio LLM preset,让思考开关按用户选择的渠道生效。默认地址为 http://localhost:1234/v1,允许修改地址和端口,API Key 可选,模型通过手填或获取列表选择;固定使用 Chat Completions。

思考控制由 Core 统一构造:关闭时发送 chat_template_kwargs.enable_thinking=falsereasoning_effort="none"reasoning.type="disabled";开启时仅发送 chat_template_kwargs.enable_thinking=true。不根据端口、HTTP 或局域网地址推断 LM Studio,已有 custom 渠道需要手动切换 preset,并保留地址、模型和密钥。此次仅增加 LLM preset,不扩展 Omni。

同时允许模型名为空时获取模型列表;连接测试和生成仍要求配置模型,地址及鉴权检查继续保留。

验证

  • 合入最新 beta 后,Core 的 polish、llm_protocol、provider_rules、provider_service、cloud_providers 模块共 150 项测试通过,覆盖流式/非流式请求、无 Key/有 Key、preset 切换及遗留协议配置。
  • 4 个前端测试通过,npm run buildgit diff --check 通过。
  • 浏览器预览已验证默认地址、可选 Key、固定协议、思考开关,以及重新打开和切换 preset 时的配置保留。
  • 真实模型效果尚未验证:本机 LM Studio 0.4.18 未安装原报告的 Gemma 模型。请求测试仅证明参数已发送,不能据此认定服务端确实关闭了思考。

摘要
通过 LM Studio 的 OpenAI 兼容接口接入 Gemma 4 12B 时,openless 默认「关闭思考」,但模型仍输出长思维链——UI 开关无效。根因是 LM Studio(llama.cpp 系服务)里 Gemma 4 等思考模型的 chat template 默认 enable_thinking=true:不下发参数不会关,必须显式下发关闭参数才生效;而现有 thinking 控制策略只按厂商域名关键字识别(minimax/deepseek/openrouter/dashscope/stepfun),本地服务无厂商域名,落入 None 分支一个 thinking 参数都不发,行为完全由模型侧默认值决定——恰好是「开」。
本 PR 新增 LmStudioThinking 策略:按 LM Studio 默认端口 1234(另登记 provider_id "lmstudio")识别该场景,显式下发 chat_template_kwargs.enable_thinking=false 关闭思考,并附两个 OpenAI 风格字段多重兜底。
修复 / 新增 / 改进
- 新增 ThinkingControl::LmStudioThinking:关闭时(openless 默认态)下发 chat_template_kwargs.enable_thinking=false + reasoning_effort="none" + reasoning.type="disabled" 三件套显式关掉 Gemma 4 12B 的默认思考(LM Studio/llama.cpp 均接受,多重兜底);用户手动开启时只显式发 enable_thinking=true,不附带后两个关闭字段。
- 识别逻辑:base_url 提取的 host 以 :1234 结尾即命中(LM Studio 默认服务端口,带冒号前缀匹配避免误伤 12345/12340 等端口);同时在已知列表登记 provider_id "lmstudio",将来若新增专属 preset 自动生效。
- doc 注释更新:openai_compatible_thinking_control_for_base_url 命中策略说明改为「厂商关键字 + 本地服务按端口」,并写明自定义端口无法自动识别的局限。
- 测试:4 个新回归用例(默认端口关闭时三字段齐全、开启时仅 enable_thinking=true、尾斜杠//v1 后缀/LAN IP 变体均命中、端口 12345 不误命中),另在既有 unknown-provider 用例补断言 chat_template_kwargs 不存在,防新策略误触发。
- 未改动:各厂商(MiniMax/DeepSeek/OpenRouter/DashScope/StepFun)thinking 参数逻辑、chat body 结构、超时预算。
兼容
- 不包含:不新增 "lmstudio" preset;用户修改 LM Studio 端口后无法自动识别(已写入注释),此时需自行确认模型侧思考默认值。
- 对现有用户 / 本地环境 / 构建流程的影响:无。仅对命中 :1234 的请求多带三个 thinking 控制字段,非思考模型忽略即可;其余 provider 行为不变。
- 改动量:单文件 openless-all/app/src-tauri/src/polish.rs,生产代码净增约 24 行(含注释/文档),测试净增 87 行。
测试计划
- 命令:cargo test --manifest-path src-tauri/Cargo.toml --lib(在 openless-all/app 下运行)
- 结果:5/5通过
- 反向验证:移除 :1234 分支后默认端口及变体用例如期失败;把关闭态三字段减为仅 enable_thinking 则三字段断言失败;若匹配放宽到不含冒号前缀,12345 防误伤用例即被打破
- 证据路径:本地终端输出,未落盘到仓库
@lededev lededev changed the title fix (polish): LM Studio默认对Gemma 4 12B开启思考,需要显式关闭它 fix(polish): LM Studio默认对Gemma 4 12B开启思考,需要显式关闭它 Aug 26, 2026
@H-Chris233

Copy link
Copy Markdown
Collaborator

所以所有1234端口的服务都被包含在内...

@lededev

lededev commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

所以所有1234端口的服务都被包含在内...

当然不是所有的,必须是填写在这个软件的LLM配置里的。远程的一般用https的默认443端口,不用指定端口。

要不,把条件改宽一点?对所有http://开头的不加密,且设置了端口号:xxxx/的都认定为本地大模型的请求?

@H-Chris233

Copy link
Copy Markdown
Collaborator

我认为可以加preset,然后这个preset下所有请求以LM studio对待

@H-Chris233

Copy link
Copy Markdown
Collaborator

先转换为draft,等待作者回复

@H-Chris233 H-Chris233 self-assigned this Sep 7, 2026
@H-Chris233
H-Chris233 marked this pull request as draft September 7, 2026 16:34
@H-Chris233
H-Chris233 marked this pull request as ready for review September 13, 2026 10:12
@H-Chris233

Copy link
Copy Markdown
Collaborator

作者不回复,接管

@H-Chris233 H-Chris233 changed the title fix(polish): LM Studio默认对Gemma 4 12B开启思考,需要显式关闭它 fix(llm): 通过 LM Studio preset 控制思考 Sep 13, 2026
@H-Chris233
H-Chris233 merged commit ef78a09 into Open-Less:beta Sep 13, 2026
4 checks passed
@lededev

lededev commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

这样改其实是把功能收窄了,因为这个修改对于SGLang也适用。
Qwen3.8 27B在SGLang下也默认开着思考,需要关掉。
新出的MiniCPM5 2B也在LM Studio和SGLang下同样方式关思考。
至于ollama我没安装,不清楚是否需要额外匹配。

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.

2 participants