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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ecocost
3
- Version: 0.2.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). Ids
70
- are matched ignoring case.
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). Ids
39
- are matched ignoring case.
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
- m = kb.resolve_model(model)
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
@@ -159,6 +159,7 @@ sources:
159
159
  - novita.ai
160
160
  - fal.ai
161
161
  - developer.meta.com
162
+ - dev.meta.ai
162
163
  - nscale.com
163
164
  - thinkingmachines.ai
164
165
  - sec.gov
@@ -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
- for key in (model_id, model_id.rsplit("/", 1)[-1]):
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
- tail = model_id.rsplit("/", 1)[-1]
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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "ecocost"
3
- version = "0.2.2"
3
+ version = "0.2.4"
4
4
  description = "Per-run carbon, energy and water estimates for AI inference, with computed confidence and sourced inputs"
5
5
  authors = ["Gooey.AI <devs@dara.network>"]
6
6
  license = "Apache-2.0"
File without changes
File without changes
File without changes
File without changes
File without changes