|
55 | 55 |
|
56 | 56 | :openai/gpt-5 |
57 | 57 | (merge model-base |
58 | | - {:model-name "gpt-5-2025-08-07" |
| 58 | + {:model-name "gpt-5" |
59 | 59 | :thinking {:effort :medium}}) |
60 | 60 |
|
61 | 61 | :openai/gpt-5-mini |
62 | 62 | (merge model-base |
63 | | - {:model-name "gpt-5-mini-2025-08-07" |
| 63 | + {:model-name "gpt-5-mini" |
64 | 64 | :thinking {:effort :medium}}) |
65 | 65 |
|
66 | 66 | :openai/gpt-5-nano |
67 | 67 | (merge model-base |
68 | | - {:model-name "gpt-5-nano-2025-08-07" |
| 68 | + {:model-name "gpt-5-nano" |
| 69 | + :thinking {:effort :medium}}) |
| 70 | + |
| 71 | + :openai/gpt-5-pro |
| 72 | + (merge model-base |
| 73 | + {:model-name "gpt-5-pro" |
| 74 | + :thinking {:effort :medium}}) |
| 75 | + |
| 76 | + :openai/gpt-5-codex |
| 77 | + (merge model-base |
| 78 | + {:model-name "gpt-5-codex" |
| 79 | + :thinking {:effort :medium}}) |
| 80 | + |
| 81 | + :openai/gpt-5-1 |
| 82 | + (merge model-base |
| 83 | + {:model-name "gpt-5.1" |
| 84 | + :thinking {:effort :medium}}) |
| 85 | + |
| 86 | + :openai/gpt-5-1-codex |
| 87 | + (merge model-base |
| 88 | + {:model-name "gpt-5.1-codex" |
| 89 | + :thinking {:effort :medium}}) |
| 90 | + |
| 91 | + :openai/gpt-5-1-codex-max |
| 92 | + (merge model-base |
| 93 | + {:model-name "gpt-5.1-codex-max" |
| 94 | + :thinking {:effort :medium}}) |
| 95 | + |
| 96 | + :openai/gpt-5-1-codex-mini |
| 97 | + (merge model-base |
| 98 | + {:model-name "gpt-5.1-codex-mini" |
| 99 | + :thinking {:effort :medium}}) |
| 100 | + |
| 101 | + :openai/gpt-5-2 |
| 102 | + (merge model-base |
| 103 | + {:model-name "gpt-5.2" |
| 104 | + :thinking {:effort :medium}}) |
| 105 | + |
| 106 | + :openai/gpt-5-2-pro |
| 107 | + (merge model-base |
| 108 | + {:model-name "gpt-5.2-pro" |
| 109 | + :thinking {:effort :medium}}) |
| 110 | + |
| 111 | + :openai/gpt-5-2-codex |
| 112 | + (merge model-base |
| 113 | + {:model-name "gpt-5.2-codex" |
| 114 | + :thinking {:effort :medium}}) |
| 115 | + |
| 116 | + :openai/gpt-5-4 |
| 117 | + (merge model-base |
| 118 | + {:model-name "gpt-5.4" |
| 119 | + :thinking {:effort :medium}}) |
| 120 | + |
| 121 | + :openai/gpt-5-4-pro |
| 122 | + (merge model-base |
| 123 | + {:model-name "gpt-5.4-pro" |
69 | 124 | :thinking {:effort :medium}}) |
70 | 125 |
|
71 | 126 | :openai/o1 |
|
78 | 133 | {:model-name "o1-mini" |
79 | 134 | :thinking {:effort :medium}}) |
80 | 135 |
|
| 136 | + :openai/o1-pro |
| 137 | + (merge reasoning-model-base |
| 138 | + {:model-name "o1-pro" |
| 139 | + :thinking {:effort :medium}}) |
| 140 | + |
81 | 141 | :openai/o3 |
82 | 142 | (merge reasoning-model-base |
83 | 143 | {:model-name "o3" |
|
90 | 150 |
|
91 | 151 | :openai/o3-pro |
92 | 152 | (merge reasoning-model-base |
93 | | - {:model-name "o3-pro-2025-06-10" |
| 153 | + {:model-name "o3-pro" |
94 | 154 | :thinking {:effort :medium}}) |
95 | 155 |
|
96 | 156 | :openai/o4-mini |
|
146 | 206 | :thinking (merge thinking-base |
147 | 207 | {:budget-tokens 4096})}) |
148 | 208 |
|
149 | | - :anthropic/claude-3-5-haiku |
| 209 | + :anthropic/claude-opus-4-6 |
| 210 | + (merge model-base |
| 211 | + {:model-name AnthropicChatModelName/CLAUDE_OPUS_4_6}) |
| 212 | + |
| 213 | + :anthropic/claude-opus-4-6-reasoning |
| 214 | + (merge reasoning-model-base |
| 215 | + {:model-name AnthropicChatModelName/CLAUDE_OPUS_4_6 |
| 216 | + :thinking (merge thinking-base |
| 217 | + {:budget-tokens 4096})}) |
| 218 | + |
| 219 | + :anthropic/claude-sonnet-4-6 |
| 220 | + (merge model-base |
| 221 | + {:model-name AnthropicChatModelName/CLAUDE_SONNET_4_6}) |
| 222 | + |
| 223 | + :anthropic/claude-sonnet-4-6-reasoning |
| 224 | + (merge reasoning-model-base |
| 225 | + {:model-name AnthropicChatModelName/CLAUDE_SONNET_4_6 |
| 226 | + :thinking (merge thinking-base |
| 227 | + {:budget-tokens 4096})}) |
| 228 | + |
| 229 | + :anthropic/claude-haiku-4-5 |
150 | 230 | (merge model-base |
151 | | - {:model-name AnthropicChatModelName/CLAUDE_3_5_HAIKU_20241022 |
152 | | - :max-tokens 2048}) ; Haiku has lower default max tokens |
| 231 | + {:model-name AnthropicChatModelName/CLAUDE_HAIKU_4_5_20251001 |
| 232 | + :max-tokens 2048}) |
153 | 233 |
|
154 | 234 | :anthropic/claude-sonnet-4 |
155 | 235 | (merge model-base |
|
171 | 251 | :thinking (merge thinking-base |
172 | 252 | {:budget-tokens 4096})})}) |
173 | 253 |
|
| 254 | +(def model-aliases |
| 255 | + "Short aliases for commonly used models. Aliases are unnamespaced keywords |
| 256 | + that resolve to full model keys." |
| 257 | + {;; Anthropic aliases |
| 258 | + :sonnet :anthropic/claude-sonnet-4-6 |
| 259 | + :opus :anthropic/claude-opus-4-6 |
| 260 | + :haiku :anthropic/claude-haiku-4-5 |
| 261 | + :sonnet-4-6 :anthropic/claude-sonnet-4-6 |
| 262 | + :opus-4-6 :anthropic/claude-opus-4-6 |
| 263 | + :sonnet-4-5 :anthropic/claude-sonnet-4-5 |
| 264 | + :opus-4-1 :anthropic/claude-opus-4-1 |
| 265 | + :opus-4 :anthropic/claude-opus-4 |
| 266 | + :sonnet-4 :anthropic/claude-sonnet-4 |
| 267 | + ;; Anthropic reasoning aliases |
| 268 | + :sonnet-reasoning :anthropic/claude-sonnet-4-6-reasoning |
| 269 | + :opus-reasoning :anthropic/claude-opus-4-6-reasoning |
| 270 | + ;; Google aliases |
| 271 | + :flash :google/gemini-2-5-flash |
| 272 | + :flash-lite :google/gemini-2-5-flash-lite |
| 273 | + :gemini-pro :google/gemini-2-5-pro |
| 274 | + :flash-reasoning :google/gemini-2-5-flash-reasoning |
| 275 | + :gemini-pro-reasoning :google/gemini-2-5-pro-reasoning |
| 276 | + ;; OpenAI aliases |
| 277 | + :gpt-5-4 :openai/gpt-5-4 |
| 278 | + :gpt-5-4-pro :openai/gpt-5-4-pro |
| 279 | + :gpt-5-2 :openai/gpt-5-2 |
| 280 | + :gpt-5-1 :openai/gpt-5-1 |
| 281 | + :gpt-5 :openai/gpt-5 |
| 282 | + :o4-mini :openai/o4-mini |
| 283 | + :o3 :openai/o3 |
| 284 | + :o3-pro :openai/o3-pro |
| 285 | + ;; Codex aliases |
| 286 | + :codex :openai/gpt-5-4-pro |
| 287 | + :gpt-5-1-codex :openai/gpt-5-1-codex |
| 288 | + :gpt-5-1-codex-max :openai/gpt-5-1-codex-max |
| 289 | + :gpt-5-2-codex :openai/gpt-5-2-codex}) |
| 290 | + |
| 291 | +(defn resolve-model-alias |
| 292 | + "Resolves a model key, checking aliases for unnamespaced keywords. |
| 293 | + Returns the resolved key (which may be the same as the input)." |
| 294 | + [model-key] |
| 295 | + (if (and (keyword? model-key) (nil? (namespace model-key))) |
| 296 | + (get model-aliases model-key model-key) |
| 297 | + model-key)) |
| 298 | + |
174 | 299 | (defn get-provider [model-key] |
175 | 300 | (-> model-key namespace keyword)) |
176 | 301 |
|
|
405 | 530 | ([model-key config-overrides] |
406 | 531 | (create-model-builder model-key config-overrides {:validate? true})) |
407 | 532 | ([model-key config-overrides {:keys [validate?] :or {validate? true}}] |
408 | | - (let [;; Resolve env refs in config overrides |
| 533 | + (let [model-key (resolve-model-alias model-key) |
| 534 | + ;; Resolve env refs in config overrides |
409 | 535 | resolved-overrides (resolve-env-refs config-overrides) |
410 | 536 | base-config (merge-with-defaults model-key resolved-overrides) |
411 | 537 | config (-> base-config |
|
499 | 625 | ([nrepl-client-map model-key config-overrides] |
500 | 626 | (create-model-builder-from-config nrepl-client-map model-key config-overrides {:validate? true})) |
501 | 627 | ([nrepl-client-map model-key config-overrides {:keys [validate?] :or {validate? true} :as _options}] |
502 | | - (let [user-models (config/get-models nrepl-client-map) |
| 628 | + (let [model-key (resolve-model-alias model-key) |
| 629 | + user-models (config/get-models nrepl-client-map) |
503 | 630 | ;; Look in user config first, then defaults |
504 | 631 | base-config (or (get user-models model-key) |
505 | 632 | (get default-configs model-key)) |
|
0 commit comments