|
218 | 218 | :readFile {:maxLines 2000} |
219 | 219 | :shellCommand {:summaryMaxLength 35} |
220 | 220 | :outputTruncation {:lines 2000 :sizeKb 50}} |
221 | | - :variantsByModel {".*sonnet[-._]4[-._]6|opus[-._]4[-._][56]" {:variants anthropic-variants} |
222 | | - ".*opus[-._]4[-._][78]|.*sonnet[-._]5|.*fable[-._]5|.*mythos[-._]5" {:variants anthropic-v2-variants} |
| 221 | + :variantsByModel {".*sonnet[-._]4[-._]6|opus[-._]4[-._][56]" {:variants anthropic-variants |
| 222 | + :api ["anthropic" "bedrock"]} |
| 223 | + ".*opus[-._]4[-._][78]|.*sonnet[-._]5|.*fable[-._]5|.*mythos[-._]5" {:variants anthropic-v2-variants |
| 224 | + :api ["anthropic" "bedrock"]} |
223 | 225 | ".*gpt[-._]5(?:[-._](?:2|4|5)(?!\\d)|[-._]3[-._]codex)" {:variants openai-variants |
224 | 226 | :excludeProviders ["github-copilot"]} |
225 | 227 | ".*gpt[-._]5[-._]6(?!\\d)" {:variants openai-gpt-5-6-variants |
|
282 | 284 | false))) |
283 | 285 |
|
284 | 286 | (defn effective-model-variants |
285 | | - "Returns effective variants for a model by merging built-in variants (from |
286 | | - :variantsByModel regex matching on the model key) with user-defined variants. |
287 | | - User-defined variants override built-in ones on name clash. |
288 | | - A variant set to {} is removed from the result, allowing users to disable |
289 | | - built-in variants." |
290 | | - [config provider model-name user-variants] |
291 | | - (let [provider-api (get-in config [:providers provider :api]) |
292 | | - api-match? (fn [api config-val] |
293 | | - (cond (sequential? config-val) (some #{api} config-val) |
294 | | - config-val (= api config-val) |
295 | | - :else true)) |
296 | | - builtin (when model-name |
297 | | - (some (fn [[pattern-str {:keys [variants excludeProviders api]}]] |
298 | | - (when (and (regex-matches? pattern-str model-name) |
299 | | - (not (some #{provider} excludeProviders)) |
300 | | - (api-match? provider-api api)) |
301 | | - variants)) |
302 | | - (:variantsByModel config))) |
303 | | - merged (cond |
304 | | - (and builtin user-variants) (merge builtin user-variants) |
305 | | - builtin builtin |
306 | | - :else user-variants)] |
307 | | - (when merged |
308 | | - (let [filtered (into {} (remove (fn [[_ v]] (= {} v))) merged)] |
309 | | - (when (seq filtered) |
310 | | - filtered))))) |
| 287 | + "Returns effective variants for a model. Built-in regex variants are the |
| 288 | + fallback, discovered provider variants override them, and user variants have |
| 289 | + final priority. A variant set to {} is removed from the result." |
| 290 | + ([config provider model-name user-variants] |
| 291 | + (effective-model-variants config provider model-name nil user-variants)) |
| 292 | + ([config provider model-name model-capabilities user-variants] |
| 293 | + (let [provider-api (or (some-> (:api model-capabilities) name) |
| 294 | + (get-in config [:providers provider :api])) |
| 295 | + api-match? (fn [api config-val] |
| 296 | + (cond (sequential? config-val) (some #{api} config-val) |
| 297 | + config-val (= api config-val) |
| 298 | + :else true)) |
| 299 | + builtin (when model-name |
| 300 | + (some (fn [[pattern-str {:keys [variants excludeProviders api]}]] |
| 301 | + (when (and (regex-matches? pattern-str model-name) |
| 302 | + (not (some #{provider} excludeProviders)) |
| 303 | + (api-match? provider-api api)) |
| 304 | + variants)) |
| 305 | + (:variantsByModel config))) |
| 306 | + merged (merge (or (not-empty (:variants model-capabilities)) builtin) |
| 307 | + user-variants)] |
| 308 | + (when (seq merged) |
| 309 | + (let [filtered (into {} (remove (fn [[_ v]] (= {} v))) merged)] |
| 310 | + (when (seq filtered) |
| 311 | + filtered)))))) |
311 | 312 |
|
312 | 313 | (defn selectable-variant-names |
313 | 314 | "Returns sorted variant names suitable for UI display, excluding internal-only |
|
826 | 827 | config) |
827 | 828 | agent-config (get-in config [:agent default-agent-name]) |
828 | 829 | [provider model-name] (shared/full-model->provider+model full-model) |
| 830 | + model-capabilities (get-in @db* [:models full-model]) |
829 | 831 | user-variants (when (and provider model-name) |
830 | 832 | (get-in config [:providers provider :models model-name :variants])) |
831 | 833 | variants (when (and provider model-name) |
832 | 834 | (selectable-variant-names |
833 | | - (effective-model-variants config provider model-name user-variants))) |
| 835 | + (effective-model-variants config provider model-name model-capabilities user-variants))) |
834 | 836 | agent-variant (:variant agent-config) |
835 | 837 | valid? (fn [v] (and v variants (some #{v} variants))) |
836 | 838 | select-variant (cond |
|
0 commit comments