ecocost 0.2.2__tar.gz → 0.2.4__tar.gz
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.
- {ecocost-0.2.2 → ecocost-0.2.4}/PKG-INFO +5 -3
- {ecocost-0.2.2 → ecocost-0.2.4}/README.md +4 -2
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/__init__.py +24 -1
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/calc.py +20 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/data/models.yaml +806 -2
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/data/sources.yaml +1 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/loader.py +62 -2
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/result.py +8 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/schema.py +11 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/pyproject.toml +1 -1
- {ecocost-0.2.2 → ecocost-0.2.4}/LICENSE +0 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/NOTICE +0 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/data/hardware.yaml +0 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/data/providers.yaml +0 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/data/regions.yaml +0 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/display.py +0 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/errors.py +0 -0
- {ecocost-0.2.2 → ecocost-0.2.4}/ecocost/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ecocost
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Per-run carbon, energy and water estimates for AI inference, with computed confidence and sourced inputs
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -66,8 +66,10 @@ r["confidence"] # {"level": "low", "range_ratio": 16.6, "reasons": ["wue_assume
|
|
|
66
66
|
Model ids are matched through aliases, so provider-specific ids such as
|
|
67
67
|
`accounts/fireworks/models/gpt-oss-120b` resolve to the same record. A model
|
|
68
68
|
that isn't in the knowledge base raises `UnknownModelError`, which suggests
|
|
69
|
-
close matches and links to [adding it](CONTRIBUTING.md#adding-a-model).
|
|
70
|
-
|
|
69
|
+
close matches and links to [adding it](CONTRIBUTING.md#adding-a-model). The
|
|
70
|
+
exception is a model listed as a [proxy](API.md#unknown-models-and-providers)
|
|
71
|
+
of a related record: it is estimated from that record and flagged, with a
|
|
72
|
+
wider range and low confidence. Ids are matched ignoring case.
|
|
71
73
|
|
|
72
74
|
## Provider ids
|
|
73
75
|
|
|
@@ -35,8 +35,10 @@ r["confidence"] # {"level": "low", "range_ratio": 16.6, "reasons": ["wue_assume
|
|
|
35
35
|
Model ids are matched through aliases, so provider-specific ids such as
|
|
36
36
|
`accounts/fireworks/models/gpt-oss-120b` resolve to the same record. A model
|
|
37
37
|
that isn't in the knowledge base raises `UnknownModelError`, which suggests
|
|
38
|
-
close matches and links to [adding it](CONTRIBUTING.md#adding-a-model).
|
|
39
|
-
|
|
38
|
+
close matches and links to [adding it](CONTRIBUTING.md#adding-a-model). The
|
|
39
|
+
exception is a model listed as a [proxy](API.md#unknown-models-and-providers)
|
|
40
|
+
of a related record: it is estimated from that record and flagged, with a
|
|
41
|
+
wider range and low confidence. Ids are matched ignoring case.
|
|
40
42
|
|
|
41
43
|
## Provider ids
|
|
42
44
|
|
|
@@ -62,6 +62,10 @@ def estimate(
|
|
|
62
62
|
region, including one implied by ``endpoint``; the provider still sets
|
|
63
63
|
PUE, water use and hardware.
|
|
64
64
|
|
|
65
|
+
A model with no record that a reviewer listed as a proxy of a related one
|
|
66
|
+
is estimated from it: ``proxy`` in the result names both, the range is
|
|
67
|
+
wider and confidence is low.
|
|
68
|
+
|
|
65
69
|
Ids are matched ignoring case. ``UnknownModelError``,
|
|
66
70
|
``UnknownProviderError`` and ``UnknownRegionError`` suggest close matches and where to add the
|
|
67
71
|
record. Bad arguments raise ``TypeError`` or ``ValueError``.
|
|
@@ -76,7 +80,14 @@ def estimate(
|
|
|
76
80
|
cached_input_tokens,
|
|
77
81
|
)
|
|
78
82
|
kb = get_kb()
|
|
79
|
-
|
|
83
|
+
proxy = None
|
|
84
|
+
try:
|
|
85
|
+
m = kb.resolve_model(model)
|
|
86
|
+
except UnknownModelError:
|
|
87
|
+
if not (hit := kb.resolve_proxy(model)):
|
|
88
|
+
raise
|
|
89
|
+
m, proxy_id, proxy = hit
|
|
90
|
+
m = calc.as_proxy(m)
|
|
80
91
|
p, provider_reason = kb.resolve_provider(provider, endpoint=endpoint, model=m)
|
|
81
92
|
if region is not None:
|
|
82
93
|
# the caller knows the site: it is pinned, so no candidates or widening
|
|
@@ -100,7 +111,19 @@ def estimate(
|
|
|
100
111
|
)
|
|
101
112
|
if provider_reason:
|
|
102
113
|
est.reasons.insert(0, provider_reason)
|
|
114
|
+
if proxy:
|
|
115
|
+
est.reasons.insert(0, "model_inferred_from_sibling")
|
|
103
116
|
out = est.to_dict()
|
|
117
|
+
out["proxy"] = None
|
|
118
|
+
if proxy:
|
|
119
|
+
# a sibling's size is a guess however narrow the range comes out
|
|
120
|
+
out["confidence"]["level"] = "low"
|
|
121
|
+
out["proxy"] = {
|
|
122
|
+
"model": proxy_id,
|
|
123
|
+
"estimated_from": m.id,
|
|
124
|
+
"note": proxy.note,
|
|
125
|
+
"source": proxy.source,
|
|
126
|
+
}
|
|
104
127
|
out["requested"] = {
|
|
105
128
|
"model": model,
|
|
106
129
|
"provider": provider,
|
|
@@ -17,6 +17,7 @@ carbon range and explained by listing every tier-3 input that went into it.
|
|
|
17
17
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
|
+
import dataclasses
|
|
20
21
|
from collections.abc import Sequence
|
|
21
22
|
from dataclasses import dataclass
|
|
22
23
|
|
|
@@ -252,6 +253,25 @@ class Estimate:
|
|
|
252
253
|
}
|
|
253
254
|
|
|
254
255
|
|
|
256
|
+
def as_proxy(model: Model) -> Model:
|
|
257
|
+
"""The record a proxy id is estimated from, made honest for other
|
|
258
|
+
weights: the size becomes an assumption, widened to at least the tier-3
|
|
259
|
+
half-width either way, and measured energy is dropped because it
|
|
260
|
+
measured this record's weights, not the proxy's."""
|
|
261
|
+
f = model.active_params_b
|
|
262
|
+
half_width = DEFAULT_HALF_WIDTH[Tier.assumed]
|
|
263
|
+
return dataclasses.replace(
|
|
264
|
+
model,
|
|
265
|
+
active_params_b=dataclasses.replace(
|
|
266
|
+
f,
|
|
267
|
+
tier=Tier.assumed,
|
|
268
|
+
min=min(f.min, f.value / half_width),
|
|
269
|
+
max=max(f.max, f.value * half_width),
|
|
270
|
+
),
|
|
271
|
+
measured_wh_per_1k_output_tokens_h100=None,
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
|
|
255
275
|
def _h100_seconds(
|
|
256
276
|
model: Model, reference: Hardware, tokens: float, utilization: Range
|
|
257
277
|
) -> Range:
|
|
@@ -286,6 +286,30 @@ models:
|
|
|
286
286
|
stale_after: '2027-03-31'
|
|
287
287
|
sources:
|
|
288
288
|
- resource: https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Thinking
|
|
289
|
+
qwen3-vl-235b-a22b-instruct:
|
|
290
|
+
label: Qwen3 VL 235B-A22B Instruct
|
|
291
|
+
creator: Qwen
|
|
292
|
+
open_weights: true
|
|
293
|
+
total_params_b: 235
|
|
294
|
+
aliases:
|
|
295
|
+
- accounts/fireworks/models/qwen3-vl-235b-a22b-instruct
|
|
296
|
+
- qwen/qwen3-vl-235b-a22b-instruct
|
|
297
|
+
active_params_b:
|
|
298
|
+
value: 22
|
|
299
|
+
unit: B
|
|
300
|
+
tier: 1
|
|
301
|
+
source: https://arxiv.org/html/2511.21631#S2
|
|
302
|
+
note: MoE, 235B total with 22B activated per token, per the Qwen3-VL Technical Report (Qwen Team, 2025), section 2; config.json has
|
|
303
|
+
128 experts, 8 per token.
|
|
304
|
+
provenance:
|
|
305
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
306
|
+
verified: []
|
|
307
|
+
status: draft
|
|
308
|
+
stale_after: '2027-04-27'
|
|
309
|
+
sources:
|
|
310
|
+
- resource: https://arxiv.org/html/2511.21631#S2
|
|
311
|
+
- resource: https://huggingface.co/Qwen/Qwen3-VL-235B-A22B-Instruct
|
|
312
|
+
- resource: https://fireworks.ai/models/fireworks/qwen3-vl-235b-a22b-instruct
|
|
289
313
|
glm-5.3:
|
|
290
314
|
label: GLM-5.3
|
|
291
315
|
creator: Z.ai
|
|
@@ -331,6 +355,82 @@ models:
|
|
|
331
355
|
stale_after: '2027-03-31'
|
|
332
356
|
sources:
|
|
333
357
|
- resource: https://huggingface.co/zai-org/GLM-5.3-Flash
|
|
358
|
+
glm-5.2:
|
|
359
|
+
label: GLM-5.2
|
|
360
|
+
creator: Z.ai
|
|
361
|
+
open_weights: true
|
|
362
|
+
total_params_b: 753
|
|
363
|
+
aliases:
|
|
364
|
+
- accounts/fireworks/models/glm-5p2
|
|
365
|
+
- z-ai/glm-5.2
|
|
366
|
+
- zai-org/glm-5.2
|
|
367
|
+
active_params_b:
|
|
368
|
+
value: 39.4
|
|
369
|
+
unit: B
|
|
370
|
+
tier: 2
|
|
371
|
+
source: https://huggingface.co/zai-org/GLM-5.2/blob/main/config.json
|
|
372
|
+
note: "Card states no size. Computed from config.json (glm_moe_dsa: 78 layers, first 3 dense; 256 routed + 1 shared expert, 8 routed per token; MLA; DSA indexer computed on the first 3 layers, then 1 of every 4): 39.4B active, excluding embeddings, LM head and the MTP layer. The same method gives 39.9B for GLM-5's config, which its card states as 40B active, and 32.1B for GLM-4.5's, stated as 32B. total_params_b is the HF safetensors count incl. the MTP layer (753.3B; 743B without it)."
|
|
373
|
+
provenance:
|
|
374
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
375
|
+
verified: []
|
|
376
|
+
status: draft
|
|
377
|
+
stale_after: '2027-04-27'
|
|
378
|
+
sources:
|
|
379
|
+
- resource: https://huggingface.co/zai-org/GLM-5.2
|
|
380
|
+
- resource: https://huggingface.co/zai-org/GLM-5.2/blob/main/config.json
|
|
381
|
+
- resource: https://huggingface.co/zai-org/GLM-5
|
|
382
|
+
- resource: https://huggingface.co/zai-org/GLM-4.5
|
|
383
|
+
- resource: https://fireworks.ai/models/fireworks/glm-5p2
|
|
384
|
+
glm-5.1:
|
|
385
|
+
label: GLM-5.1
|
|
386
|
+
creator: Z.ai
|
|
387
|
+
open_weights: true
|
|
388
|
+
total_params_b: 754
|
|
389
|
+
aliases:
|
|
390
|
+
- accounts/fireworks/models/glm-5p1
|
|
391
|
+
- z-ai/glm-5.1
|
|
392
|
+
- zai-org/glm-5.1
|
|
393
|
+
active_params_b:
|
|
394
|
+
value: 39.9
|
|
395
|
+
unit: B
|
|
396
|
+
tier: 2
|
|
397
|
+
source: https://huggingface.co/zai-org/GLM-5.1/blob/main/config.json
|
|
398
|
+
note: "Card states no size. Computed from config.json, which matches GLM-5's except transformers_version (glm_moe_dsa: 78 layers, first 3 dense; 256 routed + 1 shared expert, 8 routed per token; MLA + DSA indexer): 39.9B active, excluding embeddings, LM head and the MTP layer; the GLM-5 card states 40B active for this architecture. total_params_b is the HF safetensors count incl. the MTP layer (753.9B; 744B without it). Fireworks serves Z.ai's FP8 checkpoint, zai-org/GLM-5.1-FP8."
|
|
399
|
+
provenance:
|
|
400
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
401
|
+
verified: []
|
|
402
|
+
status: draft
|
|
403
|
+
stale_after: '2027-04-27'
|
|
404
|
+
sources:
|
|
405
|
+
- resource: https://huggingface.co/zai-org/GLM-5.1
|
|
406
|
+
- resource: https://huggingface.co/zai-org/GLM-5.1/blob/main/config.json
|
|
407
|
+
- resource: https://huggingface.co/zai-org/GLM-5
|
|
408
|
+
- resource: https://fireworks.ai/models/fireworks/glm-5p1
|
|
409
|
+
glm-4.7:
|
|
410
|
+
label: GLM-4.7
|
|
411
|
+
creator: Z.ai
|
|
412
|
+
open_weights: true
|
|
413
|
+
total_params_b: 358
|
|
414
|
+
aliases:
|
|
415
|
+
- accounts/fireworks/models/glm-4p7
|
|
416
|
+
- z-ai/glm-4.7
|
|
417
|
+
- zai-org/glm-4.7
|
|
418
|
+
active_params_b:
|
|
419
|
+
value: 32.1
|
|
420
|
+
unit: B
|
|
421
|
+
tier: 2
|
|
422
|
+
source: https://huggingface.co/zai-org/GLM-4.7/blob/main/config.json
|
|
423
|
+
note: "Card states no size. Computed from config.json, which matches GLM-4.5's except max_position_embeddings (glm4_moe: 92 layers, first 3 dense; 160 routed + 1 shared expert, 8 routed per token; GQA 96/8 heads): 32.1B active, excluding embeddings, LM head and the MTP layer; the GLM-4.5 card states 32B active for this architecture. total_params_b is the HF safetensors count incl. the MTP layer (358.3B; 355B per the GLM-4.5 card)."
|
|
424
|
+
provenance:
|
|
425
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
426
|
+
verified: []
|
|
427
|
+
status: draft
|
|
428
|
+
stale_after: '2027-04-27'
|
|
429
|
+
sources:
|
|
430
|
+
- resource: https://huggingface.co/zai-org/GLM-4.7
|
|
431
|
+
- resource: https://huggingface.co/zai-org/GLM-4.7/blob/main/config.json
|
|
432
|
+
- resource: https://huggingface.co/zai-org/GLM-4.5
|
|
433
|
+
- resource: https://fireworks.ai/models/fireworks/glm-4p7
|
|
334
434
|
mistral-medium-3-5:
|
|
335
435
|
label: Mistral Medium 3.5
|
|
336
436
|
creator: Mistral
|
|
@@ -438,6 +538,31 @@ models:
|
|
|
438
538
|
stale_after: '2027-03-31'
|
|
439
539
|
sources:
|
|
440
540
|
- resource: https://docs.mistral.ai/models/mistral-small-4-0-26-03
|
|
541
|
+
mixtral-8x7b-instruct-v0.1:
|
|
542
|
+
label: Mixtral 8x7B Instruct
|
|
543
|
+
creator: Mistral
|
|
544
|
+
open_weights: true
|
|
545
|
+
total_params_b: 46.7
|
|
546
|
+
aliases:
|
|
547
|
+
- accounts/fireworks/models/mixtral-8x7b-instruct
|
|
548
|
+
- mistralai/mixtral-8x7b-instruct
|
|
549
|
+
- mistralai/mixtral-8x7b-instruct-v0.1
|
|
550
|
+
- mixtral-8x7b-32768
|
|
551
|
+
active_params_b:
|
|
552
|
+
value: 12.9
|
|
553
|
+
unit: B
|
|
554
|
+
tier: 1
|
|
555
|
+
source: https://mistral.ai/news/mixtral-of-experts
|
|
556
|
+
note: Sparse MoE, 2 of 8 experts per token; 46.7B total, 12.9B used per token per Mistral's release post (2023-12-11).
|
|
557
|
+
provenance:
|
|
558
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
559
|
+
verified: []
|
|
560
|
+
status: draft
|
|
561
|
+
stale_after: '2027-04-27'
|
|
562
|
+
sources:
|
|
563
|
+
- resource: https://mistral.ai/news/mixtral-of-experts
|
|
564
|
+
- resource: https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1
|
|
565
|
+
- resource: https://fireworks.ai/models/fireworks/mixtral-8x7b-instruct
|
|
441
566
|
sarvam-105b:
|
|
442
567
|
label: Sarvam 105B
|
|
443
568
|
creator: Sarvam AI
|
|
@@ -458,6 +583,28 @@ models:
|
|
|
458
583
|
stale_after: '2027-03-31'
|
|
459
584
|
sources:
|
|
460
585
|
- resource: https://huggingface.co/sarvamai/sarvam-105b
|
|
586
|
+
sarvam-m:
|
|
587
|
+
label: Sarvam-M
|
|
588
|
+
creator: Sarvam AI
|
|
589
|
+
open_weights: true
|
|
590
|
+
total_params_b: 23.6
|
|
591
|
+
aliases:
|
|
592
|
+
- sarvamai/sarvam-m
|
|
593
|
+
active_params_b:
|
|
594
|
+
value: 23.6
|
|
595
|
+
unit: B
|
|
596
|
+
tier: 1
|
|
597
|
+
source: https://huggingface.co/sarvamai/sarvam-m
|
|
598
|
+
note: Dense (MistralForCausalLM), all parameters active; 23,572,403,200 BF16 parameters per the repo's safetensors metadata, a
|
|
599
|
+
text-only post-train of Mistral-Small-3.1-24B (no vision encoder).
|
|
600
|
+
provenance:
|
|
601
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
602
|
+
verified: []
|
|
603
|
+
status: draft
|
|
604
|
+
stale_after: '2027-04-27'
|
|
605
|
+
sources:
|
|
606
|
+
- resource: https://huggingface.co/sarvamai/sarvam-m
|
|
607
|
+
- resource: https://huggingface.co/sarvamai/sarvam-m/blob/main/config.json
|
|
461
608
|
sunflower-14b:
|
|
462
609
|
label: Sunflower 14B
|
|
463
610
|
creator: Sunbird AI
|
|
@@ -683,6 +830,81 @@ models:
|
|
|
683
830
|
stale_after: '2027-03-31'
|
|
684
831
|
sources:
|
|
685
832
|
- resource: https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro
|
|
833
|
+
deepseek-v3.2:
|
|
834
|
+
label: DeepSeek V3.2
|
|
835
|
+
creator: DeepSeek
|
|
836
|
+
open_weights: true
|
|
837
|
+
total_params_b: 671
|
|
838
|
+
aliases:
|
|
839
|
+
- accounts/fireworks/models/deepseek-v3p2
|
|
840
|
+
- deepseek-ai/DeepSeek-V3.2
|
|
841
|
+
- deepseek/deepseek-v3.2
|
|
842
|
+
active_params_b:
|
|
843
|
+
value: 37
|
|
844
|
+
unit: B
|
|
845
|
+
tier: 2
|
|
846
|
+
source: https://huggingface.co/deepseek-ai/DeepSeek-V3.1
|
|
847
|
+
note: MoE. The V3.2 card and report give no activated count; report sec. 2.1 (https://arxiv.org/html/2512.02556v1#S2.SS1)
|
|
848
|
+
says V3.2 keeps the V3.1-Terminus architecture except for DeepSeek Sparse Attention (a small lightning indexer).
|
|
849
|
+
37B is the V3.1 card's activated figure, so derived; the indexer adds roughly 1B active, so it slightly undercounts.
|
|
850
|
+
provenance:
|
|
851
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
852
|
+
verified: []
|
|
853
|
+
status: draft
|
|
854
|
+
stale_after: '2027-04-27'
|
|
855
|
+
sources:
|
|
856
|
+
- resource: https://arxiv.org/html/2512.02556v1#S2.SS1
|
|
857
|
+
- resource: https://arxiv.org/abs/2512.02556
|
|
858
|
+
- resource: https://huggingface.co/deepseek-ai/DeepSeek-V3.2
|
|
859
|
+
- resource: https://huggingface.co/deepseek-ai/DeepSeek-V3.1
|
|
860
|
+
- resource: https://fireworks.ai/models/fireworks/deepseek-v3p2
|
|
861
|
+
deepseek-v3.1:
|
|
862
|
+
label: DeepSeek V3.1
|
|
863
|
+
creator: DeepSeek
|
|
864
|
+
open_weights: true
|
|
865
|
+
total_params_b: 671
|
|
866
|
+
aliases:
|
|
867
|
+
- accounts/fireworks/models/deepseek-v3p1
|
|
868
|
+
- deepseek-ai/DeepSeek-V3.1
|
|
869
|
+
- deepseek/deepseek-chat-v3.1
|
|
870
|
+
active_params_b:
|
|
871
|
+
value: 37
|
|
872
|
+
unit: B
|
|
873
|
+
tier: 1
|
|
874
|
+
source: https://huggingface.co/deepseek-ai/DeepSeek-V3.1
|
|
875
|
+
note: MoE, 671B total / 37B activated per the model card's download table.
|
|
876
|
+
provenance:
|
|
877
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
878
|
+
verified: []
|
|
879
|
+
status: draft
|
|
880
|
+
stale_after: '2027-04-27'
|
|
881
|
+
sources:
|
|
882
|
+
- resource: https://huggingface.co/deepseek-ai/DeepSeek-V3.1
|
|
883
|
+
- resource: https://fireworks.ai/models/fireworks/deepseek-v3p1
|
|
884
|
+
deepseek-r1:
|
|
885
|
+
label: DeepSeek R1
|
|
886
|
+
creator: DeepSeek
|
|
887
|
+
open_weights: true
|
|
888
|
+
total_params_b: 671
|
|
889
|
+
aliases:
|
|
890
|
+
- accounts/fireworks/models/deepseek-r1
|
|
891
|
+
- deepseek-ai/DeepSeek-R1
|
|
892
|
+
- deepseek/deepseek-r1
|
|
893
|
+
active_params_b:
|
|
894
|
+
value: 37
|
|
895
|
+
unit: B
|
|
896
|
+
tier: 1
|
|
897
|
+
source: https://huggingface.co/deepseek-ai/DeepSeek-R1
|
|
898
|
+
note: MoE, 671B total / 37B activated per the model card. Original January 2025 R1 weights, not
|
|
899
|
+
R1-0528.
|
|
900
|
+
provenance:
|
|
901
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
902
|
+
verified: []
|
|
903
|
+
status: draft
|
|
904
|
+
stale_after: '2027-04-27'
|
|
905
|
+
sources:
|
|
906
|
+
- resource: https://huggingface.co/deepseek-ai/DeepSeek-R1
|
|
907
|
+
- resource: https://fireworks.ai/models/fireworks/deepseek-r1
|
|
686
908
|
nemotron-3.5-lightning-30b-a3b:
|
|
687
909
|
label: Nemotron 3.5 Lightning 30B-A3B
|
|
688
910
|
creator: Nvidia
|
|
@@ -751,6 +973,74 @@ models:
|
|
|
751
973
|
stale_after: '2027-03-31'
|
|
752
974
|
sources:
|
|
753
975
|
- resource: https://huggingface.co/moonshotai/Kimi-K3
|
|
976
|
+
kimi-k2.6:
|
|
977
|
+
label: Kimi K2.6
|
|
978
|
+
creator: Moonshot AI
|
|
979
|
+
open_weights: true
|
|
980
|
+
total_params_b: 1000
|
|
981
|
+
aliases:
|
|
982
|
+
- accounts/fireworks/models/kimi-k2p6
|
|
983
|
+
- moonshotai/kimi-k2.6
|
|
984
|
+
active_params_b:
|
|
985
|
+
value: 32
|
|
986
|
+
unit: B
|
|
987
|
+
tier: 1
|
|
988
|
+
source: https://huggingface.co/moonshotai/Kimi-K2.6
|
|
989
|
+
note: MoE, 8 of 384 routed + 1 shared; 1T total, plus a 400M MoonViT vision encoder. Native INT4.
|
|
990
|
+
provenance:
|
|
991
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
992
|
+
verified: []
|
|
993
|
+
status: draft
|
|
994
|
+
stale_after: '2027-04-27'
|
|
995
|
+
sources:
|
|
996
|
+
- resource: https://huggingface.co/moonshotai/Kimi-K2.6
|
|
997
|
+
- resource: https://fireworks.ai/models/fireworks/kimi-k2p6
|
|
998
|
+
kimi-k2-thinking:
|
|
999
|
+
label: Kimi K2 Thinking
|
|
1000
|
+
creator: Moonshot AI
|
|
1001
|
+
open_weights: true
|
|
1002
|
+
total_params_b: 1000
|
|
1003
|
+
aliases:
|
|
1004
|
+
- accounts/fireworks/models/kimi-k2-thinking
|
|
1005
|
+
- fireworks/kimi-k2-thinking
|
|
1006
|
+
- moonshotai/kimi-k2-thinking
|
|
1007
|
+
active_params_b:
|
|
1008
|
+
value: 32
|
|
1009
|
+
unit: B
|
|
1010
|
+
tier: 1
|
|
1011
|
+
source: https://huggingface.co/moonshotai/Kimi-K2-Thinking
|
|
1012
|
+
note: MoE, 8 of 384 routed + 1 shared; 1T total. Native INT4 (QAT) weights for the MoE layers.
|
|
1013
|
+
provenance:
|
|
1014
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
1015
|
+
verified: []
|
|
1016
|
+
status: draft
|
|
1017
|
+
stale_after: '2027-04-27'
|
|
1018
|
+
sources:
|
|
1019
|
+
- resource: https://huggingface.co/moonshotai/Kimi-K2-Thinking
|
|
1020
|
+
- resource: https://fireworks.ai/models/fireworks/kimi-k2-thinking
|
|
1021
|
+
kimi-k2-instruct-0905:
|
|
1022
|
+
label: Kimi K2 Instruct 0905
|
|
1023
|
+
creator: Moonshot AI
|
|
1024
|
+
open_weights: true
|
|
1025
|
+
total_params_b: 1000
|
|
1026
|
+
aliases:
|
|
1027
|
+
- accounts/fireworks/models/kimi-k2-instruct-0905
|
|
1028
|
+
- moonshotai/kimi-k2-0905
|
|
1029
|
+
- moonshotai/kimi-k2-instruct-0905
|
|
1030
|
+
active_params_b:
|
|
1031
|
+
value: 32
|
|
1032
|
+
unit: B
|
|
1033
|
+
tier: 1
|
|
1034
|
+
source: https://huggingface.co/moonshotai/Kimi-K2-Instruct-0905
|
|
1035
|
+
note: MoE, 8 of 384 routed + 1 shared; 1T total. September 2025 update of Kimi K2 Instruct.
|
|
1036
|
+
provenance:
|
|
1037
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
1038
|
+
verified: []
|
|
1039
|
+
status: draft
|
|
1040
|
+
stale_after: '2027-04-27'
|
|
1041
|
+
sources:
|
|
1042
|
+
- resource: https://huggingface.co/moonshotai/Kimi-K2-Instruct-0905
|
|
1043
|
+
- resource: https://fireworks.ai/models/fireworks/kimi-k2-instruct-0905
|
|
754
1044
|
inkling:
|
|
755
1045
|
label: Inkling
|
|
756
1046
|
creator: Thinking Machines Lab
|
|
@@ -795,12 +1085,97 @@ models:
|
|
|
795
1085
|
stale_after: '2027-03-31'
|
|
796
1086
|
sources:
|
|
797
1087
|
- resource: https://huggingface.co/MiniMaxAI/MiniMax-M3
|
|
1088
|
+
minimax-m3.1-flash:
|
|
1089
|
+
label: MiniMax M3.1 Flash
|
|
1090
|
+
creator: MiniMax
|
|
1091
|
+
open_weights: true
|
|
1092
|
+
total_params_b: 428
|
|
1093
|
+
aliases:
|
|
1094
|
+
- accounts/fireworks/models/minimax-m3p1-flash
|
|
1095
|
+
- minimax/minimax-m3.1-flash
|
|
1096
|
+
active_params_b:
|
|
1097
|
+
value: 23
|
|
1098
|
+
unit: B
|
|
1099
|
+
tier: 1
|
|
1100
|
+
source: https://huggingface.co/MiniMaxAI/MiniMax-M3.1-Flash#model-at-a-glance
|
|
1101
|
+
note: MoE, ~428B total, 23B activated per token per model card (Model at a Glance). Sparse attention throughout, quantization-aware training.
|
|
1102
|
+
provenance:
|
|
1103
|
+
generated: {by: 'agent:claude-coverage-routine', at: '2026-10-27'}
|
|
1104
|
+
verified: []
|
|
1105
|
+
status: draft
|
|
1106
|
+
stale_after: '2027-04-27'
|
|
1107
|
+
sources:
|
|
1108
|
+
- resource: https://huggingface.co/MiniMaxAI/MiniMax-M3.1-Flash
|
|
1109
|
+
minimax-m2.7:
|
|
1110
|
+
label: MiniMax M2.7
|
|
1111
|
+
creator: MiniMax
|
|
1112
|
+
open_weights: true
|
|
1113
|
+
total_params_b: 229.9
|
|
1114
|
+
aliases:
|
|
1115
|
+
- accounts/fireworks/models/minimax-m2p7
|
|
1116
|
+
- fireworks/minimax-m2p7
|
|
1117
|
+
- MiniMaxAI/MiniMax-M2.7
|
|
1118
|
+
- minimax/minimax-m2.7
|
|
1119
|
+
active_params_b:
|
|
1120
|
+
value: 9.8
|
|
1121
|
+
unit: B
|
|
1122
|
+
tier: 2
|
|
1123
|
+
source: https://huggingface.co/MiniMaxAI/MiniMax-M2.7/blob/main/config.json
|
|
1124
|
+
note: "MoE, 256 experts, 8 per token. The card states no size. Computed from config.json, architecturally identical to MiniMax-M2 (same layers, dims, experts): 9.80B non-embedding activated. The MiniMax-M2 series tech report (https://arxiv.org/html/2605.26494v2#S2.SS1) gives 229.9B total / 9.8B activated for M2 and says M2.7 runs on ~10B activated parameters."
|
|
1125
|
+
provenance:
|
|
1126
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
1127
|
+
verified: []
|
|
1128
|
+
status: draft
|
|
1129
|
+
stale_after: '2027-04-27'
|
|
1130
|
+
sources:
|
|
1131
|
+
- resource: https://arxiv.org/html/2605.26494v2#S2.SS1
|
|
1132
|
+
- resource: https://arxiv.org/abs/2605.26494
|
|
1133
|
+
- resource: https://huggingface.co/MiniMaxAI/MiniMax-M2.7
|
|
1134
|
+
- resource: https://huggingface.co/MiniMaxAI/MiniMax-M2.7/blob/main/config.json
|
|
1135
|
+
- resource: https://fireworks.ai/models/fireworks/minimax-m2p7
|
|
1136
|
+
minimax-m2.1:
|
|
1137
|
+
label: MiniMax M2.1
|
|
1138
|
+
creator: MiniMax
|
|
1139
|
+
open_weights: true
|
|
1140
|
+
total_params_b: 229.9
|
|
1141
|
+
aliases:
|
|
1142
|
+
- accounts/fireworks/models/minimax-m2p1
|
|
1143
|
+
- MiniMaxAI/MiniMax-M2.1
|
|
1144
|
+
- minimax/minimax-m2.1
|
|
1145
|
+
active_params_b:
|
|
1146
|
+
value: 9.8
|
|
1147
|
+
unit: B
|
|
1148
|
+
tier: 2
|
|
1149
|
+
source: https://huggingface.co/MiniMaxAI/MiniMax-M2.1/blob/main/config.json
|
|
1150
|
+
note: MoE. The M2.1 card states no size. Computed from config.json (62 layers, hidden 3072, 256
|
|
1151
|
+
experts, 8 per token, expert FFN 1536, GQA 48/8 heads) gives 9.80B non-embedding activated. Config is
|
|
1152
|
+
architecturally identical to MiniMax-M2 (same layers, dims, experts), whose tech report gives 9.8B activated / 229.9B total
|
|
1153
|
+
(https://arxiv.org/html/2605.26494v2#S2.SS1).
|
|
1154
|
+
provenance:
|
|
1155
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
1156
|
+
verified: []
|
|
1157
|
+
status: draft
|
|
1158
|
+
stale_after: '2027-04-27'
|
|
1159
|
+
sources:
|
|
1160
|
+
- resource: https://huggingface.co/MiniMaxAI/MiniMax-M2.1/blob/main/config.json
|
|
1161
|
+
- resource: https://huggingface.co/MiniMaxAI/MiniMax-M2.1
|
|
1162
|
+
- resource: https://huggingface.co/MiniMaxAI/MiniMax-M2/blob/main/config.json
|
|
1163
|
+
- resource: https://arxiv.org/html/2605.26494v2#S2.SS1
|
|
1164
|
+
- resource: https://fireworks.ai/models/fireworks/minimax-m2p1
|
|
798
1165
|
gpt-4o:
|
|
799
1166
|
label: GPT-4o
|
|
800
1167
|
creator: OpenAI
|
|
801
1168
|
open_weights: false
|
|
802
1169
|
aliases:
|
|
803
1170
|
- gpt-4o-2024-08-06
|
|
1171
|
+
- openai-gpt-4o-prod-eastus2-1 # an Azure OpenAI deployment name
|
|
1172
|
+
proxies:
|
|
1173
|
+
- ids: [chatgpt-4o-latest]
|
|
1174
|
+
note: "OpenAI: a model alias for the GPT-4o snapshot used in ChatGPT; deprecated, no size of its own."
|
|
1175
|
+
source: https://developers.openai.com/api/docs/models/chatgpt-4o-latest
|
|
1176
|
+
- ids: [gpt-4o-realtime-preview, gpt-4o-realtime-preview-2025-06-03, gpt-4o-realtime-preview-2024-12-17, gpt-4o-realtime-preview-2024-10-01]
|
|
1177
|
+
note: "OpenAI: preview release of the GPT-4o Realtime model (audio and text); deprecated, no size of its own."
|
|
1178
|
+
source: https://developers.openai.com/api/docs/models/gpt-4o-realtime-preview
|
|
804
1179
|
active_params_b:
|
|
805
1180
|
value: 100
|
|
806
1181
|
unit: B
|
|
@@ -822,6 +1197,7 @@ models:
|
|
|
822
1197
|
open_weights: false
|
|
823
1198
|
aliases:
|
|
824
1199
|
- gpt-4o-mini-2024-07-18
|
|
1200
|
+
- openai-gpt-4o-mini-prod-eastus2-1 # an Azure OpenAI deployment name
|
|
825
1201
|
active_params_b:
|
|
826
1202
|
value: 12
|
|
827
1203
|
unit: B
|
|
@@ -837,6 +1213,84 @@ models:
|
|
|
837
1213
|
stale_after: '2027-03-31'
|
|
838
1214
|
sources:
|
|
839
1215
|
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1216
|
+
gpt-4-turbo:
|
|
1217
|
+
label: GPT-4 Turbo
|
|
1218
|
+
creator: OpenAI
|
|
1219
|
+
total_params_b: 880
|
|
1220
|
+
open_weights: false
|
|
1221
|
+
aliases:
|
|
1222
|
+
- gpt-4-turbo-2024-04-09
|
|
1223
|
+
- gpt-4-turbo-preview
|
|
1224
|
+
- gpt-4-0125-preview
|
|
1225
|
+
- gpt-4-1106-vision-preview
|
|
1226
|
+
- gpt-4-vision-preview
|
|
1227
|
+
- openai-gpt-4-turbo-prod-ca-1 # an Azure OpenAI deployment name
|
|
1228
|
+
active_params_b:
|
|
1229
|
+
value: 152
|
|
1230
|
+
unit: B
|
|
1231
|
+
tier: 2
|
|
1232
|
+
min: 88
|
|
1233
|
+
max: 264
|
|
1234
|
+
source: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1235
|
+
note: "Undisclosed. EcoLogits (gpt-4-turbo and gpt-4-turbo-2024-04-09): MoE 880B total, 88-264B active, flagged model-arch-not-released and model-arch-multimodal. Point = geometric mean. Aliases are the snapshots OpenAI lists under GPT-4 Turbo, plus gpt-4-vision-preview, inferred to be the alias of gpt-4-1106-vision-preview: OpenAI's deprecations page lists the two together at the same price and shutdown date. Shut down 2026-10-23."
|
|
1236
|
+
provenance:
|
|
1237
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
1238
|
+
verified: []
|
|
1239
|
+
status: draft
|
|
1240
|
+
stale_after: '2027-04-27'
|
|
1241
|
+
sources:
|
|
1242
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1243
|
+
- resource: https://developers.openai.com/api/docs/models/gpt-4-turbo
|
|
1244
|
+
- resource: https://developers.openai.com/api/docs/deprecations
|
|
1245
|
+
gpt-4:
|
|
1246
|
+
label: GPT-4
|
|
1247
|
+
creator: OpenAI
|
|
1248
|
+
total_params_b: 1760
|
|
1249
|
+
open_weights: false
|
|
1250
|
+
aliases:
|
|
1251
|
+
- gpt-4-0613
|
|
1252
|
+
- gpt-4-0314
|
|
1253
|
+
- openai-gpt-4-prod-ca-1 # an Azure OpenAI deployment name
|
|
1254
|
+
active_params_b:
|
|
1255
|
+
value: 305
|
|
1256
|
+
unit: B
|
|
1257
|
+
tier: 2
|
|
1258
|
+
min: 176
|
|
1259
|
+
max: 528
|
|
1260
|
+
source: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1261
|
+
note: "Undisclosed. EcoLogits (gpt-4 and gpt-4-0613): MoE 1760B total, 176-528B active, flagged model-arch-not-released and model-arch-multimodal. Point = geometric mean. Aliases are the snapshots OpenAI lists under GPT-4. Shut down 2026-10-23."
|
|
1262
|
+
provenance:
|
|
1263
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
1264
|
+
verified: []
|
|
1265
|
+
status: draft
|
|
1266
|
+
stale_after: '2027-04-27'
|
|
1267
|
+
sources:
|
|
1268
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1269
|
+
- resource: https://developers.openai.com/api/docs/models/gpt-4
|
|
1270
|
+
gpt-3.5-turbo:
|
|
1271
|
+
label: GPT-3.5 Turbo
|
|
1272
|
+
creator: OpenAI
|
|
1273
|
+
open_weights: false
|
|
1274
|
+
aliases:
|
|
1275
|
+
- gpt-3.5-turbo-0125
|
|
1276
|
+
- gpt-3.5-turbo-1106
|
|
1277
|
+
- openai-gpt-35-turbo-prod-ca-1 # an Azure OpenAI deployment name
|
|
1278
|
+
active_params_b:
|
|
1279
|
+
value: 37
|
|
1280
|
+
unit: B
|
|
1281
|
+
tier: 2
|
|
1282
|
+
min: 20
|
|
1283
|
+
max: 70
|
|
1284
|
+
source: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1285
|
+
note: "Undisclosed. EcoLogits (gpt-3.5-turbo, and gpt-3.5-turbo-0125 with the same figures): dense, 20-70B, flagged model-arch-not-released. Point = geometric mean. Aliases are the snapshots OpenAI lists under GPT-3.5 Turbo."
|
|
1286
|
+
provenance:
|
|
1287
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
1288
|
+
verified: []
|
|
1289
|
+
status: draft
|
|
1290
|
+
stale_after: '2027-04-27'
|
|
1291
|
+
sources:
|
|
1292
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1293
|
+
- resource: https://developers.openai.com/api/docs/models/gpt-3.5-turbo
|
|
840
1294
|
o4-mini:
|
|
841
1295
|
label: o4-mini
|
|
842
1296
|
creator: OpenAI
|
|
@@ -858,6 +1312,30 @@ models:
|
|
|
858
1312
|
stale_after: '2027-03-31'
|
|
859
1313
|
sources:
|
|
860
1314
|
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1315
|
+
gpt-5.4:
|
|
1316
|
+
label: GPT-5.4
|
|
1317
|
+
creator: OpenAI
|
|
1318
|
+
total_params_b: 450
|
|
1319
|
+
open_weights: false
|
|
1320
|
+
aliases:
|
|
1321
|
+
- gpt-5.4-2026-03-05
|
|
1322
|
+
- openai/gpt-5.4
|
|
1323
|
+
active_params_b:
|
|
1324
|
+
value: 82
|
|
1325
|
+
unit: B
|
|
1326
|
+
tier: 2
|
|
1327
|
+
min: 45
|
|
1328
|
+
max: 150
|
|
1329
|
+
source: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1330
|
+
note: "Undisclosed. EcoLogits (gpt-5.4 and gpt-5.4-2026-03-05): MoE 450B total, 45-150B active, flagged model-arch-not-released and model-arch-multimodal. gpt-5.4-2026-03-05 is the snapshot OpenAI lists for GPT-5.4. Point = geometric mean of that range. Tier 2: a published estimate, not a disclosure."
|
|
1331
|
+
provenance:
|
|
1332
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
1333
|
+
verified: []
|
|
1334
|
+
status: draft
|
|
1335
|
+
stale_after: '2027-04-27'
|
|
1336
|
+
sources:
|
|
1337
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1338
|
+
- resource: https://developers.openai.com/api/docs/models/gpt-5.4
|
|
861
1339
|
gpt-5.4-mini:
|
|
862
1340
|
label: GPT-5.4 mini
|
|
863
1341
|
creator: OpenAI
|
|
@@ -1120,6 +1598,10 @@ models:
|
|
|
1120
1598
|
creator: OpenAI
|
|
1121
1599
|
total_params_b: 440
|
|
1122
1600
|
open_weights: false
|
|
1601
|
+
proxies:
|
|
1602
|
+
- ids: [gpt-realtime, gpt-realtime-2025-08-28]
|
|
1603
|
+
note: "OpenAI's first GA realtime model, which gpt-realtime-1.5 replaced; same prices ($4/$16 text, $32/$64 audio per 1M tokens), no size of its own."
|
|
1604
|
+
source: https://developers.openai.com/api/docs/models/gpt-realtime
|
|
1123
1605
|
active_params_b:
|
|
1124
1606
|
value: 76
|
|
1125
1607
|
unit: B
|
|
@@ -1375,6 +1857,33 @@ models:
|
|
|
1375
1857
|
stale_after: '2027-03-31'
|
|
1376
1858
|
sources:
|
|
1377
1859
|
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1860
|
+
gemini-4-argon:
|
|
1861
|
+
label: Gemini 4 Argon
|
|
1862
|
+
creator: Google
|
|
1863
|
+
open_weights: false
|
|
1864
|
+
aliases:
|
|
1865
|
+
- google/gemini-4-argon
|
|
1866
|
+
- gemini/gemini-4-argon
|
|
1867
|
+
active_params_b:
|
|
1868
|
+
value: 268
|
|
1869
|
+
unit: B
|
|
1870
|
+
tier: 3
|
|
1871
|
+
min: 120
|
|
1872
|
+
max: 600
|
|
1873
|
+
source: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1874
|
+
note: "Undisclosed; model card: 'a large scale sparse mixture-of-experts (MoE)', 'not a modification or a fine-tune of a prior model', no size or serving hardware. No published size estimate as of 2026-10-18: EcoLogits (latest models.json commit 2026-10-14) has no Gemini 4 entry, and Epoch AI lists parameters as Unknown. Proxy from Google's previous flagship Pro-tier models in EcoLogits: gemini-3.1-pro-preview (MoE 1200B total, 120-360B active; Google's migration guide moves 3.1 Pro users to 4 Argon) and gemini-2.5-pro (MoE 2000B total, 200-600B active). Range spans both (120-600B); point = geometric mean (268). Tier 3: a proxy from sibling models, not an estimate of these weights."
|
|
1875
|
+
provenance:
|
|
1876
|
+
generated: {by: 'agent:claude-coverage-routine', at: '2026-10-18'}
|
|
1877
|
+
verified: []
|
|
1878
|
+
status: draft
|
|
1879
|
+
stale_after: '2027-04-18'
|
|
1880
|
+
sources:
|
|
1881
|
+
- resource: https://deepmind.google/models/model-cards/gemini-4-argon/
|
|
1882
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1883
|
+
- resource: https://ai.google.dev/gemini-api/docs/models/gemini-4-argon
|
|
1884
|
+
- resource: https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/gemini/4-argon
|
|
1885
|
+
- resource: https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/guides/gemini-4-argon#migration-guide
|
|
1886
|
+
- resource: https://epoch.ai/models/gemini-4-argon
|
|
1378
1887
|
gemini-3.8-flash:
|
|
1379
1888
|
label: Gemini 3.8 Flash
|
|
1380
1889
|
creator: Google
|
|
@@ -1383,8 +1892,6 @@ models:
|
|
|
1383
1892
|
aliases:
|
|
1384
1893
|
- google/gemini-3.8-flash
|
|
1385
1894
|
- gemini/gemini-3.8-flash
|
|
1386
|
-
- google/gemini-3.7-flash
|
|
1387
|
-
- gemini/gemini-3.7-flash
|
|
1388
1895
|
active_params_b:
|
|
1389
1896
|
value: 122
|
|
1390
1897
|
unit: B
|
|
@@ -1400,6 +1907,31 @@ models:
|
|
|
1400
1907
|
stale_after: '2027-03-31'
|
|
1401
1908
|
sources:
|
|
1402
1909
|
- resource: https://deepmind.google/models/model-cards/gemini-3-8-flash/
|
|
1910
|
+
gemini-3.7-flash:
|
|
1911
|
+
label: Gemini 3.7 Flash
|
|
1912
|
+
creator: Google
|
|
1913
|
+
total_params_b: 750
|
|
1914
|
+
open_weights: false
|
|
1915
|
+
aliases:
|
|
1916
|
+
- google/gemini-3.7-flash
|
|
1917
|
+
- gemini/gemini-3.7-flash
|
|
1918
|
+
active_params_b:
|
|
1919
|
+
value: 122
|
|
1920
|
+
unit: B
|
|
1921
|
+
tier: 2
|
|
1922
|
+
min: 75
|
|
1923
|
+
max: 200
|
|
1924
|
+
source: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1925
|
+
note: "Undisclosed; model card: 'based on Gemini 3.6 Flash', no size or serving hardware. EcoLogits (gemini-3.7-flash): MoE 750B total, 75-200B active, flagged model-arch-not-released, the same estimate as gemini-3.6-flash and gemini-3.8-flash. Point = geometric mean of that range. Tier 2: a published estimate, not a disclosure. Deprecated in the Gemini API; requests to gemini-3.7-flash are now routed to gemini-3.8-flash, which has the same estimate."
|
|
1926
|
+
provenance:
|
|
1927
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
1928
|
+
verified: []
|
|
1929
|
+
status: draft
|
|
1930
|
+
stale_after: '2027-04-27'
|
|
1931
|
+
sources:
|
|
1932
|
+
- resource: https://deepmind.google/models/model-cards/gemini-3-7-flash/
|
|
1933
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1934
|
+
- resource: https://ai.google.dev/gemini-api/docs/models/gemini-3.7-flash
|
|
1403
1935
|
gemini-3.6-flash:
|
|
1404
1936
|
label: Gemini 3.6 Flash
|
|
1405
1937
|
creator: Google
|
|
@@ -1500,6 +2032,101 @@ models:
|
|
|
1500
2032
|
stale_after: '2027-03-31'
|
|
1501
2033
|
sources:
|
|
1502
2034
|
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
2035
|
+
gemini-3-flash-preview:
|
|
2036
|
+
label: Gemini 3 Flash preview
|
|
2037
|
+
creator: Google
|
|
2038
|
+
total_params_b: 300
|
|
2039
|
+
open_weights: false
|
|
2040
|
+
aliases:
|
|
2041
|
+
- google/gemini-3-flash-preview
|
|
2042
|
+
- gemini/gemini-3-flash-preview
|
|
2043
|
+
active_params_b:
|
|
2044
|
+
value: 173
|
|
2045
|
+
unit: B
|
|
2046
|
+
tier: 2
|
|
2047
|
+
min: 100
|
|
2048
|
+
max: 300
|
|
2049
|
+
source: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
2050
|
+
note: "Undisclosed. EcoLogits (gemini-3-flash-preview): MoE 300B total, 100-300B active, flagged model-arch-not-released and model-arch-multimodal. Point = geometric mean of that range. Tier 2: a published estimate, not a disclosure."
|
|
2051
|
+
provenance:
|
|
2052
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
2053
|
+
verified: []
|
|
2054
|
+
status: draft
|
|
2055
|
+
stale_after: '2027-04-27'
|
|
2056
|
+
sources:
|
|
2057
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
2058
|
+
- resource: https://ai.google.dev/gemini-api/docs/models/gemini-3-flash-preview
|
|
2059
|
+
gemini-3.1-flash-lite-preview:
|
|
2060
|
+
label: Gemini 3.1 Flash-Lite preview
|
|
2061
|
+
creator: Google
|
|
2062
|
+
open_weights: false
|
|
2063
|
+
aliases:
|
|
2064
|
+
- google/gemini-3.1-flash-lite-preview
|
|
2065
|
+
- gemini/gemini-3.1-flash-lite-preview
|
|
2066
|
+
active_params_b:
|
|
2067
|
+
value: 56
|
|
2068
|
+
unit: B
|
|
2069
|
+
tier: 2
|
|
2070
|
+
min: 30
|
|
2071
|
+
max: 105
|
|
2072
|
+
source: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
2073
|
+
note: "Undisclosed. EcoLogits (gemini-3.1-flash-lite-preview): dense, 30-105B, flagged model-arch-not-released and model-arch-multimodal; the same estimate as gemini-3.1-flash-lite. A separate record because the preview and GA weights are not documented as identical. Shut down in the Gemini API. Point = geometric mean of that range. Tier 2: a published estimate, not a disclosure."
|
|
2074
|
+
provenance:
|
|
2075
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
2076
|
+
verified: []
|
|
2077
|
+
status: draft
|
|
2078
|
+
stale_after: '2027-04-27'
|
|
2079
|
+
sources:
|
|
2080
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
2081
|
+
- resource: https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-lite-preview
|
|
2082
|
+
gemini-2.5-pro:
|
|
2083
|
+
label: Gemini 2.5 Pro
|
|
2084
|
+
creator: Google
|
|
2085
|
+
total_params_b: 2000
|
|
2086
|
+
open_weights: false
|
|
2087
|
+
aliases:
|
|
2088
|
+
- google/gemini-2.5-pro
|
|
2089
|
+
- gemini/gemini-2.5-pro
|
|
2090
|
+
active_params_b:
|
|
2091
|
+
value: 346
|
|
2092
|
+
unit: B
|
|
2093
|
+
tier: 2
|
|
2094
|
+
min: 200
|
|
2095
|
+
max: 600
|
|
2096
|
+
source: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
2097
|
+
note: "Undisclosed. EcoLogits (gemini-2.5-pro): MoE 2000B total, 200-600B active, flagged model-arch-not-released and model-arch-multimodal. Point = geometric mean of that range. Tier 2: a published estimate, not a disclosure."
|
|
2098
|
+
provenance:
|
|
2099
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
2100
|
+
verified: []
|
|
2101
|
+
status: draft
|
|
2102
|
+
stale_after: '2027-04-27'
|
|
2103
|
+
sources:
|
|
2104
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
2105
|
+
- resource: https://ai.google.dev/gemini-api/docs/models/gemini-2.5-pro
|
|
2106
|
+
gemini-2.5-flash:
|
|
2107
|
+
label: Gemini 2.5 Flash
|
|
2108
|
+
creator: Google
|
|
2109
|
+
total_params_b: 440
|
|
2110
|
+
open_weights: false
|
|
2111
|
+
aliases:
|
|
2112
|
+
- google/gemini-2.5-flash
|
|
2113
|
+
- gemini/gemini-2.5-flash
|
|
2114
|
+
active_params_b:
|
|
2115
|
+
value: 76
|
|
2116
|
+
unit: B
|
|
2117
|
+
tier: 2
|
|
2118
|
+
min: 44
|
|
2119
|
+
max: 132
|
|
2120
|
+
source: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
2121
|
+
note: "Undisclosed. EcoLogits (gemini-2.5-flash): MoE 440B total, 44-132B active, flagged model-arch-not-released and model-arch-multimodal. Point = geometric mean of that range. Tier 2: a published estimate, not a disclosure."
|
|
2122
|
+
provenance:
|
|
2123
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
2124
|
+
verified: []
|
|
2125
|
+
status: draft
|
|
2126
|
+
stale_after: '2027-04-27'
|
|
2127
|
+
sources:
|
|
2128
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
2129
|
+
- resource: https://ai.google.dev/gemini-api/docs/models/gemini-2.5-flash
|
|
1503
2130
|
gemini-3.1-pro-preview:
|
|
1504
2131
|
label: Gemini 3.1 Pro
|
|
1505
2132
|
creator: Google
|
|
@@ -1507,6 +2134,10 @@ models:
|
|
|
1507
2134
|
total_params_b: 1200
|
|
1508
2135
|
aliases:
|
|
1509
2136
|
- google/gemini-3.1-pro-preview
|
|
2137
|
+
proxies:
|
|
2138
|
+
- ids: [gemini-3-pro-preview]
|
|
2139
|
+
note: "Google's model card: 'Gemini 3.1 Pro is based on Gemini 3 Pro' and defers to it for architecture; no EcoLogits estimate of 3 Pro itself."
|
|
2140
|
+
source: https://deepmind.google/models/model-cards/gemini-3-1-pro/
|
|
1510
2141
|
active_params_b:
|
|
1511
2142
|
value: 200
|
|
1512
2143
|
unit: B
|
|
@@ -1541,6 +2172,30 @@ models:
|
|
|
1541
2172
|
stale_after: '2027-03-31'
|
|
1542
2173
|
sources:
|
|
1543
2174
|
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
2175
|
+
muse-wonder-1.0:
|
|
2176
|
+
label: Muse Wonder
|
|
2177
|
+
creator: Meta AI
|
|
2178
|
+
open_weights: false
|
|
2179
|
+
aliases:
|
|
2180
|
+
- meta/muse-wonder
|
|
2181
|
+
active_params_b:
|
|
2182
|
+
value: 164
|
|
2183
|
+
unit: B
|
|
2184
|
+
tier: 3
|
|
2185
|
+
source: https://artificialanalysis.ai/models/muse-wonder
|
|
2186
|
+
note: "Undisclosed ('Meta has not disclosed the model size or parameter count'); released 2026-10-12; no EcoLogits entry as of 2026-10-18. Proxy gpt-5.6-sol: same list price, $4/$20 per 1M tokens (promotional through at least 2026-11-21); EcoLogits MoE 900B total, 90-300B active. Point = rounded geometric mean of that range."
|
|
2187
|
+
min: 90
|
|
2188
|
+
max: 300
|
|
2189
|
+
provenance:
|
|
2190
|
+
generated: {by: 'agent:claude-coverage-routine', at: '2026-10-18'}
|
|
2191
|
+
verified: []
|
|
2192
|
+
status: draft
|
|
2193
|
+
stale_after: '2027-04-18'
|
|
2194
|
+
sources:
|
|
2195
|
+
- resource: https://artificialanalysis.ai/models/muse-wonder
|
|
2196
|
+
- resource: https://dev.meta.ai/models/muse-wonder
|
|
2197
|
+
- resource: https://developers.openai.com/api/docs/models/gpt-5.6-sol
|
|
2198
|
+
- resource: https://raw.githubusercontent.com/genai-impact/ecologits/main/ecologits/data/models.json
|
|
1544
2199
|
muse-spark-1.3:
|
|
1545
2200
|
label: Muse Spark 1.3
|
|
1546
2201
|
creator: Meta AI
|
|
@@ -1802,3 +2457,152 @@ models:
|
|
|
1802
2457
|
stale_after: '2027-03-31'
|
|
1803
2458
|
sources:
|
|
1804
2459
|
- resource: https://huggingface.co/meta-llama/Llama-3.1-405B-Instruct
|
|
2460
|
+
|
|
2461
|
+
llama-4-maverick:
|
|
2462
|
+
label: Llama 4 Maverick 17B-128E Instruct
|
|
2463
|
+
creator: Meta
|
|
2464
|
+
open_weights: true
|
|
2465
|
+
total_params_b: 400
|
|
2466
|
+
aliases:
|
|
2467
|
+
- accounts/fireworks/models/llama4-maverick-instruct-basic
|
|
2468
|
+
- meta-llama/Llama-4-Maverick-17B-128E-Instruct
|
|
2469
|
+
- meta-llama/llama-4-maverick
|
|
2470
|
+
active_params_b:
|
|
2471
|
+
value: 17
|
|
2472
|
+
unit: B
|
|
2473
|
+
tier: 1
|
|
2474
|
+
source: https://huggingface.co/meta-llama/Llama-4-Maverick-17B-128E-Instruct
|
|
2475
|
+
note: MoE, 128 experts; 17B activated, 400B total per the model card's model-information table. The safetensors
|
|
2476
|
+
metadata counts 401,583,781,376 BF16 parameters (includes the vision encoder).
|
|
2477
|
+
provenance:
|
|
2478
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
2479
|
+
verified: []
|
|
2480
|
+
status: draft
|
|
2481
|
+
stale_after: '2027-04-27'
|
|
2482
|
+
sources:
|
|
2483
|
+
- resource: https://huggingface.co/meta-llama/Llama-4-Maverick-17B-128E-Instruct
|
|
2484
|
+
llama-4-scout:
|
|
2485
|
+
label: Llama 4 Scout 17B-16E Instruct
|
|
2486
|
+
creator: Meta
|
|
2487
|
+
open_weights: true
|
|
2488
|
+
total_params_b: 109
|
|
2489
|
+
aliases:
|
|
2490
|
+
- accounts/fireworks/models/llama4-scout-instruct-basic
|
|
2491
|
+
- meta-llama/Llama-4-Scout-17B-16E-Instruct
|
|
2492
|
+
- meta-llama/llama-4-scout
|
|
2493
|
+
active_params_b:
|
|
2494
|
+
value: 17
|
|
2495
|
+
unit: B
|
|
2496
|
+
tier: 1
|
|
2497
|
+
source: https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct
|
|
2498
|
+
note: MoE, 16 experts; 17B activated, 109B total per the model card's model-information table. The safetensors
|
|
2499
|
+
metadata counts 108,641,793,536 BF16 parameters (includes the vision encoder).
|
|
2500
|
+
provenance:
|
|
2501
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
2502
|
+
verified: []
|
|
2503
|
+
status: draft
|
|
2504
|
+
stale_after: '2027-04-27'
|
|
2505
|
+
sources:
|
|
2506
|
+
- resource: https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct
|
|
2507
|
+
- resource: https://raw.githubusercontent.com/ml-energy/leaderboard/master/public/data/tasks/lm-arena-chat.json
|
|
2508
|
+
measured_wh_per_1k_output_tokens_h100:
|
|
2509
|
+
value: 0.3212
|
|
2510
|
+
min: 0.0934
|
|
2511
|
+
max: 1.105
|
|
2512
|
+
unit: Wh per 1k output tokens, H100, GPU-only, PUE 1.0
|
|
2513
|
+
tier: 1
|
|
2514
|
+
source: https://raw.githubusercontent.com/ml-energy/leaderboard/master/public/data/tasks/lm-arena-chat.json
|
|
2515
|
+
note: ML.ENERGY v3.0, lm-arena-chat, meta-llama/Llama-4-Scout-17B-16E-Instruct, bfloat16, 4xH100 EP4 (an 8xH100 EP8 sweep, 0.126-1.465, is not used).
|
|
2516
|
+
min = max-batch steady state (max_num_seqs 512), max = batch-8; value = geometric mean; production
|
|
2517
|
+
sits between.
|
|
2518
|
+
llama-3-70b:
|
|
2519
|
+
label: Llama 3 70B Instruct
|
|
2520
|
+
creator: Meta
|
|
2521
|
+
open_weights: true
|
|
2522
|
+
total_params_b: 70.55
|
|
2523
|
+
aliases:
|
|
2524
|
+
- accounts/fireworks/models/llama-v3-70b-instruct
|
|
2525
|
+
- llama3-70b-8192
|
|
2526
|
+
- meta-llama/llama-3-70b-instruct
|
|
2527
|
+
- meta-llama/Meta-Llama-3-70B-Instruct
|
|
2528
|
+
active_params_b:
|
|
2529
|
+
value: 70.55
|
|
2530
|
+
unit: B
|
|
2531
|
+
tier: 1
|
|
2532
|
+
source: https://huggingface.co/meta-llama/Meta-Llama-3-70B-Instruct
|
|
2533
|
+
note: Dense, 8k context. 70,553,706,496 BF16 parameters per the model card's safetensors metadata. The original
|
|
2534
|
+
Llama 3 (April 2024), not Llama 3.1 or 3.3.
|
|
2535
|
+
provenance:
|
|
2536
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
2537
|
+
verified: []
|
|
2538
|
+
status: draft
|
|
2539
|
+
stale_after: '2027-04-27'
|
|
2540
|
+
sources:
|
|
2541
|
+
- resource: https://huggingface.co/meta-llama/Meta-Llama-3-70B-Instruct
|
|
2542
|
+
llama-3-8b:
|
|
2543
|
+
label: Llama 3 8B Instruct
|
|
2544
|
+
creator: Meta
|
|
2545
|
+
open_weights: true
|
|
2546
|
+
total_params_b: 8.03
|
|
2547
|
+
aliases:
|
|
2548
|
+
- llama3-8b-8192
|
|
2549
|
+
- meta-llama/llama-3-8b-instruct
|
|
2550
|
+
- meta-llama/Meta-Llama-3-8B-Instruct
|
|
2551
|
+
active_params_b:
|
|
2552
|
+
value: 8.03
|
|
2553
|
+
unit: B
|
|
2554
|
+
tier: 1
|
|
2555
|
+
source: https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
|
|
2556
|
+
note: Dense, 8k context. 8,030,261,248 BF16 parameters per the model card's safetensors metadata. The original
|
|
2557
|
+
Llama 3 (April 2024), not Llama 3.1.
|
|
2558
|
+
provenance:
|
|
2559
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
2560
|
+
verified: []
|
|
2561
|
+
status: draft
|
|
2562
|
+
stale_after: '2027-04-27'
|
|
2563
|
+
sources:
|
|
2564
|
+
- resource: https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
|
|
2565
|
+
llama-3-groq-70b-tool-use:
|
|
2566
|
+
label: Llama 3 Groq 70B Tool Use
|
|
2567
|
+
creator: Groq
|
|
2568
|
+
open_weights: true
|
|
2569
|
+
total_params_b: 70.55
|
|
2570
|
+
aliases:
|
|
2571
|
+
- Groq/Llama-3-Groq-70B-Tool-Use
|
|
2572
|
+
- llama3-groq-70b-8192-tool-use-preview
|
|
2573
|
+
active_params_b:
|
|
2574
|
+
value: 70.55
|
|
2575
|
+
unit: B
|
|
2576
|
+
tier: 1
|
|
2577
|
+
source: https://huggingface.co/Groq/Llama-3-Groq-70B-Tool-Use
|
|
2578
|
+
note: Dense. The card calls it the 70B version, fully fine-tuned (plus DPO) from Llama 3 70B; 70,553,804,800
|
|
2579
|
+
BF16 parameters per the safetensors metadata (a few added tokens over the base). Fine-tune, not the
|
|
2580
|
+
base weights.
|
|
2581
|
+
provenance:
|
|
2582
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
2583
|
+
verified: []
|
|
2584
|
+
status: draft
|
|
2585
|
+
stale_after: '2027-04-27'
|
|
2586
|
+
sources:
|
|
2587
|
+
- resource: https://huggingface.co/Groq/Llama-3-Groq-70B-Tool-Use
|
|
2588
|
+
afrollama_v1:
|
|
2589
|
+
label: AfroLlama V1
|
|
2590
|
+
creator: Jacaranda Health
|
|
2591
|
+
open_weights: true
|
|
2592
|
+
total_params_b: 8.03
|
|
2593
|
+
aliases:
|
|
2594
|
+
- Jacaranda/AfroLlama_V1
|
|
2595
|
+
active_params_b:
|
|
2596
|
+
value: 8.03
|
|
2597
|
+
unit: B
|
|
2598
|
+
tier: 1
|
|
2599
|
+
source: https://huggingface.co/Jacaranda/AfroLlama_V1
|
|
2600
|
+
note: Dense. The card states an 8B-parameter model built on Meta-Llama-3-8B (LoRA continual pre-training per
|
|
2601
|
+
language, TIES merge, instruction tuning); 8,030,261,248 BF16 parameters per the safetensors metadata.
|
|
2602
|
+
provenance:
|
|
2603
|
+
generated: {by: 'agent:claude-model-research', at: '2026-10-27'}
|
|
2604
|
+
verified: []
|
|
2605
|
+
status: draft
|
|
2606
|
+
stale_after: '2027-04-27'
|
|
2607
|
+
sources:
|
|
2608
|
+
- resource: https://huggingface.co/Jacaranda/AfroLlama_V1
|
|
@@ -28,6 +28,7 @@ from .schema import (
|
|
|
28
28
|
Model,
|
|
29
29
|
Provenance,
|
|
30
30
|
Provider,
|
|
31
|
+
Proxy,
|
|
31
32
|
Region,
|
|
32
33
|
Tier,
|
|
33
34
|
Verification,
|
|
@@ -102,6 +103,11 @@ class KnowledgeBase:
|
|
|
102
103
|
self.models: dict[str, Model] = {}
|
|
103
104
|
# lower-cased id or alias -> canonical id, for case-insensitive lookup
|
|
104
105
|
self._model_index: dict[str, str] = {}
|
|
106
|
+
# last path segment of a prefixed alias -> canonical id, or None when
|
|
107
|
+
# aliases of different models share it
|
|
108
|
+
self._model_tail_index: dict[str, str | None] = {}
|
|
109
|
+
# lower-cased proxy id -> (canonical id it is estimated from, proxy)
|
|
110
|
+
self._proxy_index: dict[str, tuple[str, Proxy]] = {}
|
|
105
111
|
self._provider_index: dict[str, str] = {}
|
|
106
112
|
self._region_index: dict[str, str] = {}
|
|
107
113
|
self.fallback_provider_id: str | None = None
|
|
@@ -172,6 +178,7 @@ class KnowledgeBase:
|
|
|
172
178
|
kb._index_host(host, pid)
|
|
173
179
|
mdoc = _read("models.yaml")
|
|
174
180
|
kb.first_party_provider = mdoc.get("first_party_provider") or {}
|
|
181
|
+
proxies: list[tuple[str, Proxy]] = []
|
|
175
182
|
for mid, raw in mdoc.get("models", {}).items():
|
|
176
183
|
measured = raw.get("measured_wh_per_1k_output_tokens_h100")
|
|
177
184
|
kb.models[mid] = Model(
|
|
@@ -188,6 +195,12 @@ class KnowledgeBase:
|
|
|
188
195
|
)
|
|
189
196
|
for key in [mid, *(raw.get("aliases") or [])]:
|
|
190
197
|
kb._index_model(key, mid)
|
|
198
|
+
for proxy in raw.get("proxies") or []:
|
|
199
|
+
proxies.append((mid, _proxy(mid, proxy)))
|
|
200
|
+
# after every model, so a proxy can't shadow an id or alias
|
|
201
|
+
for mid, proxy in proxies:
|
|
202
|
+
for key in proxy.ids:
|
|
203
|
+
kb._index_proxy(key, mid, proxy)
|
|
191
204
|
kb._validate()
|
|
192
205
|
return kb
|
|
193
206
|
|
|
@@ -220,12 +233,25 @@ class KnowledgeBase:
|
|
|
220
233
|
"""The model record for an id or alias, ignoring case; raises
|
|
221
234
|
UnknownModelError."""
|
|
222
235
|
# the id as given, then without a prefix like accounts/fireworks/models/
|
|
223
|
-
|
|
236
|
+
tail = model_id.rsplit("/", 1)[-1]
|
|
237
|
+
for key in (model_id, tail):
|
|
224
238
|
if mid := self._model_index.get(key.lower()):
|
|
225
239
|
return self.models[mid]
|
|
226
|
-
|
|
240
|
+
# the same id behind another prefix: routers/x vs models/x
|
|
241
|
+
if mid := self._model_tail_index.get(tail.lower()):
|
|
242
|
+
return self.models[mid]
|
|
227
243
|
raise UnknownModelError(model_id, _similar(tail, self._model_index))
|
|
228
244
|
|
|
245
|
+
def resolve_proxy(self, model_id: str) -> tuple[Model, str, Proxy] | None:
|
|
246
|
+
"""For an id listed under a record's ``proxies``: that record, the
|
|
247
|
+
proxy id as listed, and the proxy. None for any other id."""
|
|
248
|
+
for key in (model_id, model_id.rsplit("/", 1)[-1]):
|
|
249
|
+
if hit := self._proxy_index.get(key.lower()):
|
|
250
|
+
mid, proxy = hit
|
|
251
|
+
listed = next(i for i in proxy.ids if i.lower() == key.lower())
|
|
252
|
+
return self.models[mid], listed, proxy
|
|
253
|
+
return None
|
|
254
|
+
|
|
229
255
|
def resolve_region(self, region_id: str) -> Region:
|
|
230
256
|
"""The grid region for an id from regions.yaml, ignoring case; raises
|
|
231
257
|
UnknownRegionError."""
|
|
@@ -288,6 +314,40 @@ class KnowledgeBase:
|
|
|
288
314
|
other = self._model_index.setdefault(key.lower(), mid)
|
|
289
315
|
if other != mid:
|
|
290
316
|
raise ValueError(f"model id or alias {key!r} is used by {other} and {mid}")
|
|
317
|
+
if "/" in key:
|
|
318
|
+
tail = key.rsplit("/", 1)[-1].lower()
|
|
319
|
+
if self._model_tail_index.setdefault(tail, mid) != mid:
|
|
320
|
+
self._model_tail_index[tail] = None
|
|
321
|
+
|
|
322
|
+
def _index_proxy(self, key: str, mid: str, proxy: Proxy):
|
|
323
|
+
# resolve_model tries the id without its prefix, then that segment of
|
|
324
|
+
# any prefixed alias, before proxies; either would win
|
|
325
|
+
tail = key.rsplit("/", 1)[-1].lower()
|
|
326
|
+
if (
|
|
327
|
+
key.lower() in self._model_index
|
|
328
|
+
or tail in self._model_index
|
|
329
|
+
or self._model_tail_index.get(tail)
|
|
330
|
+
):
|
|
331
|
+
raise ValueError(f"proxy {key!r} of {mid} is already a model id or alias")
|
|
332
|
+
if hit := self._proxy_index.get(key.lower()):
|
|
333
|
+
raise ValueError(f"proxy {key!r} of {mid} is already listed by {hit[0]}")
|
|
334
|
+
self._proxy_index[key.lower()] = (mid, proxy)
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
def _proxy(mid: str, raw: dict) -> Proxy:
|
|
338
|
+
ids = raw.get("ids") if isinstance(raw, dict) else None
|
|
339
|
+
if not (
|
|
340
|
+
isinstance(ids, list) and ids and all(isinstance(i, str) and i for i in ids)
|
|
341
|
+
):
|
|
342
|
+
raise ValueError(f"model {mid}: a proxy needs `ids`, a list of model ids")
|
|
343
|
+
proxy = Proxy(
|
|
344
|
+
ids=tuple(ids),
|
|
345
|
+
note=raw.get("note", "") or "",
|
|
346
|
+
source=raw.get("source", "") or "",
|
|
347
|
+
)
|
|
348
|
+
if not (proxy.note and proxy.source.startswith(("https://", "http://"))):
|
|
349
|
+
raise ValueError(f"model {mid}: a proxy needs a note and a source URL")
|
|
350
|
+
return proxy
|
|
291
351
|
|
|
292
352
|
|
|
293
353
|
def _similar(key: str, index: dict[str, str]) -> list[str]:
|
|
@@ -83,6 +83,13 @@ class Provenance(TypedDict):
|
|
|
83
83
|
hardware: RecordProvenance
|
|
84
84
|
|
|
85
85
|
|
|
86
|
+
class ProxyInfo(TypedDict):
|
|
87
|
+
model: str
|
|
88
|
+
estimated_from: str
|
|
89
|
+
note: str
|
|
90
|
+
source: str
|
|
91
|
+
|
|
92
|
+
|
|
86
93
|
class Requested(TypedDict):
|
|
87
94
|
model: str
|
|
88
95
|
provider: str | None
|
|
@@ -103,4 +110,5 @@ class EstimateResult(TypedDict):
|
|
|
103
110
|
confidence: Confidence
|
|
104
111
|
grid: Grid
|
|
105
112
|
provenance: Provenance
|
|
113
|
+
proxy: ProxyInfo | None
|
|
106
114
|
requested: Requested
|
|
@@ -318,6 +318,17 @@ class Provider:
|
|
|
318
318
|
provenance: Provenance = field(default_factory=Provenance)
|
|
319
319
|
|
|
320
320
|
|
|
321
|
+
@dataclass(frozen=True)
|
|
322
|
+
class Proxy:
|
|
323
|
+
"""Ids with no record of their own, estimated from a related model's
|
|
324
|
+
record: an earlier version or sibling the vendor ties to it. Unlike an
|
|
325
|
+
alias these are different weights, so the estimate is flagged."""
|
|
326
|
+
|
|
327
|
+
ids: tuple[str, ...]
|
|
328
|
+
note: str # why this model stands in for them
|
|
329
|
+
source: str # where the vendor ties them together
|
|
330
|
+
|
|
331
|
+
|
|
321
332
|
@dataclass(frozen=True)
|
|
322
333
|
class Model:
|
|
323
334
|
id: str
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|