llmcapa 0.1.0__py3-none-any.whl

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.
llmcapa/__init__.py ADDED
@@ -0,0 +1,74 @@
1
+ """llmcapa: lookup capabilities of various LLM models, fully offline.
2
+
3
+ Example:
4
+ >>> import llmcapa
5
+ >>> cap = llmcapa.get("gpt-4o")
6
+ >>> cap.context_window
7
+ 128000
8
+ >>> cap.supports("vision")
9
+ True
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ from typing import List, Optional, Union
15
+ from pathlib import Path
16
+
17
+ from .models import Capability, Feature
18
+ from .registry import Registry, ModelNotFoundError, default_registry
19
+
20
+ __version__ = "0.1.0"
21
+
22
+ __all__ = [
23
+ "Capability",
24
+ "Feature",
25
+ "Registry",
26
+ "ModelNotFoundError",
27
+ "get",
28
+ "list_models",
29
+ "providers",
30
+ "find",
31
+ "load_extra",
32
+ "fetch_openrouter",
33
+ "register",
34
+ "default_registry",
35
+ "__version__",
36
+ ]
37
+
38
+
39
+ def get(model_id: str) -> Capability:
40
+ """Return the Capability for a model id or alias."""
41
+ return default_registry().get(model_id)
42
+
43
+
44
+ def list_models(
45
+ provider: Optional[str] = None,
46
+ include_deprecated: bool = True,
47
+ ) -> List[Capability]:
48
+ """List known models, optionally filtered by provider."""
49
+ return default_registry().list_models(provider, include_deprecated)
50
+
51
+
52
+ def providers() -> List[str]:
53
+ """Return the sorted list of known providers."""
54
+ return default_registry().providers()
55
+
56
+
57
+ def find(**kwargs) -> List[Capability]:
58
+ """Search models by conditions. See Registry.find."""
59
+ return default_registry().find(**kwargs)
60
+
61
+
62
+ def load_extra(path: Union[str, Path]) -> int:
63
+ """Load user-defined model data from a local JSON file."""
64
+ return default_registry().load_extra(path)
65
+
66
+
67
+ def fetch_openrouter(cache_ttl: Optional[int] = None) -> int:
68
+ """Fetch all models dynamically from OpenRouter API and register them."""
69
+ return default_registry().fetch_openrouter(cache_ttl)
70
+
71
+
72
+ def register(cap: Capability) -> None:
73
+ """Register (or override) a Capability in the default registry."""
74
+ default_registry().register(cap)
llmcapa/cli.py ADDED
@@ -0,0 +1,124 @@
1
+ """Command line interface for llmcapa.
2
+
3
+ Usage:
4
+ llmcapa show <model_id> [--json]
5
+ llmcapa list [--provider NAME] [--json] [--no-deprecated]
6
+ llmcapa providers
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import argparse
12
+ import json
13
+ import sys
14
+ from typing import List, Optional
15
+
16
+ from . import __version__, get, list_models, providers
17
+ from .registry import ModelNotFoundError, default_registry
18
+
19
+
20
+ def _print_table(rows: List[List[str]], headers: List[str]) -> None:
21
+ widths = [len(h) for h in headers]
22
+ for row in rows:
23
+ for i, cell in enumerate(row):
24
+ widths[i] = max(widths[i], len(cell))
25
+ fmt = " ".join("{:<%d}" % w for w in widths)
26
+ print(fmt.format(*headers))
27
+ print(fmt.format(*["-" * w for w in widths]))
28
+ for row in rows:
29
+ print(fmt.format(*row))
30
+
31
+
32
+ def _cmd_show(args: argparse.Namespace) -> int:
33
+ try:
34
+ cap = get(args.model_id)
35
+ except ModelNotFoundError:
36
+ print(f"error: model not found: {args.model_id}", file=sys.stderr)
37
+ return 1
38
+ if args.json:
39
+ print(json.dumps(cap.to_dict(), ensure_ascii=False, indent=2))
40
+ else:
41
+ d = cap.to_dict()
42
+ width = max(len(k) for k in d)
43
+ for key, value in d.items():
44
+ print(f"{key:<{width}} {value}")
45
+ return 0
46
+
47
+
48
+ def _cmd_list(args: argparse.Namespace) -> int:
49
+ caps = list_models(args.provider, include_deprecated=not args.no_deprecated)
50
+ if args.json:
51
+ print(json.dumps([c.to_dict() for c in caps], ensure_ascii=False, indent=2))
52
+ return 0
53
+ rows = []
54
+ for c in caps:
55
+ rows.append([
56
+ c.provider,
57
+ c.model_id,
58
+ str(c.context_window),
59
+ str(c.max_output_tokens),
60
+ "yes" if c.supports_vision else "no",
61
+ "yes" if c.supports_function_calling else "no",
62
+ "yes" if c.deprecated else "no",
63
+ ])
64
+ _print_table(rows, ["provider", "model_id", "context", "max_out", "vision", "tools", "deprecated"])
65
+ return 0
66
+
67
+
68
+ def _cmd_providers(_args: argparse.Namespace) -> int:
69
+ for name in providers():
70
+ print(name)
71
+ return 0
72
+
73
+
74
+ def _cmd_update(_args: argparse.Namespace) -> int:
75
+ try:
76
+ print("Fetching latest models from OpenRouter API...")
77
+ # Force fetch by passing cache_ttl=0 or None (we want to update the cache)
78
+ count = default_registry().fetch_openrouter(cache_ttl=0)
79
+ print(f"Successfully updated {count} models from OpenRouter.")
80
+ return 0
81
+ except Exception as e:
82
+ print(f"error updating models: {e}", file=sys.stderr)
83
+ return 1
84
+
85
+
86
+ def build_parser() -> argparse.ArgumentParser:
87
+ parser = argparse.ArgumentParser(prog="llmcapa", description="Lookup LLM model capabilities (offline).")
88
+ parser.add_argument("--version", action="version", version=f"llmcapa {__version__}")
89
+ parser.add_argument("--extra", metavar="JSON_FILE", help="load extra model data from a local JSON file")
90
+ sub = parser.add_subparsers(dest="command")
91
+
92
+ p_show = sub.add_parser("show", help="show capability of a model")
93
+ p_show.add_argument("model_id")
94
+ p_show.add_argument("--json", action="store_true", help="output as JSON")
95
+ p_show.set_defaults(func=_cmd_show)
96
+
97
+ p_list = sub.add_parser("list", help="list known models")
98
+ p_list.add_argument("--provider", help="filter by provider")
99
+ p_list.add_argument("--json", action="store_true", help="output as JSON")
100
+ p_list.add_argument("--no-deprecated", action="store_true", help="hide deprecated models")
101
+ p_list.set_defaults(func=_cmd_list)
102
+
103
+ p_prov = sub.add_parser("providers", help="list known providers")
104
+ p_prov.set_defaults(func=_cmd_providers)
105
+
106
+ p_upd = sub.add_parser("update", help="fetch and update OpenRouter models cache")
107
+ p_upd.set_defaults(func=_cmd_update)
108
+
109
+ return parser
110
+
111
+
112
+ def main(argv: Optional[List[str]] = None) -> int:
113
+ parser = build_parser()
114
+ args = parser.parse_args(argv)
115
+ if args.extra:
116
+ default_registry().load_extra(args.extra)
117
+ if not getattr(args, "command", None):
118
+ parser.print_help()
119
+ return 0
120
+ return args.func(args)
121
+
122
+
123
+ if __name__ == "__main__":
124
+ raise SystemExit(main())
@@ -0,0 +1 @@
1
+ """Bundled capability data files (JSON)."""
@@ -0,0 +1,110 @@
1
+ {
2
+ "models": [
3
+ {
4
+ "provider": "amazon",
5
+ "model_id": "nova-pro-v1",
6
+ "display_name": "Amazon Nova Pro",
7
+ "context_window": 300000,
8
+ "max_output_tokens": 5120,
9
+ "input_modalities": ["text", "image", "video"],
10
+ "output_modalities": ["text"],
11
+ "supports_chat_completion": true,
12
+ "supports_function_calling": true,
13
+ "supports_json_mode": true,
14
+ "supports_streaming": true,
15
+ "supports_vision": true,
16
+ "supports_reasoning": true,
17
+ "supports_reasoning_effort": true,
18
+ "knowledge_cutoff": "2024-12",
19
+ "pricing": {"input_per_1m": 0.8, "output_per_1m": 3.2, "currency": "USD"},
20
+ "aliases": ["amazon.nova-pro-v1:0"]
21
+ },
22
+ {
23
+ "provider": "amazon",
24
+ "model_id": "nova-lite-v1",
25
+ "display_name": "Amazon Nova Lite",
26
+ "context_window": 300000,
27
+ "max_output_tokens": 5120,
28
+ "input_modalities": ["text", "image", "video"],
29
+ "output_modalities": ["text"],
30
+ "supports_chat_completion": true,
31
+ "supports_function_calling": true,
32
+ "supports_json_mode": true,
33
+ "supports_streaming": true,
34
+ "supports_vision": true,
35
+ "supports_reasoning": false,
36
+ "knowledge_cutoff": "2024-12",
37
+ "pricing": {"input_per_1m": 0.06, "output_per_1m": 0.24, "currency": "USD"},
38
+ "aliases": ["amazon.nova-lite-v1:0"]
39
+ },
40
+ {
41
+ "provider": "amazon",
42
+ "model_id": "nova-micro-v1",
43
+ "display_name": "Amazon Nova Micro",
44
+ "context_window": 128000,
45
+ "max_output_tokens": 5120,
46
+ "input_modalities": ["text"],
47
+ "output_modalities": ["text"],
48
+ "supports_chat_completion": true,
49
+ "supports_function_calling": true,
50
+ "supports_json_mode": true,
51
+ "supports_streaming": true,
52
+ "supports_vision": false,
53
+ "supports_reasoning": false,
54
+ "knowledge_cutoff": "2024-12",
55
+ "pricing": {"input_per_1m": 0.035, "output_per_1m": 0.14, "currency": "USD"},
56
+ "aliases": ["amazon.nova-micro-v1:0"]
57
+ },
58
+ {
59
+ "provider": "amazon",
60
+ "model_id": "titan-text-premier-v1",
61
+ "display_name": "Amazon Titan Text Premier",
62
+ "context_window": 32000,
63
+ "max_output_tokens": 32000,
64
+ "input_modalities": ["text"],
65
+ "output_modalities": ["text"],
66
+ "supports_chat_completion": true,
67
+ "supports_function_calling": true,
68
+ "supports_json_mode": false,
69
+ "supports_streaming": true,
70
+ "supports_vision": false,
71
+ "supports_reasoning": false,
72
+ "knowledge_cutoff": "2023-12",
73
+ "aliases": ["amazon.titan-text-premier-v1:0"]
74
+ },
75
+ {
76
+ "provider": "amazon",
77
+ "model_id": "titan-text-express-v1",
78
+ "display_name": "Amazon Titan Text Express",
79
+ "context_window": 8000,
80
+ "max_output_tokens": 8000,
81
+ "input_modalities": ["text"],
82
+ "output_modalities": ["text"],
83
+ "supports_chat_completion": true,
84
+ "supports_function_calling": true,
85
+ "supports_json_mode": false,
86
+ "supports_streaming": true,
87
+ "supports_vision": false,
88
+ "supports_reasoning": false,
89
+ "knowledge_cutoff": "2023-12",
90
+ "aliases": ["amazon.titan-text-express-v1"]
91
+ },
92
+ {
93
+ "provider": "amazon",
94
+ "model_id": "titan-text-lite-v1",
95
+ "display_name": "Amazon Titan Text Lite",
96
+ "context_window": 4000,
97
+ "max_output_tokens": 4096,
98
+ "input_modalities": ["text"],
99
+ "output_modalities": ["text"],
100
+ "supports_chat_completion": true,
101
+ "supports_function_calling": false,
102
+ "supports_json_mode": false,
103
+ "supports_streaming": true,
104
+ "supports_vision": false,
105
+ "supports_reasoning": false,
106
+ "knowledge_cutoff": "2023-12",
107
+ "aliases": ["amazon.titan-text-lite-v1"]
108
+ }
109
+ ]
110
+ }
@@ -0,0 +1,298 @@
1
+ {
2
+ "models": [
3
+ {
4
+ "provider": "anthropic",
5
+ "model_id": "claude-fable-5",
6
+ "display_name": "Claude Fable 5",
7
+ "context_window": 1000000,
8
+ "max_output_tokens": 128000,
9
+ "input_modalities": ["text", "image"],
10
+ "output_modalities": ["text"],
11
+ "supports_function_calling": true,
12
+ "supports_json_mode": false,
13
+ "supports_streaming": true,
14
+ "supports_vision": true,
15
+ "supports_reasoning": true,
16
+ "supports_thinking_budget": true,
17
+ "knowledge_cutoff": "2026-01",
18
+ "pricing": {"input_per_1m": 10.0, "output_per_1m": 50.0, "currency": "USD"},
19
+ "aliases": ["claude-fable-5-latest"]
20
+ },
21
+ {
22
+ "provider": "anthropic",
23
+ "model_id": "claude-mythos-5",
24
+ "display_name": "Claude Mythos 5",
25
+ "context_window": 1000000,
26
+ "max_output_tokens": 128000,
27
+ "input_modalities": ["text", "image"],
28
+ "output_modalities": ["text"],
29
+ "supports_function_calling": true,
30
+ "supports_json_mode": false,
31
+ "supports_streaming": true,
32
+ "supports_vision": true,
33
+ "supports_reasoning": true,
34
+ "supports_thinking_budget": true,
35
+ "knowledge_cutoff": "2026-01",
36
+ "pricing": {"input_per_1m": 10.0, "output_per_1m": 50.0, "currency": "USD"},
37
+ "aliases": ["claude-mythos-5-latest"]
38
+ },
39
+ {
40
+ "provider": "anthropic",
41
+ "model_id": "claude-mythos-preview",
42
+ "display_name": "Claude Mythos Preview",
43
+ "context_window": 1000000,
44
+ "max_output_tokens": 128000,
45
+ "input_modalities": ["text", "image"],
46
+ "output_modalities": ["text"],
47
+ "supports_function_calling": true,
48
+ "supports_json_mode": false,
49
+ "supports_streaming": true,
50
+ "supports_vision": true,
51
+ "supports_reasoning": true,
52
+ "supports_thinking_budget": true,
53
+ "knowledge_cutoff": "2025-08",
54
+ "pricing": {"input_per_1m": 25.0, "output_per_1m": 125.0, "currency": "USD"},
55
+ "aliases": []
56
+ },
57
+ {
58
+ "provider": "anthropic",
59
+ "model_id": "claude-opus-4-8",
60
+ "display_name": "Claude Opus 4.8",
61
+ "context_window": 1000000,
62
+ "max_output_tokens": 32000,
63
+ "input_modalities": ["text", "image"],
64
+ "output_modalities": ["text"],
65
+ "supports_function_calling": true,
66
+ "supports_json_mode": false,
67
+ "supports_streaming": true,
68
+ "supports_vision": true,
69
+ "supports_reasoning": true,
70
+ "supports_thinking_budget": true,
71
+ "knowledge_cutoff": "2026-01",
72
+ "pricing": {"input_per_1m": 5.0, "output_per_1m": 25.0, "currency": "USD"},
73
+ "aliases": ["claude-opus-4-8-latest"]
74
+ },
75
+ {
76
+ "provider": "anthropic",
77
+ "model_id": "claude-opus-4-7",
78
+ "display_name": "Claude Opus 4.7",
79
+ "context_window": 1000000,
80
+ "max_output_tokens": 32000,
81
+ "input_modalities": ["text", "image"],
82
+ "output_modalities": ["text"],
83
+ "supports_function_calling": true,
84
+ "supports_json_mode": false,
85
+ "supports_streaming": true,
86
+ "supports_vision": true,
87
+ "supports_reasoning": true,
88
+ "supports_thinking_budget": true,
89
+ "knowledge_cutoff": "2026-01",
90
+ "pricing": {"input_per_1m": 5.0, "output_per_1m": 25.0, "currency": "USD"},
91
+ "aliases": []
92
+ },
93
+ {
94
+ "provider": "anthropic",
95
+ "model_id": "claude-sonnet-4-6",
96
+ "display_name": "Claude Sonnet 4.6",
97
+ "context_window": 1000000,
98
+ "max_output_tokens": 32000,
99
+ "input_modalities": ["text", "image"],
100
+ "output_modalities": ["text"],
101
+ "supports_function_calling": true,
102
+ "supports_json_mode": false,
103
+ "supports_streaming": true,
104
+ "supports_vision": true,
105
+ "supports_reasoning": true,
106
+ "supports_thinking_budget": true,
107
+ "knowledge_cutoff": "2025-08",
108
+ "pricing": {"input_per_1m": 3.0, "output_per_1m": 15.0, "currency": "USD"},
109
+ "aliases": []
110
+ },
111
+ {
112
+ "provider": "anthropic",
113
+ "model_id": "claude-opus-4-6",
114
+ "display_name": "Claude Opus 4.6",
115
+ "context_window": 1000000,
116
+ "max_output_tokens": 32000,
117
+ "input_modalities": ["text", "image"],
118
+ "output_modalities": ["text"],
119
+ "supports_function_calling": true,
120
+ "supports_json_mode": false,
121
+ "supports_streaming": true,
122
+ "supports_vision": true,
123
+ "supports_reasoning": true,
124
+ "supports_thinking_budget": true,
125
+ "knowledge_cutoff": "2025-08",
126
+ "pricing": {"input_per_1m": 5.0, "output_per_1m": 25.0, "currency": "USD"},
127
+ "aliases": []
128
+ },
129
+ {
130
+ "provider": "anthropic",
131
+ "model_id": "claude-haiku-4-5",
132
+ "display_name": "Claude Haiku 4.5",
133
+ "context_window": 200000,
134
+ "max_output_tokens": 8192,
135
+ "input_modalities": ["text", "image"],
136
+ "output_modalities": ["text"],
137
+ "supports_function_calling": true,
138
+ "supports_json_mode": false,
139
+ "supports_streaming": true,
140
+ "supports_vision": true,
141
+ "supports_reasoning": true,
142
+ "supports_thinking_budget": true,
143
+ "knowledge_cutoff": "2025-07",
144
+ "pricing": {"input_per_1m": 0.25, "output_per_1m": 1.25, "currency": "USD"},
145
+ "aliases": []
146
+ },
147
+ {
148
+ "provider": "anthropic",
149
+ "model_id": "claude-sonnet-4-5",
150
+ "display_name": "Claude Sonnet 4.5",
151
+ "context_window": 200000,
152
+ "max_output_tokens": 8192,
153
+ "input_modalities": ["text", "image"],
154
+ "output_modalities": ["text"],
155
+ "supports_function_calling": true,
156
+ "supports_json_mode": false,
157
+ "supports_streaming": true,
158
+ "supports_vision": true,
159
+ "supports_reasoning": true,
160
+ "supports_thinking_budget": true,
161
+ "knowledge_cutoff": "2025-08",
162
+ "pricing": {"input_per_1m": 3.0, "output_per_1m": 15.0, "currency": "USD"},
163
+ "aliases": []
164
+ },
165
+ {
166
+ "provider": "anthropic",
167
+ "model_id": "claude-3-5-sonnet",
168
+ "display_name": "Claude 3.5 Sonnet",
169
+ "context_window": 200000,
170
+ "max_output_tokens": 8192,
171
+ "input_modalities": ["text", "image"],
172
+ "output_modalities": ["text"],
173
+ "supports_function_calling": true,
174
+ "supports_json_mode": false,
175
+ "supports_streaming": true,
176
+ "supports_vision": true,
177
+ "supports_reasoning": false,
178
+ "knowledge_cutoff": "2024-04",
179
+ "aliases": ["claude-3-5-sonnet-20241022", "claude-3-5-sonnet-latest"]
180
+ },
181
+ {
182
+ "provider": "anthropic",
183
+ "model_id": "claude-3-5-haiku",
184
+ "display_name": "Claude 3.5 Haiku",
185
+ "context_window": 200000,
186
+ "max_output_tokens": 8192,
187
+ "input_modalities": ["text", "image"],
188
+ "output_modalities": ["text"],
189
+ "supports_function_calling": true,
190
+ "supports_json_mode": false,
191
+ "supports_streaming": true,
192
+ "supports_vision": true,
193
+ "supports_reasoning": false,
194
+ "knowledge_cutoff": "2024-07",
195
+ "aliases": ["claude-3-5-haiku-20241022", "claude-3-5-haiku-latest"]
196
+ },
197
+ {
198
+ "provider": "anthropic",
199
+ "model_id": "claude-3-7-sonnet",
200
+ "display_name": "Claude 3.7 Sonnet",
201
+ "context_window": 200000,
202
+ "max_output_tokens": 64000,
203
+ "input_modalities": ["text", "image"],
204
+ "output_modalities": ["text"],
205
+ "supports_function_calling": true,
206
+ "supports_json_mode": false,
207
+ "supports_streaming": true,
208
+ "supports_vision": true,
209
+ "supports_reasoning": true,
210
+ "supports_thinking_budget": true,
211
+ "knowledge_cutoff": "2024-11",
212
+ "aliases": ["claude-3-7-sonnet-20250219", "claude-3-7-sonnet-latest"]
213
+ },
214
+ {
215
+ "provider": "anthropic",
216
+ "model_id": "claude-sonnet-4",
217
+ "display_name": "Claude Sonnet 4",
218
+ "context_window": 200000,
219
+ "max_output_tokens": 64000,
220
+ "input_modalities": ["text", "image"],
221
+ "output_modalities": ["text"],
222
+ "supports_function_calling": true,
223
+ "supports_json_mode": false,
224
+ "supports_streaming": true,
225
+ "supports_vision": true,
226
+ "supports_reasoning": true,
227
+ "supports_thinking_budget": true,
228
+ "knowledge_cutoff": "2025-03",
229
+ "aliases": ["claude-sonnet-4-20250514"]
230
+ },
231
+ {
232
+ "provider": "anthropic",
233
+ "model_id": "claude-opus-4",
234
+ "display_name": "Claude Opus 4",
235
+ "context_window": 200000,
236
+ "max_output_tokens": 32000,
237
+ "input_modalities": ["text", "image"],
238
+ "output_modalities": ["text"],
239
+ "supports_function_calling": true,
240
+ "supports_json_mode": false,
241
+ "supports_streaming": true,
242
+ "supports_vision": true,
243
+ "supports_reasoning": true,
244
+ "supports_thinking_budget": true,
245
+ "knowledge_cutoff": "2025-03",
246
+ "aliases": ["claude-opus-4-20250514"]
247
+ },
248
+ {
249
+ "provider": "anthropic",
250
+ "model_id": "claude-3-opus",
251
+ "display_name": "Claude 3 Opus",
252
+ "context_window": 200000,
253
+ "max_output_tokens": 4096,
254
+ "input_modalities": ["text", "image"],
255
+ "output_modalities": ["text"],
256
+ "supports_function_calling": true,
257
+ "supports_json_mode": false,
258
+ "supports_streaming": true,
259
+ "supports_vision": true,
260
+ "supports_reasoning": false,
261
+ "knowledge_cutoff": "2023-08",
262
+ "aliases": ["claude-3-opus-20240229"]
263
+ },
264
+ {
265
+ "provider": "anthropic",
266
+ "model_id": "claude-3-sonnet",
267
+ "display_name": "Claude 3 Sonnet",
268
+ "context_window": 200000,
269
+ "max_output_tokens": 4096,
270
+ "input_modalities": ["text", "image"],
271
+ "output_modalities": ["text"],
272
+ "supports_function_calling": true,
273
+ "supports_json_mode": false,
274
+ "supports_streaming": true,
275
+ "supports_vision": true,
276
+ "supports_reasoning": false,
277
+ "knowledge_cutoff": "2023-08",
278
+ "deprecated": true,
279
+ "aliases": ["claude-3-sonnet-20240229"]
280
+ },
281
+ {
282
+ "provider": "anthropic",
283
+ "model_id": "claude-3-haiku",
284
+ "display_name": "Claude 3 Haiku",
285
+ "context_window": 200000,
286
+ "max_output_tokens": 4096,
287
+ "input_modalities": ["text", "image"],
288
+ "output_modalities": ["text"],
289
+ "supports_function_calling": true,
290
+ "supports_json_mode": false,
291
+ "supports_streaming": true,
292
+ "supports_vision": true,
293
+ "supports_reasoning": false,
294
+ "knowledge_cutoff": "2023-08",
295
+ "aliases": ["claude-3-haiku-20240307"]
296
+ }
297
+ ]
298
+ }
@@ -0,0 +1,76 @@
1
+ {
2
+ "models": [
3
+ {
4
+ "provider": "deepseek",
5
+ "model_id": "deepseek-v4-pro",
6
+ "display_name": "DeepSeek-V4-Pro",
7
+ "context_window": 1000000,
8
+ "max_output_tokens": 131072,
9
+ "input_modalities": ["text", "image"],
10
+ "output_modalities": ["text"],
11
+ "supports_chat_completion": true,
12
+ "supports_function_calling": true,
13
+ "supports_json_mode": true,
14
+ "supports_streaming": true,
15
+ "supports_vision": true,
16
+ "supports_reasoning": true,
17
+ "supports_thinking_budget": true,
18
+ "knowledge_cutoff": "2026-03",
19
+ "pricing": {"input_per_1m": 0.5, "output_per_1m": 3.48, "currency": "USD"},
20
+ "aliases": ["deepseek/deepseek-v4-pro", "deepseek-v4-pro-max"]
21
+ },
22
+ {
23
+ "provider": "deepseek",
24
+ "model_id": "deepseek-v4-flash",
25
+ "display_name": "DeepSeek-V4-Flash",
26
+ "context_window": 1000000,
27
+ "max_output_tokens": 65536,
28
+ "input_modalities": ["text", "image"],
29
+ "output_modalities": ["text"],
30
+ "supports_chat_completion": true,
31
+ "supports_function_calling": true,
32
+ "supports_json_mode": true,
33
+ "supports_streaming": true,
34
+ "supports_vision": true,
35
+ "supports_reasoning": true,
36
+ "supports_thinking_budget": true,
37
+ "knowledge_cutoff": "2026-03",
38
+ "pricing": {"input_per_1m": 0.05, "output_per_1m": 0.3, "currency": "USD"},
39
+ "aliases": ["deepseek/deepseek-v4-flash", "deepseek-v4-flash-max"]
40
+ },
41
+ {
42
+ "provider": "deepseek",
43
+ "model_id": "deepseek-v3",
44
+ "display_name": "DeepSeek-V3",
45
+ "context_window": 65536,
46
+ "max_output_tokens": 8192,
47
+ "input_modalities": ["text"],
48
+ "output_modalities": ["text"],
49
+ "supports_chat_completion": true,
50
+ "supports_function_calling": true,
51
+ "supports_json_mode": true,
52
+ "supports_streaming": true,
53
+ "supports_vision": false,
54
+ "supports_reasoning": false,
55
+ "knowledge_cutoff": "2024-07",
56
+ "aliases": ["deepseek-chat", "deepseek/deepseek-chat"]
57
+ },
58
+ {
59
+ "provider": "deepseek",
60
+ "model_id": "deepseek-r1",
61
+ "display_name": "DeepSeek-R1",
62
+ "context_window": 65536,
63
+ "max_output_tokens": 8192,
64
+ "input_modalities": ["text"],
65
+ "output_modalities": ["text"],
66
+ "supports_chat_completion": true,
67
+ "supports_function_calling": false,
68
+ "supports_json_mode": true,
69
+ "supports_streaming": true,
70
+ "supports_vision": false,
71
+ "supports_reasoning": true,
72
+ "knowledge_cutoff": "2024-07",
73
+ "aliases": ["deepseek-reasoner", "deepseek/deepseek-r1", "deepseek-r1:671b"]
74
+ }
75
+ ]
76
+ }