ai-consultants 2.10.4 → 2.10.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CLAUDE.md CHANGED
@@ -6,7 +6,7 @@ AI Consultants is a multi-model AI deliberation system that queries up to 15 AI
6
6
 
7
7
  **Self-Exclusion**: The invoking agent is automatically excluded from the panel to prevent self-consultation. Claude Code won't query Claude, Codex CLI won't query Codex, etc.
8
8
 
9
- **Version**: 2.10.4
9
+ **Version**: 2.10.8
10
10
 
11
11
  ## Distribution
12
12
 
@@ -414,9 +414,9 @@ Three tiers of models are available for each consultant, configurable via `apply
414
414
 
415
415
  | Tier | Description | Example Models |
416
416
  |------|-------------|----------------|
417
- | **premium** | Latest flagship models | opus-4.6, gemini-3.1-pro-preview, gpt-5.3-codex |
418
- | **standard** | Good quality at reasonable cost | sonnet-4.6, gemini-3-flash-preview, gpt-5.3 |
419
- | **economy** | Optimized for speed and low cost | haiku-4.5, gemini-2.0-flash, gpt-4o-mini |
417
+ | **premium** | Latest flagship models | claude-opus-4-7, gemini-3.1-pro-preview, gpt-5.5 |
418
+ | **standard** | Good quality at reasonable cost | claude-sonnet-4-6, gemini-3-flash-preview, gpt-5.3 |
419
+ | **economy** | Optimized for speed and low cost | claude-haiku-4-5, gemini-2.0-flash, gpt-4o-mini |
420
420
 
421
421
  **Default models are now premium tier** for maximum quality.
422
422
 
@@ -429,7 +429,7 @@ apply_model_tier "economy" # Set all consultants to economy models
429
429
 
430
430
  # Get model for a specific consultant and tier (v2.8.1)
431
431
  get_model_for_tier "gemini" "premium" # → gemini-3.1-pro-preview
432
- get_model_for_tier "claude" "economy" # → haiku-4.5
432
+ get_model_for_tier "claude" "economy" # → claude-haiku-4-5
433
433
  ```
434
434
 
435
435
  ### Quality Tier Presets
@@ -451,17 +451,17 @@ All consultants now use premium models by default:
451
451
 
452
452
  | Consultant | Default Model |
453
453
  |------------|---------------|
454
- | Claude | opus-4.6 |
454
+ | Claude | claude-opus-4-7 |
455
455
  | Gemini | gemini-3.1-pro-preview |
456
- | Codex | gpt-5.3-codex |
456
+ | Codex | gpt-5.5 |
457
457
  | Mistral | mistral-large-3 |
458
- | Cursor | composer-1.5 |
459
- | DeepSeek | deepseek-reasoner |
458
+ | Cursor | composer-2 |
459
+ | DeepSeek | deepseek-v4-pro |
460
460
  | GLM | glm-5.1 |
461
- | Grok | grok-4.20-0309-reasoning |
462
- | Qwen3 | qwen3.5-plus |
461
+ | Grok | grok-4.3 |
462
+ | Qwen3 | qwen3.6-plus |
463
463
  | Kimi | kimi-code/kimi-for-coding |
464
- | Aider | gpt-5.3-codex |
464
+ | Aider | nvidia/nemotron-3-super-120b-a12b:free |
465
465
  | MiniMax | MiniMax-M2.7 |
466
466
  | Kilo | auto |
467
467
  | Ollama | qwen2.5-coder:32b |
@@ -653,9 +653,9 @@ for f in scripts/*.sh scripts/lib/*.sh; do bash -n "$f" && echo "OK: $f"; done
653
653
  | `PANIC_CONFIDENCE_THRESHOLD` | 5 | Panic threshold (v2.2) |
654
654
  | `ENABLE_OLLAMA` | false | Local model support (v2.2) |
655
655
  | `OLLAMA_MODEL` | qwen2.5-coder:32b | Ollama model (v2.5 - premium default) |
656
- | `CLAUDE_MODEL` | opus-4.6 | Claude model (v2.5) |
656
+ | `CLAUDE_MODEL` | claude-opus-4-7 | Claude model (v2.5) |
657
657
  | `GEMINI_MODEL` | gemini-3.1-pro-preview | Gemini model (v2.5) |
658
- | `CODEX_MODEL` | gpt-5.3-codex | Codex model (v2.5) |
658
+ | `CODEX_MODEL` | gpt-5.5 | Codex model (v2.5) |
659
659
  | `MISTRAL_MODEL` | mistral-large-3 | Mistral model (v2.5) |
660
660
  | `SYNTHESIS_STRATEGY` | majority | Synthesis strategy (v2.2) |
661
661
  | `ENABLE_SEMANTIC_CACHE` | true | Semantic response caching (v2.3) |
@@ -802,6 +802,35 @@ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/s
802
802
 
803
803
  ## Changelog
804
804
 
805
+ ### v2.10.8
806
+ - Fixed `docs/cost_rates.json` drift introduced by v2.10.6: `consultant_fallbacks` (used at runtime by `lib/costs.sh`) and `model_tiers` were still pointing at the old IDs (`opus-4.6`, `gpt-5.3-codex`, `composer-1.5`, `deepseek-reasoner`, `sonnet-4.6`, `haiku-4.5`)
807
+ - Added price entries for the v2.10.6 model IDs: `claude-opus-4-7`, `claude-sonnet-4-6`, `claude-haiku-4-5`, `gpt-5.5`, `composer-2`, `deepseek-v4-pro`, `nvidia/nemotron-3-super-120b-a12b:free`
808
+ - Moved superseded IDs to the legacy section so cost calculation still works for historical responses or pinned overrides
809
+ - Synced `COST_RATES.md` tables to match
810
+ - Pricing for `nvidia/nemotron-3-super-120b-a12b:free` set to $0/$0 (OpenRouter free tier)
811
+
812
+ ### v2.10.7
813
+ - Grok premium upgraded from `grok-4.20-0309-reasoning` to `grok-4.3` (released 2026-04-30)
814
+ - ~75% cheaper input ($1.25/M vs $5.00/M) and ~83% cheaper output ($2.50/M vs $15.00/M)
815
+ - 1M-token context window
816
+ - Moved `grok-4.20-0309-reasoning` to legacy section in cost catalog
817
+ - Standard (`grok-3`) and economy (`grok-3-mini`) tiers unchanged
818
+
819
+ ### v2.10.6
820
+ - Codex premium upgraded from `gpt-5.3-codex` to `gpt-5.5`
821
+ - Cursor premium upgraded from `composer-1.5` to `composer-2`
822
+ - Aider switched provider: `gpt-5.3-codex` → `nvidia/nemotron-3-super-120b-a12b:free` (free tier)
823
+ - DeepSeek premium upgraded from `deepseek-reasoner` to `deepseek-v4-pro`
824
+ - Claude IDs migrated from short aliases to canonical model IDs across all tiers: `opus-4.6` → `claude-opus-4-7`, `sonnet-4.6` → `claude-sonnet-4-6`, `haiku-4.5` → `claude-haiku-4-5`
825
+ - Fixed Kilo SIGPIPE abort under `set -euo pipefail` (replaced `head -c` with parameter expansion)
826
+
827
+ ### v2.10.5
828
+ - Qwen3 premium model upgraded from `qwen3.5-plus` to `qwen3.6-plus` ($0.325/$1.95 per M tokens)
829
+ - Qwen3 standard tier now uses open-weight `qwen3.6-35b-a3b` (MoE, 35B total / 3B active)
830
+ - Refactored `get_economic_model()` to delegate to `get_model_for_tier()`, eliminating stale hardcoded mappings
831
+ - Moved `qwen3.5-plus` to legacy section in cost catalog
832
+ - Fixed `AI_CONSULTANTS_VERSION` in `config.sh` (was stuck at `2.10.0`)
833
+
805
834
  ### v2.10.4
806
835
  - GLM premium/standard model upgraded from `glm-5` to `glm-5.1`
807
836
  - Fixed Kilo CLI hanging indefinitely in non-TTY mode (query via stdin instead of CLI argument)
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # AI Consultants v2.10.4
1
+ # AI Consultants v2.10.8
2
2
 
3
3
  > Query multiple AI models simultaneously for expert opinions on coding questions. Get diverse perspectives, automatic synthesis, confidence-weighted recommendations, and multi-agent debate.
4
4
 
5
- [![Version](https://img.shields.io/badge/version-2.10.4-blue.svg)](https://github.com/matteoscurati/ai-consultants)
5
+ [![Version](https://img.shields.io/badge/version-2.10.8-blue.svg)](https://github.com/matteoscurati/ai-consultants)
6
6
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
  [![Claude Code Skill](https://img.shields.io/badge/Claude%20Code-Skill-orange.svg)](https://docs.anthropic.com/en/docs/claude-code/skills)
8
8
  [![GitHub stars](https://img.shields.io/github/stars/matteoscurati/ai-consultants?style=social)](https://github.com/matteoscurati/ai-consultants)
@@ -419,7 +419,7 @@ INVOKING_AGENT=codex ./scripts/consult_all.sh "Question" # Codex excluded
419
419
 
420
420
  | Consultant | Default Model | Persona | Focus |
421
421
  |------------|---------------|---------|-------|
422
- | **Qwen3** | qwen3.5-plus | The Analyst | Data-driven analysis |
422
+ | **Qwen3** | qwen3.6-plus | The Analyst | Data-driven analysis |
423
423
  | **GLM** | glm-5.1 | The Methodologist | Structured approaches |
424
424
  | **Grok** | grok-4.20-0309-reasoning | The Provocateur | Challenge conventions |
425
425
  | **DeepSeek** | deepseek-reasoner | The Code Specialist | Algorithms, code generation |
@@ -479,7 +479,7 @@ Choose the right balance of quality, speed, and cost with model quality tiers.
479
479
  | DeepSeek | deepseek-reasoner | deepseek-v3.2 | deepseek-chat |
480
480
  | GLM | glm-5.1 | glm-5.1 | glm-4-flash |
481
481
  | Grok | grok-4.20-0309-reasoning | grok-3 | grok-3-mini |
482
- | Qwen3 | qwen3.5-plus | qwen3.5-plus | qwen3-32b |
482
+ | Qwen3 | qwen3.6-plus | qwen3.6-35b-a3b | qwen3-32b |
483
483
  | Aider | gpt-5.3-codex | gpt-5.3 | gpt-4o-mini |
484
484
  | MiniMax | MiniMax-M2.7 | MiniMax-M2.7 | MiniMax-M2.5 |
485
485
  | Ollama | qwen2.5-coder:32b | llama3.3 | llama3.2 |
package/SKILL.md CHANGED
@@ -5,10 +5,10 @@ license: MIT
5
5
  compatibility: Requires bash, jq, and at least 2 AI CLI tools (gemini, codex, vibe, etc.). macOS and Linux.
6
6
  metadata:
7
7
  author: matteoscurati
8
- version: 2.10.4
8
+ version: 2.10.8
9
9
  ---
10
10
 
11
- # AI Consultants v2.10.4 - AI Expert Panel
11
+ # AI Consultants v2.10.8 - AI Expert Panel
12
12
 
13
13
  Simultaneously consult multiple AIs as "consultants" for coding questions. Each consultant has a **configurable persona** that influences their response style.
14
14
 
@@ -1,4 +1,4 @@
1
- # Cost Rates - AI Consultants v2.10.4
1
+ # Cost Rates - AI Consultants v2.10.8
2
2
 
3
3
  This page documents the per-token rates used by the cost tracking system.
4
4
 
@@ -21,25 +21,27 @@ Since v2.5, models are organized into three tiers. Use `apply_model_tier()` or `
21
21
  | gemini-3.1-pro-preview | Premium | $0.00125 | Gemini |
22
22
  | gemini-3-flash-preview | Standard | $0.000075 | Gemini |
23
23
  | gemini-2.0-flash | Economy | $0.0001 | Gemini |
24
- | gpt-5.3-codex | Premium | $0.01 | Codex |
25
- | gpt-5.3 | Standard | $0.005 | Codex |
26
- | gpt-4o-mini | Economy | $0.00015 | Codex |
27
- | opus-4.6 | Premium | $0.015 | Claude |
28
- | sonnet-4.6 | Standard | $0.003 | Claude |
29
- | haiku-4.5 | Economy | $0.00025 | Claude |
24
+ | gpt-5.5 | Premium | $0.01 | Codex |
25
+ | gpt-5.3 | Standard | $0.005 | Codex/Aider |
26
+ | gpt-4o-mini | Economy | $0.00015 | Codex/Aider |
27
+ | nvidia/nemotron-3-super-120b-a12b:free | Premium | $0.00 | Aider |
28
+ | claude-opus-4-7 | Premium | $0.015 | Claude |
29
+ | claude-sonnet-4-6 | Standard | $0.003 | Claude |
30
+ | claude-haiku-4-5 | Economy | $0.00025 | Claude |
30
31
  | mistral-large-3 | Premium | $0.004 | Mistral |
31
32
  | mistral-medium-latest | Standard | $0.0027 | Mistral |
32
33
  | devstral-small-2 | Economy | $0.001 | Mistral |
33
- | composer-1.5 | Premium/Standard | $0.005 | Cursor |
34
- | deepseek-reasoner | Premium | $0.002 | DeepSeek |
34
+ | composer-2 | Premium/Standard | $0.005 | Cursor |
35
+ | deepseek-v4-pro | Premium | $0.002 | DeepSeek |
35
36
  | deepseek-v3.2 | Standard | $0.0014 | DeepSeek |
36
37
  | deepseek-chat | Economy | $0.001 | DeepSeek |
37
38
  | glm-5.1 | Premium/Standard | $0.002 | GLM |
38
39
  | glm-4-flash | Economy | $0.0005 | GLM |
39
- | grok-4.20-0309-reasoning | Premium | $0.005 | Grok |
40
+ | grok-4.3 | Premium | $0.00125 | Grok |
40
41
  | grok-3 | Standard | $0.003 | Grok |
41
42
  | grok-3-mini | Economy | $0.001 | Grok |
42
- | qwen3.5-plus | Premium/Standard | $0.002 | Qwen3 |
43
+ | qwen3.6-plus | Premium | $0.000325 | Qwen3 |
44
+ | qwen3.6-35b-a3b | Standard | $0.000163 | Qwen3 |
43
45
  | qwen3-32b | Economy | $0.0005 | Qwen3 |
44
46
  | MiniMax-M2.7 | Premium/Standard | $0.002 | MiniMax |
45
47
  | MiniMax-M2.5 | Economy | $0.0015 | MiniMax |
@@ -54,25 +56,27 @@ Since v2.5, models are organized into three tiers. Use `apply_model_tier()` or `
54
56
  | gemini-3.1-pro-preview | Premium | $0.005 | Gemini |
55
57
  | gemini-3-flash-preview | Standard | $0.0003 | Gemini |
56
58
  | gemini-2.0-flash | Economy | $0.0004 | Gemini |
57
- | gpt-5.3-codex | Premium | $0.03 | Codex |
58
- | gpt-5.3 | Standard | $0.015 | Codex |
59
- | gpt-4o-mini | Economy | $0.0006 | Codex |
60
- | opus-4.6 | Premium | $0.075 | Claude |
61
- | sonnet-4.6 | Standard | $0.015 | Claude |
62
- | haiku-4.5 | Economy | $0.00125 | Claude |
59
+ | gpt-5.5 | Premium | $0.03 | Codex |
60
+ | gpt-5.3 | Standard | $0.015 | Codex/Aider |
61
+ | gpt-4o-mini | Economy | $0.0006 | Codex/Aider |
62
+ | nvidia/nemotron-3-super-120b-a12b:free | Premium | $0.00 | Aider |
63
+ | claude-opus-4-7 | Premium | $0.075 | Claude |
64
+ | claude-sonnet-4-6 | Standard | $0.015 | Claude |
65
+ | claude-haiku-4-5 | Economy | $0.00125 | Claude |
63
66
  | mistral-large-3 | Premium | $0.012 | Mistral |
64
67
  | mistral-medium-latest | Standard | $0.0081 | Mistral |
65
68
  | devstral-small-2 | Economy | $0.003 | Mistral |
66
- | composer-1.5 | Premium/Standard | $0.015 | Cursor |
67
- | deepseek-reasoner | Premium | $0.006 | DeepSeek |
69
+ | composer-2 | Premium/Standard | $0.015 | Cursor |
70
+ | deepseek-v4-pro | Premium | $0.006 | DeepSeek |
68
71
  | deepseek-v3.2 | Standard | $0.004 | DeepSeek |
69
72
  | deepseek-chat | Economy | $0.003 | DeepSeek |
70
73
  | glm-5.1 | Premium/Standard | $0.006 | GLM |
71
74
  | glm-4-flash | Economy | $0.0015 | GLM |
72
- | grok-4.20-0309-reasoning | Premium | $0.015 | Grok |
75
+ | grok-4.3 | Premium | $0.0025 | Grok |
73
76
  | grok-3 | Standard | $0.009 | Grok |
74
77
  | grok-3-mini | Economy | $0.003 | Grok |
75
- | qwen3.5-plus | Premium/Standard | $0.006 | Qwen3 |
78
+ | qwen3.6-plus | Premium | $0.00195 | Qwen3 |
79
+ | qwen3.6-35b-a3b | Standard | $0.0009 | Qwen3 |
76
80
  | qwen3-32b | Economy | $0.0015 | Qwen3 |
77
81
  | MiniMax-M2.7 | Premium/Standard | $0.006 | MiniMax |
78
82
  | MiniMax-M2.5 | Economy | $0.004 | MiniMax |
@@ -1,23 +1,25 @@
1
1
  {
2
- "version": "2.10.4",
3
- "updated": "2026-03-04",
2
+ "version": "2.10.8",
3
+ "updated": "2026-05-03",
4
4
  "models": {
5
- "_comment_premium": "Premium tier models - March 2026",
6
- "opus-4.6": {"input": 5.00, "output": 25.00},
5
+ "_comment_premium": "Premium tier models - May 2026",
6
+ "claude-opus-4-7": {"input": 5.00, "output": 25.00},
7
7
  "gemini-3.1-pro-preview": {"input": 1.25, "output": 5.00},
8
- "gpt-5.3-codex": {"input": 3.00, "output": 12.00},
8
+ "gpt-5.5": {"input": 3.00, "output": 12.00},
9
9
  "mistral-large-3": {"input": 2.00, "output": 6.00},
10
- "deepseek-reasoner": {"input": 0.55, "output": 2.19},
10
+ "deepseek-v4-pro": {"input": 0.55, "output": 2.19},
11
11
  "glm-5.1": {"input": 0.50, "output": 2.00},
12
- "grok-4.20-0309-reasoning": {"input": 5.00, "output": 15.00},
13
- "qwen3.5-plus": {"input": 1.60, "output": 6.40},
14
- "composer-1.5": {"input": 0.005, "output": 0.015},
12
+ "grok-4.3": {"input": 1.25, "output": 2.50},
13
+ "qwen3.6-plus": {"input": 0.325, "output": 1.95},
14
+ "qwen3.6-35b-a3b": {"input": 0.163, "output": 0.90},
15
+ "composer-2": {"input": 0.005, "output": 0.015},
15
16
  "minimax-m2.7": {"input": 0.50, "output": 2.00},
16
17
  "kimi-code/kimi-for-coding": {"input": 0.50, "output": 2.00},
17
18
  "amp": {"input": 0.005, "output": 0.015},
19
+ "nvidia/nemotron-3-super-120b-a12b:free": {"input": 0.00, "output": 0.00},
18
20
 
19
21
  "_comment_standard": "Standard tier models",
20
- "sonnet-4.6": {"input": 3.00, "output": 15.00},
22
+ "claude-sonnet-4-6": {"input": 3.00, "output": 15.00},
21
23
  "gemini-3-flash-preview": {"input": 0.075, "output": 0.30},
22
24
  "gpt-5.3": {"input": 2.50, "output": 10.00},
23
25
  "mistral-medium-latest": {"input": 0.0027, "output": 0.0081},
@@ -25,7 +27,7 @@
25
27
  "grok-3": {"input": 3.00, "output": 9.00},
26
28
 
27
29
  "_comment_economy": "Economy tier models",
28
- "haiku-4.5": {"input": 0.001, "output": 0.005},
30
+ "claude-haiku-4-5": {"input": 0.001, "output": 0.005},
29
31
  "gemini-2.0-flash": {"input": 0.0001, "output": 0.0004},
30
32
  "gpt-4o-mini": {"input": 0.00015, "output": 0.0006},
31
33
  "devstral-small-2": {"input": 0.001, "output": 0.003},
@@ -36,6 +38,14 @@
36
38
  "minimax-m2.5": {"input": 0.30, "output": 1.50},
37
39
 
38
40
  "_comment_legacy": "Legacy models for backwards compatibility",
41
+ "opus-4.6": {"input": 5.00, "output": 25.00},
42
+ "sonnet-4.6": {"input": 3.00, "output": 15.00},
43
+ "haiku-4.5": {"input": 0.001, "output": 0.005},
44
+ "gpt-5.3-codex": {"input": 3.00, "output": 12.00},
45
+ "composer-1.5": {"input": 0.005, "output": 0.015},
46
+ "deepseek-reasoner": {"input": 0.55, "output": 2.19},
47
+ "qwen3.5-plus": {"input": 1.60, "output": 6.40},
48
+ "grok-4.20-0309-reasoning": {"input": 5.00, "output": 15.00},
39
49
  "claude-opus-4-5-20251124": {"input": 5.00, "output": 25.00},
40
50
  "claude-sonnet-4-5-20251124": {"input": 3.00, "output": 15.00},
41
51
  "claude-3-5-haiku-20241022": {"input": 0.001, "output": 0.005},
@@ -67,18 +77,18 @@
67
77
  "minimax-m2.1": {"input": 0.30, "output": 1.50}
68
78
  },
69
79
  "consultant_fallbacks": {
70
- "_comment": "Premium defaults - Updated March 2026",
71
- "claude": "opus-4.6",
80
+ "_comment": "Premium defaults - Updated May 2026",
81
+ "claude": "claude-opus-4-7",
72
82
  "gemini": "gemini-3.1-pro-preview",
73
- "codex": "gpt-5.3-codex",
83
+ "codex": "gpt-5.5",
74
84
  "mistral": "mistral-large-3",
75
- "deepseek": "deepseek-reasoner",
85
+ "deepseek": "deepseek-v4-pro",
76
86
  "glm": "glm-5.1",
77
- "grok": "grok-4.20-0309-reasoning",
78
- "qwen3": "qwen3.5-plus",
79
- "aider": "gpt-5.3-codex",
87
+ "grok": "grok-4.3",
88
+ "qwen3": "qwen3.6-plus",
89
+ "aider": "nvidia/nemotron-3-super-120b-a12b:free",
80
90
  "kilo": "auto",
81
- "cursor": "composer-1.5",
91
+ "cursor": "composer-2",
82
92
  "amp": "amp",
83
93
  "kimi": "kimi-code/kimi-for-coding",
84
94
  "minimax": "minimax-m2.7",
@@ -87,41 +97,41 @@
87
97
  "model_tiers": {
88
98
  "_comment": "Model tiers for apply_model_tier() function",
89
99
  "premium": {
90
- "claude": "opus-4.6",
100
+ "claude": "claude-opus-4-7",
91
101
  "gemini": "gemini-3.1-pro-preview",
92
- "codex": "gpt-5.3-codex",
102
+ "codex": "gpt-5.5",
93
103
  "mistral": "mistral-large-3",
94
- "deepseek": "deepseek-reasoner",
104
+ "deepseek": "deepseek-v4-pro",
95
105
  "glm": "glm-5.1",
96
- "grok": "grok-4.20-0309-reasoning",
97
- "qwen3": "qwen3.5-plus",
98
- "aider": "gpt-5.3-codex",
106
+ "grok": "grok-4.3",
107
+ "qwen3": "qwen3.6-plus",
108
+ "aider": "nvidia/nemotron-3-super-120b-a12b:free",
99
109
  "kilo": "auto",
100
- "cursor": "composer-1.5",
110
+ "cursor": "composer-2",
101
111
  "amp": "amp",
102
112
  "kimi": "kimi-code/kimi-for-coding",
103
113
  "minimax": "minimax-m2.7",
104
114
  "ollama": "qwen2.5-coder:32b"
105
115
  },
106
116
  "standard": {
107
- "claude": "sonnet-4.6",
117
+ "claude": "claude-sonnet-4-6",
108
118
  "gemini": "gemini-3-flash-preview",
109
119
  "codex": "gpt-5.3",
110
120
  "mistral": "mistral-medium-latest",
111
121
  "deepseek": "deepseek-v3.2",
112
122
  "glm": "glm-5.1",
113
123
  "grok": "grok-3",
114
- "qwen3": "qwen3.5-plus",
124
+ "qwen3": "qwen3.6-35b-a3b",
115
125
  "aider": "gpt-5.3",
116
126
  "kilo": "auto",
117
- "cursor": "composer-1.5",
127
+ "cursor": "composer-2",
118
128
  "amp": "amp",
119
129
  "kimi": "kimi-code/kimi-for-coding",
120
130
  "minimax": "minimax-m2.7",
121
131
  "ollama": "llama3.3"
122
132
  },
123
133
  "economy": {
124
- "claude": "haiku-4.5",
134
+ "claude": "claude-haiku-4-5",
125
135
  "gemini": "gemini-2.0-flash",
126
136
  "codex": "gpt-4o-mini",
127
137
  "mistral": "devstral-small-2",
@@ -0,0 +1,57 @@
1
+ # Release v2.10.5
2
+
3
+ **Date:** 2026-04-16
4
+ **Type:** Patch — Qwen3 model upgrade to Qwen3.6
5
+ **Previous:** v2.10.4
6
+
7
+ ## Highlights
8
+
9
+ - Qwen3 premium default upgraded from `qwen3.5-plus` to `qwen3.6-plus` (80% cheaper)
10
+ - Qwen3 standard tier now uses the open-weight `qwen3.6-35b-a3b` (MoE, 35B total / 3B active, Apache 2.0)
11
+ - Eliminated stale hardcoded model mappings in `get_economic_model()`
12
+
13
+ ## What's New
14
+
15
+ ### Qwen3.6 Model Upgrade
16
+
17
+ Alibaba released Qwen3.6-35B-A3B on April 16, 2026 — a sparse Mixture-of-Experts model with 35B total parameters but only 3B active during inference. The model scores 51.5 on Terminal-Bench 2.0 and 73.4 on SWE-bench Verified.
18
+
19
+ | Tier | Before (v2.10.4) | After (v2.10.5) |
20
+ |------|-------------------|------------------|
21
+ | Premium | qwen3.5-plus ($1.60/$6.40 per M) | qwen3.6-plus ($0.325/$1.95 per M) |
22
+ | Standard | qwen3.5-plus ($1.60/$6.40 per M) | qwen3.6-35b-a3b ($0.163/$0.90 per M) |
23
+ | Economy | qwen3-32b | qwen3-32b (unchanged) |
24
+
25
+ The premium tier (`qwen3.6-plus`) is Alibaba's hosted API with 1M context window. The standard tier (`qwen3.6-35b-a3b`) is the open-weight variant, also available on Ollama as `qwen3.6:35b-a3b` (24GB).
26
+
27
+ ### DRY Refactor: get_economic_model()
28
+
29
+ `get_economic_model()` in `lib/costs.sh` had a hardcoded case statement with stale model names (e.g., `qwen-turbo`, `claude-3-haiku`, `gemini-2.5-flash`). Refactored to delegate to `get_model_for_tier()` in `config.sh`, matching the pattern already used by `get_premium_model()` in `lib/routing.sh`.
30
+
31
+ ### Version Fix
32
+
33
+ Fixed `AI_CONSULTANTS_VERSION` in `config.sh` which was stuck at `2.10.0` since the npm packaging release.
34
+
35
+ ## Breaking Changes
36
+
37
+ None.
38
+
39
+ ## Upgrade Guide
40
+
41
+ ```bash
42
+ # If installed via git clone
43
+ cd ~/.claude/skills/ai-consultants && git pull
44
+
45
+ # If installed via curl | bash
46
+ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/scripts/install.sh | bash
47
+ ```
48
+
49
+ No configuration changes required. Existing `QWEN3_MODEL` overrides continue to work.
50
+
51
+ ## Commits
52
+
53
+ - `aaa1d69` feat(qwen3): upgrade to Qwen3.6-Plus and Qwen3.6-35B-A3B
54
+
55
+ ## Contributors
56
+
57
+ - @matteoscurati
@@ -0,0 +1,59 @@
1
+ # Release v2.10.6
2
+
3
+ **Date:** 2026-05-02
4
+ **Type:** Patch — Premium model upgrades across 5 consultants + Kilo SIGPIPE fix
5
+ **Previous:** v2.10.5
6
+
7
+ ## Highlights
8
+
9
+ - Codex, Cursor, Aider, DeepSeek, and Claude all bumped to newer premium defaults
10
+ - Aider switches provider to NVIDIA Nemotron 3 Super (free tier) via OpenRouter
11
+ - Claude model IDs migrated from short aliases (`opus-4.6`) to canonical IDs (`claude-opus-4-7`)
12
+ - Kilo no longer aborts under `set -euo pipefail` due to SIGPIPE from `head -c`
13
+
14
+ ## What's New
15
+
16
+ ### Premium Model Upgrades
17
+
18
+ | Consultant | Before (v2.10.5) | After (v2.10.6) |
19
+ |------------|------------------|------------------|
20
+ | Codex | `gpt-5.3-codex` | `gpt-5.5` |
21
+ | Cursor | `composer-1.5` | `composer-2` |
22
+ | Aider | `gpt-5.3-codex` | `nvidia/nemotron-3-super-120b-a12b:free` |
23
+ | DeepSeek | `deepseek-reasoner` | `deepseek-v4-pro` |
24
+ | Claude | `opus-4.6` / `sonnet-4.6` / `haiku-4.5` | `claude-opus-4-7` / `claude-sonnet-4-6` / `claude-haiku-4-5` |
25
+
26
+ The Claude rename also covers standard and economy tiers — all three Claude tiers now use canonical IDs (`claude-<family>-<major>-<minor>`) matching the Anthropic API model identifiers, eliminating the alias indirection that previously required mapping in API mode.
27
+
28
+ Aider moves off OpenAI Codex to NVIDIA's Nemotron 3 Super 120B (A12B-active MoE) on the OpenRouter free tier, lowering cost-per-consultation for collaborative coding workflows.
29
+
30
+ ### Kilo SIGPIPE Fix
31
+
32
+ `query_kilo.sh` previously truncated output via `echo "$CONTENT" | head -5 | ... | head -c 200`. Under `set -o pipefail`, `head -c` closing the pipe before the upstream `sed` finished writing produced a SIGPIPE that aborted the entire script. Replaced the trailing `head -c` with bash parameter expansion (`${var:0:N}`), which truncates safely without involving the pipeline.
33
+
34
+ ## Breaking Changes
35
+
36
+ None. Existing `CLAUDE_MODEL`, `CODEX_MODEL`, `CURSOR_MODEL`, `AIDER_MODEL`, and `DEEPSEEK_MODEL` overrides continue to work — only the *defaults* changed.
37
+
38
+ If you were relying on the short Claude aliases (`opus-4.6`, etc.) in scripts, those still work as overrides through the CLI; the change only affects what's selected when no override is present.
39
+
40
+ ## Upgrade Guide
41
+
42
+ ```bash
43
+ # If installed via git clone
44
+ cd ~/.claude/skills/ai-consultants && git pull
45
+
46
+ # If installed via curl | bash
47
+ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/scripts/install.sh | bash
48
+ ```
49
+
50
+ No configuration changes required.
51
+
52
+ ## Commits
53
+
54
+ - `e797d69` fix(kilo): use parameter expansion to avoid SIGPIPE under set -euo pipefail
55
+ - `e52d6d4` feat: upgrade Codex, Cursor, Aider, DeepSeek, Claude premium models
56
+
57
+ ## Contributors
58
+
59
+ - @matteoscurati
@@ -0,0 +1,53 @@
1
+ # Release v2.10.7
2
+
3
+ **Date:** 2026-05-02
4
+ **Type:** Patch — Grok premium model upgrade to grok-4.3
5
+ **Previous:** v2.10.6
6
+
7
+ ## Highlights
8
+
9
+ - Grok premium upgraded from `grok-4.20-0309-reasoning` to `grok-4.3`
10
+ - ~75% cheaper input, ~83% cheaper output, with a 1M-token context window
11
+ - xAI explicitly recommends migrating all callers to grok-4.3
12
+
13
+ ## What's New
14
+
15
+ ### Grok 4.3 Upgrade
16
+
17
+ xAI released Grok 4.3 on April 30, 2026 as their flagship model, replacing the previous reasoning-focused `grok-4.20-0309-reasoning`. The new model is positioned as both the most intelligent and the fastest in the lineup, with aggressive pricing.
18
+
19
+ | Tier | Before (v2.10.6) | After (v2.10.7) |
20
+ |------|-------------------|------------------|
21
+ | Premium | grok-4.20-0309-reasoning ($5.00/$15.00 per M) | grok-4.3 ($1.25/$2.50 per M) |
22
+ | Standard | grok-3 ($3.00/$9.00 per M) | grok-3 (unchanged) |
23
+ | Economy | grok-3-mini ($1.00/$3.00 per M) | grok-3-mini (unchanged) |
24
+
25
+ The premium tier moves from $20.00 combined per million tokens (input + output average) to $3.75 — a roughly 5x reduction at typical query shapes. The 1M-token context window is unchanged from the prior reasoning variant.
26
+
27
+ **Note on tiered pricing:** xAI bills requests exceeding 200k input tokens at a higher rate. For very long-context queries, consult the xAI Console for the exact tiered pricing.
28
+
29
+ The standard and economy tiers continue to use `grok-3` and `grok-3-mini` respectively. The previous premium model `grok-4.20-0309-reasoning` was moved to the legacy section of `docs/cost_rates.json` so cost calculation continues to work for any historical responses or pinned overrides.
30
+
31
+ ## Breaking Changes
32
+
33
+ None. Existing `GROK_MODEL` overrides continue to work — only the default changed.
34
+
35
+ ## Upgrade Guide
36
+
37
+ ```bash
38
+ # If installed via git clone
39
+ cd ~/.claude/skills/ai-consultants && git pull
40
+
41
+ # If installed via curl | bash
42
+ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/scripts/install.sh | bash
43
+ ```
44
+
45
+ No configuration changes required.
46
+
47
+ ## Commits
48
+
49
+ - `1d3a53b` feat(grok): upgrade premium to grok-4.3 (released 2026-04-30)
50
+
51
+ ## Contributors
52
+
53
+ - @matteoscurati
@@ -0,0 +1,58 @@
1
+ # Release v2.10.8
2
+
3
+ **Date:** 2026-05-03
4
+ **Type:** Patch — Cost catalog sync (fixes v2.10.6 drift)
5
+ **Previous:** v2.10.7
6
+
7
+ ## Highlights
8
+
9
+ - Fixes a runtime drift introduced by v2.10.6: `docs/cost_rates.json` was still pointing `consultant_fallbacks` at the old model IDs (`opus-4.6`, `gpt-5.3-codex`, `composer-1.5`, `deepseek-reasoner`)
10
+ - Adds price entries for the v2.10.6 model IDs (Claude canonical IDs, `gpt-5.5`, `composer-2`, `deepseek-v4-pro`, `nvidia/nemotron-3-super-120b-a12b:free`)
11
+ - Old IDs preserved in the legacy section so cost calculation still works for historical responses or pinned overrides
12
+
13
+ ## What's New
14
+
15
+ ### Cost Catalog Sync
16
+
17
+ In v2.10.6 we updated `scripts/config.sh` to use canonical model IDs for Claude and to switch Codex/Cursor/Aider/DeepSeek to newer models. However, `docs/cost_rates.json` — which is read at runtime by `lib/costs.sh` to resolve fallback prices when a consultant doesn't report its own model — was not updated. Two effects:
18
+
19
+ 1. `consultant_fallbacks.claude = "opus-4.6"` would have caused fallback cost lookups to use `opus-4.6` even when the consultant ran on `claude-opus-4-7`. The price for `claude-opus-4-7` was missing from the catalog entirely, which would have triggered the `default_rate` ($0.005/$0.015 per 1k) for any direct lookup of the new ID.
20
+ 2. The reference `model_tiers` table in the JSON file (documentation, not used at runtime) was inconsistent with the canonical source in `config.sh::get_model_for_tier()`.
21
+
22
+ Both issues are now fixed. `consultant_fallbacks` and `model_tiers` mirror the active defaults in `config.sh`, and every model ID referenced by the defaults has a corresponding price entry.
23
+
24
+ ### Catalog Layout Changes
25
+
26
+ | Section | Added | Moved to legacy |
27
+ |---------|-------|------------------|
28
+ | Premium | `claude-opus-4-7`, `gpt-5.5`, `composer-2`, `deepseek-v4-pro`, `nvidia/nemotron-3-super-120b-a12b:free` | `opus-4.6`, `gpt-5.3-codex`, `composer-1.5`, `deepseek-reasoner` |
29
+ | Standard | `claude-sonnet-4-6` | `sonnet-4.6` |
30
+ | Economy | `claude-haiku-4-5` | `haiku-4.5` |
31
+
32
+ Pricing values mirror the prior entries for direct successors (the model lineage is the same, only the canonical ID changed). `nvidia/nemotron-3-super-120b-a12b:free` is set to $0/$0 to reflect OpenRouter's free tier — this means Aider consultations contribute zero to cost tracking when running on the default model.
33
+
34
+ `COST_RATES.md` was updated to mirror the new active and legacy IDs.
35
+
36
+ ## Breaking Changes
37
+
38
+ None.
39
+
40
+ ## Upgrade Guide
41
+
42
+ ```bash
43
+ # If installed via git clone
44
+ cd ~/.claude/skills/ai-consultants && git pull
45
+
46
+ # If installed via curl | bash
47
+ curl -fsSL https://raw.githubusercontent.com/matteoscurati/ai-consultants/main/scripts/install.sh | bash
48
+ ```
49
+
50
+ No configuration changes required.
51
+
52
+ ## Commits
53
+
54
+ - `885e2ea` fix(costs): sync cost catalog with v2.10.6 model defaults
55
+
56
+ ## Contributors
57
+
58
+ - @matteoscurati
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-consultants",
3
- "version": "2.10.4",
3
+ "version": "2.10.8",
4
4
  "description": "Multi-model AI deliberation system - query up to 15 AI consultants for coding problems",
5
5
  "bin": {
6
6
  "ai-consultants": "bin/ai-consultants"
@@ -79,7 +79,7 @@ CURSOR_MODEL=composer-1.5
79
79
  AIDER_MODEL=gpt-5.3-codex
80
80
  AMP_MODEL=amp
81
81
  KIMI_MODEL=kimi-code/kimi-for-coding
82
- QWEN3_MODEL=qwen3.5-plus
82
+ QWEN3_MODEL=qwen3.6-plus
83
83
  GLM_MODEL=glm-5.1
84
84
  GROK_MODEL=grok-4.20-0309-reasoning
85
85
  DEEPSEEK_MODEL=deepseek-reasoner
package/scripts/config.sh CHANGED
@@ -63,8 +63,8 @@ GEMINI_CMD="${GEMINI_CMD:-gemini}"
63
63
  # CODEX CONFIGURATION - The Pragmatist
64
64
  # =============================================================================
65
65
 
66
- # Model: "gpt-5.3-codex" (default), "gpt-5.3", "gpt-4o-mini", etc.
67
- CODEX_MODEL="${CODEX_MODEL:-gpt-5.3-codex}"
66
+ # Model: "gpt-5.5" (default), "gpt-5.3", "gpt-4o-mini", etc.
67
+ CODEX_MODEL="${CODEX_MODEL:-gpt-5.5}"
68
68
  CODEX_TIMEOUT_SECONDS="${CODEX_TIMEOUT:-180}"
69
69
  CODEX_CMD="${CODEX_CMD:-codex}"
70
70
 
@@ -89,7 +89,7 @@ KILO_CMD="${KILO_CMD:-kilocode}"
89
89
  # CURSOR CONFIGURATION - The Integrator
90
90
  # =============================================================================
91
91
 
92
- CURSOR_MODEL="${CURSOR_MODEL:-composer-1.5}"
92
+ CURSOR_MODEL="${CURSOR_MODEL:-composer-2}"
93
93
  CURSOR_TIMEOUT_SECONDS="${CURSOR_TIMEOUT:-180}"
94
94
  CURSOR_CMD="${CURSOR_CMD:-agent}"
95
95
 
@@ -97,7 +97,7 @@ CURSOR_CMD="${CURSOR_CMD:-agent}"
97
97
  # AIDER CONFIGURATION - The Pair Programmer
98
98
  # =============================================================================
99
99
 
100
- AIDER_MODEL="${AIDER_MODEL:-gpt-5.3-codex}"
100
+ AIDER_MODEL="${AIDER_MODEL:-nvidia/nemotron-3-super-120b-a12b:free}"
101
101
  AIDER_TIMEOUT_SECONDS="${AIDER_TIMEOUT:-180}"
102
102
  AIDER_CMD="${AIDER_CMD:-aider}"
103
103
 
@@ -105,7 +105,7 @@ AIDER_CMD="${AIDER_CMD:-aider}"
105
105
  # QWEN3 CONFIGURATION - The Analyst (CLI/API switchable v2.7)
106
106
  # =============================================================================
107
107
 
108
- QWEN3_MODEL="${QWEN3_MODEL:-qwen3.5-plus}"
108
+ QWEN3_MODEL="${QWEN3_MODEL:-qwen3.6-plus}"
109
109
  QWEN3_TIMEOUT_SECONDS="${QWEN3_TIMEOUT:-180}"
110
110
  QWEN3_CMD="${QWEN3_CMD:-qwen}"
111
111
  QWEN3_API_URL="${QWEN3_API_URL:-https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation}"
@@ -127,7 +127,7 @@ GLM_FORMAT="${GLM_FORMAT:-openai}"
127
127
  # GROK CONFIGURATION - The Provocateur (API-based)
128
128
  # =============================================================================
129
129
 
130
- GROK_MODEL="${GROK_MODEL:-grok-4.20-0309-reasoning}"
130
+ GROK_MODEL="${GROK_MODEL:-grok-4.3}"
131
131
  GROK_TIMEOUT_SECONDS="${GROK_TIMEOUT:-180}"
132
132
  GROK_API_URL="${GROK_API_URL:-https://api.x.ai/v1/chat/completions}"
133
133
  GROK_FORMAT="${GROK_FORMAT:-openai}"
@@ -137,7 +137,7 @@ GROK_FORMAT="${GROK_FORMAT:-openai}"
137
137
  # DEEPSEEK CONFIGURATION - The Methodologist (API-based)
138
138
  # =============================================================================
139
139
 
140
- DEEPSEEK_MODEL="${DEEPSEEK_MODEL:-deepseek-reasoner}"
140
+ DEEPSEEK_MODEL="${DEEPSEEK_MODEL:-deepseek-v4-pro}"
141
141
  DEEPSEEK_TIMEOUT_SECONDS="${DEEPSEEK_TIMEOUT:-180}"
142
142
  DEEPSEEK_API_URL="${DEEPSEEK_API_URL:-https://api.deepseek.com/v1/chat/completions}"
143
143
  DEEPSEEK_FORMAT="${DEEPSEEK_FORMAT:-openai}"
@@ -176,7 +176,7 @@ KIMI_CMD="${KIMI_CMD:-kimi}"
176
176
  # CLAUDE CONFIGURATION - The Synthesizer (v2.2)
177
177
  # =============================================================================
178
178
 
179
- CLAUDE_MODEL="${CLAUDE_MODEL:-opus-4.6}"
179
+ CLAUDE_MODEL="${CLAUDE_MODEL:-claude-opus-4-7}"
180
180
  CLAUDE_TIMEOUT_SECONDS="${CLAUDE_TIMEOUT:-240}"
181
181
  CLAUDE_CMD="${CLAUDE_CMD:-claude}"
182
182
 
@@ -525,16 +525,16 @@ get_model_for_tier() {
525
525
  case "$tier" in
526
526
  premium|max|best)
527
527
  case "$consultant" in
528
- claude) echo "opus-4.6" ;;
528
+ claude) echo "claude-opus-4-7" ;;
529
529
  gemini) echo "gemini-3.1-pro-preview" ;;
530
- codex) echo "gpt-5.3-codex" ;;
530
+ codex) echo "gpt-5.5" ;;
531
531
  mistral) echo "mistral-large-3" ;;
532
- cursor) echo "composer-1.5" ;;
533
- deepseek) echo "deepseek-reasoner" ;;
532
+ cursor) echo "composer-2" ;;
533
+ deepseek) echo "deepseek-v4-pro" ;;
534
534
  glm) echo "glm-5.1" ;;
535
- grok) echo "grok-4.20-0309-reasoning" ;;
536
- qwen3) echo "qwen3.5-plus" ;;
537
- aider) echo "gpt-5.3-codex" ;;
535
+ grok) echo "grok-4.3" ;;
536
+ qwen3) echo "qwen3.6-plus" ;;
537
+ aider) echo "nvidia/nemotron-3-super-120b-a12b:free" ;;
538
538
  amp) echo "amp" ;;
539
539
  ollama) echo "qwen2.5-coder:32b" ;;
540
540
  kimi) echo "kimi-code/kimi-for-coding" ;;
@@ -545,7 +545,7 @@ get_model_for_tier() {
545
545
  ;;
546
546
  standard|medium|balanced)
547
547
  case "$consultant" in
548
- claude) echo "sonnet-4.6" ;;
548
+ claude) echo "claude-sonnet-4-6" ;;
549
549
  gemini) echo "gemini-3-flash-preview" ;;
550
550
  codex) echo "gpt-5.3" ;;
551
551
  mistral) echo "mistral-medium-latest" ;;
@@ -553,7 +553,7 @@ get_model_for_tier() {
553
553
  deepseek) echo "deepseek-v3.2" ;;
554
554
  glm) echo "glm-5.1" ;; # Same as premium (no mid-tier GLM)
555
555
  grok) echo "grok-3" ;;
556
- qwen3) echo "qwen3.5-plus" ;; # Same as premium (single tier available)
556
+ qwen3) echo "qwen3.6-35b-a3b" ;; # Open-weight MoE (35B total, 3B active)
557
557
  aider) echo "gpt-5.3" ;;
558
558
  amp) echo "amp" ;; # Same model (no tiers)
559
559
  ollama) echo "llama3.3" ;;
@@ -565,7 +565,7 @@ get_model_for_tier() {
565
565
  ;;
566
566
  economy|fast|quick)
567
567
  case "$consultant" in
568
- claude) echo "haiku-4.5" ;;
568
+ claude) echo "claude-haiku-4-5" ;;
569
569
  gemini) echo "gemini-2.0-flash" ;;
570
570
  codex) echo "gpt-4o-mini" ;;
571
571
  mistral) echo "devstral-small-2" ;;
@@ -750,4 +750,4 @@ EOF
750
750
  # VERSION
751
751
  # =============================================================================
752
752
 
753
- AI_CONSULTANTS_VERSION="2.10.0"
753
+ AI_CONSULTANTS_VERSION="2.10.8"
@@ -124,12 +124,12 @@ run_with_timeout() {
124
124
  # =============================================================================
125
125
 
126
126
  check_command() {
127
- local cmd=$1
127
+ local cmd_name=$1
128
128
  local name=$2
129
129
  local install_hint=$3
130
130
 
131
- if ! command -v "$cmd" &> /dev/null; then
132
- log_error "$name not found (command: $cmd)"
131
+ if ! command -v "$cmd_name" &> /dev/null; then
132
+ log_error "$name not found (command: $cmd_name)"
133
133
  if [[ -n "$install_hint" ]]; then
134
134
  log_info "Install with: $install_hint"
135
135
  fi
@@ -612,7 +612,7 @@ map_set() {
612
612
  local keys_var="_MAP_${map_name}__KEYS__"
613
613
  local current_keys
614
614
  eval "current_keys=\"\${$keys_var:-}\""
615
- if [[ ! " $current_keys " =~ " $safe_key " ]]; then
615
+ if [[ " $current_keys " != *" $safe_key "* ]]; then
616
616
  if [[ -z "$current_keys" ]]; then
617
617
  eval "$keys_var=\"\$safe_key\""
618
618
  else
@@ -476,26 +476,15 @@ get_model_tier() {
476
476
  }
477
477
 
478
478
  # Get economic model for a consultant
479
+ # Delegates to get_model_for_tier() in config.sh (single source of truth)
479
480
  # Usage: get_economic_model <consultant>
480
481
  get_economic_model() {
481
482
  local consultant="$1"
482
- consultant=$(echo "$consultant" | tr '[:upper:]' '[:lower:]')
483
-
484
- case "$consultant" in
485
- gemini) echo "gemini-2.5-flash" ;;
486
- codex) echo "gpt-4o-mini" ;;
487
- mistral) echo "mistral-small" ;;
488
- kilo) echo "kilo" ;; # No economy variant
489
- cursor) echo "cursor" ;; # No economy variant
490
- claude) echo "claude-3-haiku" ;;
491
- qwen3) echo "qwen-turbo" ;;
492
- glm) echo "glm-3-turbo" ;;
493
- grok) echo "grok-3-mini" ;;
494
- deepseek) echo "deepseek-chat" ;;
495
-
496
- minimax) echo "MiniMax-M2.5" ;;
497
- *) echo "" ;;
498
- esac
483
+ if type get_model_for_tier &>/dev/null; then
484
+ get_model_for_tier "$consultant" "economy"
485
+ else
486
+ echo ""
487
+ fi
499
488
  }
500
489
 
501
490
  # Calculate query complexity score (1-10)
@@ -257,13 +257,15 @@ get_selected_consultants_json() {
257
257
  local category="$1"
258
258
  local min_affinity="${2:-7}"
259
259
 
260
- local consultants=$(select_consultants "$category" "$min_affinity")
260
+ local consultants
261
+ consultants=$(select_consultants "$category" "$min_affinity")
261
262
  local json="["
262
263
  local first=true
263
264
 
264
265
  while IFS= read -r c; do
265
266
  if [[ -n "$c" ]]; then
266
- local score=$(get_affinity "$category" "$c")
267
+ local score
268
+ score=$(get_affinity "$category" "$c")
267
269
  if [[ "$first" == "true" ]]; then
268
270
  first=false
269
271
  else
@@ -95,13 +95,15 @@ if [[ $exit_code -eq 0 && -n "${CONTENT:-}" ]]; then
95
95
  "$TEMP_OUTPUT" "$OUTPUT_FILE" "$exit_code" "$LATENCY_MS"
96
96
  else
97
97
  # Extract structured fields from markdown/text output
98
- # Summary: first meaningful line(s), up to 200 chars
99
- local_summary=$(echo "$CONTENT" | head -5 | tr '\n' ' ' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | head -c 200)
98
+ # Note: truncation via parameter expansion (not `head -c`) to avoid SIGPIPE
99
+ # aborting the script under `set -euo pipefail`.
100
+ local_summary=$(echo "$CONTENT" | head -5 | tr '\n' ' ' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
101
+ local_summary="${local_summary:0:200}"
100
102
 
101
- # Approach: look for headings or key phrases
102
103
  local_approach=$(echo "$CONTENT" | grep -iE '^#+\s|^approach:|^recommendation:|^solution:' | head -1 | \
103
- sed 's/^[#[:space:]]*//;s/^[Aa]pproach:[[:space:]]*//' | head -c 100)
104
- [[ -z "$local_approach" ]] && local_approach=$(echo "$local_summary" | head -c 60)
104
+ sed 's/^[#[:space:]]*//;s/^[Aa]pproach:[[:space:]]*//' || true)
105
+ local_approach="${local_approach:0:100}"
106
+ [[ -z "$local_approach" ]] && local_approach="${local_summary:0:60}"
105
107
 
106
108
  # Confidence: estimate from language strength
107
109
  local_confidence=6
@@ -4,7 +4,7 @@
4
4
  # Usage: ./query_qwen3.sh "question" [context_file] [output_file]
5
5
  #
6
6
  # Environment variables:
7
- # QWEN3_MODEL - Model to use (default: qwen3.5-plus)
7
+ # QWEN3_MODEL - Model to use (default: qwen3.6-plus)
8
8
  # QWEN3_TIMEOUT - Timeout in seconds (default: 180)
9
9
  # QWEN3_USE_API - Use API mode instead of CLI (default: false)
10
10
  # QWEN3_API_KEY - API key for DashScope API (required for API mode)
@@ -82,7 +82,7 @@ END_TIME=$(get_timestamp_ms)
82
82
  LATENCY_MS=$((END_TIME - START_TIME))
83
83
 
84
84
  # --- Configuration for response building ---
85
- MODEL_USED="${QWEN3_MODEL:-qwen3.5-plus}"
85
+ MODEL_USED="${QWEN3_MODEL:-qwen3.6-plus}"
86
86
  PERSONA_NAME=$(get_persona_name "$CONSULTANT_NAME")
87
87
 
88
88
  # --- Post-processing: use shared helper ---
@@ -1086,9 +1086,9 @@ test_model_tiers() {
1086
1086
  test_economic_models() {
1087
1087
  suite "costs.sh: get_economic_model"
1088
1088
 
1089
- assert_equals "gemini-2.5-flash" "$(get_economic_model "gemini")" "gemini economy is gemini-2.5-flash"
1089
+ assert_equals "gemini-2.0-flash" "$(get_economic_model "gemini")" "gemini economy is gemini-2.0-flash"
1090
1090
  assert_equals "gpt-4o-mini" "$(get_economic_model "codex")" "codex economy is gpt-4o-mini"
1091
- assert_equals "claude-3-haiku" "$(get_economic_model "claude")" "claude economy is claude-3-haiku"
1091
+ assert_equals "claude-haiku-4-5" "$(get_economic_model "claude")" "claude economy is claude-haiku-4-5"
1092
1092
  assert_equals "MiniMax-M2.5" "$(get_economic_model "minimax")" "minimax economy is MiniMax-M2.5"
1093
1093
  assert_equals "" "$(get_economic_model "unknown")" "unknown consultant returns empty"
1094
1094
  }
@@ -1424,9 +1424,9 @@ test_escalation() {
1424
1424
  test_model_for_tier() {
1425
1425
  suite "config.sh: get_model_for_tier"
1426
1426
 
1427
- assert_equals "opus-4.6" "$(get_model_for_tier "claude" "premium")" "claude premium is opus-4.6"
1428
- assert_equals "sonnet-4.6" "$(get_model_for_tier "claude" "standard")" "claude standard is sonnet-4.6"
1429
- assert_equals "haiku-4.5" "$(get_model_for_tier "claude" "economy")" "claude economy is haiku-4.5"
1427
+ assert_equals "claude-opus-4-7" "$(get_model_for_tier "claude" "premium")" "claude premium is claude-opus-4-7"
1428
+ assert_equals "claude-sonnet-4-6" "$(get_model_for_tier "claude" "standard")" "claude standard is claude-sonnet-4-6"
1429
+ assert_equals "claude-haiku-4-5" "$(get_model_for_tier "claude" "economy")" "claude economy is claude-haiku-4-5"
1430
1430
  assert_equals "gemini-3.1-pro-preview" "$(get_model_for_tier "gemini" "premium")" "gemini premium is gemini-3.1-pro-preview"
1431
1431
  assert_equals "gemini-2.0-flash" "$(get_model_for_tier "gemini" "economy")" "gemini economy is gemini-2.0-flash"
1432
1432
  assert_equals "MiniMax-M2.7" "$(get_model_for_tier "minimax" "premium")" "minimax premium is MiniMax-M2.7"