feat(provider): 支持智谱 GLM Coding Plan - #9852
Conversation
There was a problem hiding this comment.
Hey - I've found 1 issue
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="astrbot/core/provider/sources/zhipu_coding_plan_source.py" line_range="81-82" />
<code_context>
+ provider_settings: dict,
+ ) -> None:
+ merged_provider_config = dict(provider_config)
+ merged_provider_config.setdefault("api_base", ZHIPU_CODING_PLAN_API_BASE)
+ merged_provider_config.setdefault("model", ZHIPU_CODING_PLAN_DEFAULT_MODEL)
+
+ configured_extra_body = merged_provider_config.get("custom_extra_body")
</code_context>
<issue_to_address>
**issue (bug_risk):** The Coding API defaults are applied with `setdefault`, so an explicitly present empty `api_base` or `model` is preserved. An empty `api_base` makes `AsyncOpenAI` target its ordinary OpenAI default endpoint rather than the Coding API, and an empty model produces an invalid Coding API request.
**Triggers:** When an existing or manually edited provider configuration contains `api_base: ""` or `model: ""`.
**Suggested fix:** Apply the Coding defaults when the values are missing or blank, for example with `if not merged_provider_config.get("api_base")` and the equivalent model check.
```suggestion
if not merged_provider_config.get("api_base"):
merged_provider_config["api_base"] = ZHIPU_CODING_PLAN_API_BASE
if not merged_provider_config.get("model"):
merged_provider_config["model"] = ZHIPU_CODING_PLAN_DEFAULT_MODEL
```
</issue_to_address>Sourcery assessment
Approval pending. 1 finding to address first.
Blocking findings: astrbot/core/provider/sources/zhipu_coding_plan_source.py:82
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
| merged_provider_config.setdefault("api_base", ZHIPU_CODING_PLAN_API_BASE) | ||
| merged_provider_config.setdefault("model", ZHIPU_CODING_PLAN_DEFAULT_MODEL) |
There was a problem hiding this comment.
issue (bug_risk): The Coding API defaults are applied with setdefault, so an explicitly present empty api_base or model is preserved. An empty api_base makes AsyncOpenAI target its ordinary OpenAI default endpoint rather than the Coding API, and an empty model produces an invalid Coding API request.
Triggers: When an existing or manually edited provider configuration contains api_base: "" or model: "".
Suggested fix: Apply the Coding defaults when the values are missing or blank, for example with if not merged_provider_config.get("api_base") and the equivalent model check.
| merged_provider_config.setdefault("api_base", ZHIPU_CODING_PLAN_API_BASE) | |
| merged_provider_config.setdefault("model", ZHIPU_CODING_PLAN_DEFAULT_MODEL) | |
| if not merged_provider_config.get("api_base"): | |
| merged_provider_config["api_base"] = ZHIPU_CODING_PLAN_API_BASE | |
| if not merged_provider_config.get("model"): | |
| merged_provider_config["model"] = ZHIPU_CODING_PLAN_DEFAULT_MODEL |
现有智谱 Provider 使用通用 API。GLM Coding Plan 的套餐额度只通过专用 Coding API 提供,手工替换地址后还会遇到模型列表接口不可用、推理参数与模型版本不匹配等问题。
关联 #7109。
Modifications / 改动点
zhipu_coding_plan_chat_completionProvider,保留现有智谱通用 API Provider。reasoning_effort。low、high、max,默认max;GLM-5.2 保留off、high、max语义,并保留显式thinking.enabled设置。tool_stream=true,并覆盖工具参数分片组装测试。Screenshots or Test Results / 运行截图或测试结果
另使用现有 Coding Plan 密钥执行了实际 Provider 最小请求:国内 Coding API 返回 HTTP 200,AstrBot 成功解析响应并取得 token usage;请求未配置 OpenClaw 标识。密钥和响应正文均未写入测试日志。
Checklist / 检查清单
/ 如果 PR 中有新加入的功能,已经通过 Issue / 邮件等方式和作者讨论过。
/ 我的更改经过了良好的测试,并已在上方提供了“验证步骤”和“运行截图”。
requirements.txtandpyproject.toml./ 我确保没有引入新依赖库,或者引入新依赖库的同时将其添加到
requirements.txt和pyproject.toml文件相应位置。/ 我的更改没有引入恶意代码。
Summary by Sourcery
Add a separate Zhipu GLM Coding Plan provider with model-aware request handling and streaming tool support without changing the existing Zhipu integration.
New Features:
Enhancements:
Tests: