|
11 | 11 | (defn ^:private models-dev* [] |
12 | 12 | (try |
13 | 13 | (let [response (slurp "https://models.dev/api.json") |
14 | | - data (json/parse-string response keyword)] |
| 14 | + data (json/parse-string response)] |
15 | 15 | data) |
16 | 16 | (catch Exception e |
17 | 17 | (logger/error logger-tag " Error fetching models from models.dev:" (.getMessage e)) |
|
26 | 26 | "openai/gpt-5" |
27 | 27 | "openai/gpt-5-mini" |
28 | 28 | "openai/gpt-5-nano" |
29 | | - "anthropic/claude-sonnet-4" |
30 | | - "anthropic/claude-opus-4" |
31 | | - "anthropic/claude-opus-4.1" |
32 | | - "anthropic/claude-3.5-haiku"}) |
| 29 | + "anthropic/claude-sonnet-4-20250514" |
| 30 | + "anthropic/claude-opus-4-20250514" |
| 31 | + "anthropic/claude-opus-4-1-20250805" |
| 32 | + "anthropic/claude-3-5-haiku-20241022"}) |
33 | 33 |
|
34 | 34 | (defn all |
35 | 35 | "Return all known existing models with their capabilities and configs." |
|
39 | 39 | (merge m |
40 | 40 | (reduce |
41 | 41 | (fn [p [model model-config]] |
42 | | - (let [provider-name (or (namespace model) (name provider))] |
43 | | - (assoc p (str provider-name "/" (name model)) |
44 | | - (assoc-some |
45 | | - {:provider provider-name |
46 | | - :reason? (:reasoning model-config) |
47 | | - ;; TODO how to check for web-search mode dynamically |
48 | | - :web-search (contains? models-with-web-search-support (name model)) |
49 | | - :tools (:tool_call model-config) |
50 | | - :max-output-tokens (-> model-config :limit :output)} |
51 | | - :input-token-cost (some-> (:input (:cost model-config)) float (/ one-million)) |
52 | | - :output-token-cost (some-> (:output (:cost model-config)) float (/ one-million)) |
53 | | - :input-cache-creation-token-cost (some-> (:cache_write (:cost model-config)) float (/ one-million)) |
54 | | - :input-cache-read-token-cost (some-> (:cache_read (:cost model-config)) float (/ one-million)))))) |
| 42 | + (assoc p (str provider "/" model) |
| 43 | + (assoc-some |
| 44 | + {:reason? (get model-config "reasoning") |
| 45 | + ;; TODO how to check for web-search mode dynamically, |
| 46 | + ;; maybe fixed after web-search toolcall is implemented |
| 47 | + :web-search (contains? models-with-web-search-support (name model)) |
| 48 | + :tools (get model-config "tool_call") |
| 49 | + :max-output-tokens (get-in model-config ["limit" "output"])} |
| 50 | + :input-token-cost (some-> (get-in model-config ["cost" "input"]) float (/ one-million)) |
| 51 | + :output-token-cost (some-> (get-in model-config ["cost" "output"]) float (/ one-million)) |
| 52 | + :input-cache-creation-token-cost (some-> (get-in model-config ["cost" "cache_write"]) float (/ one-million)) |
| 53 | + :input-cache-read-token-cost (some-> (get-in model-config ["cost" "cache_read"]) float (/ one-million))))) |
55 | 54 | {} |
56 | | - (:models provider-config)))) |
| 55 | + (get provider-config "models")))) |
57 | 56 | {} |
58 | 57 | (models-dev))) |
59 | 58 |
|
60 | 59 | (comment |
61 | 60 | (require '[clojure.pprint :as pprint]) |
| 61 | + (pprint/pprint (models-dev)) |
62 | 62 | (pprint/pprint (all))) |
0 commit comments