Skip to content

Commit be561c9

Browse files
authored
Merge pull request #716 from code-yeongyu/fix/release-groq-qwen36-catalog
fix(ai): follow Groq Qwen 3.6 catalog
2 parents 9038d02 + 57dba72 commit be561c9

9 files changed

Lines changed: 53 additions & 6 deletions

File tree

packages/ai/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010

1111
### Fixed
1212

13+
- Fixed strict release-time model regeneration after Groq replaced `qwen/qwen3-32b` with
14+
`qwen/qwen3.6-27b`: the active multimodal model now receives Groq's documented
15+
`reasoning_effort` compatibility (`off` to `none`, thinking mode to `default`), the typed request regression
16+
follows the replacement catalog ID, and reviewed provider snapshots are refreshed so live generation no longer
17+
breaks root TypeScript validation before a release can be committed
18+
([#716](https://github.com/code-yeongyu/senpi/pull/716)).
19+
1320
### Removed
1421

1522
## [2026.8.4] - 2026-08-04

packages/ai/changes.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,40 @@
11
# changes.md — ai
22

3+
## Follow Groq Qwen catalog replacement during generation (2026-08-04)
4+
5+
### What changed
6+
7+
- `scripts/generate-models.ts`: moved the Groq Qwen reasoning-level compatibility override from the removed
8+
`qwen/qwen3-32b` catalog entry to the active multimodal `qwen/qwen3.6-27b` replacement.
9+
- `test/openai-completions-tool-choice.test.ts`: moved the focused `reasoning_effort` request regression to the
10+
same generated model ID.
11+
- `src/providers/data/*.json`: refreshed the reviewed live provider snapshots so strict release generation and
12+
checked-in model-ID types agree.
13+
14+
### Why
15+
16+
- models.dev removed Qwen 3.2 after Groq's first-party model endpoint replaced it with Qwen 3.6. The release
17+
generator therefore removed the old typed ID, while the compatibility regression still referenced it, causing
18+
the `2026.8.4-2` release to fail during root TypeScript validation before any commit or tag was created.
19+
- Groq documents Qwen 3.6 thinking mode as `reasoning_effort: "default"` and non-thinking mode as `"none"`, so
20+
the existing compatibility mapping remains required on the replacement model.
21+
22+
### Why this cannot be expressed as an extension
23+
24+
- Model inventory and provider-specific reasoning metadata are generated before the coding-agent extension runtime
25+
loads, and the typed built-in model IDs are consumed by the AI package itself.
26+
27+
### Modified upstream files
28+
29+
- `scripts/generate-models.ts`
30+
- `test/openai-completions-tool-choice.test.ts`
31+
- `src/providers/data/*.json`
32+
33+
### Expected merge conflict zones
34+
35+
- MEDIUM: the Groq branch of `applyThinkingLevelMetadata()` when upstream changes Qwen reasoning controls.
36+
- MEDIUM: generated provider JSON whenever models.dev, OpenRouter, or OpenCode metadata changes again.
37+
338
## OpenAI compatibility resolver merge repair (2026-08-01)
439

540
### What changed

packages/ai/scripts/generate-models.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,7 @@ function applyThinkingLevelMetadata(model: Model<any>): void {
911911
if (isGoogleThinkingApi(model) && isGemma4Model(model.id)) {
912912
mergeThinkingLevelMap(model, { off: null, minimal: "MINIMAL", low: null, medium: null, high: "HIGH" });
913913
}
914-
if (model.provider === "groq" && model.id === "qwen/qwen3-32b") {
914+
if (model.provider === "groq" && model.id === "qwen/qwen3.6-27b") {
915915
mergeThinkingLevelMap(model, { minimal: null, low: null, medium: null, high: "default" });
916916
}
917917
if (model.provider === "openai-codex" && supportsOpenAiXhigh(model.id)) {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"schemaVersion":3,"generatedAt":"2026-08-04T09:33:14.315Z","structureHash":"6ee5eafd6bc28b342db328a6addc9bf6395b6c5c3690d188f691490cb0ebd0ad","files":{"alibaba-token-plan.json":"e84668baa90b6ea64fbd9a5192bd3945c5011bc79ac2b4f3e7b3b58467d4403d","amazon-bedrock.json":"d0a215122f81e4497ef45a5f65fd8df067fd22103f10049ad77f4e2f4f10edb4","ant-ling.json":"4979fe79d99ed97382d7ce40170c6132e932e77906de1eb54464c042e7d63633","anthropic.json":"507e001822a65921f50e3d355545435a6427ed079dc1ca91028a448f62d37c5c","azure-openai-responses.json":"5315b6a2299fefbdbb6cc13a720544077c9498132ad5e3a7d76a8c1daa8e9335","cerebras.json":"3fd3e19b83ab4be07d27817e25e5be0ffe4158b1394f0311d6a22d9f03847728","cloudflare-ai-gateway.json":"cd050aa8cf61b73b13d532341639e1d0f22fd29d8a889ca669d412cd4b477d45","cloudflare-workers-ai.json":"03b19d69433c843512e953390d51d4578e9b91f19098a9b14ff820c001623598","deepseek.json":"0dcc807a4e5827b488c6ceac87884ff6e735e01cf4f2ddfec9dd812e6fde041b","fireworks.json":"0e10df29511e70b6987cbe27d8d1222c2c5f63b6ddb66c2401a2990a61a5999e","github-copilot.json":"08fd4f44d648f812ea4eeb2aed3e5fbbe08f482afbb51ef64eac1c8ee414f2f9","google-vertex.json":"99d0b89ac9d8dc460ed922236abffbe88c9381af4d35046d2ad3a8f08fa2560c","google.json":"bcf8a8d59ccbb75bc6fb4a261a37ac4b7c806f40ee7313b4411178964be5fa37","groq.json":"868c90a897f75f866e09a585f6aee5cb991e40a9c3281497b5842a23de7d9add","huggingface.json":"c5e6e5a9a273f3829160b66ca41d7b400e1bd9e75b44364040962c69f38ba1e2","kimi-coding.json":"9d73ca15313628bb8cf80c21e6466164e350d68471e2d7205b5e21bcd2c141f3","minimax-cn.json":"8ccd71ff838f4b78bb88809babb0dc32a4fcfaec2bc4f4083841000428df4f77","minimax.json":"253edd4c910a41c8bb252400ba099f3a4de0a8900ce154319288ab091b372987","mistral.json":"4f9d84bf1ba10cb14ff2c9e23e77d63441756ef3500375dd4ad10094614b215b","moonshotai-cn.json":"1e6146ff3477883636448c0f44222f0a52b3c4562ef8f4eecf7e941cdd59d12e","moonshotai.json":"d8d5209873058ddccd37c1f026833e2ea3f9476c3dc9628b4a940d407acc0b2e","nvidia.json":"33c498ab62940fe9ca659826c35cc922a77938a5f7edbe4443c10d9133323e87","openai-codex.json":"4a73818291987693fcb53e9e61b4be3429ffd78b3f64ea877a34c5f9928c89e1","openai.json":"2c5d2354c55a80671f20f555844986ab381fee93da26e03c0e42cbae77b519a5","opencode-go.json":"5e6d8256e3b3db2ee3f6783763b8e72b415612f1aa4acf6a305cea51888dde85","opencode.json":"5c6033bbcb9b952d0be6aafd6decdeaed297b8020dcb995b51026298f01912a8","openrouter.json":"dbcdda54397446625f00759e6eedee7b32ec657a68aeb321a18d908078e9eb84","qwen-token-plan-cn.json":"cc345d44c31b0ba3b1b244f8b56342ede6657584653f3af176026bf8dbb37cd5","qwen-token-plan.json":"12c43b2b8032e1b64222616588daf400156f3819be4de3124fc997a69eccbda8","together.json":"c01b9a0790a0d4bc442953a9e66d733a5a058cc7b82826aa58a2946a7012d416","vercel-ai-gateway.json":"22fdd5ec26f97df10313b4f818fdbf056ecbdade6f36eda759b87105876f0bc1","xai.json":"4cbdbfbbf915246369b9bacbc6f1feeb56accdac9f3444456343f750547f2f38","xiaomi-token-plan-ams.json":"b1886b741867c90a838c377e86ad64b26ca6b0e349f1a75bc5fd4ed99df03c21","xiaomi-token-plan-cn.json":"11f459b794eddd64a9d9d102f2799c364732b7f0d562e22573f4995a5d1e1a30","xiaomi-token-plan-sgp.json":"0b9953d03b75260aba0ad604cc76d7ed26d6841448819e8c7488bf0d90948d2c","xiaomi.json":"edf39e0edd9dcae23e669635ea782e5870c0b9663d4b918b8ff9bd307cfe35f8","zai-coding-cn.json":"c2d1e137238b6f248b5f620f76b64520aa2ba1543e991dd0d14b708e50c8cd66","zai.json":"cb48b354442f1e49919cd93b928216d5d881d2f98a55349ad592a8e68bb8e6c3"}}
1+
{"schemaVersion":3,"generatedAt":"2026-08-04T22:15:39.646Z","structureHash":"039213608f9f2efbb0feb6c2132e42df562561c03ee42a7fabbca1aa304497d4","files":{"alibaba-token-plan.json":"e84668baa90b6ea64fbd9a5192bd3945c5011bc79ac2b4f3e7b3b58467d4403d","amazon-bedrock.json":"d0a215122f81e4497ef45a5f65fd8df067fd22103f10049ad77f4e2f4f10edb4","ant-ling.json":"4979fe79d99ed97382d7ce40170c6132e932e77906de1eb54464c042e7d63633","anthropic.json":"507e001822a65921f50e3d355545435a6427ed079dc1ca91028a448f62d37c5c","azure-openai-responses.json":"5315b6a2299fefbdbb6cc13a720544077c9498132ad5e3a7d76a8c1daa8e9335","cerebras.json":"3fd3e19b83ab4be07d27817e25e5be0ffe4158b1394f0311d6a22d9f03847728","cloudflare-ai-gateway.json":"cd050aa8cf61b73b13d532341639e1d0f22fd29d8a889ca669d412cd4b477d45","cloudflare-workers-ai.json":"03b19d69433c843512e953390d51d4578e9b91f19098a9b14ff820c001623598","deepseek.json":"0dcc807a4e5827b488c6ceac87884ff6e735e01cf4f2ddfec9dd812e6fde041b","fireworks.json":"0e10df29511e70b6987cbe27d8d1222c2c5f63b6ddb66c2401a2990a61a5999e","github-copilot.json":"08fd4f44d648f812ea4eeb2aed3e5fbbe08f482afbb51ef64eac1c8ee414f2f9","google-vertex.json":"99d0b89ac9d8dc460ed922236abffbe88c9381af4d35046d2ad3a8f08fa2560c","google.json":"bcf8a8d59ccbb75bc6fb4a261a37ac4b7c806f40ee7313b4411178964be5fa37","groq.json":"f1eb899453e70b5e4479fe6eb78869ee99121fa6d4a019a5a05ab42d2ada8992","huggingface.json":"c5e6e5a9a273f3829160b66ca41d7b400e1bd9e75b44364040962c69f38ba1e2","kimi-coding.json":"9d73ca15313628bb8cf80c21e6466164e350d68471e2d7205b5e21bcd2c141f3","minimax-cn.json":"8ccd71ff838f4b78bb88809babb0dc32a4fcfaec2bc4f4083841000428df4f77","minimax.json":"253edd4c910a41c8bb252400ba099f3a4de0a8900ce154319288ab091b372987","mistral.json":"4f9d84bf1ba10cb14ff2c9e23e77d63441756ef3500375dd4ad10094614b215b","moonshotai-cn.json":"1e6146ff3477883636448c0f44222f0a52b3c4562ef8f4eecf7e941cdd59d12e","moonshotai.json":"d8d5209873058ddccd37c1f026833e2ea3f9476c3dc9628b4a940d407acc0b2e","nvidia.json":"33c498ab62940fe9ca659826c35cc922a77938a5f7edbe4443c10d9133323e87","openai-codex.json":"4a73818291987693fcb53e9e61b4be3429ffd78b3f64ea877a34c5f9928c89e1","openai.json":"2c5d2354c55a80671f20f555844986ab381fee93da26e03c0e42cbae77b519a5","opencode-go.json":"5e6d8256e3b3db2ee3f6783763b8e72b415612f1aa4acf6a305cea51888dde85","opencode.json":"fc9d2e4a18ea879b8f14a044aa9fa5808a7043fb249dba4cea3df575c0b66bd8","openrouter.json":"7b78f5971a868543e97c3d9155f17932c503a6892b7474697b4a44869267760b","qwen-token-plan-cn.json":"cc345d44c31b0ba3b1b244f8b56342ede6657584653f3af176026bf8dbb37cd5","qwen-token-plan.json":"12c43b2b8032e1b64222616588daf400156f3819be4de3124fc997a69eccbda8","together.json":"c01b9a0790a0d4bc442953a9e66d733a5a058cc7b82826aa58a2946a7012d416","vercel-ai-gateway.json":"22fdd5ec26f97df10313b4f818fdbf056ecbdade6f36eda759b87105876f0bc1","xai.json":"4cbdbfbbf915246369b9bacbc6f1feeb56accdac9f3444456343f750547f2f38","xiaomi-token-plan-ams.json":"b1886b741867c90a838c377e86ad64b26ca6b0e349f1a75bc5fd4ed99df03c21","xiaomi-token-plan-cn.json":"11f459b794eddd64a9d9d102f2799c364732b7f0d562e22573f4995a5d1e1a30","xiaomi-token-plan-sgp.json":"0b9953d03b75260aba0ad604cc76d7ed26d6841448819e8c7488bf0d90948d2c","xiaomi.json":"edf39e0edd9dcae23e669635ea782e5870c0b9663d4b918b8ff9bd307cfe35f8","zai-coding-cn.json":"c2d1e137238b6f248b5f620f76b64520aa2ba1543e991dd0d14b708e50c8cd66","zai.json":"cb48b354442f1e49919cd93b928216d5d881d2f98a55349ad592a8e68bb8e6c3"}}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"openai-completions":{"llama-3.1-8b-instant":{"id":"llama-3.1-8b-instant","name":"Llama 3.1 8B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.08,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":131072},"llama-3.3-70b-versatile":{"id":"llama-3.3-70b-versatile","name":"Llama 3.3 70B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":false,"input":["text"],"cost":{"input":0.59,"output":0.79,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":32768},"meta-llama/llama-4-scout-17b-16e-instruct":{"id":"meta-llama/llama-4-scout-17b-16e-instruct","name":"Llama 4 Scout 17B 16E","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":false,"input":["text","image"],"cost":{"input":0.11,"output":0.34,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":8192},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":true,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.075,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":true,"input":["text"],"cost":{"input":0.075,"output":0.3,"cacheRead":0.0375,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"Safety GPT OSS 20B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":true,"input":["text"],"cost":{"input":0.075,"output":0.3,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}},"qwen/qwen3-32b":{"id":"qwen/qwen3-32b","name":"Qwen3-32B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":true,"input":["text"],"cost":{"input":0.29,"output":0.59,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":40960,"thinkingLevelMap":{"off":"none","minimal":null,"low":null,"medium":null,"high":"default","xhigh":null,"max":null}}}}
1+
{"openai-completions":{"llama-3.1-8b-instant":{"id":"llama-3.1-8b-instant","name":"Llama 3.1 8B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":false,"input":["text"],"cost":{"input":0.05,"output":0.08,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":131072},"llama-3.3-70b-versatile":{"id":"llama-3.3-70b-versatile","name":"Llama 3.3 70B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":false,"input":["text"],"cost":{"input":0.59,"output":0.79,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":32768},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":true,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.075,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":true,"input":["text"],"cost":{"input":0.075,"output":0.3,"cacheRead":0.0375,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"Safety GPT OSS 20B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":true,"input":["text"],"cost":{"input":0.075,"output":0.3,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}},"qwen/qwen3.6-27b":{"id":"qwen/qwen3.6-27b","name":"Qwen3.6 27B","api":"openai-completions","provider":"groq","baseUrl":"https://api.groq.com/openai/v1","reasoning":true,"input":["text","image"],"cost":{"input":0.6,"output":3,"cacheRead":0.3,"cacheWrite":0},"contextWindow":131072,"maxTokens":16384,"thinkingLevelMap":{"off":"none","minimal":null,"low":null,"medium":null,"high":"default","xhigh":null,"max":null}}}}

packages/ai/src/providers/data/opencode.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

packages/ai/src/providers/data/openrouter.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

packages/ai/test/openai-completions-tool-choice.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ describe("openai-completions tool_choice", () => {
276276
});
277277

278278
it("maps groq qwen3 reasoning levels to default reasoning_effort", async () => {
279-
const model = getModel("groq", "qwen/qwen3-32b")!;
279+
const model = getModel("groq", "qwen/qwen3.6-27b")!;
280280
let payload: unknown;
281281

282282
await streamSimple(

packages/coding-agent/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717

1818
### Fixed
1919

20+
- Fixed release preparation failing after Groq replaced `qwen/qwen3-32b` with the multimodal
21+
`qwen/qwen3.6-27b`: Senpi's generated model catalog and typed request regression now follow the active model,
22+
preserve Groq's `none`/`default` reasoning controls, and include the reviewed live provider metadata refresh so
23+
`senpi --list-models` and release-time validation agree
24+
([#716](https://github.com/code-yeongyu/senpi/pull/716)).
2025
- Fixed Claude SDK OAuth full-history re-sends repeatedly billing accumulated `<ultrawork-mode>` directives by
2126
post-processing both resident flatten/bootstrap prompts and the non-resident full-prompt path: every earlier
2227
complete directive becomes a one-line superseded marker while the most recent copy, surrounding text, non-text

0 commit comments

Comments
 (0)