Spaces:
Running
Running
CrispStrobe commited on
Commit ·
ee20373
1
Parent(s): ffba252
add bfl, etc
Browse files- data/providers.json +1036 -252
- package.json +1 -0
- scripts/fetch-benchmarks.js +160 -1
- scripts/fetch-providers.js +11 -2
- scripts/load-env.js +30 -0
- scripts/providers/black-forest-labs.js +124 -0
- scripts/providers/openrouter.js +38 -11
- scripts/providers/requesty.js +25 -10
- server.js +37 -15
- src/App.css +1 -0
- src/App.tsx +13 -4
- src/components/ManagementPanel.tsx +66 -2
- vercel.json +1 -1
data/providers.json
CHANGED
|
@@ -14,7 +14,10 @@
|
|
| 14 |
"input_price_per_1m": 0.17,
|
| 15 |
"output_price_per_1m": 0.17,
|
| 16 |
"currency": "USD",
|
| 17 |
-
"size_b": 8
|
|
|
|
|
|
|
|
|
|
| 18 |
},
|
| 19 |
{
|
| 20 |
"name": "Teuken-7B Instruct",
|
|
@@ -29,7 +32,10 @@
|
|
| 29 |
"type": "chat",
|
| 30 |
"input_price_per_1m": 0.17,
|
| 31 |
"output_price_per_1m": 0.17,
|
| 32 |
-
"currency": "USD"
|
|
|
|
|
|
|
|
|
|
| 33 |
},
|
| 34 |
{
|
| 35 |
"name": "Code Llama 13b Instruct HF",
|
|
@@ -45,7 +51,10 @@
|
|
| 45 |
"input_price_per_1m": 0.11,
|
| 46 |
"output_price_per_1m": 0.33,
|
| 47 |
"currency": "USD",
|
| 48 |
-
"size_b": 24
|
|
|
|
|
|
|
|
|
|
| 49 |
},
|
| 50 |
{
|
| 51 |
"name": "gpt-oss-120b",
|
|
@@ -53,7 +62,11 @@
|
|
| 53 |
"input_price_per_1m": 0.17,
|
| 54 |
"output_price_per_1m": 0.71,
|
| 55 |
"currency": "USD",
|
| 56 |
-
"size_b": 120
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
},
|
| 58 |
{
|
| 59 |
"name": "Llama 3.3 70B Instruct",
|
|
@@ -61,7 +74,10 @@
|
|
| 61 |
"input_price_per_1m": 0.71,
|
| 62 |
"output_price_per_1m": 0.71,
|
| 63 |
"currency": "USD",
|
| 64 |
-
"size_b": 70
|
|
|
|
|
|
|
|
|
|
| 65 |
},
|
| 66 |
{
|
| 67 |
"name": "Llama 3.1 405B Instruct",
|
|
@@ -69,7 +85,10 @@
|
|
| 69 |
"input_price_per_1m": 1.93,
|
| 70 |
"output_price_per_1m": 1.93,
|
| 71 |
"currency": "USD",
|
| 72 |
-
"size_b": 405
|
|
|
|
|
|
|
|
|
|
| 73 |
},
|
| 74 |
{
|
| 75 |
"name": "LightOnOCR 2",
|
|
@@ -87,7 +106,10 @@
|
|
| 87 |
"type": "image",
|
| 88 |
"input_price_per_1m": 0.032,
|
| 89 |
"output_price_per_1m": 0,
|
| 90 |
-
"currency": "USD"
|
|
|
|
|
|
|
|
|
|
| 91 |
},
|
| 92 |
{
|
| 93 |
"name": "paraphrase-multilingual-mpnet-base-v2",
|
|
@@ -139,26 +161,38 @@
|
|
| 139 |
},
|
| 140 |
{
|
| 141 |
"name": "Mistral-Small-3.2-24B-Instruct-2506",
|
| 142 |
-
"type": "
|
| 143 |
"input_price_per_1m": 0.1,
|
| 144 |
"output_price_per_1m": 0.3,
|
| 145 |
"currency": "CHF",
|
| 146 |
-
"size_b": 24
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
},
|
| 148 |
{
|
| 149 |
"name": "Qwen3-VL-235B-A22B-Instruct",
|
| 150 |
-
"type": "
|
| 151 |
"input_price_per_1m": 0.7,
|
| 152 |
"output_price_per_1m": 2,
|
| 153 |
"currency": "CHF",
|
| 154 |
-
"size_b": 235
|
|
|
|
|
|
|
|
|
|
|
|
|
| 155 |
},
|
| 156 |
{
|
| 157 |
"name": "Llama 3.3",
|
| 158 |
"type": "chat",
|
| 159 |
"input_price_per_1m": 1,
|
| 160 |
"output_price_per_1m": 3,
|
| 161 |
-
"currency": "CHF"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 162 |
},
|
| 163 |
{
|
| 164 |
"name": "Apertus-70B-Instruct-2509",
|
|
@@ -174,14 +208,23 @@
|
|
| 174 |
"input_price_per_1m": 0.3,
|
| 175 |
"output_price_per_1m": 0.9,
|
| 176 |
"currency": "CHF",
|
| 177 |
-
"size_b": 120
|
|
|
|
|
|
|
|
|
|
|
|
|
| 178 |
},
|
| 179 |
{
|
| 180 |
"name": "Kimi-K2.5",
|
| 181 |
-
"type": "
|
| 182 |
"input_price_per_1m": 0.6,
|
| 183 |
"output_price_per_1m": 3,
|
| 184 |
-
"currency": "CHF"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 185 |
},
|
| 186 |
{
|
| 187 |
"name": "Bge Multilingual Gemma2",
|
|
@@ -217,14 +260,20 @@
|
|
| 217 |
"type": "image",
|
| 218 |
"input_price_per_1m": 0.3,
|
| 219 |
"output_price_per_1m": 0,
|
| 220 |
-
"currency": "CHF"
|
|
|
|
|
|
|
|
|
|
| 221 |
},
|
| 222 |
{
|
| 223 |
"name": "Flux schnell",
|
| 224 |
"type": "image",
|
| 225 |
"input_price_per_1m": 0.3,
|
| 226 |
"output_price_per_1m": 0,
|
| 227 |
-
"currency": "CHF"
|
|
|
|
|
|
|
|
|
|
| 228 |
}
|
| 229 |
],
|
| 230 |
"lastUpdated": "2026-03-02T04:54:47.632Z"
|
|
@@ -255,11 +304,17 @@
|
|
| 255 |
},
|
| 256 |
{
|
| 257 |
"name": "GPT-5.2 Pro",
|
| 258 |
-
"type": "
|
| 259 |
"input_price_per_1m": 19.48,
|
| 260 |
"output_price_per_1m": 155.85,
|
| 261 |
"currency": "EUR",
|
| 262 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 263 |
},
|
| 264 |
{
|
| 265 |
"name": "Opus 4.6 Reasoning",
|
|
@@ -283,15 +338,23 @@
|
|
| 283 |
"input_price_per_1m": 0.92,
|
| 284 |
"output_price_per_1m": 3.67,
|
| 285 |
"currency": "EUR",
|
| 286 |
-
"provider_upstream": "DeepSeek"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 287 |
},
|
| 288 |
{
|
| 289 |
"name": "Mistral Medium",
|
| 290 |
-
"type": "
|
| 291 |
"input_price_per_1m": 0.37,
|
| 292 |
"output_price_per_1m": 1.86,
|
| 293 |
"currency": "EUR",
|
| 294 |
-
"provider_upstream": "Mistral"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 295 |
},
|
| 296 |
{
|
| 297 |
"name": "Mistral Large 2411",
|
|
@@ -299,15 +362,22 @@
|
|
| 299 |
"input_price_per_1m": 1.86,
|
| 300 |
"output_price_per_1m": 5.59,
|
| 301 |
"currency": "EUR",
|
| 302 |
-
"provider_upstream": "Mistral"
|
|
|
|
|
|
|
|
|
|
| 303 |
},
|
| 304 |
{
|
| 305 |
"name": "Llama 4 Maverick",
|
| 306 |
-
"type": "
|
| 307 |
"input_price_per_1m": 0.2,
|
| 308 |
"output_price_per_1m": 0.8,
|
| 309 |
"currency": "EUR",
|
| 310 |
-
"provider_upstream": "Meta"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 311 |
},
|
| 312 |
{
|
| 313 |
"name": "Sonnet 4.5 Reasoning",
|
|
@@ -324,7 +394,10 @@
|
|
| 324 |
"output_price_per_1m": 0.66,
|
| 325 |
"currency": "EUR",
|
| 326 |
"size_b": 70,
|
| 327 |
-
"provider_upstream": "Meta"
|
|
|
|
|
|
|
|
|
|
| 328 |
},
|
| 329 |
{
|
| 330 |
"name": "Sonnet 4.5",
|
|
@@ -416,19 +489,31 @@
|
|
| 416 |
},
|
| 417 |
{
|
| 418 |
"name": "o3 Pro",
|
| 419 |
-
"type": "
|
| 420 |
"input_price_per_1m": 18.63,
|
| 421 |
"output_price_per_1m": 74.54,
|
| 422 |
"currency": "EUR",
|
| 423 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 424 |
},
|
| 425 |
{
|
| 426 |
"name": "o4 Mini",
|
| 427 |
-
"type": "
|
| 428 |
"input_price_per_1m": 1.02,
|
| 429 |
"output_price_per_1m": 4.1,
|
| 430 |
"currency": "EUR",
|
| 431 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 432 |
},
|
| 433 |
{
|
| 434 |
"name": "o3 Mini high",
|
|
@@ -436,15 +521,25 @@
|
|
| 436 |
"input_price_per_1m": 1.13,
|
| 437 |
"output_price_per_1m": 4.51,
|
| 438 |
"currency": "EUR",
|
| 439 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 440 |
},
|
| 441 |
{
|
| 442 |
"name": "o3",
|
| 443 |
-
"type": "
|
| 444 |
"input_price_per_1m": 1.86,
|
| 445 |
"output_price_per_1m": 7.45,
|
| 446 |
"currency": "EUR",
|
| 447 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 448 |
},
|
| 449 |
{
|
| 450 |
"name": "o3 Mini",
|
|
@@ -452,167 +547,287 @@
|
|
| 452 |
"input_price_per_1m": 1.13,
|
| 453 |
"output_price_per_1m": 4.51,
|
| 454 |
"currency": "EUR",
|
| 455 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 456 |
},
|
| 457 |
{
|
| 458 |
"name": "o1",
|
| 459 |
-
"type": "
|
| 460 |
"input_price_per_1m": 15.37,
|
| 461 |
"output_price_per_1m": 61.49,
|
| 462 |
"currency": "EUR",
|
| 463 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 464 |
},
|
| 465 |
{
|
| 466 |
"name": "GPT-5.2 Thinking",
|
| 467 |
-
"type": "
|
| 468 |
"input_price_per_1m": 1.63,
|
| 469 |
"output_price_per_1m": 13.04,
|
| 470 |
"currency": "EUR",
|
| 471 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 472 |
},
|
| 473 |
{
|
| 474 |
"name": "GPT-5.2",
|
| 475 |
-
"type": "
|
| 476 |
"input_price_per_1m": 1.63,
|
| 477 |
"output_price_per_1m": 13.04,
|
| 478 |
"currency": "EUR",
|
| 479 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 480 |
},
|
| 481 |
{
|
| 482 |
"name": "GPT-5.1 Thinking",
|
| 483 |
-
"type": "
|
| 484 |
"input_price_per_1m": 1.16,
|
| 485 |
"output_price_per_1m": 9.32,
|
| 486 |
"currency": "EUR",
|
| 487 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 488 |
},
|
| 489 |
{
|
| 490 |
"name": "GPT-5.1 Thinking Fast",
|
| 491 |
-
"type": "
|
| 492 |
"input_price_per_1m": 1.16,
|
| 493 |
"output_price_per_1m": 9.32,
|
| 494 |
"currency": "EUR",
|
| 495 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 496 |
},
|
| 497 |
{
|
| 498 |
"name": "GPT-5.1",
|
| 499 |
-
"type": "
|
| 500 |
"input_price_per_1m": 1.16,
|
| 501 |
"output_price_per_1m": 9.32,
|
| 502 |
"currency": "EUR",
|
| 503 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 504 |
},
|
| 505 |
{
|
| 506 |
"name": "GPT-5 Thinking",
|
| 507 |
-
"type": "
|
| 508 |
"input_price_per_1m": 1.16,
|
| 509 |
"output_price_per_1m": 9.32,
|
| 510 |
"currency": "EUR",
|
| 511 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 512 |
},
|
| 513 |
{
|
| 514 |
"name": "GPT-5 Thinking Fast",
|
| 515 |
-
"type": "
|
| 516 |
"input_price_per_1m": 1.16,
|
| 517 |
"output_price_per_1m": 9.32,
|
| 518 |
"currency": "EUR",
|
| 519 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 520 |
},
|
| 521 |
{
|
| 522 |
"name": "GPT-5 Pro",
|
| 523 |
-
"type": "
|
| 524 |
"input_price_per_1m": 13.98,
|
| 525 |
"output_price_per_1m": 111.8,
|
| 526 |
"currency": "EUR",
|
| 527 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 528 |
},
|
| 529 |
{
|
| 530 |
"name": "GPT-5 Nano",
|
| 531 |
-
"type": "
|
| 532 |
"input_price_per_1m": 0.05,
|
| 533 |
"output_price_per_1m": 0.37,
|
| 534 |
"currency": "EUR",
|
| 535 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 536 |
},
|
| 537 |
{
|
| 538 |
"name": "GPT-5 Mini",
|
| 539 |
-
"type": "
|
| 540 |
"input_price_per_1m": 0.23,
|
| 541 |
"output_price_per_1m": 1.86,
|
| 542 |
"currency": "EUR",
|
| 543 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 544 |
},
|
| 545 |
{
|
| 546 |
"name": "GPT-5 Chat",
|
| 547 |
-
"type": "
|
| 548 |
"input_price_per_1m": 1.16,
|
| 549 |
"output_price_per_1m": 9.32,
|
| 550 |
"currency": "EUR",
|
| 551 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 552 |
},
|
| 553 |
{
|
| 554 |
"name": "GPT-5",
|
| 555 |
-
"type": "
|
| 556 |
"input_price_per_1m": 1.16,
|
| 557 |
"output_price_per_1m": 9.32,
|
| 558 |
"currency": "EUR",
|
| 559 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 560 |
},
|
| 561 |
{
|
| 562 |
"name": "GPT-4o Mini",
|
| 563 |
-
"type": "
|
| 564 |
"input_price_per_1m": 0.14,
|
| 565 |
"output_price_per_1m": 0.56,
|
| 566 |
"currency": "EUR",
|
| 567 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 568 |
},
|
| 569 |
{
|
| 570 |
"name": "GPT-4.1 nano",
|
| 571 |
-
"type": "
|
| 572 |
"input_price_per_1m": 0.09,
|
| 573 |
"output_price_per_1m": 0.37,
|
| 574 |
"currency": "EUR",
|
| 575 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 576 |
},
|
| 577 |
{
|
| 578 |
"name": "GPT-4o",
|
| 579 |
-
"type": "
|
| 580 |
"input_price_per_1m": 2.56,
|
| 581 |
"output_price_per_1m": 10.25,
|
| 582 |
"currency": "EUR",
|
| 583 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 584 |
},
|
| 585 |
{
|
| 586 |
"name": "GPT-4.1",
|
| 587 |
-
"type": "
|
| 588 |
"input_price_per_1m": 1.86,
|
| 589 |
"output_price_per_1m": 7.45,
|
| 590 |
"currency": "EUR",
|
| 591 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 592 |
},
|
| 593 |
{
|
| 594 |
"name": "GPT-4.1 mini",
|
| 595 |
-
"type": "
|
| 596 |
"input_price_per_1m": 0.37,
|
| 597 |
"output_price_per_1m": 1.49,
|
| 598 |
"currency": "EUR",
|
| 599 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 600 |
},
|
| 601 |
{
|
| 602 |
"name": "Gemini 3 Pro Preview",
|
| 603 |
-
"type": "
|
| 604 |
"input_price_per_1m": 2.33,
|
| 605 |
"output_price_per_1m": 13.98,
|
| 606 |
"currency": "EUR",
|
| 607 |
-
"provider_upstream": "Google"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 608 |
},
|
| 609 |
{
|
| 610 |
"name": "Gemini 3 Flash Preview",
|
| 611 |
-
"type": "
|
| 612 |
"input_price_per_1m": 0.47,
|
| 613 |
"output_price_per_1m": 2.8,
|
| 614 |
"currency": "EUR",
|
| 615 |
-
"provider_upstream": "Google"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 616 |
},
|
| 617 |
{
|
| 618 |
"name": "GPT oss (120b)",
|
|
@@ -621,31 +836,59 @@
|
|
| 621 |
"output_price_per_1m": 2.33,
|
| 622 |
"currency": "EUR",
|
| 623 |
"size_b": 120,
|
| 624 |
-
"provider_upstream": "OpenAI"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 625 |
},
|
| 626 |
{
|
| 627 |
"name": "Gemini 2.5 Flash",
|
| 628 |
-
"type": "
|
| 629 |
"input_price_per_1m": 0.28,
|
| 630 |
"output_price_per_1m": 2.33,
|
| 631 |
"currency": "EUR",
|
| 632 |
-
"provider_upstream": "Google"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 633 |
},
|
| 634 |
{
|
| 635 |
"name": "Gemini 2.5 Pro Reasoning",
|
| 636 |
-
"type": "
|
| 637 |
"input_price_per_1m": 2.33,
|
| 638 |
"output_price_per_1m": 13.98,
|
| 639 |
"currency": "EUR",
|
| 640 |
-
"provider_upstream": "Google"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 641 |
},
|
| 642 |
{
|
| 643 |
"name": "Gemini 2.5 Pro",
|
| 644 |
-
"type": "
|
| 645 |
"input_price_per_1m": 2.33,
|
| 646 |
"output_price_per_1m": 13.98,
|
| 647 |
"currency": "EUR",
|
| 648 |
-
"provider_upstream": "Google"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 649 |
}
|
| 650 |
]
|
| 651 |
},
|
|
@@ -703,7 +946,10 @@
|
|
| 703 |
"output_price_per_1m": 0.04,
|
| 704 |
"currency": "USD",
|
| 705 |
"context_window": 8192,
|
| 706 |
-
"size_b": 8
|
|
|
|
|
|
|
|
|
|
| 707 |
},
|
| 708 |
{
|
| 709 |
"name": "openai-responses/gpt-5-nano",
|
|
@@ -779,7 +1025,10 @@
|
|
| 779 |
"input_price_per_1m": 0.05,
|
| 780 |
"output_price_per_1m": 0.2,
|
| 781 |
"currency": "USD",
|
| 782 |
-
"context_window": 1000000
|
|
|
|
|
|
|
|
|
|
| 783 |
},
|
| 784 |
{
|
| 785 |
"name": "novita/meta-llama/llama-3.1-8b-instruct",
|
|
@@ -788,7 +1037,10 @@
|
|
| 788 |
"output_price_per_1m": 0.05,
|
| 789 |
"currency": "USD",
|
| 790 |
"context_window": 16384,
|
| 791 |
-
"size_b": 8
|
|
|
|
|
|
|
|
|
|
| 792 |
},
|
| 793 |
{
|
| 794 |
"name": "novita/sao10k/l3-8b-lunaris",
|
|
@@ -850,7 +1102,11 @@
|
|
| 850 |
"output_price_per_1m": 0.3,
|
| 851 |
"currency": "USD",
|
| 852 |
"context_window": 40000,
|
| 853 |
-
"size_b": 32
|
|
|
|
|
|
|
|
|
|
|
|
|
| 854 |
},
|
| 855 |
{
|
| 856 |
"name": "openai-responses/gpt-4.1-nano",
|
|
@@ -1010,7 +1266,10 @@
|
|
| 1010 |
"input_price_per_1m": 0.1,
|
| 1011 |
"output_price_per_1m": 0.3,
|
| 1012 |
"currency": "USD",
|
| 1013 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 1014 |
},
|
| 1015 |
{
|
| 1016 |
"name": "mistral/devstral-small-2507",
|
|
@@ -1018,7 +1277,10 @@
|
|
| 1018 |
"input_price_per_1m": 0.1,
|
| 1019 |
"output_price_per_1m": 0.3,
|
| 1020 |
"currency": "USD",
|
| 1021 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 1022 |
},
|
| 1023 |
{
|
| 1024 |
"name": "mistral/mistral-small-latest",
|
|
@@ -1035,7 +1297,11 @@
|
|
| 1035 |
"output_price_per_1m": 0.5,
|
| 1036 |
"currency": "USD",
|
| 1037 |
"context_window": 131072,
|
| 1038 |
-
"size_b": 20
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1039 |
},
|
| 1040 |
{
|
| 1041 |
"name": "google/gemini-2.0-flash-001",
|
|
@@ -1199,7 +1465,10 @@
|
|
| 1199 |
"output_price_per_1m": 0.3,
|
| 1200 |
"currency": "USD",
|
| 1201 |
"context_window": 131072,
|
| 1202 |
-
"size_b": 70
|
|
|
|
|
|
|
|
|
|
| 1203 |
},
|
| 1204 |
{
|
| 1205 |
"name": "openai/gpt-5-mini:flex",
|
|
@@ -1220,7 +1489,10 @@
|
|
| 1220 |
"output_price_per_1m": 0.4,
|
| 1221 |
"currency": "USD",
|
| 1222 |
"context_window": 128000,
|
| 1223 |
-
"size_b": 70
|
|
|
|
|
|
|
|
|
|
| 1224 |
},
|
| 1225 |
{
|
| 1226 |
"name": "novita/nousresearch/hermes-2-pro-llama-3-8b",
|
|
@@ -1258,7 +1530,11 @@
|
|
| 1258 |
"output_price_per_1m": 0.75,
|
| 1259 |
"currency": "USD",
|
| 1260 |
"context_window": 131072,
|
| 1261 |
-
"size_b": 120
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1262 |
},
|
| 1263 |
{
|
| 1264 |
"name": "novita/deepseek/deepseek-r1-distill-qwen-14b",
|
|
@@ -1267,7 +1543,11 @@
|
|
| 1267 |
"output_price_per_1m": 0.15,
|
| 1268 |
"currency": "USD",
|
| 1269 |
"context_window": 128000,
|
| 1270 |
-
"size_b": 14
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1271 |
},
|
| 1272 |
{
|
| 1273 |
"name": "novita/mistralai/mistral-nemo",
|
|
@@ -1275,7 +1555,10 @@
|
|
| 1275 |
"input_price_per_1m": 0.17,
|
| 1276 |
"output_price_per_1m": 0.17,
|
| 1277 |
"currency": "USD",
|
| 1278 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 1279 |
},
|
| 1280 |
{
|
| 1281 |
"name": "together/meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo",
|
|
@@ -1293,7 +1576,11 @@
|
|
| 1293 |
"output_price_per_1m": 0.6,
|
| 1294 |
"currency": "USD",
|
| 1295 |
"context_window": 40000,
|
| 1296 |
-
"size_b": 235
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1297 |
},
|
| 1298 |
{
|
| 1299 |
"name": "deepinfra/zai-org/GLM-4.5-Air",
|
|
@@ -1301,7 +1588,11 @@
|
|
| 1301 |
"input_price_per_1m": 0.2,
|
| 1302 |
"output_price_per_1m": 1.1,
|
| 1303 |
"currency": "USD",
|
| 1304 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1305 |
},
|
| 1306 |
{
|
| 1307 |
"name": "together/meta-llama/LlamaGuard-2-8b",
|
|
@@ -1314,19 +1605,29 @@
|
|
| 1314 |
},
|
| 1315 |
{
|
| 1316 |
"name": "xai/grok-4-fast",
|
| 1317 |
-
"type": "
|
| 1318 |
"input_price_per_1m": 0.2,
|
| 1319 |
"output_price_per_1m": 0.5,
|
| 1320 |
"currency": "USD",
|
| 1321 |
-
"context_window": 2000000
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1322 |
},
|
| 1323 |
{
|
| 1324 |
"name": "xai/grok-4-fast-non-reasoning",
|
| 1325 |
-
"type": "
|
| 1326 |
"input_price_per_1m": 0.2,
|
| 1327 |
"output_price_per_1m": 0.5,
|
| 1328 |
"currency": "USD",
|
| 1329 |
-
"context_window": 2000000
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1330 |
},
|
| 1331 |
{
|
| 1332 |
"name": "xai/grok-4-1-fast-non-reasoning",
|
|
@@ -1380,16 +1681,24 @@
|
|
| 1380 |
"output_price_per_1m": 0.8,
|
| 1381 |
"currency": "USD",
|
| 1382 |
"context_window": 128000,
|
| 1383 |
-
"size_b": 235
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1384 |
},
|
| 1385 |
{
|
| 1386 |
"name": "novita/meta-llama/llama-4-maverick-17b-128e-instruct-fp8",
|
| 1387 |
-
"type": "
|
| 1388 |
"input_price_per_1m": 0.2,
|
| 1389 |
"output_price_per_1m": 0.85,
|
| 1390 |
"currency": "USD",
|
| 1391 |
"context_window": 1048576,
|
| 1392 |
-
"size_b": 17
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1393 |
},
|
| 1394 |
{
|
| 1395 |
"name": "deepinfra/meta-llama/Meta-Llama-3.1-70B-Instruct",
|
|
@@ -1407,7 +1716,10 @@
|
|
| 1407 |
"output_price_per_1m": 0.69,
|
| 1408 |
"currency": "USD",
|
| 1409 |
"context_window": 64000,
|
| 1410 |
-
"size_b": 70
|
|
|
|
|
|
|
|
|
|
| 1411 |
},
|
| 1412 |
{
|
| 1413 |
"name": "deepinfra/Qwen/Qwen2.5-72B-Instruct",
|
|
@@ -1425,7 +1737,10 @@
|
|
| 1425 |
"output_price_per_1m": 0.4,
|
| 1426 |
"currency": "USD",
|
| 1427 |
"context_window": 131072,
|
| 1428 |
-
"size_b": 70
|
|
|
|
|
|
|
|
|
|
| 1429 |
},
|
| 1430 |
{
|
| 1431 |
"name": "openai-responses/gpt-5-mini",
|
|
@@ -1532,7 +1847,10 @@
|
|
| 1532 |
"input_price_per_1m": 0.28,
|
| 1533 |
"output_price_per_1m": 0.42,
|
| 1534 |
"currency": "USD",
|
| 1535 |
-
"context_window": 128000
|
|
|
|
|
|
|
|
|
|
| 1536 |
},
|
| 1537 |
{
|
| 1538 |
"name": "deepseek/deepseek-reasoner",
|
|
@@ -1579,7 +1897,11 @@
|
|
| 1579 |
"input_price_per_1m": 0.3,
|
| 1580 |
"output_price_per_1m": 1,
|
| 1581 |
"currency": "USD",
|
| 1582 |
-
"context_window": 163840
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1583 |
},
|
| 1584 |
{
|
| 1585 |
"name": "together/Qwen/Qwen2.5-7B-Instruct-Turbo",
|
|
@@ -1649,7 +1971,11 @@
|
|
| 1649 |
"input_price_per_1m": 0.3,
|
| 1650 |
"output_price_per_1m": 1.2,
|
| 1651 |
"currency": "USD",
|
| 1652 |
-
"context_window": 200000
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1653 |
},
|
| 1654 |
{
|
| 1655 |
"name": "alibaba/qwen3-coder-flash",
|
|
@@ -1825,7 +2151,10 @@
|
|
| 1825 |
"output_price_per_1m": 0.3,
|
| 1826 |
"currency": "USD",
|
| 1827 |
"context_window": 12800,
|
| 1828 |
-
"size_b": 32
|
|
|
|
|
|
|
|
|
|
| 1829 |
},
|
| 1830 |
{
|
| 1831 |
"name": "coding/gemini-2.5-flash@us-south1",
|
|
@@ -1975,7 +2304,10 @@
|
|
| 1975 |
"output_price_per_1m": 0.4,
|
| 1976 |
"currency": "USD",
|
| 1977 |
"context_window": 32000,
|
| 1978 |
-
"size_b": 72
|
|
|
|
|
|
|
|
|
|
| 1979 |
},
|
| 1980 |
{
|
| 1981 |
"name": "novita/meta-llama/llama-3.3-70b-instruct",
|
|
@@ -1984,7 +2316,10 @@
|
|
| 1984 |
"output_price_per_1m": 0.39,
|
| 1985 |
"currency": "USD",
|
| 1986 |
"context_window": 131072,
|
| 1987 |
-
"size_b": 70
|
|
|
|
|
|
|
|
|
|
| 1988 |
},
|
| 1989 |
{
|
| 1990 |
"name": "nebius/zai-org/GLM-4.7",
|
|
@@ -2004,7 +2339,10 @@
|
|
| 2004 |
"output_price_per_1m": 1.8,
|
| 2005 |
"currency": "USD",
|
| 2006 |
"context_window": 262000,
|
| 2007 |
-
"size_b": 480
|
|
|
|
|
|
|
|
|
|
| 2008 |
},
|
| 2009 |
{
|
| 2010 |
"name": "deepinfra/Qwen/Qwen3-Coder-480B-A35B-Instruct",
|
|
@@ -2013,7 +2351,10 @@
|
|
| 2013 |
"output_price_per_1m": 1.6,
|
| 2014 |
"currency": "USD",
|
| 2015 |
"context_window": 262144,
|
| 2016 |
-
"size_b": 480
|
|
|
|
|
|
|
|
|
|
| 2017 |
},
|
| 2018 |
{
|
| 2019 |
"name": "openai-responses/gpt-4.1-mini",
|
|
@@ -2164,7 +2505,10 @@
|
|
| 2164 |
"input_price_per_1m": 0.4,
|
| 2165 |
"output_price_per_1m": 2,
|
| 2166 |
"currency": "USD",
|
| 2167 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 2168 |
},
|
| 2169 |
{
|
| 2170 |
"name": "mistral/mistral-medium-latest",
|
|
@@ -2180,7 +2524,10 @@
|
|
| 2180 |
"input_price_per_1m": 0.4,
|
| 2181 |
"output_price_per_1m": 1.2,
|
| 2182 |
"currency": "USD",
|
| 2183 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 2184 |
},
|
| 2185 |
{
|
| 2186 |
"name": "novita/deepseek/deepseek-v3-0324",
|
|
@@ -2216,7 +2563,10 @@
|
|
| 2216 |
"input_price_per_1m": 0.5,
|
| 2217 |
"output_price_per_1m": 2.4,
|
| 2218 |
"currency": "USD",
|
| 2219 |
-
"context_window": 131000
|
|
|
|
|
|
|
|
|
|
| 2220 |
},
|
| 2221 |
{
|
| 2222 |
"name": "nebius/moonshotai/kimi-k2.5",
|
|
@@ -2244,7 +2594,10 @@
|
|
| 2244 |
"input_price_per_1m": 0.5,
|
| 2245 |
"output_price_per_1m": 1.5,
|
| 2246 |
"currency": "USD",
|
| 2247 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 2248 |
},
|
| 2249 |
{
|
| 2250 |
"name": "google/gemini-3.1-flash-image-preview@us-east5",
|
|
@@ -2560,7 +2913,10 @@
|
|
| 2560 |
"input_price_per_1m": 0.57,
|
| 2561 |
"output_price_per_1m": 2.3,
|
| 2562 |
"currency": "USD",
|
| 2563 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 2564 |
},
|
| 2565 |
{
|
| 2566 |
"name": "nebius/zai-org/GLM-4.5",
|
|
@@ -2568,7 +2924,11 @@
|
|
| 2568 |
"input_price_per_1m": 0.6,
|
| 2569 |
"output_price_per_1m": 2.2,
|
| 2570 |
"currency": "USD",
|
| 2571 |
-
"context_window": 128000
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2572 |
},
|
| 2573 |
{
|
| 2574 |
"name": "moonshot/kimi-k2-0711-preview",
|
|
@@ -2576,7 +2936,10 @@
|
|
| 2576 |
"input_price_per_1m": 0.6,
|
| 2577 |
"output_price_per_1m": 2.5,
|
| 2578 |
"currency": "USD",
|
| 2579 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 2580 |
},
|
| 2581 |
{
|
| 2582 |
"name": "moonshot/kimi-k2.5",
|
|
@@ -2596,7 +2959,11 @@
|
|
| 2596 |
"input_price_per_1m": 0.6,
|
| 2597 |
"output_price_per_1m": 2.5,
|
| 2598 |
"currency": "USD",
|
| 2599 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2600 |
},
|
| 2601 |
{
|
| 2602 |
"name": "moonshot/kimi-k2-0905-preview",
|
|
@@ -2604,7 +2971,10 @@
|
|
| 2604 |
"input_price_per_1m": 0.6,
|
| 2605 |
"output_price_per_1m": 2.5,
|
| 2606 |
"currency": "USD",
|
| 2607 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 2608 |
},
|
| 2609 |
{
|
| 2610 |
"name": "moonshot/kimi-k2-thinking",
|
|
@@ -2612,7 +2982,11 @@
|
|
| 2612 |
"input_price_per_1m": 0.6,
|
| 2613 |
"output_price_per_1m": 2.5,
|
| 2614 |
"currency": "USD",
|
| 2615 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2616 |
},
|
| 2617 |
{
|
| 2618 |
"name": "deepinfra/zai-org/GLM-4.5",
|
|
@@ -2620,7 +2994,11 @@
|
|
| 2620 |
"input_price_per_1m": 0.6,
|
| 2621 |
"output_price_per_1m": 2.2,
|
| 2622 |
"currency": "USD",
|
| 2623 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2624 |
},
|
| 2625 |
{
|
| 2626 |
"name": "zai/GLM-4.5",
|
|
@@ -2685,7 +3063,11 @@
|
|
| 2685 |
"input_price_per_1m": 0.6,
|
| 2686 |
"output_price_per_1m": 2.2,
|
| 2687 |
"currency": "USD",
|
| 2688 |
-
"context_window": 204800
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2689 |
},
|
| 2690 |
{
|
| 2691 |
"name": "novita/zai-org/glm-4.5",
|
|
@@ -2693,7 +3075,11 @@
|
|
| 2693 |
"input_price_per_1m": 0.6,
|
| 2694 |
"output_price_per_1m": 2.2,
|
| 2695 |
"currency": "USD",
|
| 2696 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2697 |
},
|
| 2698 |
{
|
| 2699 |
"name": "novita/microsoft/wizardlm-2-8x22b",
|
|
@@ -2734,7 +3120,11 @@
|
|
| 2734 |
"input_price_per_1m": 0.7,
|
| 2735 |
"output_price_per_1m": 2.5,
|
| 2736 |
"currency": "USD",
|
| 2737 |
-
"context_window": 64000
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2738 |
},
|
| 2739 |
{
|
| 2740 |
"name": "novita/deepseek/deepseek-prover-v2-671b",
|
|
@@ -2751,7 +3141,11 @@
|
|
| 2751 |
"input_price_per_1m": 0.8,
|
| 2752 |
"output_price_per_1m": 2.4,
|
| 2753 |
"currency": "USD",
|
| 2754 |
-
"context_window": 164000
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2755 |
},
|
| 2756 |
{
|
| 2757 |
"name": "deepinfra/meta-llama/Meta-Llama-3.1-405B-Instruct",
|
|
@@ -2769,16 +3163,22 @@
|
|
| 2769 |
"output_price_per_1m": 0.8,
|
| 2770 |
"currency": "USD",
|
| 2771 |
"context_window": 32000,
|
| 2772 |
-
"size_b": 70
|
|
|
|
|
|
|
|
|
|
| 2773 |
},
|
| 2774 |
{
|
| 2775 |
"name": "novita/qwen/qwen2.5-vl-72b-instruct",
|
| 2776 |
-
"type": "
|
| 2777 |
"input_price_per_1m": 0.8,
|
| 2778 |
"output_price_per_1m": 0.8,
|
| 2779 |
"currency": "USD",
|
| 2780 |
"context_window": 96000,
|
| 2781 |
-
"size_b": 72
|
|
|
|
|
|
|
|
|
|
| 2782 |
},
|
| 2783 |
{
|
| 2784 |
"name": "deepinfra/deepseek-ai/DeepSeek-V3",
|
|
@@ -2786,7 +3186,11 @@
|
|
| 2786 |
"input_price_per_1m": 0.85,
|
| 2787 |
"output_price_per_1m": 0.9,
|
| 2788 |
"currency": "USD",
|
| 2789 |
-
"context_window": 128000
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2790 |
},
|
| 2791 |
{
|
| 2792 |
"name": "deepinfra/deepseek-ai/DeepSeek-R1",
|
|
@@ -2794,7 +3198,11 @@
|
|
| 2794 |
"input_price_per_1m": 0.85,
|
| 2795 |
"output_price_per_1m": 2.5,
|
| 2796 |
"currency": "USD",
|
| 2797 |
-
"context_window": 64000
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2798 |
},
|
| 2799 |
{
|
| 2800 |
"name": "alibaba/qwen3-max",
|
|
@@ -2814,7 +3222,10 @@
|
|
| 2814 |
"output_price_per_1m": 0.88,
|
| 2815 |
"currency": "USD",
|
| 2816 |
"context_window": 131072,
|
| 2817 |
-
"size_b": 70
|
|
|
|
|
|
|
|
|
|
| 2818 |
},
|
| 2819 |
{
|
| 2820 |
"name": "together/meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",
|
|
@@ -2831,7 +3242,11 @@
|
|
| 2831 |
"input_price_per_1m": 0.89,
|
| 2832 |
"output_price_per_1m": 0.89,
|
| 2833 |
"currency": "USD",
|
| 2834 |
-
"context_window": 64000
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2835 |
},
|
| 2836 |
{
|
| 2837 |
"name": "parasail/parasail-kimi-k2-instruct",
|
|
@@ -2854,11 +3269,14 @@
|
|
| 2854 |
},
|
| 2855 |
{
|
| 2856 |
"name": "perplexity/sonar",
|
| 2857 |
-
"type": "
|
| 2858 |
"input_price_per_1m": 1,
|
| 2859 |
"output_price_per_1m": 1,
|
| 2860 |
"currency": "USD",
|
| 2861 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 2862 |
},
|
| 2863 |
{
|
| 2864 |
"name": "openai/o3:flex",
|
|
@@ -2912,7 +3330,10 @@
|
|
| 2912 |
"input_price_per_1m": 1,
|
| 2913 |
"output_price_per_1m": 3,
|
| 2914 |
"currency": "USD",
|
| 2915 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 2916 |
},
|
| 2917 |
{
|
| 2918 |
"name": "groq/moonshotai/Kimi-K2-Instruct-0905",
|
|
@@ -2920,7 +3341,10 @@
|
|
| 2920 |
"input_price_per_1m": 1,
|
| 2921 |
"output_price_per_1m": 3,
|
| 2922 |
"currency": "USD",
|
| 2923 |
-
"context_window": 256000
|
|
|
|
|
|
|
|
|
|
| 2924 |
},
|
| 2925 |
{
|
| 2926 |
"name": "vertex/claude-haiku-4-5",
|
|
@@ -3214,7 +3638,10 @@
|
|
| 3214 |
"input_price_per_1m": 1.2,
|
| 3215 |
"output_price_per_1m": 5,
|
| 3216 |
"currency": "USD",
|
| 3217 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 3218 |
},
|
| 3219 |
{
|
| 3220 |
"name": "together/Qwen/Qwen2.5-72B-Instruct-Turbo",
|
|
@@ -3426,7 +3853,11 @@
|
|
| 3426 |
"input_price_per_1m": 1.25,
|
| 3427 |
"output_price_per_1m": 1.25,
|
| 3428 |
"currency": "USD",
|
| 3429 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3430 |
},
|
| 3431 |
{
|
| 3432 |
"name": "google/gemini-2.5-pro",
|
|
@@ -3728,7 +4159,10 @@
|
|
| 3728 |
"input_price_per_1m": 1.6,
|
| 3729 |
"output_price_per_1m": 6.4,
|
| 3730 |
"currency": "USD",
|
| 3731 |
-
"context_window": 32768
|
|
|
|
|
|
|
|
|
|
| 3732 |
},
|
| 3733 |
{
|
| 3734 |
"name": "openai-responses/gpt-5.3-codex",
|
|
@@ -3846,11 +4280,15 @@
|
|
| 3846 |
},
|
| 3847 |
{
|
| 3848 |
"name": "perplexity/sonar-reasoning-pro",
|
| 3849 |
-
"type": "
|
| 3850 |
"input_price_per_1m": 2,
|
| 3851 |
"output_price_per_1m": 8,
|
| 3852 |
"currency": "USD",
|
| 3853 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3854 |
},
|
| 3855 |
{
|
| 3856 |
"name": "openai-responses/gpt-4.1",
|
|
@@ -4369,11 +4807,14 @@
|
|
| 4369 |
},
|
| 4370 |
{
|
| 4371 |
"name": "perplexity/sonar-pro",
|
| 4372 |
-
"type": "
|
| 4373 |
"input_price_per_1m": 3,
|
| 4374 |
"output_price_per_1m": 15,
|
| 4375 |
"currency": "USD",
|
| 4376 |
-
"context_window": 204800
|
|
|
|
|
|
|
|
|
|
| 4377 |
},
|
| 4378 |
{
|
| 4379 |
"name": "together/deepseek-ai/DeepSeek-R1",
|
|
@@ -4381,7 +4822,11 @@
|
|
| 4381 |
"input_price_per_1m": 3,
|
| 4382 |
"output_price_per_1m": 7,
|
| 4383 |
"currency": "USD",
|
| 4384 |
-
"context_window": 64000
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4385 |
},
|
| 4386 |
{
|
| 4387 |
"name": "anthropic/claude-sonnet-4-5",
|
|
@@ -4865,7 +5310,11 @@
|
|
| 4865 |
"input_price_per_1m": 4,
|
| 4866 |
"output_price_per_1m": 4,
|
| 4867 |
"currency": "USD",
|
| 4868 |
-
"context_window": 64000
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4869 |
},
|
| 4870 |
{
|
| 4871 |
"name": "bedrock/claude-opus-4-6",
|
|
@@ -4932,7 +5381,10 @@
|
|
| 4932 |
"input_price_per_1m": 5,
|
| 4933 |
"output_price_per_1m": 25,
|
| 4934 |
"currency": "USD",
|
| 4935 |
-
"context_window": 131072
|
|
|
|
|
|
|
|
|
|
| 4936 |
},
|
| 4937 |
{
|
| 4938 |
"name": "vertex/claude-opus-4-5",
|
|
@@ -5360,7 +5812,11 @@
|
|
| 5360 |
"output_price_per_1m": 0.6,
|
| 5361 |
"currency": "USD",
|
| 5362 |
"size_b": 120,
|
| 5363 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5364 |
},
|
| 5365 |
{
|
| 5366 |
"name": "gpt-oss-20b (base)",
|
|
@@ -5369,7 +5825,11 @@
|
|
| 5369 |
"output_price_per_1m": 0.2,
|
| 5370 |
"currency": "USD",
|
| 5371 |
"size_b": 20,
|
| 5372 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5373 |
},
|
| 5374 |
{
|
| 5375 |
"name": "Kimi-K2-Instruct (base)",
|
|
@@ -5377,7 +5837,10 @@
|
|
| 5377 |
"input_price_per_1m": 0.5,
|
| 5378 |
"output_price_per_1m": 2.4,
|
| 5379 |
"currency": "USD",
|
| 5380 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
| 5381 |
},
|
| 5382 |
{
|
| 5383 |
"name": "Qwen3-Coder-480B-A35B-Instruct (base)",
|
|
@@ -5386,7 +5849,10 @@
|
|
| 5386 |
"output_price_per_1m": 1.8,
|
| 5387 |
"currency": "USD",
|
| 5388 |
"size_b": 480,
|
| 5389 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
| 5390 |
},
|
| 5391 |
{
|
| 5392 |
"name": "Qwen3-235B-A22B-Thinking-2507 (base)",
|
|
@@ -5395,7 +5861,11 @@
|
|
| 5395 |
"output_price_per_1m": 0.8,
|
| 5396 |
"currency": "USD",
|
| 5397 |
"size_b": 235,
|
| 5398 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5399 |
},
|
| 5400 |
{
|
| 5401 |
"name": "Qwen3-235B-A22B-Instruct-2507 (base)",
|
|
@@ -5404,7 +5874,11 @@
|
|
| 5404 |
"output_price_per_1m": 0.6,
|
| 5405 |
"currency": "USD",
|
| 5406 |
"size_b": 235,
|
| 5407 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5408 |
},
|
| 5409 |
{
|
| 5410 |
"name": "Qwen3-30B-A3B-Thinking-2507 (base)",
|
|
@@ -5413,7 +5887,11 @@
|
|
| 5413 |
"output_price_per_1m": 0.3,
|
| 5414 |
"currency": "USD",
|
| 5415 |
"size_b": 30,
|
| 5416 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5417 |
},
|
| 5418 |
{
|
| 5419 |
"name": "Qwen3-30B-A3B-Instruct-2507 (base)",
|
|
@@ -5422,7 +5900,10 @@
|
|
| 5422 |
"output_price_per_1m": 0.3,
|
| 5423 |
"currency": "USD",
|
| 5424 |
"size_b": 30,
|
| 5425 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
| 5426 |
},
|
| 5427 |
{
|
| 5428 |
"name": "Qwen3-Coder-30B-A3B-Instruct (base)",
|
|
@@ -5431,7 +5912,10 @@
|
|
| 5431 |
"output_price_per_1m": 0.3,
|
| 5432 |
"currency": "USD",
|
| 5433 |
"size_b": 30,
|
| 5434 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
| 5435 |
},
|
| 5436 |
{
|
| 5437 |
"name": "Qwen3-30B-A3B (base)",
|
|
@@ -5440,7 +5924,11 @@
|
|
| 5440 |
"output_price_per_1m": 0.3,
|
| 5441 |
"currency": "USD",
|
| 5442 |
"size_b": 30,
|
| 5443 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5444 |
},
|
| 5445 |
{
|
| 5446 |
"name": "Qwen3-32B (fast)",
|
|
@@ -5449,7 +5937,11 @@
|
|
| 5449 |
"output_price_per_1m": 0.6,
|
| 5450 |
"currency": "USD",
|
| 5451 |
"size_b": 32,
|
| 5452 |
-
"flavor": "fast"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5453 |
},
|
| 5454 |
{
|
| 5455 |
"name": "Qwen3-32B (base)",
|
|
@@ -5458,7 +5950,11 @@
|
|
| 5458 |
"output_price_per_1m": 0.3,
|
| 5459 |
"currency": "USD",
|
| 5460 |
"size_b": 32,
|
| 5461 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5462 |
},
|
| 5463 |
{
|
| 5464 |
"name": "Qwen3-14B (base)",
|
|
@@ -5467,7 +5963,11 @@
|
|
| 5467 |
"output_price_per_1m": 0.24,
|
| 5468 |
"currency": "USD",
|
| 5469 |
"size_b": 14,
|
| 5470 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5471 |
},
|
| 5472 |
{
|
| 5473 |
"name": "Qwen2.5-Coder-7B (base)",
|
|
@@ -5494,7 +5994,11 @@
|
|
| 5494 |
"output_price_per_1m": 1.5,
|
| 5495 |
"currency": "USD",
|
| 5496 |
"size_b": 32,
|
| 5497 |
-
"flavor": "fast"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5498 |
},
|
| 5499 |
{
|
| 5500 |
"name": "QwQ-32B (base)",
|
|
@@ -5503,7 +6007,11 @@
|
|
| 5503 |
"output_price_per_1m": 0.45,
|
| 5504 |
"currency": "USD",
|
| 5505 |
"size_b": 32,
|
| 5506 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5507 |
},
|
| 5508 |
{
|
| 5509 |
"name": "GLM-4.5 (base)",
|
|
@@ -5511,7 +6019,11 @@
|
|
| 5511 |
"input_price_per_1m": 0.6,
|
| 5512 |
"output_price_per_1m": 2.2,
|
| 5513 |
"currency": "USD",
|
| 5514 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5515 |
},
|
| 5516 |
{
|
| 5517 |
"name": "GLM-4.5-Air (base)",
|
|
@@ -5519,7 +6031,11 @@
|
|
| 5519 |
"input_price_per_1m": 0.2,
|
| 5520 |
"output_price_per_1m": 1.2,
|
| 5521 |
"currency": "USD",
|
| 5522 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5523 |
},
|
| 5524 |
{
|
| 5525 |
"name": "DeepSeek-R1-0528 (fast)",
|
|
@@ -5527,7 +6043,11 @@
|
|
| 5527 |
"input_price_per_1m": 2,
|
| 5528 |
"output_price_per_1m": 6,
|
| 5529 |
"currency": "USD",
|
| 5530 |
-
"flavor": "fast"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5531 |
},
|
| 5532 |
{
|
| 5533 |
"name": "DeepSeek-R1-0528 (base)",
|
|
@@ -5535,7 +6055,11 @@
|
|
| 5535 |
"input_price_per_1m": 0.8,
|
| 5536 |
"output_price_per_1m": 2.4,
|
| 5537 |
"currency": "USD",
|
| 5538 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5539 |
},
|
| 5540 |
{
|
| 5541 |
"name": "DeepSeek-V3-0324 (fast)",
|
|
@@ -5568,7 +6092,10 @@
|
|
| 5568 |
"output_price_per_1m": 0.75,
|
| 5569 |
"currency": "USD",
|
| 5570 |
"size_b": 70,
|
| 5571 |
-
"flavor": "fast"
|
|
|
|
|
|
|
|
|
|
| 5572 |
},
|
| 5573 |
{
|
| 5574 |
"name": "Llama-3.3-70B-Instruct (base)",
|
|
@@ -5577,7 +6104,10 @@
|
|
| 5577 |
"output_price_per_1m": 0.4,
|
| 5578 |
"currency": "USD",
|
| 5579 |
"size_b": 70,
|
| 5580 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
| 5581 |
},
|
| 5582 |
{
|
| 5583 |
"name": "Llama-3.1-8B-Instruct (fast)",
|
|
@@ -5586,7 +6116,10 @@
|
|
| 5586 |
"output_price_per_1m": 0.09,
|
| 5587 |
"currency": "USD",
|
| 5588 |
"size_b": 8,
|
| 5589 |
-
"flavor": "fast"
|
|
|
|
|
|
|
|
|
|
| 5590 |
},
|
| 5591 |
{
|
| 5592 |
"name": "Llama-3.1-8B-Instruct (base)",
|
|
@@ -5595,7 +6128,10 @@
|
|
| 5595 |
"output_price_per_1m": 0.06,
|
| 5596 |
"currency": "USD",
|
| 5597 |
"size_b": 8,
|
| 5598 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
| 5599 |
},
|
| 5600 |
{
|
| 5601 |
"name": "Llama-3.1-405B-Instruct (base)",
|
|
@@ -5604,7 +6140,10 @@
|
|
| 5604 |
"output_price_per_1m": 3,
|
| 5605 |
"currency": "USD",
|
| 5606 |
"size_b": 405,
|
| 5607 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
| 5608 |
},
|
| 5609 |
{
|
| 5610 |
"name": "Llama-3_1-Nemotron-Ultra-253B-v1 (base)",
|
|
@@ -5639,7 +6178,10 @@
|
|
| 5639 |
"input_price_per_1m": 0.08,
|
| 5640 |
"output_price_per_1m": 0.24,
|
| 5641 |
"currency": "USD",
|
| 5642 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
| 5643 |
},
|
| 5644 |
{
|
| 5645 |
"name": "Hermes-4-405B (base)",
|
|
@@ -5648,7 +6190,10 @@
|
|
| 5648 |
"output_price_per_1m": 3,
|
| 5649 |
"currency": "USD",
|
| 5650 |
"size_b": 405,
|
| 5651 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
| 5652 |
},
|
| 5653 |
{
|
| 5654 |
"name": "Hermes-4-70B (base)",
|
|
@@ -5657,7 +6202,10 @@
|
|
| 5657 |
"output_price_per_1m": 0.4,
|
| 5658 |
"currency": "USD",
|
| 5659 |
"size_b": 70,
|
| 5660 |
-
"flavor": "base"
|
|
|
|
|
|
|
|
|
|
| 5661 |
},
|
| 5662 |
{
|
| 5663 |
"name": "Hermes-3-Llama-3.1-405B (base)",
|
|
@@ -5739,21 +6287,30 @@
|
|
| 5739 |
"type": "image",
|
| 5740 |
"input_price_per_1m": 0.0013,
|
| 5741 |
"output_price_per_1m": 0,
|
| 5742 |
-
"currency": "USD"
|
|
|
|
|
|
|
|
|
|
| 5743 |
},
|
| 5744 |
{
|
| 5745 |
"name": "flux-dev",
|
| 5746 |
"type": "image",
|
| 5747 |
"input_price_per_1m": 0.007,
|
| 5748 |
"output_price_per_1m": 0,
|
| 5749 |
-
"currency": "USD"
|
|
|
|
|
|
|
|
|
|
| 5750 |
},
|
| 5751 |
{
|
| 5752 |
"name": "sdxl",
|
| 5753 |
"type": "image",
|
| 5754 |
"input_price_per_1m": 0.003,
|
| 5755 |
"output_price_per_1m": 0,
|
| 5756 |
-
"currency": "USD"
|
|
|
|
|
|
|
|
|
|
| 5757 |
},
|
| 5758 |
{
|
| 5759 |
"name": "bge-multilingual-gemma2",
|
|
@@ -5802,7 +6359,11 @@
|
|
| 5802 |
"input_price_per_1m": 0.75,
|
| 5803 |
"output_price_per_1m": 2.25,
|
| 5804 |
"currency": "EUR",
|
| 5805 |
-
"size_b": 235
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5806 |
},
|
| 5807 |
{
|
| 5808 |
"name": "gpt-oss-120b",
|
|
@@ -5810,15 +6371,23 @@
|
|
| 5810 |
"input_price_per_1m": 0.15,
|
| 5811 |
"output_price_per_1m": 0.6,
|
| 5812 |
"currency": "EUR",
|
| 5813 |
-
"size_b": 120
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5814 |
},
|
| 5815 |
{
|
| 5816 |
"name": "mistral-small-3.2-24b-instruct-2506",
|
| 5817 |
-
"type": "
|
| 5818 |
"input_price_per_1m": 0.15,
|
| 5819 |
"output_price_per_1m": 0.35,
|
| 5820 |
"currency": "EUR",
|
| 5821 |
-
"size_b": 24
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5822 |
},
|
| 5823 |
{
|
| 5824 |
"name": "devstral-2-123b-instruct-2512",
|
|
@@ -5849,7 +6418,10 @@
|
|
| 5849 |
"input_price_per_1m": 0.9,
|
| 5850 |
"output_price_per_1m": 0.9,
|
| 5851 |
"currency": "EUR",
|
| 5852 |
-
"size_b": 70
|
|
|
|
|
|
|
|
|
|
| 5853 |
},
|
| 5854 |
{
|
| 5855 |
"name": "qwen3-coder-30b-a3b-instruct",
|
|
@@ -5857,7 +6429,10 @@
|
|
| 5857 |
"input_price_per_1m": 0.2,
|
| 5858 |
"output_price_per_1m": 0.8,
|
| 5859 |
"currency": "EUR",
|
| 5860 |
-
"size_b": 30
|
|
|
|
|
|
|
|
|
|
| 5861 |
},
|
| 5862 |
{
|
| 5863 |
"name": "qwen3-embedding-8b",
|
|
@@ -5881,15 +6456,23 @@
|
|
| 5881 |
"input_price_per_1m": 0.15,
|
| 5882 |
"output_price_per_1m": 0.35,
|
| 5883 |
"currency": "EUR",
|
| 5884 |
-
"size_b": 24
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5885 |
},
|
| 5886 |
{
|
| 5887 |
"name": "gemma-3-27b-it",
|
| 5888 |
-
"type": "
|
| 5889 |
"input_price_per_1m": 0.25,
|
| 5890 |
"output_price_per_1m": 0.5,
|
| 5891 |
"currency": "EUR",
|
| 5892 |
-
"size_b": 27
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5893 |
},
|
| 5894 |
{
|
| 5895 |
"name": "bge-multilingual-gemma2",
|
|
@@ -5904,14 +6487,20 @@
|
|
| 5904 |
"input_price_per_1m": 0.2,
|
| 5905 |
"output_price_per_1m": 0.2,
|
| 5906 |
"currency": "EUR",
|
| 5907 |
-
"size_b": 8
|
|
|
|
|
|
|
|
|
|
| 5908 |
},
|
| 5909 |
{
|
| 5910 |
"name": "mistral-nemo-instruct-2407",
|
| 5911 |
"type": "chat",
|
| 5912 |
"input_price_per_1m": 0.2,
|
| 5913 |
"output_price_per_1m": 0.2,
|
| 5914 |
-
"currency": "EUR"
|
|
|
|
|
|
|
|
|
|
| 5915 |
},
|
| 5916 |
{
|
| 5917 |
"name": "deepseek-r1-distill-llama-70b",
|
|
@@ -5919,7 +6508,10 @@
|
|
| 5919 |
"input_price_per_1m": 0.9,
|
| 5920 |
"output_price_per_1m": 0.9,
|
| 5921 |
"currency": "EUR",
|
| 5922 |
-
"size_b": 70
|
|
|
|
|
|
|
|
|
|
| 5923 |
}
|
| 5924 |
]
|
| 5925 |
},
|
|
@@ -5937,15 +6529,22 @@
|
|
| 5937 |
"input_price_per_1m": 0.5,
|
| 5938 |
"output_price_per_1m": 1.5,
|
| 5939 |
"currency": "USD",
|
| 5940 |
-
"api_endpoint": "mistral-large-latest"
|
|
|
|
|
|
|
|
|
|
| 5941 |
},
|
| 5942 |
{
|
| 5943 |
"name": "Mistral Medium 3",
|
| 5944 |
-
"type": "
|
| 5945 |
"input_price_per_1m": 0.4,
|
| 5946 |
"output_price_per_1m": 2,
|
| 5947 |
"currency": "USD",
|
| 5948 |
-
"api_endpoint": "mistral-medium-latest"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5949 |
},
|
| 5950 |
{
|
| 5951 |
"name": "Devstral 2",
|
|
@@ -5961,7 +6560,10 @@
|
|
| 5961 |
"input_price_per_1m": 0.1,
|
| 5962 |
"output_price_per_1m": 0.3,
|
| 5963 |
"currency": "USD",
|
| 5964 |
-
"api_endpoint": "devstral-small-latest"
|
|
|
|
|
|
|
|
|
|
| 5965 |
},
|
| 5966 |
{
|
| 5967 |
"name": "Codestral",
|
|
@@ -5969,15 +6571,22 @@
|
|
| 5969 |
"input_price_per_1m": 0.3,
|
| 5970 |
"output_price_per_1m": 0.9,
|
| 5971 |
"currency": "USD",
|
| 5972 |
-
"api_endpoint": "codestral-latest"
|
|
|
|
|
|
|
|
|
|
| 5973 |
},
|
| 5974 |
{
|
| 5975 |
"name": "Mistral Small 3.2",
|
| 5976 |
-
"type": "
|
| 5977 |
"input_price_per_1m": 0.1,
|
| 5978 |
"output_price_per_1m": 0.3,
|
| 5979 |
"currency": "USD",
|
| 5980 |
-
"api_endpoint": "mistral-small-latest"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5981 |
},
|
| 5982 |
{
|
| 5983 |
"name": "Mistral Small Creative",
|
|
@@ -5985,7 +6594,10 @@
|
|
| 5985 |
"input_price_per_1m": 0.1,
|
| 5986 |
"output_price_per_1m": 0.3,
|
| 5987 |
"currency": "USD",
|
| 5988 |
-
"api_endpoint": "labs-mistral-small-creative"
|
|
|
|
|
|
|
|
|
|
| 5989 |
},
|
| 5990 |
{
|
| 5991 |
"name": "Magistral Medium",
|
|
@@ -6048,11 +6660,15 @@
|
|
| 6048 |
},
|
| 6049 |
{
|
| 6050 |
"name": "Voxtral Small",
|
| 6051 |
-
"type": "
|
| 6052 |
"input_price_per_1m": 0.004,
|
| 6053 |
"output_price_per_1m": 0.3,
|
| 6054 |
"currency": "USD",
|
| 6055 |
-
"api_endpoint": "voxtral-small-latest"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6056 |
},
|
| 6057 |
{
|
| 6058 |
"name": "Voxtral Mini",
|
|
@@ -6104,11 +6720,15 @@
|
|
| 6104 |
},
|
| 6105 |
{
|
| 6106 |
"name": "Pixtral Large",
|
| 6107 |
-
"type": "
|
| 6108 |
"input_price_per_1m": 2,
|
| 6109 |
"output_price_per_1m": 6,
|
| 6110 |
"currency": "USD",
|
| 6111 |
-
"api_endpoint": "pixtral-large-latest"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6112 |
},
|
| 6113 |
{
|
| 6114 |
"name": "Pixtral 12B",
|
|
@@ -6125,7 +6745,10 @@
|
|
| 6125 |
"input_price_per_1m": 0.15,
|
| 6126 |
"output_price_per_1m": 0.15,
|
| 6127 |
"currency": "USD",
|
| 6128 |
-
"api_endpoint": "open-mistral-nemo"
|
|
|
|
|
|
|
|
|
|
| 6129 |
},
|
| 6130 |
{
|
| 6131 |
"name": "Mistral 7B",
|
|
@@ -6143,7 +6766,10 @@
|
|
| 6143 |
"output_price_per_1m": 0.7,
|
| 6144 |
"currency": "USD",
|
| 6145 |
"size_b": 7,
|
| 6146 |
-
"api_endpoint": "open-mixtral-8x7b"
|
|
|
|
|
|
|
|
|
|
| 6147 |
},
|
| 6148 |
{
|
| 6149 |
"name": "Mixtral 8x22B",
|
|
@@ -6152,7 +6778,10 @@
|
|
| 6152 |
"output_price_per_1m": 6,
|
| 6153 |
"currency": "USD",
|
| 6154 |
"size_b": 22,
|
| 6155 |
-
"api_endpoint": "open-mixtral-8x22b"
|
|
|
|
|
|
|
|
|
|
| 6156 |
}
|
| 6157 |
]
|
| 6158 |
},
|
|
@@ -9613,32 +10242,6 @@
|
|
| 9613 |
],
|
| 9614 |
"size_b": 12
|
| 9615 |
},
|
| 9616 |
-
{
|
| 9617 |
-
"name": "qwen/qwen3-vl-30b-a3b-thinking",
|
| 9618 |
-
"type": "vision",
|
| 9619 |
-
"input_price_per_1m": 0,
|
| 9620 |
-
"output_price_per_1m": 0,
|
| 9621 |
-
"currency": "USD",
|
| 9622 |
-
"capabilities": [
|
| 9623 |
-
"vision",
|
| 9624 |
-
"tools",
|
| 9625 |
-
"reasoning"
|
| 9626 |
-
],
|
| 9627 |
-
"size_b": 30
|
| 9628 |
-
},
|
| 9629 |
-
{
|
| 9630 |
-
"name": "qwen/qwen3-vl-235b-a22b-thinking",
|
| 9631 |
-
"type": "vision",
|
| 9632 |
-
"input_price_per_1m": 0,
|
| 9633 |
-
"output_price_per_1m": 0,
|
| 9634 |
-
"currency": "USD",
|
| 9635 |
-
"capabilities": [
|
| 9636 |
-
"vision",
|
| 9637 |
-
"tools",
|
| 9638 |
-
"reasoning"
|
| 9639 |
-
],
|
| 9640 |
-
"size_b": 235
|
| 9641 |
-
},
|
| 9642 |
{
|
| 9643 |
"name": "qwen/qwen3-next-80b-a3b-instruct:free",
|
| 9644 |
"type": "chat",
|
|
@@ -9697,18 +10300,6 @@
|
|
| 9697 |
"reasoning"
|
| 9698 |
]
|
| 9699 |
},
|
| 9700 |
-
{
|
| 9701 |
-
"name": "qwen/qwen3-235b-a22b-thinking-2507",
|
| 9702 |
-
"type": "chat",
|
| 9703 |
-
"input_price_per_1m": 0,
|
| 9704 |
-
"output_price_per_1m": 0,
|
| 9705 |
-
"currency": "USD",
|
| 9706 |
-
"capabilities": [
|
| 9707 |
-
"tools",
|
| 9708 |
-
"reasoning"
|
| 9709 |
-
],
|
| 9710 |
-
"size_b": 235
|
| 9711 |
-
},
|
| 9712 |
{
|
| 9713 |
"name": "qwen/qwen3-coder:free",
|
| 9714 |
"type": "chat",
|
|
@@ -9844,7 +10435,11 @@
|
|
| 9844 |
"input_price_per_1m": 0.075,
|
| 9845 |
"output_price_per_1m": 0.3,
|
| 9846 |
"currency": "USD",
|
| 9847 |
-
"size_b": 20
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9848 |
},
|
| 9849 |
{
|
| 9850 |
"name": "GPT OSS Safeguard 20B",
|
|
@@ -9852,7 +10447,11 @@
|
|
| 9852 |
"input_price_per_1m": 0.075,
|
| 9853 |
"output_price_per_1m": 0.3,
|
| 9854 |
"currency": "USD",
|
| 9855 |
-
"size_b": 20
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9856 |
},
|
| 9857 |
{
|
| 9858 |
"name": "GPT OSS 120B 128k",
|
|
@@ -9860,30 +10459,45 @@
|
|
| 9860 |
"input_price_per_1m": 0.15,
|
| 9861 |
"output_price_per_1m": 0.6,
|
| 9862 |
"currency": "USD",
|
| 9863 |
-
"size_b": 120
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9864 |
},
|
| 9865 |
{
|
| 9866 |
"name": "Kimi K2-0905 1T 256k",
|
| 9867 |
"type": "chat",
|
| 9868 |
"input_price_per_1m": 1,
|
| 9869 |
"output_price_per_1m": 3,
|
| 9870 |
-
"currency": "USD"
|
|
|
|
|
|
|
|
|
|
| 9871 |
},
|
| 9872 |
{
|
| 9873 |
"name": "Llama 4 Scout (17Bx16E) 128k",
|
| 9874 |
-
"type": "
|
| 9875 |
"input_price_per_1m": 0.11,
|
| 9876 |
"output_price_per_1m": 0.34,
|
| 9877 |
"currency": "USD",
|
| 9878 |
-
"size_b": 17
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9879 |
},
|
| 9880 |
{
|
| 9881 |
"name": "Llama 4 Maverick (17Bx128E) 128k",
|
| 9882 |
-
"type": "
|
| 9883 |
"input_price_per_1m": 0.2,
|
| 9884 |
"output_price_per_1m": 0.6,
|
| 9885 |
"currency": "USD",
|
| 9886 |
-
"size_b": 17
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9887 |
},
|
| 9888 |
{
|
| 9889 |
"name": "Qwen3 32B 131k",
|
|
@@ -9891,7 +10505,11 @@
|
|
| 9891 |
"input_price_per_1m": 0.29,
|
| 9892 |
"output_price_per_1m": 0.59,
|
| 9893 |
"currency": "USD",
|
| 9894 |
-
"size_b": 32
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9895 |
},
|
| 9896 |
{
|
| 9897 |
"name": "Llama 3.3 70B Versatile 128k",
|
|
@@ -9938,6 +10556,172 @@
|
|
| 9938 |
"currency": "USD"
|
| 9939 |
}
|
| 9940 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9941 |
}
|
| 9942 |
]
|
| 9943 |
}
|
|
|
|
| 14 |
"input_price_per_1m": 0.17,
|
| 15 |
"output_price_per_1m": 0.17,
|
| 16 |
"currency": "USD",
|
| 17 |
+
"size_b": 8,
|
| 18 |
+
"capabilities": [
|
| 19 |
+
"tools"
|
| 20 |
+
]
|
| 21 |
},
|
| 22 |
{
|
| 23 |
"name": "Teuken-7B Instruct",
|
|
|
|
| 32 |
"type": "chat",
|
| 33 |
"input_price_per_1m": 0.17,
|
| 34 |
"output_price_per_1m": 0.17,
|
| 35 |
+
"currency": "USD",
|
| 36 |
+
"capabilities": [
|
| 37 |
+
"tools"
|
| 38 |
+
]
|
| 39 |
},
|
| 40 |
{
|
| 41 |
"name": "Code Llama 13b Instruct HF",
|
|
|
|
| 51 |
"input_price_per_1m": 0.11,
|
| 52 |
"output_price_per_1m": 0.33,
|
| 53 |
"currency": "USD",
|
| 54 |
+
"size_b": 24,
|
| 55 |
+
"capabilities": [
|
| 56 |
+
"tools"
|
| 57 |
+
]
|
| 58 |
},
|
| 59 |
{
|
| 60 |
"name": "gpt-oss-120b",
|
|
|
|
| 62 |
"input_price_per_1m": 0.17,
|
| 63 |
"output_price_per_1m": 0.71,
|
| 64 |
"currency": "USD",
|
| 65 |
+
"size_b": 120,
|
| 66 |
+
"capabilities": [
|
| 67 |
+
"tools",
|
| 68 |
+
"reasoning"
|
| 69 |
+
]
|
| 70 |
},
|
| 71 |
{
|
| 72 |
"name": "Llama 3.3 70B Instruct",
|
|
|
|
| 74 |
"input_price_per_1m": 0.71,
|
| 75 |
"output_price_per_1m": 0.71,
|
| 76 |
"currency": "USD",
|
| 77 |
+
"size_b": 70,
|
| 78 |
+
"capabilities": [
|
| 79 |
+
"tools"
|
| 80 |
+
]
|
| 81 |
},
|
| 82 |
{
|
| 83 |
"name": "Llama 3.1 405B Instruct",
|
|
|
|
| 85 |
"input_price_per_1m": 1.93,
|
| 86 |
"output_price_per_1m": 1.93,
|
| 87 |
"currency": "USD",
|
| 88 |
+
"size_b": 405,
|
| 89 |
+
"capabilities": [
|
| 90 |
+
"tools"
|
| 91 |
+
]
|
| 92 |
},
|
| 93 |
{
|
| 94 |
"name": "LightOnOCR 2",
|
|
|
|
| 106 |
"type": "image",
|
| 107 |
"input_price_per_1m": 0.032,
|
| 108 |
"output_price_per_1m": 0,
|
| 109 |
+
"currency": "USD",
|
| 110 |
+
"capabilities": [
|
| 111 |
+
"image-gen"
|
| 112 |
+
]
|
| 113 |
},
|
| 114 |
{
|
| 115 |
"name": "paraphrase-multilingual-mpnet-base-v2",
|
|
|
|
| 161 |
},
|
| 162 |
{
|
| 163 |
"name": "Mistral-Small-3.2-24B-Instruct-2506",
|
| 164 |
+
"type": "vision",
|
| 165 |
"input_price_per_1m": 0.1,
|
| 166 |
"output_price_per_1m": 0.3,
|
| 167 |
"currency": "CHF",
|
| 168 |
+
"size_b": 24,
|
| 169 |
+
"capabilities": [
|
| 170 |
+
"vision",
|
| 171 |
+
"tools"
|
| 172 |
+
]
|
| 173 |
},
|
| 174 |
{
|
| 175 |
"name": "Qwen3-VL-235B-A22B-Instruct",
|
| 176 |
+
"type": "vision",
|
| 177 |
"input_price_per_1m": 0.7,
|
| 178 |
"output_price_per_1m": 2,
|
| 179 |
"currency": "CHF",
|
| 180 |
+
"size_b": 235,
|
| 181 |
+
"capabilities": [
|
| 182 |
+
"vision",
|
| 183 |
+
"tools"
|
| 184 |
+
]
|
| 185 |
},
|
| 186 |
{
|
| 187 |
"name": "Llama 3.3",
|
| 188 |
"type": "chat",
|
| 189 |
"input_price_per_1m": 1,
|
| 190 |
"output_price_per_1m": 3,
|
| 191 |
+
"currency": "CHF",
|
| 192 |
+
"capabilities": [
|
| 193 |
+
"tools",
|
| 194 |
+
"reasoning"
|
| 195 |
+
]
|
| 196 |
},
|
| 197 |
{
|
| 198 |
"name": "Apertus-70B-Instruct-2509",
|
|
|
|
| 208 |
"input_price_per_1m": 0.3,
|
| 209 |
"output_price_per_1m": 0.9,
|
| 210 |
"currency": "CHF",
|
| 211 |
+
"size_b": 120,
|
| 212 |
+
"capabilities": [
|
| 213 |
+
"tools",
|
| 214 |
+
"reasoning"
|
| 215 |
+
]
|
| 216 |
},
|
| 217 |
{
|
| 218 |
"name": "Kimi-K2.5",
|
| 219 |
+
"type": "vision",
|
| 220 |
"input_price_per_1m": 0.6,
|
| 221 |
"output_price_per_1m": 3,
|
| 222 |
+
"currency": "CHF",
|
| 223 |
+
"capabilities": [
|
| 224 |
+
"vision",
|
| 225 |
+
"tools",
|
| 226 |
+
"reasoning"
|
| 227 |
+
]
|
| 228 |
},
|
| 229 |
{
|
| 230 |
"name": "Bge Multilingual Gemma2",
|
|
|
|
| 260 |
"type": "image",
|
| 261 |
"input_price_per_1m": 0.3,
|
| 262 |
"output_price_per_1m": 0,
|
| 263 |
+
"currency": "CHF",
|
| 264 |
+
"capabilities": [
|
| 265 |
+
"image-gen"
|
| 266 |
+
]
|
| 267 |
},
|
| 268 |
{
|
| 269 |
"name": "Flux schnell",
|
| 270 |
"type": "image",
|
| 271 |
"input_price_per_1m": 0.3,
|
| 272 |
"output_price_per_1m": 0,
|
| 273 |
+
"currency": "CHF",
|
| 274 |
+
"capabilities": [
|
| 275 |
+
"image-gen"
|
| 276 |
+
]
|
| 277 |
}
|
| 278 |
],
|
| 279 |
"lastUpdated": "2026-03-02T04:54:47.632Z"
|
|
|
|
| 304 |
},
|
| 305 |
{
|
| 306 |
"name": "GPT-5.2 Pro",
|
| 307 |
+
"type": "vision",
|
| 308 |
"input_price_per_1m": 19.48,
|
| 309 |
"output_price_per_1m": 155.85,
|
| 310 |
"currency": "EUR",
|
| 311 |
+
"provider_upstream": "OpenAI",
|
| 312 |
+
"capabilities": [
|
| 313 |
+
"vision",
|
| 314 |
+
"files",
|
| 315 |
+
"tools",
|
| 316 |
+
"reasoning"
|
| 317 |
+
]
|
| 318 |
},
|
| 319 |
{
|
| 320 |
"name": "Opus 4.6 Reasoning",
|
|
|
|
| 338 |
"input_price_per_1m": 0.92,
|
| 339 |
"output_price_per_1m": 3.67,
|
| 340 |
"currency": "EUR",
|
| 341 |
+
"provider_upstream": "DeepSeek",
|
| 342 |
+
"capabilities": [
|
| 343 |
+
"tools",
|
| 344 |
+
"reasoning"
|
| 345 |
+
]
|
| 346 |
},
|
| 347 |
{
|
| 348 |
"name": "Mistral Medium",
|
| 349 |
+
"type": "vision",
|
| 350 |
"input_price_per_1m": 0.37,
|
| 351 |
"output_price_per_1m": 1.86,
|
| 352 |
"currency": "EUR",
|
| 353 |
+
"provider_upstream": "Mistral",
|
| 354 |
+
"capabilities": [
|
| 355 |
+
"vision",
|
| 356 |
+
"tools"
|
| 357 |
+
]
|
| 358 |
},
|
| 359 |
{
|
| 360 |
"name": "Mistral Large 2411",
|
|
|
|
| 362 |
"input_price_per_1m": 1.86,
|
| 363 |
"output_price_per_1m": 5.59,
|
| 364 |
"currency": "EUR",
|
| 365 |
+
"provider_upstream": "Mistral",
|
| 366 |
+
"capabilities": [
|
| 367 |
+
"tools"
|
| 368 |
+
]
|
| 369 |
},
|
| 370 |
{
|
| 371 |
"name": "Llama 4 Maverick",
|
| 372 |
+
"type": "vision",
|
| 373 |
"input_price_per_1m": 0.2,
|
| 374 |
"output_price_per_1m": 0.8,
|
| 375 |
"currency": "EUR",
|
| 376 |
+
"provider_upstream": "Meta",
|
| 377 |
+
"capabilities": [
|
| 378 |
+
"vision",
|
| 379 |
+
"tools"
|
| 380 |
+
]
|
| 381 |
},
|
| 382 |
{
|
| 383 |
"name": "Sonnet 4.5 Reasoning",
|
|
|
|
| 394 |
"output_price_per_1m": 0.66,
|
| 395 |
"currency": "EUR",
|
| 396 |
"size_b": 70,
|
| 397 |
+
"provider_upstream": "Meta",
|
| 398 |
+
"capabilities": [
|
| 399 |
+
"tools"
|
| 400 |
+
]
|
| 401 |
},
|
| 402 |
{
|
| 403 |
"name": "Sonnet 4.5",
|
|
|
|
| 489 |
},
|
| 490 |
{
|
| 491 |
"name": "o3 Pro",
|
| 492 |
+
"type": "vision",
|
| 493 |
"input_price_per_1m": 18.63,
|
| 494 |
"output_price_per_1m": 74.54,
|
| 495 |
"currency": "EUR",
|
| 496 |
+
"provider_upstream": "OpenAI",
|
| 497 |
+
"capabilities": [
|
| 498 |
+
"vision",
|
| 499 |
+
"files",
|
| 500 |
+
"tools",
|
| 501 |
+
"reasoning"
|
| 502 |
+
]
|
| 503 |
},
|
| 504 |
{
|
| 505 |
"name": "o4 Mini",
|
| 506 |
+
"type": "vision",
|
| 507 |
"input_price_per_1m": 1.02,
|
| 508 |
"output_price_per_1m": 4.1,
|
| 509 |
"currency": "EUR",
|
| 510 |
+
"provider_upstream": "OpenAI",
|
| 511 |
+
"capabilities": [
|
| 512 |
+
"vision",
|
| 513 |
+
"files",
|
| 514 |
+
"tools",
|
| 515 |
+
"reasoning"
|
| 516 |
+
]
|
| 517 |
},
|
| 518 |
{
|
| 519 |
"name": "o3 Mini high",
|
|
|
|
| 521 |
"input_price_per_1m": 1.13,
|
| 522 |
"output_price_per_1m": 4.51,
|
| 523 |
"currency": "EUR",
|
| 524 |
+
"provider_upstream": "OpenAI",
|
| 525 |
+
"capabilities": [
|
| 526 |
+
"files",
|
| 527 |
+
"tools"
|
| 528 |
+
]
|
| 529 |
},
|
| 530 |
{
|
| 531 |
"name": "o3",
|
| 532 |
+
"type": "vision",
|
| 533 |
"input_price_per_1m": 1.86,
|
| 534 |
"output_price_per_1m": 7.45,
|
| 535 |
"currency": "EUR",
|
| 536 |
+
"provider_upstream": "OpenAI",
|
| 537 |
+
"capabilities": [
|
| 538 |
+
"vision",
|
| 539 |
+
"files",
|
| 540 |
+
"tools",
|
| 541 |
+
"reasoning"
|
| 542 |
+
]
|
| 543 |
},
|
| 544 |
{
|
| 545 |
"name": "o3 Mini",
|
|
|
|
| 547 |
"input_price_per_1m": 1.13,
|
| 548 |
"output_price_per_1m": 4.51,
|
| 549 |
"currency": "EUR",
|
| 550 |
+
"provider_upstream": "OpenAI",
|
| 551 |
+
"capabilities": [
|
| 552 |
+
"files",
|
| 553 |
+
"tools"
|
| 554 |
+
]
|
| 555 |
},
|
| 556 |
{
|
| 557 |
"name": "o1",
|
| 558 |
+
"type": "vision",
|
| 559 |
"input_price_per_1m": 15.37,
|
| 560 |
"output_price_per_1m": 61.49,
|
| 561 |
"currency": "EUR",
|
| 562 |
+
"provider_upstream": "OpenAI",
|
| 563 |
+
"capabilities": [
|
| 564 |
+
"vision",
|
| 565 |
+
"files",
|
| 566 |
+
"tools"
|
| 567 |
+
]
|
| 568 |
},
|
| 569 |
{
|
| 570 |
"name": "GPT-5.2 Thinking",
|
| 571 |
+
"type": "vision",
|
| 572 |
"input_price_per_1m": 1.63,
|
| 573 |
"output_price_per_1m": 13.04,
|
| 574 |
"currency": "EUR",
|
| 575 |
+
"provider_upstream": "OpenAI",
|
| 576 |
+
"capabilities": [
|
| 577 |
+
"vision",
|
| 578 |
+
"files",
|
| 579 |
+
"tools",
|
| 580 |
+
"reasoning"
|
| 581 |
+
]
|
| 582 |
},
|
| 583 |
{
|
| 584 |
"name": "GPT-5.2",
|
| 585 |
+
"type": "vision",
|
| 586 |
"input_price_per_1m": 1.63,
|
| 587 |
"output_price_per_1m": 13.04,
|
| 588 |
"currency": "EUR",
|
| 589 |
+
"provider_upstream": "OpenAI",
|
| 590 |
+
"capabilities": [
|
| 591 |
+
"vision",
|
| 592 |
+
"files",
|
| 593 |
+
"tools",
|
| 594 |
+
"reasoning"
|
| 595 |
+
]
|
| 596 |
},
|
| 597 |
{
|
| 598 |
"name": "GPT-5.1 Thinking",
|
| 599 |
+
"type": "vision",
|
| 600 |
"input_price_per_1m": 1.16,
|
| 601 |
"output_price_per_1m": 9.32,
|
| 602 |
"currency": "EUR",
|
| 603 |
+
"provider_upstream": "OpenAI",
|
| 604 |
+
"capabilities": [
|
| 605 |
+
"vision",
|
| 606 |
+
"files",
|
| 607 |
+
"tools",
|
| 608 |
+
"reasoning"
|
| 609 |
+
]
|
| 610 |
},
|
| 611 |
{
|
| 612 |
"name": "GPT-5.1 Thinking Fast",
|
| 613 |
+
"type": "vision",
|
| 614 |
"input_price_per_1m": 1.16,
|
| 615 |
"output_price_per_1m": 9.32,
|
| 616 |
"currency": "EUR",
|
| 617 |
+
"provider_upstream": "OpenAI",
|
| 618 |
+
"capabilities": [
|
| 619 |
+
"vision",
|
| 620 |
+
"files",
|
| 621 |
+
"tools",
|
| 622 |
+
"reasoning"
|
| 623 |
+
]
|
| 624 |
},
|
| 625 |
{
|
| 626 |
"name": "GPT-5.1",
|
| 627 |
+
"type": "vision",
|
| 628 |
"input_price_per_1m": 1.16,
|
| 629 |
"output_price_per_1m": 9.32,
|
| 630 |
"currency": "EUR",
|
| 631 |
+
"provider_upstream": "OpenAI",
|
| 632 |
+
"capabilities": [
|
| 633 |
+
"vision",
|
| 634 |
+
"files",
|
| 635 |
+
"tools",
|
| 636 |
+
"reasoning"
|
| 637 |
+
]
|
| 638 |
},
|
| 639 |
{
|
| 640 |
"name": "GPT-5 Thinking",
|
| 641 |
+
"type": "vision",
|
| 642 |
"input_price_per_1m": 1.16,
|
| 643 |
"output_price_per_1m": 9.32,
|
| 644 |
"currency": "EUR",
|
| 645 |
+
"provider_upstream": "OpenAI",
|
| 646 |
+
"capabilities": [
|
| 647 |
+
"vision",
|
| 648 |
+
"files",
|
| 649 |
+
"tools",
|
| 650 |
+
"reasoning"
|
| 651 |
+
]
|
| 652 |
},
|
| 653 |
{
|
| 654 |
"name": "GPT-5 Thinking Fast",
|
| 655 |
+
"type": "vision",
|
| 656 |
"input_price_per_1m": 1.16,
|
| 657 |
"output_price_per_1m": 9.32,
|
| 658 |
"currency": "EUR",
|
| 659 |
+
"provider_upstream": "OpenAI",
|
| 660 |
+
"capabilities": [
|
| 661 |
+
"vision",
|
| 662 |
+
"files",
|
| 663 |
+
"tools",
|
| 664 |
+
"reasoning"
|
| 665 |
+
]
|
| 666 |
},
|
| 667 |
{
|
| 668 |
"name": "GPT-5 Pro",
|
| 669 |
+
"type": "vision",
|
| 670 |
"input_price_per_1m": 13.98,
|
| 671 |
"output_price_per_1m": 111.8,
|
| 672 |
"currency": "EUR",
|
| 673 |
+
"provider_upstream": "OpenAI",
|
| 674 |
+
"capabilities": [
|
| 675 |
+
"vision",
|
| 676 |
+
"files",
|
| 677 |
+
"tools",
|
| 678 |
+
"reasoning"
|
| 679 |
+
]
|
| 680 |
},
|
| 681 |
{
|
| 682 |
"name": "GPT-5 Nano",
|
| 683 |
+
"type": "vision",
|
| 684 |
"input_price_per_1m": 0.05,
|
| 685 |
"output_price_per_1m": 0.37,
|
| 686 |
"currency": "EUR",
|
| 687 |
+
"provider_upstream": "OpenAI",
|
| 688 |
+
"capabilities": [
|
| 689 |
+
"vision",
|
| 690 |
+
"files",
|
| 691 |
+
"tools",
|
| 692 |
+
"reasoning"
|
| 693 |
+
]
|
| 694 |
},
|
| 695 |
{
|
| 696 |
"name": "GPT-5 Mini",
|
| 697 |
+
"type": "vision",
|
| 698 |
"input_price_per_1m": 0.23,
|
| 699 |
"output_price_per_1m": 1.86,
|
| 700 |
"currency": "EUR",
|
| 701 |
+
"provider_upstream": "OpenAI",
|
| 702 |
+
"capabilities": [
|
| 703 |
+
"vision",
|
| 704 |
+
"files",
|
| 705 |
+
"tools",
|
| 706 |
+
"reasoning"
|
| 707 |
+
]
|
| 708 |
},
|
| 709 |
{
|
| 710 |
"name": "GPT-5 Chat",
|
| 711 |
+
"type": "vision",
|
| 712 |
"input_price_per_1m": 1.16,
|
| 713 |
"output_price_per_1m": 9.32,
|
| 714 |
"currency": "EUR",
|
| 715 |
+
"provider_upstream": "OpenAI",
|
| 716 |
+
"capabilities": [
|
| 717 |
+
"vision",
|
| 718 |
+
"files"
|
| 719 |
+
]
|
| 720 |
},
|
| 721 |
{
|
| 722 |
"name": "GPT-5",
|
| 723 |
+
"type": "vision",
|
| 724 |
"input_price_per_1m": 1.16,
|
| 725 |
"output_price_per_1m": 9.32,
|
| 726 |
"currency": "EUR",
|
| 727 |
+
"provider_upstream": "OpenAI",
|
| 728 |
+
"capabilities": [
|
| 729 |
+
"vision",
|
| 730 |
+
"files",
|
| 731 |
+
"tools",
|
| 732 |
+
"reasoning"
|
| 733 |
+
]
|
| 734 |
},
|
| 735 |
{
|
| 736 |
"name": "GPT-4o Mini",
|
| 737 |
+
"type": "vision",
|
| 738 |
"input_price_per_1m": 0.14,
|
| 739 |
"output_price_per_1m": 0.56,
|
| 740 |
"currency": "EUR",
|
| 741 |
+
"provider_upstream": "OpenAI",
|
| 742 |
+
"capabilities": [
|
| 743 |
+
"vision",
|
| 744 |
+
"files",
|
| 745 |
+
"tools"
|
| 746 |
+
]
|
| 747 |
},
|
| 748 |
{
|
| 749 |
"name": "GPT-4.1 nano",
|
| 750 |
+
"type": "vision",
|
| 751 |
"input_price_per_1m": 0.09,
|
| 752 |
"output_price_per_1m": 0.37,
|
| 753 |
"currency": "EUR",
|
| 754 |
+
"provider_upstream": "OpenAI",
|
| 755 |
+
"capabilities": [
|
| 756 |
+
"vision",
|
| 757 |
+
"files",
|
| 758 |
+
"tools"
|
| 759 |
+
]
|
| 760 |
},
|
| 761 |
{
|
| 762 |
"name": "GPT-4o",
|
| 763 |
+
"type": "vision",
|
| 764 |
"input_price_per_1m": 2.56,
|
| 765 |
"output_price_per_1m": 10.25,
|
| 766 |
"currency": "EUR",
|
| 767 |
+
"provider_upstream": "OpenAI",
|
| 768 |
+
"capabilities": [
|
| 769 |
+
"vision",
|
| 770 |
+
"files",
|
| 771 |
+
"tools"
|
| 772 |
+
]
|
| 773 |
},
|
| 774 |
{
|
| 775 |
"name": "GPT-4.1",
|
| 776 |
+
"type": "vision",
|
| 777 |
"input_price_per_1m": 1.86,
|
| 778 |
"output_price_per_1m": 7.45,
|
| 779 |
"currency": "EUR",
|
| 780 |
+
"provider_upstream": "OpenAI",
|
| 781 |
+
"capabilities": [
|
| 782 |
+
"vision",
|
| 783 |
+
"files",
|
| 784 |
+
"tools"
|
| 785 |
+
]
|
| 786 |
},
|
| 787 |
{
|
| 788 |
"name": "GPT-4.1 mini",
|
| 789 |
+
"type": "vision",
|
| 790 |
"input_price_per_1m": 0.37,
|
| 791 |
"output_price_per_1m": 1.49,
|
| 792 |
"currency": "EUR",
|
| 793 |
+
"provider_upstream": "OpenAI",
|
| 794 |
+
"capabilities": [
|
| 795 |
+
"vision",
|
| 796 |
+
"files",
|
| 797 |
+
"tools"
|
| 798 |
+
]
|
| 799 |
},
|
| 800 |
{
|
| 801 |
"name": "Gemini 3 Pro Preview",
|
| 802 |
+
"type": "vision",
|
| 803 |
"input_price_per_1m": 2.33,
|
| 804 |
"output_price_per_1m": 13.98,
|
| 805 |
"currency": "EUR",
|
| 806 |
+
"provider_upstream": "Google",
|
| 807 |
+
"capabilities": [
|
| 808 |
+
"vision",
|
| 809 |
+
"video",
|
| 810 |
+
"audio",
|
| 811 |
+
"files",
|
| 812 |
+
"tools",
|
| 813 |
+
"reasoning"
|
| 814 |
+
]
|
| 815 |
},
|
| 816 |
{
|
| 817 |
"name": "Gemini 3 Flash Preview",
|
| 818 |
+
"type": "vision",
|
| 819 |
"input_price_per_1m": 0.47,
|
| 820 |
"output_price_per_1m": 2.8,
|
| 821 |
"currency": "EUR",
|
| 822 |
+
"provider_upstream": "Google",
|
| 823 |
+
"capabilities": [
|
| 824 |
+
"vision",
|
| 825 |
+
"video",
|
| 826 |
+
"audio",
|
| 827 |
+
"files",
|
| 828 |
+
"tools",
|
| 829 |
+
"reasoning"
|
| 830 |
+
]
|
| 831 |
},
|
| 832 |
{
|
| 833 |
"name": "GPT oss (120b)",
|
|
|
|
| 836 |
"output_price_per_1m": 2.33,
|
| 837 |
"currency": "EUR",
|
| 838 |
"size_b": 120,
|
| 839 |
+
"provider_upstream": "OpenAI",
|
| 840 |
+
"capabilities": [
|
| 841 |
+
"tools",
|
| 842 |
+
"reasoning"
|
| 843 |
+
]
|
| 844 |
},
|
| 845 |
{
|
| 846 |
"name": "Gemini 2.5 Flash",
|
| 847 |
+
"type": "vision",
|
| 848 |
"input_price_per_1m": 0.28,
|
| 849 |
"output_price_per_1m": 2.33,
|
| 850 |
"currency": "EUR",
|
| 851 |
+
"provider_upstream": "Google",
|
| 852 |
+
"capabilities": [
|
| 853 |
+
"vision",
|
| 854 |
+
"video",
|
| 855 |
+
"audio",
|
| 856 |
+
"files",
|
| 857 |
+
"tools",
|
| 858 |
+
"reasoning"
|
| 859 |
+
]
|
| 860 |
},
|
| 861 |
{
|
| 862 |
"name": "Gemini 2.5 Pro Reasoning",
|
| 863 |
+
"type": "vision",
|
| 864 |
"input_price_per_1m": 2.33,
|
| 865 |
"output_price_per_1m": 13.98,
|
| 866 |
"currency": "EUR",
|
| 867 |
+
"provider_upstream": "Google",
|
| 868 |
+
"capabilities": [
|
| 869 |
+
"vision",
|
| 870 |
+
"video",
|
| 871 |
+
"audio",
|
| 872 |
+
"files",
|
| 873 |
+
"tools",
|
| 874 |
+
"reasoning"
|
| 875 |
+
]
|
| 876 |
},
|
| 877 |
{
|
| 878 |
"name": "Gemini 2.5 Pro",
|
| 879 |
+
"type": "vision",
|
| 880 |
"input_price_per_1m": 2.33,
|
| 881 |
"output_price_per_1m": 13.98,
|
| 882 |
"currency": "EUR",
|
| 883 |
+
"provider_upstream": "Google",
|
| 884 |
+
"capabilities": [
|
| 885 |
+
"vision",
|
| 886 |
+
"video",
|
| 887 |
+
"audio",
|
| 888 |
+
"files",
|
| 889 |
+
"tools",
|
| 890 |
+
"reasoning"
|
| 891 |
+
]
|
| 892 |
}
|
| 893 |
]
|
| 894 |
},
|
|
|
|
| 946 |
"output_price_per_1m": 0.04,
|
| 947 |
"currency": "USD",
|
| 948 |
"context_window": 8192,
|
| 949 |
+
"size_b": 8,
|
| 950 |
+
"capabilities": [
|
| 951 |
+
"tools"
|
| 952 |
+
]
|
| 953 |
},
|
| 954 |
{
|
| 955 |
"name": "openai-responses/gpt-5-nano",
|
|
|
|
| 1025 |
"input_price_per_1m": 0.05,
|
| 1026 |
"output_price_per_1m": 0.2,
|
| 1027 |
"currency": "USD",
|
| 1028 |
+
"context_window": 1000000,
|
| 1029 |
+
"capabilities": [
|
| 1030 |
+
"tools"
|
| 1031 |
+
]
|
| 1032 |
},
|
| 1033 |
{
|
| 1034 |
"name": "novita/meta-llama/llama-3.1-8b-instruct",
|
|
|
|
| 1037 |
"output_price_per_1m": 0.05,
|
| 1038 |
"currency": "USD",
|
| 1039 |
"context_window": 16384,
|
| 1040 |
+
"size_b": 8,
|
| 1041 |
+
"capabilities": [
|
| 1042 |
+
"tools"
|
| 1043 |
+
]
|
| 1044 |
},
|
| 1045 |
{
|
| 1046 |
"name": "novita/sao10k/l3-8b-lunaris",
|
|
|
|
| 1102 |
"output_price_per_1m": 0.3,
|
| 1103 |
"currency": "USD",
|
| 1104 |
"context_window": 40000,
|
| 1105 |
+
"size_b": 32,
|
| 1106 |
+
"capabilities": [
|
| 1107 |
+
"tools",
|
| 1108 |
+
"reasoning"
|
| 1109 |
+
]
|
| 1110 |
},
|
| 1111 |
{
|
| 1112 |
"name": "openai-responses/gpt-4.1-nano",
|
|
|
|
| 1266 |
"input_price_per_1m": 0.1,
|
| 1267 |
"output_price_per_1m": 0.3,
|
| 1268 |
"currency": "USD",
|
| 1269 |
+
"context_window": 131072,
|
| 1270 |
+
"capabilities": [
|
| 1271 |
+
"tools"
|
| 1272 |
+
]
|
| 1273 |
},
|
| 1274 |
{
|
| 1275 |
"name": "mistral/devstral-small-2507",
|
|
|
|
| 1277 |
"input_price_per_1m": 0.1,
|
| 1278 |
"output_price_per_1m": 0.3,
|
| 1279 |
"currency": "USD",
|
| 1280 |
+
"context_window": 131072,
|
| 1281 |
+
"capabilities": [
|
| 1282 |
+
"tools"
|
| 1283 |
+
]
|
| 1284 |
},
|
| 1285 |
{
|
| 1286 |
"name": "mistral/mistral-small-latest",
|
|
|
|
| 1297 |
"output_price_per_1m": 0.5,
|
| 1298 |
"currency": "USD",
|
| 1299 |
"context_window": 131072,
|
| 1300 |
+
"size_b": 20,
|
| 1301 |
+
"capabilities": [
|
| 1302 |
+
"tools",
|
| 1303 |
+
"reasoning"
|
| 1304 |
+
]
|
| 1305 |
},
|
| 1306 |
{
|
| 1307 |
"name": "google/gemini-2.0-flash-001",
|
|
|
|
| 1465 |
"output_price_per_1m": 0.3,
|
| 1466 |
"currency": "USD",
|
| 1467 |
"context_window": 131072,
|
| 1468 |
+
"size_b": 70,
|
| 1469 |
+
"capabilities": [
|
| 1470 |
+
"tools"
|
| 1471 |
+
]
|
| 1472 |
},
|
| 1473 |
{
|
| 1474 |
"name": "openai/gpt-5-mini:flex",
|
|
|
|
| 1489 |
"output_price_per_1m": 0.4,
|
| 1490 |
"currency": "USD",
|
| 1491 |
"context_window": 128000,
|
| 1492 |
+
"size_b": 70,
|
| 1493 |
+
"capabilities": [
|
| 1494 |
+
"tools"
|
| 1495 |
+
]
|
| 1496 |
},
|
| 1497 |
{
|
| 1498 |
"name": "novita/nousresearch/hermes-2-pro-llama-3-8b",
|
|
|
|
| 1530 |
"output_price_per_1m": 0.75,
|
| 1531 |
"currency": "USD",
|
| 1532 |
"context_window": 131072,
|
| 1533 |
+
"size_b": 120,
|
| 1534 |
+
"capabilities": [
|
| 1535 |
+
"tools",
|
| 1536 |
+
"reasoning"
|
| 1537 |
+
]
|
| 1538 |
},
|
| 1539 |
{
|
| 1540 |
"name": "novita/deepseek/deepseek-r1-distill-qwen-14b",
|
|
|
|
| 1543 |
"output_price_per_1m": 0.15,
|
| 1544 |
"currency": "USD",
|
| 1545 |
"context_window": 128000,
|
| 1546 |
+
"size_b": 14,
|
| 1547 |
+
"capabilities": [
|
| 1548 |
+
"tools",
|
| 1549 |
+
"reasoning"
|
| 1550 |
+
]
|
| 1551 |
},
|
| 1552 |
{
|
| 1553 |
"name": "novita/mistralai/mistral-nemo",
|
|
|
|
| 1555 |
"input_price_per_1m": 0.17,
|
| 1556 |
"output_price_per_1m": 0.17,
|
| 1557 |
"currency": "USD",
|
| 1558 |
+
"context_window": 131072,
|
| 1559 |
+
"capabilities": [
|
| 1560 |
+
"tools"
|
| 1561 |
+
]
|
| 1562 |
},
|
| 1563 |
{
|
| 1564 |
"name": "together/meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo",
|
|
|
|
| 1576 |
"output_price_per_1m": 0.6,
|
| 1577 |
"currency": "USD",
|
| 1578 |
"context_window": 40000,
|
| 1579 |
+
"size_b": 235,
|
| 1580 |
+
"capabilities": [
|
| 1581 |
+
"tools",
|
| 1582 |
+
"reasoning"
|
| 1583 |
+
]
|
| 1584 |
},
|
| 1585 |
{
|
| 1586 |
"name": "deepinfra/zai-org/GLM-4.5-Air",
|
|
|
|
| 1588 |
"input_price_per_1m": 0.2,
|
| 1589 |
"output_price_per_1m": 1.1,
|
| 1590 |
"currency": "USD",
|
| 1591 |
+
"context_window": 131072,
|
| 1592 |
+
"capabilities": [
|
| 1593 |
+
"tools",
|
| 1594 |
+
"reasoning"
|
| 1595 |
+
]
|
| 1596 |
},
|
| 1597 |
{
|
| 1598 |
"name": "together/meta-llama/LlamaGuard-2-8b",
|
|
|
|
| 1605 |
},
|
| 1606 |
{
|
| 1607 |
"name": "xai/grok-4-fast",
|
| 1608 |
+
"type": "vision",
|
| 1609 |
"input_price_per_1m": 0.2,
|
| 1610 |
"output_price_per_1m": 0.5,
|
| 1611 |
"currency": "USD",
|
| 1612 |
+
"context_window": 2000000,
|
| 1613 |
+
"capabilities": [
|
| 1614 |
+
"vision",
|
| 1615 |
+
"tools",
|
| 1616 |
+
"reasoning"
|
| 1617 |
+
]
|
| 1618 |
},
|
| 1619 |
{
|
| 1620 |
"name": "xai/grok-4-fast-non-reasoning",
|
| 1621 |
+
"type": "vision",
|
| 1622 |
"input_price_per_1m": 0.2,
|
| 1623 |
"output_price_per_1m": 0.5,
|
| 1624 |
"currency": "USD",
|
| 1625 |
+
"context_window": 2000000,
|
| 1626 |
+
"capabilities": [
|
| 1627 |
+
"vision",
|
| 1628 |
+
"tools",
|
| 1629 |
+
"reasoning"
|
| 1630 |
+
]
|
| 1631 |
},
|
| 1632 |
{
|
| 1633 |
"name": "xai/grok-4-1-fast-non-reasoning",
|
|
|
|
| 1681 |
"output_price_per_1m": 0.8,
|
| 1682 |
"currency": "USD",
|
| 1683 |
"context_window": 128000,
|
| 1684 |
+
"size_b": 235,
|
| 1685 |
+
"capabilities": [
|
| 1686 |
+
"tools",
|
| 1687 |
+
"reasoning"
|
| 1688 |
+
]
|
| 1689 |
},
|
| 1690 |
{
|
| 1691 |
"name": "novita/meta-llama/llama-4-maverick-17b-128e-instruct-fp8",
|
| 1692 |
+
"type": "vision",
|
| 1693 |
"input_price_per_1m": 0.2,
|
| 1694 |
"output_price_per_1m": 0.85,
|
| 1695 |
"currency": "USD",
|
| 1696 |
"context_window": 1048576,
|
| 1697 |
+
"size_b": 17,
|
| 1698 |
+
"capabilities": [
|
| 1699 |
+
"vision",
|
| 1700 |
+
"tools"
|
| 1701 |
+
]
|
| 1702 |
},
|
| 1703 |
{
|
| 1704 |
"name": "deepinfra/meta-llama/Meta-Llama-3.1-70B-Instruct",
|
|
|
|
| 1716 |
"output_price_per_1m": 0.69,
|
| 1717 |
"currency": "USD",
|
| 1718 |
"context_window": 64000,
|
| 1719 |
+
"size_b": 70,
|
| 1720 |
+
"capabilities": [
|
| 1721 |
+
"reasoning"
|
| 1722 |
+
]
|
| 1723 |
},
|
| 1724 |
{
|
| 1725 |
"name": "deepinfra/Qwen/Qwen2.5-72B-Instruct",
|
|
|
|
| 1737 |
"output_price_per_1m": 0.4,
|
| 1738 |
"currency": "USD",
|
| 1739 |
"context_window": 131072,
|
| 1740 |
+
"size_b": 70,
|
| 1741 |
+
"capabilities": [
|
| 1742 |
+
"tools"
|
| 1743 |
+
]
|
| 1744 |
},
|
| 1745 |
{
|
| 1746 |
"name": "openai-responses/gpt-5-mini",
|
|
|
|
| 1847 |
"input_price_per_1m": 0.28,
|
| 1848 |
"output_price_per_1m": 0.42,
|
| 1849 |
"currency": "USD",
|
| 1850 |
+
"context_window": 128000,
|
| 1851 |
+
"capabilities": [
|
| 1852 |
+
"tools"
|
| 1853 |
+
]
|
| 1854 |
},
|
| 1855 |
{
|
| 1856 |
"name": "deepseek/deepseek-reasoner",
|
|
|
|
| 1897 |
"input_price_per_1m": 0.3,
|
| 1898 |
"output_price_per_1m": 1,
|
| 1899 |
"currency": "USD",
|
| 1900 |
+
"context_window": 163840,
|
| 1901 |
+
"capabilities": [
|
| 1902 |
+
"tools",
|
| 1903 |
+
"reasoning"
|
| 1904 |
+
]
|
| 1905 |
},
|
| 1906 |
{
|
| 1907 |
"name": "together/Qwen/Qwen2.5-7B-Instruct-Turbo",
|
|
|
|
| 1971 |
"input_price_per_1m": 0.3,
|
| 1972 |
"output_price_per_1m": 1.2,
|
| 1973 |
"currency": "USD",
|
| 1974 |
+
"context_window": 200000,
|
| 1975 |
+
"capabilities": [
|
| 1976 |
+
"tools",
|
| 1977 |
+
"reasoning"
|
| 1978 |
+
]
|
| 1979 |
},
|
| 1980 |
{
|
| 1981 |
"name": "alibaba/qwen3-coder-flash",
|
|
|
|
| 2151 |
"output_price_per_1m": 0.3,
|
| 2152 |
"currency": "USD",
|
| 2153 |
"context_window": 12800,
|
| 2154 |
+
"size_b": 32,
|
| 2155 |
+
"capabilities": [
|
| 2156 |
+
"reasoning"
|
| 2157 |
+
]
|
| 2158 |
},
|
| 2159 |
{
|
| 2160 |
"name": "coding/gemini-2.5-flash@us-south1",
|
|
|
|
| 2304 |
"output_price_per_1m": 0.4,
|
| 2305 |
"currency": "USD",
|
| 2306 |
"context_window": 32000,
|
| 2307 |
+
"size_b": 72,
|
| 2308 |
+
"capabilities": [
|
| 2309 |
+
"tools"
|
| 2310 |
+
]
|
| 2311 |
},
|
| 2312 |
{
|
| 2313 |
"name": "novita/meta-llama/llama-3.3-70b-instruct",
|
|
|
|
| 2316 |
"output_price_per_1m": 0.39,
|
| 2317 |
"currency": "USD",
|
| 2318 |
"context_window": 131072,
|
| 2319 |
+
"size_b": 70,
|
| 2320 |
+
"capabilities": [
|
| 2321 |
+
"tools"
|
| 2322 |
+
]
|
| 2323 |
},
|
| 2324 |
{
|
| 2325 |
"name": "nebius/zai-org/GLM-4.7",
|
|
|
|
| 2339 |
"output_price_per_1m": 1.8,
|
| 2340 |
"currency": "USD",
|
| 2341 |
"context_window": 262000,
|
| 2342 |
+
"size_b": 480,
|
| 2343 |
+
"capabilities": [
|
| 2344 |
+
"tools"
|
| 2345 |
+
]
|
| 2346 |
},
|
| 2347 |
{
|
| 2348 |
"name": "deepinfra/Qwen/Qwen3-Coder-480B-A35B-Instruct",
|
|
|
|
| 2351 |
"output_price_per_1m": 1.6,
|
| 2352 |
"currency": "USD",
|
| 2353 |
"context_window": 262144,
|
| 2354 |
+
"size_b": 480,
|
| 2355 |
+
"capabilities": [
|
| 2356 |
+
"tools"
|
| 2357 |
+
]
|
| 2358 |
},
|
| 2359 |
{
|
| 2360 |
"name": "openai-responses/gpt-4.1-mini",
|
|
|
|
| 2505 |
"input_price_per_1m": 0.4,
|
| 2506 |
"output_price_per_1m": 2,
|
| 2507 |
"currency": "USD",
|
| 2508 |
+
"context_window": 131072,
|
| 2509 |
+
"capabilities": [
|
| 2510 |
+
"tools"
|
| 2511 |
+
]
|
| 2512 |
},
|
| 2513 |
{
|
| 2514 |
"name": "mistral/mistral-medium-latest",
|
|
|
|
| 2524 |
"input_price_per_1m": 0.4,
|
| 2525 |
"output_price_per_1m": 1.2,
|
| 2526 |
"currency": "USD",
|
| 2527 |
+
"context_window": 131072,
|
| 2528 |
+
"capabilities": [
|
| 2529 |
+
"tools"
|
| 2530 |
+
]
|
| 2531 |
},
|
| 2532 |
{
|
| 2533 |
"name": "novita/deepseek/deepseek-v3-0324",
|
|
|
|
| 2563 |
"input_price_per_1m": 0.5,
|
| 2564 |
"output_price_per_1m": 2.4,
|
| 2565 |
"currency": "USD",
|
| 2566 |
+
"context_window": 131000,
|
| 2567 |
+
"capabilities": [
|
| 2568 |
+
"tools"
|
| 2569 |
+
]
|
| 2570 |
},
|
| 2571 |
{
|
| 2572 |
"name": "nebius/moonshotai/kimi-k2.5",
|
|
|
|
| 2594 |
"input_price_per_1m": 0.5,
|
| 2595 |
"output_price_per_1m": 1.5,
|
| 2596 |
"currency": "USD",
|
| 2597 |
+
"context_window": 131072,
|
| 2598 |
+
"capabilities": [
|
| 2599 |
+
"tools"
|
| 2600 |
+
]
|
| 2601 |
},
|
| 2602 |
{
|
| 2603 |
"name": "google/gemini-3.1-flash-image-preview@us-east5",
|
|
|
|
| 2913 |
"input_price_per_1m": 0.57,
|
| 2914 |
"output_price_per_1m": 2.3,
|
| 2915 |
"currency": "USD",
|
| 2916 |
+
"context_window": 131072,
|
| 2917 |
+
"capabilities": [
|
| 2918 |
+
"tools"
|
| 2919 |
+
]
|
| 2920 |
},
|
| 2921 |
{
|
| 2922 |
"name": "nebius/zai-org/GLM-4.5",
|
|
|
|
| 2924 |
"input_price_per_1m": 0.6,
|
| 2925 |
"output_price_per_1m": 2.2,
|
| 2926 |
"currency": "USD",
|
| 2927 |
+
"context_window": 128000,
|
| 2928 |
+
"capabilities": [
|
| 2929 |
+
"tools",
|
| 2930 |
+
"reasoning"
|
| 2931 |
+
]
|
| 2932 |
},
|
| 2933 |
{
|
| 2934 |
"name": "moonshot/kimi-k2-0711-preview",
|
|
|
|
| 2936 |
"input_price_per_1m": 0.6,
|
| 2937 |
"output_price_per_1m": 2.5,
|
| 2938 |
"currency": "USD",
|
| 2939 |
+
"context_window": 131072,
|
| 2940 |
+
"capabilities": [
|
| 2941 |
+
"tools"
|
| 2942 |
+
]
|
| 2943 |
},
|
| 2944 |
{
|
| 2945 |
"name": "moonshot/kimi-k2.5",
|
|
|
|
| 2959 |
"input_price_per_1m": 0.6,
|
| 2960 |
"output_price_per_1m": 2.5,
|
| 2961 |
"currency": "USD",
|
| 2962 |
+
"context_window": 131072,
|
| 2963 |
+
"capabilities": [
|
| 2964 |
+
"tools",
|
| 2965 |
+
"reasoning"
|
| 2966 |
+
]
|
| 2967 |
},
|
| 2968 |
{
|
| 2969 |
"name": "moonshot/kimi-k2-0905-preview",
|
|
|
|
| 2971 |
"input_price_per_1m": 0.6,
|
| 2972 |
"output_price_per_1m": 2.5,
|
| 2973 |
"currency": "USD",
|
| 2974 |
+
"context_window": 131072,
|
| 2975 |
+
"capabilities": [
|
| 2976 |
+
"tools"
|
| 2977 |
+
]
|
| 2978 |
},
|
| 2979 |
{
|
| 2980 |
"name": "moonshot/kimi-k2-thinking",
|
|
|
|
| 2982 |
"input_price_per_1m": 0.6,
|
| 2983 |
"output_price_per_1m": 2.5,
|
| 2984 |
"currency": "USD",
|
| 2985 |
+
"context_window": 131072,
|
| 2986 |
+
"capabilities": [
|
| 2987 |
+
"tools",
|
| 2988 |
+
"reasoning"
|
| 2989 |
+
]
|
| 2990 |
},
|
| 2991 |
{
|
| 2992 |
"name": "deepinfra/zai-org/GLM-4.5",
|
|
|
|
| 2994 |
"input_price_per_1m": 0.6,
|
| 2995 |
"output_price_per_1m": 2.2,
|
| 2996 |
"currency": "USD",
|
| 2997 |
+
"context_window": 131072,
|
| 2998 |
+
"capabilities": [
|
| 2999 |
+
"tools",
|
| 3000 |
+
"reasoning"
|
| 3001 |
+
]
|
| 3002 |
},
|
| 3003 |
{
|
| 3004 |
"name": "zai/GLM-4.5",
|
|
|
|
| 3063 |
"input_price_per_1m": 0.6,
|
| 3064 |
"output_price_per_1m": 2.2,
|
| 3065 |
"currency": "USD",
|
| 3066 |
+
"context_window": 204800,
|
| 3067 |
+
"capabilities": [
|
| 3068 |
+
"tools",
|
| 3069 |
+
"reasoning"
|
| 3070 |
+
]
|
| 3071 |
},
|
| 3072 |
{
|
| 3073 |
"name": "novita/zai-org/glm-4.5",
|
|
|
|
| 3075 |
"input_price_per_1m": 0.6,
|
| 3076 |
"output_price_per_1m": 2.2,
|
| 3077 |
"currency": "USD",
|
| 3078 |
+
"context_window": 131072,
|
| 3079 |
+
"capabilities": [
|
| 3080 |
+
"tools",
|
| 3081 |
+
"reasoning"
|
| 3082 |
+
]
|
| 3083 |
},
|
| 3084 |
{
|
| 3085 |
"name": "novita/microsoft/wizardlm-2-8x22b",
|
|
|
|
| 3120 |
"input_price_per_1m": 0.7,
|
| 3121 |
"output_price_per_1m": 2.5,
|
| 3122 |
"currency": "USD",
|
| 3123 |
+
"context_window": 64000,
|
| 3124 |
+
"capabilities": [
|
| 3125 |
+
"tools",
|
| 3126 |
+
"reasoning"
|
| 3127 |
+
]
|
| 3128 |
},
|
| 3129 |
{
|
| 3130 |
"name": "novita/deepseek/deepseek-prover-v2-671b",
|
|
|
|
| 3141 |
"input_price_per_1m": 0.8,
|
| 3142 |
"output_price_per_1m": 2.4,
|
| 3143 |
"currency": "USD",
|
| 3144 |
+
"context_window": 164000,
|
| 3145 |
+
"capabilities": [
|
| 3146 |
+
"tools",
|
| 3147 |
+
"reasoning"
|
| 3148 |
+
]
|
| 3149 |
},
|
| 3150 |
{
|
| 3151 |
"name": "deepinfra/meta-llama/Meta-Llama-3.1-405B-Instruct",
|
|
|
|
| 3163 |
"output_price_per_1m": 0.8,
|
| 3164 |
"currency": "USD",
|
| 3165 |
"context_window": 32000,
|
| 3166 |
+
"size_b": 70,
|
| 3167 |
+
"capabilities": [
|
| 3168 |
+
"reasoning"
|
| 3169 |
+
]
|
| 3170 |
},
|
| 3171 |
{
|
| 3172 |
"name": "novita/qwen/qwen2.5-vl-72b-instruct",
|
| 3173 |
+
"type": "vision",
|
| 3174 |
"input_price_per_1m": 0.8,
|
| 3175 |
"output_price_per_1m": 0.8,
|
| 3176 |
"currency": "USD",
|
| 3177 |
"context_window": 96000,
|
| 3178 |
+
"size_b": 72,
|
| 3179 |
+
"capabilities": [
|
| 3180 |
+
"vision"
|
| 3181 |
+
]
|
| 3182 |
},
|
| 3183 |
{
|
| 3184 |
"name": "deepinfra/deepseek-ai/DeepSeek-V3",
|
|
|
|
| 3186 |
"input_price_per_1m": 0.85,
|
| 3187 |
"output_price_per_1m": 0.9,
|
| 3188 |
"currency": "USD",
|
| 3189 |
+
"context_window": 128000,
|
| 3190 |
+
"capabilities": [
|
| 3191 |
+
"tools",
|
| 3192 |
+
"reasoning"
|
| 3193 |
+
]
|
| 3194 |
},
|
| 3195 |
{
|
| 3196 |
"name": "deepinfra/deepseek-ai/DeepSeek-R1",
|
|
|
|
| 3198 |
"input_price_per_1m": 0.85,
|
| 3199 |
"output_price_per_1m": 2.5,
|
| 3200 |
"currency": "USD",
|
| 3201 |
+
"context_window": 64000,
|
| 3202 |
+
"capabilities": [
|
| 3203 |
+
"tools",
|
| 3204 |
+
"reasoning"
|
| 3205 |
+
]
|
| 3206 |
},
|
| 3207 |
{
|
| 3208 |
"name": "alibaba/qwen3-max",
|
|
|
|
| 3222 |
"output_price_per_1m": 0.88,
|
| 3223 |
"currency": "USD",
|
| 3224 |
"context_window": 131072,
|
| 3225 |
+
"size_b": 70,
|
| 3226 |
+
"capabilities": [
|
| 3227 |
+
"tools"
|
| 3228 |
+
]
|
| 3229 |
},
|
| 3230 |
{
|
| 3231 |
"name": "together/meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",
|
|
|
|
| 3242 |
"input_price_per_1m": 0.89,
|
| 3243 |
"output_price_per_1m": 0.89,
|
| 3244 |
"currency": "USD",
|
| 3245 |
+
"context_window": 64000,
|
| 3246 |
+
"capabilities": [
|
| 3247 |
+
"tools",
|
| 3248 |
+
"reasoning"
|
| 3249 |
+
]
|
| 3250 |
},
|
| 3251 |
{
|
| 3252 |
"name": "parasail/parasail-kimi-k2-instruct",
|
|
|
|
| 3269 |
},
|
| 3270 |
{
|
| 3271 |
"name": "perplexity/sonar",
|
| 3272 |
+
"type": "vision",
|
| 3273 |
"input_price_per_1m": 1,
|
| 3274 |
"output_price_per_1m": 1,
|
| 3275 |
"currency": "USD",
|
| 3276 |
+
"context_window": 131072,
|
| 3277 |
+
"capabilities": [
|
| 3278 |
+
"vision"
|
| 3279 |
+
]
|
| 3280 |
},
|
| 3281 |
{
|
| 3282 |
"name": "openai/o3:flex",
|
|
|
|
| 3330 |
"input_price_per_1m": 1,
|
| 3331 |
"output_price_per_1m": 3,
|
| 3332 |
"currency": "USD",
|
| 3333 |
+
"context_window": 131072,
|
| 3334 |
+
"capabilities": [
|
| 3335 |
+
"tools"
|
| 3336 |
+
]
|
| 3337 |
},
|
| 3338 |
{
|
| 3339 |
"name": "groq/moonshotai/Kimi-K2-Instruct-0905",
|
|
|
|
| 3341 |
"input_price_per_1m": 1,
|
| 3342 |
"output_price_per_1m": 3,
|
| 3343 |
"currency": "USD",
|
| 3344 |
+
"context_window": 256000,
|
| 3345 |
+
"capabilities": [
|
| 3346 |
+
"tools"
|
| 3347 |
+
]
|
| 3348 |
},
|
| 3349 |
{
|
| 3350 |
"name": "vertex/claude-haiku-4-5",
|
|
|
|
| 3638 |
"input_price_per_1m": 1.2,
|
| 3639 |
"output_price_per_1m": 5,
|
| 3640 |
"currency": "USD",
|
| 3641 |
+
"context_window": 131072,
|
| 3642 |
+
"capabilities": [
|
| 3643 |
+
"tools"
|
| 3644 |
+
]
|
| 3645 |
},
|
| 3646 |
{
|
| 3647 |
"name": "together/Qwen/Qwen2.5-72B-Instruct-Turbo",
|
|
|
|
| 3853 |
"input_price_per_1m": 1.25,
|
| 3854 |
"output_price_per_1m": 1.25,
|
| 3855 |
"currency": "USD",
|
| 3856 |
+
"context_window": 131072,
|
| 3857 |
+
"capabilities": [
|
| 3858 |
+
"tools",
|
| 3859 |
+
"reasoning"
|
| 3860 |
+
]
|
| 3861 |
},
|
| 3862 |
{
|
| 3863 |
"name": "google/gemini-2.5-pro",
|
|
|
|
| 4159 |
"input_price_per_1m": 1.6,
|
| 4160 |
"output_price_per_1m": 6.4,
|
| 4161 |
"currency": "USD",
|
| 4162 |
+
"context_window": 32768,
|
| 4163 |
+
"capabilities": [
|
| 4164 |
+
"tools"
|
| 4165 |
+
]
|
| 4166 |
},
|
| 4167 |
{
|
| 4168 |
"name": "openai-responses/gpt-5.3-codex",
|
|
|
|
| 4280 |
},
|
| 4281 |
{
|
| 4282 |
"name": "perplexity/sonar-reasoning-pro",
|
| 4283 |
+
"type": "vision",
|
| 4284 |
"input_price_per_1m": 2,
|
| 4285 |
"output_price_per_1m": 8,
|
| 4286 |
"currency": "USD",
|
| 4287 |
+
"context_window": 131072,
|
| 4288 |
+
"capabilities": [
|
| 4289 |
+
"vision",
|
| 4290 |
+
"reasoning"
|
| 4291 |
+
]
|
| 4292 |
},
|
| 4293 |
{
|
| 4294 |
"name": "openai-responses/gpt-4.1",
|
|
|
|
| 4807 |
},
|
| 4808 |
{
|
| 4809 |
"name": "perplexity/sonar-pro",
|
| 4810 |
+
"type": "vision",
|
| 4811 |
"input_price_per_1m": 3,
|
| 4812 |
"output_price_per_1m": 15,
|
| 4813 |
"currency": "USD",
|
| 4814 |
+
"context_window": 204800,
|
| 4815 |
+
"capabilities": [
|
| 4816 |
+
"vision"
|
| 4817 |
+
]
|
| 4818 |
},
|
| 4819 |
{
|
| 4820 |
"name": "together/deepseek-ai/DeepSeek-R1",
|
|
|
|
| 4822 |
"input_price_per_1m": 3,
|
| 4823 |
"output_price_per_1m": 7,
|
| 4824 |
"currency": "USD",
|
| 4825 |
+
"context_window": 64000,
|
| 4826 |
+
"capabilities": [
|
| 4827 |
+
"tools",
|
| 4828 |
+
"reasoning"
|
| 4829 |
+
]
|
| 4830 |
},
|
| 4831 |
{
|
| 4832 |
"name": "anthropic/claude-sonnet-4-5",
|
|
|
|
| 5310 |
"input_price_per_1m": 4,
|
| 5311 |
"output_price_per_1m": 4,
|
| 5312 |
"currency": "USD",
|
| 5313 |
+
"context_window": 64000,
|
| 5314 |
+
"capabilities": [
|
| 5315 |
+
"tools",
|
| 5316 |
+
"reasoning"
|
| 5317 |
+
]
|
| 5318 |
},
|
| 5319 |
{
|
| 5320 |
"name": "bedrock/claude-opus-4-6",
|
|
|
|
| 5381 |
"input_price_per_1m": 5,
|
| 5382 |
"output_price_per_1m": 25,
|
| 5383 |
"currency": "USD",
|
| 5384 |
+
"context_window": 131072,
|
| 5385 |
+
"capabilities": [
|
| 5386 |
+
"tools"
|
| 5387 |
+
]
|
| 5388 |
},
|
| 5389 |
{
|
| 5390 |
"name": "vertex/claude-opus-4-5",
|
|
|
|
| 5812 |
"output_price_per_1m": 0.6,
|
| 5813 |
"currency": "USD",
|
| 5814 |
"size_b": 120,
|
| 5815 |
+
"flavor": "base",
|
| 5816 |
+
"capabilities": [
|
| 5817 |
+
"tools",
|
| 5818 |
+
"reasoning"
|
| 5819 |
+
]
|
| 5820 |
},
|
| 5821 |
{
|
| 5822 |
"name": "gpt-oss-20b (base)",
|
|
|
|
| 5825 |
"output_price_per_1m": 0.2,
|
| 5826 |
"currency": "USD",
|
| 5827 |
"size_b": 20,
|
| 5828 |
+
"flavor": "base",
|
| 5829 |
+
"capabilities": [
|
| 5830 |
+
"tools",
|
| 5831 |
+
"reasoning"
|
| 5832 |
+
]
|
| 5833 |
},
|
| 5834 |
{
|
| 5835 |
"name": "Kimi-K2-Instruct (base)",
|
|
|
|
| 5837 |
"input_price_per_1m": 0.5,
|
| 5838 |
"output_price_per_1m": 2.4,
|
| 5839 |
"currency": "USD",
|
| 5840 |
+
"flavor": "base",
|
| 5841 |
+
"capabilities": [
|
| 5842 |
+
"tools"
|
| 5843 |
+
]
|
| 5844 |
},
|
| 5845 |
{
|
| 5846 |
"name": "Qwen3-Coder-480B-A35B-Instruct (base)",
|
|
|
|
| 5849 |
"output_price_per_1m": 1.8,
|
| 5850 |
"currency": "USD",
|
| 5851 |
"size_b": 480,
|
| 5852 |
+
"flavor": "base",
|
| 5853 |
+
"capabilities": [
|
| 5854 |
+
"tools"
|
| 5855 |
+
]
|
| 5856 |
},
|
| 5857 |
{
|
| 5858 |
"name": "Qwen3-235B-A22B-Thinking-2507 (base)",
|
|
|
|
| 5861 |
"output_price_per_1m": 0.8,
|
| 5862 |
"currency": "USD",
|
| 5863 |
"size_b": 235,
|
| 5864 |
+
"flavor": "base",
|
| 5865 |
+
"capabilities": [
|
| 5866 |
+
"tools",
|
| 5867 |
+
"reasoning"
|
| 5868 |
+
]
|
| 5869 |
},
|
| 5870 |
{
|
| 5871 |
"name": "Qwen3-235B-A22B-Instruct-2507 (base)",
|
|
|
|
| 5874 |
"output_price_per_1m": 0.6,
|
| 5875 |
"currency": "USD",
|
| 5876 |
"size_b": 235,
|
| 5877 |
+
"flavor": "base",
|
| 5878 |
+
"capabilities": [
|
| 5879 |
+
"tools",
|
| 5880 |
+
"reasoning"
|
| 5881 |
+
]
|
| 5882 |
},
|
| 5883 |
{
|
| 5884 |
"name": "Qwen3-30B-A3B-Thinking-2507 (base)",
|
|
|
|
| 5887 |
"output_price_per_1m": 0.3,
|
| 5888 |
"currency": "USD",
|
| 5889 |
"size_b": 30,
|
| 5890 |
+
"flavor": "base",
|
| 5891 |
+
"capabilities": [
|
| 5892 |
+
"tools",
|
| 5893 |
+
"reasoning"
|
| 5894 |
+
]
|
| 5895 |
},
|
| 5896 |
{
|
| 5897 |
"name": "Qwen3-30B-A3B-Instruct-2507 (base)",
|
|
|
|
| 5900 |
"output_price_per_1m": 0.3,
|
| 5901 |
"currency": "USD",
|
| 5902 |
"size_b": 30,
|
| 5903 |
+
"flavor": "base",
|
| 5904 |
+
"capabilities": [
|
| 5905 |
+
"tools"
|
| 5906 |
+
]
|
| 5907 |
},
|
| 5908 |
{
|
| 5909 |
"name": "Qwen3-Coder-30B-A3B-Instruct (base)",
|
|
|
|
| 5912 |
"output_price_per_1m": 0.3,
|
| 5913 |
"currency": "USD",
|
| 5914 |
"size_b": 30,
|
| 5915 |
+
"flavor": "base",
|
| 5916 |
+
"capabilities": [
|
| 5917 |
+
"tools"
|
| 5918 |
+
]
|
| 5919 |
},
|
| 5920 |
{
|
| 5921 |
"name": "Qwen3-30B-A3B (base)",
|
|
|
|
| 5924 |
"output_price_per_1m": 0.3,
|
| 5925 |
"currency": "USD",
|
| 5926 |
"size_b": 30,
|
| 5927 |
+
"flavor": "base",
|
| 5928 |
+
"capabilities": [
|
| 5929 |
+
"tools",
|
| 5930 |
+
"reasoning"
|
| 5931 |
+
]
|
| 5932 |
},
|
| 5933 |
{
|
| 5934 |
"name": "Qwen3-32B (fast)",
|
|
|
|
| 5937 |
"output_price_per_1m": 0.6,
|
| 5938 |
"currency": "USD",
|
| 5939 |
"size_b": 32,
|
| 5940 |
+
"flavor": "fast",
|
| 5941 |
+
"capabilities": [
|
| 5942 |
+
"tools",
|
| 5943 |
+
"reasoning"
|
| 5944 |
+
]
|
| 5945 |
},
|
| 5946 |
{
|
| 5947 |
"name": "Qwen3-32B (base)",
|
|
|
|
| 5950 |
"output_price_per_1m": 0.3,
|
| 5951 |
"currency": "USD",
|
| 5952 |
"size_b": 32,
|
| 5953 |
+
"flavor": "base",
|
| 5954 |
+
"capabilities": [
|
| 5955 |
+
"tools",
|
| 5956 |
+
"reasoning"
|
| 5957 |
+
]
|
| 5958 |
},
|
| 5959 |
{
|
| 5960 |
"name": "Qwen3-14B (base)",
|
|
|
|
| 5963 |
"output_price_per_1m": 0.24,
|
| 5964 |
"currency": "USD",
|
| 5965 |
"size_b": 14,
|
| 5966 |
+
"flavor": "base",
|
| 5967 |
+
"capabilities": [
|
| 5968 |
+
"tools",
|
| 5969 |
+
"reasoning"
|
| 5970 |
+
]
|
| 5971 |
},
|
| 5972 |
{
|
| 5973 |
"name": "Qwen2.5-Coder-7B (base)",
|
|
|
|
| 5994 |
"output_price_per_1m": 1.5,
|
| 5995 |
"currency": "USD",
|
| 5996 |
"size_b": 32,
|
| 5997 |
+
"flavor": "fast",
|
| 5998 |
+
"capabilities": [
|
| 5999 |
+
"tools",
|
| 6000 |
+
"reasoning"
|
| 6001 |
+
]
|
| 6002 |
},
|
| 6003 |
{
|
| 6004 |
"name": "QwQ-32B (base)",
|
|
|
|
| 6007 |
"output_price_per_1m": 0.45,
|
| 6008 |
"currency": "USD",
|
| 6009 |
"size_b": 32,
|
| 6010 |
+
"flavor": "base",
|
| 6011 |
+
"capabilities": [
|
| 6012 |
+
"tools",
|
| 6013 |
+
"reasoning"
|
| 6014 |
+
]
|
| 6015 |
},
|
| 6016 |
{
|
| 6017 |
"name": "GLM-4.5 (base)",
|
|
|
|
| 6019 |
"input_price_per_1m": 0.6,
|
| 6020 |
"output_price_per_1m": 2.2,
|
| 6021 |
"currency": "USD",
|
| 6022 |
+
"flavor": "base",
|
| 6023 |
+
"capabilities": [
|
| 6024 |
+
"tools",
|
| 6025 |
+
"reasoning"
|
| 6026 |
+
]
|
| 6027 |
},
|
| 6028 |
{
|
| 6029 |
"name": "GLM-4.5-Air (base)",
|
|
|
|
| 6031 |
"input_price_per_1m": 0.2,
|
| 6032 |
"output_price_per_1m": 1.2,
|
| 6033 |
"currency": "USD",
|
| 6034 |
+
"flavor": "base",
|
| 6035 |
+
"capabilities": [
|
| 6036 |
+
"tools",
|
| 6037 |
+
"reasoning"
|
| 6038 |
+
]
|
| 6039 |
},
|
| 6040 |
{
|
| 6041 |
"name": "DeepSeek-R1-0528 (fast)",
|
|
|
|
| 6043 |
"input_price_per_1m": 2,
|
| 6044 |
"output_price_per_1m": 6,
|
| 6045 |
"currency": "USD",
|
| 6046 |
+
"flavor": "fast",
|
| 6047 |
+
"capabilities": [
|
| 6048 |
+
"tools",
|
| 6049 |
+
"reasoning"
|
| 6050 |
+
]
|
| 6051 |
},
|
| 6052 |
{
|
| 6053 |
"name": "DeepSeek-R1-0528 (base)",
|
|
|
|
| 6055 |
"input_price_per_1m": 0.8,
|
| 6056 |
"output_price_per_1m": 2.4,
|
| 6057 |
"currency": "USD",
|
| 6058 |
+
"flavor": "base",
|
| 6059 |
+
"capabilities": [
|
| 6060 |
+
"tools",
|
| 6061 |
+
"reasoning"
|
| 6062 |
+
]
|
| 6063 |
},
|
| 6064 |
{
|
| 6065 |
"name": "DeepSeek-V3-0324 (fast)",
|
|
|
|
| 6092 |
"output_price_per_1m": 0.75,
|
| 6093 |
"currency": "USD",
|
| 6094 |
"size_b": 70,
|
| 6095 |
+
"flavor": "fast",
|
| 6096 |
+
"capabilities": [
|
| 6097 |
+
"tools"
|
| 6098 |
+
]
|
| 6099 |
},
|
| 6100 |
{
|
| 6101 |
"name": "Llama-3.3-70B-Instruct (base)",
|
|
|
|
| 6104 |
"output_price_per_1m": 0.4,
|
| 6105 |
"currency": "USD",
|
| 6106 |
"size_b": 70,
|
| 6107 |
+
"flavor": "base",
|
| 6108 |
+
"capabilities": [
|
| 6109 |
+
"tools"
|
| 6110 |
+
]
|
| 6111 |
},
|
| 6112 |
{
|
| 6113 |
"name": "Llama-3.1-8B-Instruct (fast)",
|
|
|
|
| 6116 |
"output_price_per_1m": 0.09,
|
| 6117 |
"currency": "USD",
|
| 6118 |
"size_b": 8,
|
| 6119 |
+
"flavor": "fast",
|
| 6120 |
+
"capabilities": [
|
| 6121 |
+
"tools"
|
| 6122 |
+
]
|
| 6123 |
},
|
| 6124 |
{
|
| 6125 |
"name": "Llama-3.1-8B-Instruct (base)",
|
|
|
|
| 6128 |
"output_price_per_1m": 0.06,
|
| 6129 |
"currency": "USD",
|
| 6130 |
"size_b": 8,
|
| 6131 |
+
"flavor": "base",
|
| 6132 |
+
"capabilities": [
|
| 6133 |
+
"tools"
|
| 6134 |
+
]
|
| 6135 |
},
|
| 6136 |
{
|
| 6137 |
"name": "Llama-3.1-405B-Instruct (base)",
|
|
|
|
| 6140 |
"output_price_per_1m": 3,
|
| 6141 |
"currency": "USD",
|
| 6142 |
"size_b": 405,
|
| 6143 |
+
"flavor": "base",
|
| 6144 |
+
"capabilities": [
|
| 6145 |
+
"tools"
|
| 6146 |
+
]
|
| 6147 |
},
|
| 6148 |
{
|
| 6149 |
"name": "Llama-3_1-Nemotron-Ultra-253B-v1 (base)",
|
|
|
|
| 6178 |
"input_price_per_1m": 0.08,
|
| 6179 |
"output_price_per_1m": 0.24,
|
| 6180 |
"currency": "USD",
|
| 6181 |
+
"flavor": "base",
|
| 6182 |
+
"capabilities": [
|
| 6183 |
+
"tools"
|
| 6184 |
+
]
|
| 6185 |
},
|
| 6186 |
{
|
| 6187 |
"name": "Hermes-4-405B (base)",
|
|
|
|
| 6190 |
"output_price_per_1m": 3,
|
| 6191 |
"currency": "USD",
|
| 6192 |
"size_b": 405,
|
| 6193 |
+
"flavor": "base",
|
| 6194 |
+
"capabilities": [
|
| 6195 |
+
"reasoning"
|
| 6196 |
+
]
|
| 6197 |
},
|
| 6198 |
{
|
| 6199 |
"name": "Hermes-4-70B (base)",
|
|
|
|
| 6202 |
"output_price_per_1m": 0.4,
|
| 6203 |
"currency": "USD",
|
| 6204 |
"size_b": 70,
|
| 6205 |
+
"flavor": "base",
|
| 6206 |
+
"capabilities": [
|
| 6207 |
+
"reasoning"
|
| 6208 |
+
]
|
| 6209 |
},
|
| 6210 |
{
|
| 6211 |
"name": "Hermes-3-Llama-3.1-405B (base)",
|
|
|
|
| 6287 |
"type": "image",
|
| 6288 |
"input_price_per_1m": 0.0013,
|
| 6289 |
"output_price_per_1m": 0,
|
| 6290 |
+
"currency": "USD",
|
| 6291 |
+
"capabilities": [
|
| 6292 |
+
"image-gen"
|
| 6293 |
+
]
|
| 6294 |
},
|
| 6295 |
{
|
| 6296 |
"name": "flux-dev",
|
| 6297 |
"type": "image",
|
| 6298 |
"input_price_per_1m": 0.007,
|
| 6299 |
"output_price_per_1m": 0,
|
| 6300 |
+
"currency": "USD",
|
| 6301 |
+
"capabilities": [
|
| 6302 |
+
"image-gen"
|
| 6303 |
+
]
|
| 6304 |
},
|
| 6305 |
{
|
| 6306 |
"name": "sdxl",
|
| 6307 |
"type": "image",
|
| 6308 |
"input_price_per_1m": 0.003,
|
| 6309 |
"output_price_per_1m": 0,
|
| 6310 |
+
"currency": "USD",
|
| 6311 |
+
"capabilities": [
|
| 6312 |
+
"image-gen"
|
| 6313 |
+
]
|
| 6314 |
},
|
| 6315 |
{
|
| 6316 |
"name": "bge-multilingual-gemma2",
|
|
|
|
| 6359 |
"input_price_per_1m": 0.75,
|
| 6360 |
"output_price_per_1m": 2.25,
|
| 6361 |
"currency": "EUR",
|
| 6362 |
+
"size_b": 235,
|
| 6363 |
+
"capabilities": [
|
| 6364 |
+
"tools",
|
| 6365 |
+
"reasoning"
|
| 6366 |
+
]
|
| 6367 |
},
|
| 6368 |
{
|
| 6369 |
"name": "gpt-oss-120b",
|
|
|
|
| 6371 |
"input_price_per_1m": 0.15,
|
| 6372 |
"output_price_per_1m": 0.6,
|
| 6373 |
"currency": "EUR",
|
| 6374 |
+
"size_b": 120,
|
| 6375 |
+
"capabilities": [
|
| 6376 |
+
"tools",
|
| 6377 |
+
"reasoning"
|
| 6378 |
+
]
|
| 6379 |
},
|
| 6380 |
{
|
| 6381 |
"name": "mistral-small-3.2-24b-instruct-2506",
|
| 6382 |
+
"type": "vision",
|
| 6383 |
"input_price_per_1m": 0.15,
|
| 6384 |
"output_price_per_1m": 0.35,
|
| 6385 |
"currency": "EUR",
|
| 6386 |
+
"size_b": 24,
|
| 6387 |
+
"capabilities": [
|
| 6388 |
+
"vision",
|
| 6389 |
+
"tools"
|
| 6390 |
+
]
|
| 6391 |
},
|
| 6392 |
{
|
| 6393 |
"name": "devstral-2-123b-instruct-2512",
|
|
|
|
| 6418 |
"input_price_per_1m": 0.9,
|
| 6419 |
"output_price_per_1m": 0.9,
|
| 6420 |
"currency": "EUR",
|
| 6421 |
+
"size_b": 70,
|
| 6422 |
+
"capabilities": [
|
| 6423 |
+
"tools"
|
| 6424 |
+
]
|
| 6425 |
},
|
| 6426 |
{
|
| 6427 |
"name": "qwen3-coder-30b-a3b-instruct",
|
|
|
|
| 6429 |
"input_price_per_1m": 0.2,
|
| 6430 |
"output_price_per_1m": 0.8,
|
| 6431 |
"currency": "EUR",
|
| 6432 |
+
"size_b": 30,
|
| 6433 |
+
"capabilities": [
|
| 6434 |
+
"tools"
|
| 6435 |
+
]
|
| 6436 |
},
|
| 6437 |
{
|
| 6438 |
"name": "qwen3-embedding-8b",
|
|
|
|
| 6456 |
"input_price_per_1m": 0.15,
|
| 6457 |
"output_price_per_1m": 0.35,
|
| 6458 |
"currency": "EUR",
|
| 6459 |
+
"size_b": 24,
|
| 6460 |
+
"capabilities": [
|
| 6461 |
+
"audio",
|
| 6462 |
+
"tools"
|
| 6463 |
+
]
|
| 6464 |
},
|
| 6465 |
{
|
| 6466 |
"name": "gemma-3-27b-it",
|
| 6467 |
+
"type": "vision",
|
| 6468 |
"input_price_per_1m": 0.25,
|
| 6469 |
"output_price_per_1m": 0.5,
|
| 6470 |
"currency": "EUR",
|
| 6471 |
+
"size_b": 27,
|
| 6472 |
+
"capabilities": [
|
| 6473 |
+
"vision",
|
| 6474 |
+
"tools"
|
| 6475 |
+
]
|
| 6476 |
},
|
| 6477 |
{
|
| 6478 |
"name": "bge-multilingual-gemma2",
|
|
|
|
| 6487 |
"input_price_per_1m": 0.2,
|
| 6488 |
"output_price_per_1m": 0.2,
|
| 6489 |
"currency": "EUR",
|
| 6490 |
+
"size_b": 8,
|
| 6491 |
+
"capabilities": [
|
| 6492 |
+
"tools"
|
| 6493 |
+
]
|
| 6494 |
},
|
| 6495 |
{
|
| 6496 |
"name": "mistral-nemo-instruct-2407",
|
| 6497 |
"type": "chat",
|
| 6498 |
"input_price_per_1m": 0.2,
|
| 6499 |
"output_price_per_1m": 0.2,
|
| 6500 |
+
"currency": "EUR",
|
| 6501 |
+
"capabilities": [
|
| 6502 |
+
"tools"
|
| 6503 |
+
]
|
| 6504 |
},
|
| 6505 |
{
|
| 6506 |
"name": "deepseek-r1-distill-llama-70b",
|
|
|
|
| 6508 |
"input_price_per_1m": 0.9,
|
| 6509 |
"output_price_per_1m": 0.9,
|
| 6510 |
"currency": "EUR",
|
| 6511 |
+
"size_b": 70,
|
| 6512 |
+
"capabilities": [
|
| 6513 |
+
"reasoning"
|
| 6514 |
+
]
|
| 6515 |
}
|
| 6516 |
]
|
| 6517 |
},
|
|
|
|
| 6529 |
"input_price_per_1m": 0.5,
|
| 6530 |
"output_price_per_1m": 1.5,
|
| 6531 |
"currency": "USD",
|
| 6532 |
+
"api_endpoint": "mistral-large-latest",
|
| 6533 |
+
"capabilities": [
|
| 6534 |
+
"tools"
|
| 6535 |
+
]
|
| 6536 |
},
|
| 6537 |
{
|
| 6538 |
"name": "Mistral Medium 3",
|
| 6539 |
+
"type": "vision",
|
| 6540 |
"input_price_per_1m": 0.4,
|
| 6541 |
"output_price_per_1m": 2,
|
| 6542 |
"currency": "USD",
|
| 6543 |
+
"api_endpoint": "mistral-medium-latest",
|
| 6544 |
+
"capabilities": [
|
| 6545 |
+
"vision",
|
| 6546 |
+
"tools"
|
| 6547 |
+
]
|
| 6548 |
},
|
| 6549 |
{
|
| 6550 |
"name": "Devstral 2",
|
|
|
|
| 6560 |
"input_price_per_1m": 0.1,
|
| 6561 |
"output_price_per_1m": 0.3,
|
| 6562 |
"currency": "USD",
|
| 6563 |
+
"api_endpoint": "devstral-small-latest",
|
| 6564 |
+
"capabilities": [
|
| 6565 |
+
"tools"
|
| 6566 |
+
]
|
| 6567 |
},
|
| 6568 |
{
|
| 6569 |
"name": "Codestral",
|
|
|
|
| 6571 |
"input_price_per_1m": 0.3,
|
| 6572 |
"output_price_per_1m": 0.9,
|
| 6573 |
"currency": "USD",
|
| 6574 |
+
"api_endpoint": "codestral-latest",
|
| 6575 |
+
"capabilities": [
|
| 6576 |
+
"tools"
|
| 6577 |
+
]
|
| 6578 |
},
|
| 6579 |
{
|
| 6580 |
"name": "Mistral Small 3.2",
|
| 6581 |
+
"type": "vision",
|
| 6582 |
"input_price_per_1m": 0.1,
|
| 6583 |
"output_price_per_1m": 0.3,
|
| 6584 |
"currency": "USD",
|
| 6585 |
+
"api_endpoint": "mistral-small-latest",
|
| 6586 |
+
"capabilities": [
|
| 6587 |
+
"vision",
|
| 6588 |
+
"tools"
|
| 6589 |
+
]
|
| 6590 |
},
|
| 6591 |
{
|
| 6592 |
"name": "Mistral Small Creative",
|
|
|
|
| 6594 |
"input_price_per_1m": 0.1,
|
| 6595 |
"output_price_per_1m": 0.3,
|
| 6596 |
"currency": "USD",
|
| 6597 |
+
"api_endpoint": "labs-mistral-small-creative",
|
| 6598 |
+
"capabilities": [
|
| 6599 |
+
"tools"
|
| 6600 |
+
]
|
| 6601 |
},
|
| 6602 |
{
|
| 6603 |
"name": "Magistral Medium",
|
|
|
|
| 6660 |
},
|
| 6661 |
{
|
| 6662 |
"name": "Voxtral Small",
|
| 6663 |
+
"type": "audio",
|
| 6664 |
"input_price_per_1m": 0.004,
|
| 6665 |
"output_price_per_1m": 0.3,
|
| 6666 |
"currency": "USD",
|
| 6667 |
+
"api_endpoint": "voxtral-small-latest",
|
| 6668 |
+
"capabilities": [
|
| 6669 |
+
"audio",
|
| 6670 |
+
"tools"
|
| 6671 |
+
]
|
| 6672 |
},
|
| 6673 |
{
|
| 6674 |
"name": "Voxtral Mini",
|
|
|
|
| 6720 |
},
|
| 6721 |
{
|
| 6722 |
"name": "Pixtral Large",
|
| 6723 |
+
"type": "vision",
|
| 6724 |
"input_price_per_1m": 2,
|
| 6725 |
"output_price_per_1m": 6,
|
| 6726 |
"currency": "USD",
|
| 6727 |
+
"api_endpoint": "pixtral-large-latest",
|
| 6728 |
+
"capabilities": [
|
| 6729 |
+
"vision",
|
| 6730 |
+
"tools"
|
| 6731 |
+
]
|
| 6732 |
},
|
| 6733 |
{
|
| 6734 |
"name": "Pixtral 12B",
|
|
|
|
| 6745 |
"input_price_per_1m": 0.15,
|
| 6746 |
"output_price_per_1m": 0.15,
|
| 6747 |
"currency": "USD",
|
| 6748 |
+
"api_endpoint": "open-mistral-nemo",
|
| 6749 |
+
"capabilities": [
|
| 6750 |
+
"tools"
|
| 6751 |
+
]
|
| 6752 |
},
|
| 6753 |
{
|
| 6754 |
"name": "Mistral 7B",
|
|
|
|
| 6766 |
"output_price_per_1m": 0.7,
|
| 6767 |
"currency": "USD",
|
| 6768 |
"size_b": 7,
|
| 6769 |
+
"api_endpoint": "open-mixtral-8x7b",
|
| 6770 |
+
"capabilities": [
|
| 6771 |
+
"tools"
|
| 6772 |
+
]
|
| 6773 |
},
|
| 6774 |
{
|
| 6775 |
"name": "Mixtral 8x22B",
|
|
|
|
| 6778 |
"output_price_per_1m": 6,
|
| 6779 |
"currency": "USD",
|
| 6780 |
"size_b": 22,
|
| 6781 |
+
"api_endpoint": "open-mixtral-8x22b",
|
| 6782 |
+
"capabilities": [
|
| 6783 |
+
"tools"
|
| 6784 |
+
]
|
| 6785 |
}
|
| 6786 |
]
|
| 6787 |
},
|
|
|
|
| 10242 |
],
|
| 10243 |
"size_b": 12
|
| 10244 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10245 |
{
|
| 10246 |
"name": "qwen/qwen3-next-80b-a3b-instruct:free",
|
| 10247 |
"type": "chat",
|
|
|
|
| 10300 |
"reasoning"
|
| 10301 |
]
|
| 10302 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10303 |
{
|
| 10304 |
"name": "qwen/qwen3-coder:free",
|
| 10305 |
"type": "chat",
|
|
|
|
| 10435 |
"input_price_per_1m": 0.075,
|
| 10436 |
"output_price_per_1m": 0.3,
|
| 10437 |
"currency": "USD",
|
| 10438 |
+
"size_b": 20,
|
| 10439 |
+
"capabilities": [
|
| 10440 |
+
"tools",
|
| 10441 |
+
"reasoning"
|
| 10442 |
+
]
|
| 10443 |
},
|
| 10444 |
{
|
| 10445 |
"name": "GPT OSS Safeguard 20B",
|
|
|
|
| 10447 |
"input_price_per_1m": 0.075,
|
| 10448 |
"output_price_per_1m": 0.3,
|
| 10449 |
"currency": "USD",
|
| 10450 |
+
"size_b": 20,
|
| 10451 |
+
"capabilities": [
|
| 10452 |
+
"tools",
|
| 10453 |
+
"reasoning"
|
| 10454 |
+
]
|
| 10455 |
},
|
| 10456 |
{
|
| 10457 |
"name": "GPT OSS 120B 128k",
|
|
|
|
| 10459 |
"input_price_per_1m": 0.15,
|
| 10460 |
"output_price_per_1m": 0.6,
|
| 10461 |
"currency": "USD",
|
| 10462 |
+
"size_b": 120,
|
| 10463 |
+
"capabilities": [
|
| 10464 |
+
"tools",
|
| 10465 |
+
"reasoning"
|
| 10466 |
+
]
|
| 10467 |
},
|
| 10468 |
{
|
| 10469 |
"name": "Kimi K2-0905 1T 256k",
|
| 10470 |
"type": "chat",
|
| 10471 |
"input_price_per_1m": 1,
|
| 10472 |
"output_price_per_1m": 3,
|
| 10473 |
+
"currency": "USD",
|
| 10474 |
+
"capabilities": [
|
| 10475 |
+
"tools"
|
| 10476 |
+
]
|
| 10477 |
},
|
| 10478 |
{
|
| 10479 |
"name": "Llama 4 Scout (17Bx16E) 128k",
|
| 10480 |
+
"type": "vision",
|
| 10481 |
"input_price_per_1m": 0.11,
|
| 10482 |
"output_price_per_1m": 0.34,
|
| 10483 |
"currency": "USD",
|
| 10484 |
+
"size_b": 17,
|
| 10485 |
+
"capabilities": [
|
| 10486 |
+
"vision",
|
| 10487 |
+
"tools"
|
| 10488 |
+
]
|
| 10489 |
},
|
| 10490 |
{
|
| 10491 |
"name": "Llama 4 Maverick (17Bx128E) 128k",
|
| 10492 |
+
"type": "vision",
|
| 10493 |
"input_price_per_1m": 0.2,
|
| 10494 |
"output_price_per_1m": 0.6,
|
| 10495 |
"currency": "USD",
|
| 10496 |
+
"size_b": 17,
|
| 10497 |
+
"capabilities": [
|
| 10498 |
+
"vision",
|
| 10499 |
+
"tools"
|
| 10500 |
+
]
|
| 10501 |
},
|
| 10502 |
{
|
| 10503 |
"name": "Qwen3 32B 131k",
|
|
|
|
| 10505 |
"input_price_per_1m": 0.29,
|
| 10506 |
"output_price_per_1m": 0.59,
|
| 10507 |
"currency": "USD",
|
| 10508 |
+
"size_b": 32,
|
| 10509 |
+
"capabilities": [
|
| 10510 |
+
"tools",
|
| 10511 |
+
"reasoning"
|
| 10512 |
+
]
|
| 10513 |
},
|
| 10514 |
{
|
| 10515 |
"name": "Llama 3.3 70B Versatile 128k",
|
|
|
|
| 10556 |
"currency": "USD"
|
| 10557 |
}
|
| 10558 |
]
|
| 10559 |
+
},
|
| 10560 |
+
{
|
| 10561 |
+
"name": "Black Forest Labs",
|
| 10562 |
+
"url": "https://bfl.ai",
|
| 10563 |
+
"headquarters": "Germany",
|
| 10564 |
+
"region": "EU",
|
| 10565 |
+
"gdpr_compliant": true,
|
| 10566 |
+
"eu_endpoints": true,
|
| 10567 |
+
"models": [
|
| 10568 |
+
{
|
| 10569 |
+
"name": "flux-2-klein-4b",
|
| 10570 |
+
"display_name": "FLUX.2 [klein] 4B",
|
| 10571 |
+
"type": "image",
|
| 10572 |
+
"capabilities": [
|
| 10573 |
+
"image-gen"
|
| 10574 |
+
],
|
| 10575 |
+
"price_per_image": 0.014,
|
| 10576 |
+
"input_price_per_1m": 0,
|
| 10577 |
+
"output_price_per_1m": 0,
|
| 10578 |
+
"currency": "USD",
|
| 10579 |
+
"category": "FLUX.2"
|
| 10580 |
+
},
|
| 10581 |
+
{
|
| 10582 |
+
"name": "flux-2-klein-9b",
|
| 10583 |
+
"display_name": "FLUX.2 [klein] 9B",
|
| 10584 |
+
"type": "image",
|
| 10585 |
+
"capabilities": [
|
| 10586 |
+
"image-gen"
|
| 10587 |
+
],
|
| 10588 |
+
"price_per_image": 0.015,
|
| 10589 |
+
"input_price_per_1m": 0,
|
| 10590 |
+
"output_price_per_1m": 0,
|
| 10591 |
+
"currency": "USD",
|
| 10592 |
+
"category": "FLUX.2"
|
| 10593 |
+
},
|
| 10594 |
+
{
|
| 10595 |
+
"name": "flux-dev",
|
| 10596 |
+
"display_name": "FLUX.1 [dev]",
|
| 10597 |
+
"type": "image",
|
| 10598 |
+
"capabilities": [
|
| 10599 |
+
"image-gen"
|
| 10600 |
+
],
|
| 10601 |
+
"price_per_image": 0.025,
|
| 10602 |
+
"input_price_per_1m": 0,
|
| 10603 |
+
"output_price_per_1m": 0,
|
| 10604 |
+
"currency": "USD",
|
| 10605 |
+
"category": "FLUX.1"
|
| 10606 |
+
},
|
| 10607 |
+
{
|
| 10608 |
+
"name": "flux-2-pro",
|
| 10609 |
+
"display_name": "FLUX.2 [pro]",
|
| 10610 |
+
"type": "image",
|
| 10611 |
+
"capabilities": [
|
| 10612 |
+
"image-gen"
|
| 10613 |
+
],
|
| 10614 |
+
"price_per_image": 0.03,
|
| 10615 |
+
"input_price_per_1m": 0,
|
| 10616 |
+
"output_price_per_1m": 0,
|
| 10617 |
+
"currency": "USD",
|
| 10618 |
+
"category": "FLUX.2"
|
| 10619 |
+
},
|
| 10620 |
+
{
|
| 10621 |
+
"name": "flux-kontext-pro",
|
| 10622 |
+
"display_name": "FLUX.1 Kontext [pro]",
|
| 10623 |
+
"type": "image",
|
| 10624 |
+
"capabilities": [
|
| 10625 |
+
"image-gen"
|
| 10626 |
+
],
|
| 10627 |
+
"price_per_image": 0.04,
|
| 10628 |
+
"input_price_per_1m": 0,
|
| 10629 |
+
"output_price_per_1m": 0,
|
| 10630 |
+
"currency": "USD",
|
| 10631 |
+
"category": "FLUX.1"
|
| 10632 |
+
},
|
| 10633 |
+
{
|
| 10634 |
+
"name": "flux-pro-1.1",
|
| 10635 |
+
"display_name": "FLUX 1.1 [pro]",
|
| 10636 |
+
"type": "image",
|
| 10637 |
+
"capabilities": [
|
| 10638 |
+
"image-gen"
|
| 10639 |
+
],
|
| 10640 |
+
"price_per_image": 0.04,
|
| 10641 |
+
"input_price_per_1m": 0,
|
| 10642 |
+
"output_price_per_1m": 0,
|
| 10643 |
+
"currency": "USD",
|
| 10644 |
+
"category": "FLUX.1"
|
| 10645 |
+
},
|
| 10646 |
+
{
|
| 10647 |
+
"name": "flux-2-flex",
|
| 10648 |
+
"display_name": "FLUX.2 [flex]",
|
| 10649 |
+
"type": "image",
|
| 10650 |
+
"capabilities": [
|
| 10651 |
+
"image-gen"
|
| 10652 |
+
],
|
| 10653 |
+
"price_per_image": 0.05,
|
| 10654 |
+
"input_price_per_1m": 0,
|
| 10655 |
+
"output_price_per_1m": 0,
|
| 10656 |
+
"currency": "USD",
|
| 10657 |
+
"category": "FLUX.2"
|
| 10658 |
+
},
|
| 10659 |
+
{
|
| 10660 |
+
"name": "flux-pro",
|
| 10661 |
+
"display_name": "FLUX.1 [pro]",
|
| 10662 |
+
"type": "image",
|
| 10663 |
+
"capabilities": [
|
| 10664 |
+
"image-gen"
|
| 10665 |
+
],
|
| 10666 |
+
"price_per_image": 0.05,
|
| 10667 |
+
"input_price_per_1m": 0,
|
| 10668 |
+
"output_price_per_1m": 0,
|
| 10669 |
+
"currency": "USD",
|
| 10670 |
+
"category": "FLUX.1"
|
| 10671 |
+
},
|
| 10672 |
+
{
|
| 10673 |
+
"name": "flux-pro-1.0-fill",
|
| 10674 |
+
"display_name": "FLUX.1 Fill [pro]",
|
| 10675 |
+
"type": "image",
|
| 10676 |
+
"capabilities": [
|
| 10677 |
+
"image-gen"
|
| 10678 |
+
],
|
| 10679 |
+
"price_per_image": 0.05,
|
| 10680 |
+
"input_price_per_1m": 0,
|
| 10681 |
+
"output_price_per_1m": 0,
|
| 10682 |
+
"currency": "USD",
|
| 10683 |
+
"category": "FLUX.1 Tools"
|
| 10684 |
+
},
|
| 10685 |
+
{
|
| 10686 |
+
"name": "flux-pro-1.1-ultra",
|
| 10687 |
+
"display_name": "FLUX 1.1 [pro] Ultra",
|
| 10688 |
+
"type": "image",
|
| 10689 |
+
"capabilities": [
|
| 10690 |
+
"image-gen"
|
| 10691 |
+
],
|
| 10692 |
+
"price_per_image": 0.06,
|
| 10693 |
+
"input_price_per_1m": 0,
|
| 10694 |
+
"output_price_per_1m": 0,
|
| 10695 |
+
"currency": "USD",
|
| 10696 |
+
"category": "FLUX.1"
|
| 10697 |
+
},
|
| 10698 |
+
{
|
| 10699 |
+
"name": "flux-2-max",
|
| 10700 |
+
"display_name": "FLUX.2 [max]",
|
| 10701 |
+
"type": "image",
|
| 10702 |
+
"capabilities": [
|
| 10703 |
+
"image-gen"
|
| 10704 |
+
],
|
| 10705 |
+
"price_per_image": 0.07,
|
| 10706 |
+
"input_price_per_1m": 0,
|
| 10707 |
+
"output_price_per_1m": 0,
|
| 10708 |
+
"currency": "USD",
|
| 10709 |
+
"category": "FLUX.2"
|
| 10710 |
+
},
|
| 10711 |
+
{
|
| 10712 |
+
"name": "flux-kontext-max",
|
| 10713 |
+
"display_name": "FLUX.1 Kontext [max]",
|
| 10714 |
+
"type": "image",
|
| 10715 |
+
"capabilities": [
|
| 10716 |
+
"image-gen"
|
| 10717 |
+
],
|
| 10718 |
+
"price_per_image": 0.08,
|
| 10719 |
+
"input_price_per_1m": 0,
|
| 10720 |
+
"output_price_per_1m": 0,
|
| 10721 |
+
"currency": "USD",
|
| 10722 |
+
"category": "FLUX.1"
|
| 10723 |
+
}
|
| 10724 |
+
]
|
| 10725 |
}
|
| 10726 |
]
|
| 10727 |
}
|
package.json
CHANGED
|
@@ -18,6 +18,7 @@
|
|
| 18 |
"fetch:groq": "node scripts/providers/groq.js",
|
| 19 |
"fetch:infomaniak": "node scripts/providers/infomaniak.js",
|
| 20 |
"fetch:ionos": "node scripts/providers/ionos.js",
|
|
|
|
| 21 |
"fetch:benchmarks": "node scripts/fetch-benchmarks.js",
|
| 22 |
"server": "node server.js",
|
| 23 |
"dev:api": "node server.js"
|
|
|
|
| 18 |
"fetch:groq": "node scripts/providers/groq.js",
|
| 19 |
"fetch:infomaniak": "node scripts/providers/infomaniak.js",
|
| 20 |
"fetch:ionos": "node scripts/providers/ionos.js",
|
| 21 |
+
"fetch:bfl": "node scripts/providers/black-forest-labs.js",
|
| 22 |
"fetch:benchmarks": "node scripts/fetch-benchmarks.js",
|
| 23 |
"server": "node server.js",
|
| 24 |
"dev:api": "node server.js"
|
scripts/fetch-benchmarks.js
CHANGED
|
@@ -22,7 +22,13 @@
|
|
| 22 |
* Where both sources have data for the same benchmark (gpqa, mmlu_pro, ifeval, bbh),
|
| 23 |
* LLMStats takes priority (it stores self-reported model-card values).
|
| 24 |
*
|
| 25 |
-
* Usage:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
*/
|
| 27 |
|
| 28 |
const fs = require('fs');
|
|
@@ -520,9 +526,162 @@ function mergeAider(entries, aiderEntries) {
|
|
| 520 |
return [...entries, ...newEntries];
|
| 521 |
}
|
| 522 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 523 |
// ─── Main ────────────────────────────────────────────────────────────────────
|
| 524 |
|
| 525 |
async function main() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 526 |
const [llmstats, hfEntries, lbEntries, arenaEntries, aiderEntries] = await Promise.all([
|
| 527 |
fetchLLMStats(),
|
| 528 |
fetchHFLeaderboard(),
|
|
|
|
| 22 |
* Where both sources have data for the same benchmark (gpqa, mmlu_pro, ifeval, bbh),
|
| 23 |
* LLMStats takes priority (it stores self-reported model-card values).
|
| 24 |
*
|
| 25 |
+
* Usage:
|
| 26 |
+
* node scripts/fetch-benchmarks.js # fetch all sources
|
| 27 |
+
* node scripts/fetch-benchmarks.js livebench # refresh LiveBench only
|
| 28 |
+
* node scripts/fetch-benchmarks.js arena # refresh Chatbot Arena only
|
| 29 |
+
* node scripts/fetch-benchmarks.js aider # refresh Aider only
|
| 30 |
+
* node scripts/fetch-benchmarks.js hf # refresh HF Leaderboard only
|
| 31 |
+
* node scripts/fetch-benchmarks.js llmstats # refresh LLMStats only
|
| 32 |
*/
|
| 33 |
|
| 34 |
const fs = require('fs');
|
|
|
|
| 526 |
return [...entries, ...newEntries];
|
| 527 |
}
|
| 528 |
|
| 529 |
+
// ─── Per-source partial refresh ──────────────────────────────────────────────
|
| 530 |
+
|
| 531 |
+
// Fields owned by each source. Stripping these fields + removing source-only
|
| 532 |
+
// entries allows re-running just one source without losing other sources' data.
|
| 533 |
+
const SOURCE_FIELDS = {
|
| 534 |
+
llmstats: ['slug', 'mmlu', 'mmlu_pro', 'gpqa', 'human_eval', 'math', 'gsm8k', 'mmmu', 'hellaswag', 'ifeval', 'arc', 'drop', 'mbpp', 'mgsm', 'bbh'],
|
| 535 |
+
hf: ['hf_id', 'params_b', 'hf_math_lvl5', 'hf_musr', 'hf_avg'],
|
| 536 |
+
livebench: ['lb_name', 'lb_global', 'lb_reasoning', 'lb_coding', 'lb_math', 'lb_language', 'lb_if', 'lb_data_analysis'],
|
| 537 |
+
arena: ['arena_name', 'arena_org', 'arena_elo', 'arena_rank', 'arena_votes'],
|
| 538 |
+
aider: ['aider_model', 'aider_pass_rate'],
|
| 539 |
+
};
|
| 540 |
+
|
| 541 |
+
// A unique field that only this source contributes (used to detect source-only entries).
|
| 542 |
+
const SOURCE_ID_FIELD = {
|
| 543 |
+
llmstats: 'slug',
|
| 544 |
+
hf: 'hf_id',
|
| 545 |
+
livebench: 'lb_name',
|
| 546 |
+
arena: 'arena_elo',
|
| 547 |
+
aider: 'aider_pass_rate',
|
| 548 |
+
};
|
| 549 |
+
|
| 550 |
+
const ALL_ID_FIELDS = Object.values(SOURCE_ID_FIELD);
|
| 551 |
+
|
| 552 |
+
function stripSourceFields(entries, source) {
|
| 553 |
+
const fields = SOURCE_FIELDS[source];
|
| 554 |
+
const ownId = SOURCE_ID_FIELD[source];
|
| 555 |
+
const otherId = ALL_ID_FIELDS.filter((id) => id !== ownId);
|
| 556 |
+
return entries
|
| 557 |
+
// Drop entries that only belong to this source (no other source data)
|
| 558 |
+
.filter((e) => otherId.some((id) => e[id] !== undefined))
|
| 559 |
+
.map((e) => {
|
| 560 |
+
const stripped = { ...e };
|
| 561 |
+
for (const f of fields) delete stripped[f];
|
| 562 |
+
return stripped;
|
| 563 |
+
});
|
| 564 |
+
}
|
| 565 |
+
|
| 566 |
+
// Merge freshly-fetched LLMStats data into an existing array of entries.
|
| 567 |
+
function mergeLLMStatsInto(entries, llmstats) {
|
| 568 |
+
const LS_FIELDS = SOURCE_FIELDS.llmstats;
|
| 569 |
+
const nameMap = new Map();
|
| 570 |
+
entries.forEach((e, i) => {
|
| 571 |
+
if (e.name) nameMap.set(normName(e.name), i);
|
| 572 |
+
const slugModel = (e.slug || '').split('/').pop();
|
| 573 |
+
if (slugModel) nameMap.set(normName(slugModel), i);
|
| 574 |
+
});
|
| 575 |
+
|
| 576 |
+
let matched = 0;
|
| 577 |
+
const usedIdx = new Set();
|
| 578 |
+
const newEntries = [];
|
| 579 |
+
|
| 580 |
+
for (const ls of llmstats) {
|
| 581 |
+
const candidates = [normName(ls.name || ''), normName((ls.slug || '').split('/').pop())].filter(Boolean);
|
| 582 |
+
const idx = candidates.map((c) => nameMap.get(c)).find((n) => n !== undefined);
|
| 583 |
+
if (idx !== undefined && !usedIdx.has(idx)) {
|
| 584 |
+
const target = entries[idx];
|
| 585 |
+
for (const f of LS_FIELDS) { if (ls[f] !== undefined) target[f] = ls[f]; }
|
| 586 |
+
usedIdx.add(idx);
|
| 587 |
+
matched++;
|
| 588 |
+
} else {
|
| 589 |
+
newEntries.push({ ...ls });
|
| 590 |
+
}
|
| 591 |
+
}
|
| 592 |
+
|
| 593 |
+
console.log(` LLMStats: ${matched} matched, ${newEntries.length} new entries`);
|
| 594 |
+
return [...entries, ...newEntries];
|
| 595 |
+
}
|
| 596 |
+
|
| 597 |
+
// Merge freshly-fetched HF data into an existing array of entries.
|
| 598 |
+
function mergeHFInto(entries, hfEntries) {
|
| 599 |
+
const nameMap = new Map();
|
| 600 |
+
entries.forEach((e, i) => {
|
| 601 |
+
if (e.name) nameMap.set(normName(e.name), i);
|
| 602 |
+
const slugModel = (e.slug || '').split('/').pop();
|
| 603 |
+
if (slugModel) nameMap.set(normName(slugModel), i);
|
| 604 |
+
});
|
| 605 |
+
|
| 606 |
+
let matched = 0;
|
| 607 |
+
const usedIdx = new Set();
|
| 608 |
+
const newEntries = [];
|
| 609 |
+
|
| 610 |
+
for (const hf of hfEntries) {
|
| 611 |
+
const modelPart = normName(hf.name);
|
| 612 |
+
const modelWords = modelPart.split(' ');
|
| 613 |
+
const noPrefix = modelWords.length > 1 ? modelWords.slice(1).join(' ') : modelPart;
|
| 614 |
+
const candidates = [modelPart, noPrefix].filter(Boolean);
|
| 615 |
+
const idx = candidates.map((c) => nameMap.get(c)).find((n) => n !== undefined);
|
| 616 |
+
|
| 617 |
+
if (idx !== undefined && !usedIdx.has(idx)) {
|
| 618 |
+
const target = entries[idx];
|
| 619 |
+
if (!target.hf_id) target.hf_id = hf.hf_id;
|
| 620 |
+
if (!target.params_b) target.params_b = hf.params_b;
|
| 621 |
+
// LLMStats takes priority for shared benchmarks
|
| 622 |
+
if (!target.ifeval) target.ifeval = hf.ifeval;
|
| 623 |
+
if (!target.bbh) target.bbh = hf.bbh;
|
| 624 |
+
if (!target.gpqa) target.gpqa = hf.gpqa;
|
| 625 |
+
if (!target.mmlu_pro) target.mmlu_pro = hf.mmlu_pro;
|
| 626 |
+
// HF-exclusive fields always updated
|
| 627 |
+
target.hf_math_lvl5 = hf.hf_math_lvl5;
|
| 628 |
+
target.hf_musr = hf.hf_musr;
|
| 629 |
+
target.hf_avg = hf.hf_avg;
|
| 630 |
+
usedIdx.add(idx);
|
| 631 |
+
matched++;
|
| 632 |
+
} else {
|
| 633 |
+
newEntries.push({ ...hf });
|
| 634 |
+
}
|
| 635 |
+
}
|
| 636 |
+
|
| 637 |
+
console.log(` HF: ${matched} matched, ${newEntries.length} new entries`);
|
| 638 |
+
return [...entries, ...newEntries];
|
| 639 |
+
}
|
| 640 |
+
|
| 641 |
+
async function refreshSource(source) {
|
| 642 |
+
if (!SOURCE_FIELDS[source]) {
|
| 643 |
+
console.error(`Unknown source "${source}". Valid: ${Object.keys(SOURCE_FIELDS).join(', ')}`);
|
| 644 |
+
process.exit(1);
|
| 645 |
+
}
|
| 646 |
+
|
| 647 |
+
console.log(`Refreshing benchmark source: ${source}\n`);
|
| 648 |
+
const existing = JSON.parse(fs.readFileSync(OUT_FILE, 'utf8'));
|
| 649 |
+
const stripped = stripSourceFields(existing, source);
|
| 650 |
+
|
| 651 |
+
let result;
|
| 652 |
+
if (source === 'llmstats') {
|
| 653 |
+
const data = await fetchLLMStats();
|
| 654 |
+
result = mergeLLMStatsInto(stripped, data);
|
| 655 |
+
} else if (source === 'hf') {
|
| 656 |
+
const data = await fetchHFLeaderboard();
|
| 657 |
+
result = mergeHFInto(stripped, data);
|
| 658 |
+
} else if (source === 'livebench') {
|
| 659 |
+
const data = await fetchLiveBench();
|
| 660 |
+
result = mergeLiveBench(stripped, data);
|
| 661 |
+
} else if (source === 'arena') {
|
| 662 |
+
const data = await fetchChatbotArena();
|
| 663 |
+
result = mergeArena(stripped, data);
|
| 664 |
+
} else if (source === 'aider') {
|
| 665 |
+
const data = await fetchAider();
|
| 666 |
+
result = mergeAider(stripped, data);
|
| 667 |
+
}
|
| 668 |
+
|
| 669 |
+
fs.writeFileSync(OUT_FILE, JSON.stringify(result, null, 2));
|
| 670 |
+
console.log(`\nSaved ${result.length} entries to data/benchmarks.json`);
|
| 671 |
+
}
|
| 672 |
+
|
| 673 |
// ─── Main ────────────────────────────────────────────────────────────────────
|
| 674 |
|
| 675 |
async function main() {
|
| 676 |
+
const source = process.argv[2]?.toLowerCase();
|
| 677 |
+
|
| 678 |
+
// Per-source refresh mode
|
| 679 |
+
if (source) {
|
| 680 |
+
await refreshSource(source);
|
| 681 |
+
return;
|
| 682 |
+
}
|
| 683 |
+
|
| 684 |
+
// Full rebuild — all sources
|
| 685 |
const [llmstats, hfEntries, lbEntries, arenaEntries, aiderEntries] = await Promise.all([
|
| 686 |
fetchLLMStats(),
|
| 687 |
fetchHFLeaderboard(),
|
scripts/fetch-providers.js
CHANGED
|
@@ -27,6 +27,7 @@ const FETCHER_MODULES = {
|
|
| 27 |
groq: require('./providers/groq'),
|
| 28 |
infomaniak: require('./providers/infomaniak'),
|
| 29 |
ionos: require('./providers/ionos'),
|
|
|
|
| 30 |
};
|
| 31 |
|
| 32 |
const FETCHERS = Object.entries(FETCHER_MODULES).map(([key, mod]) => {
|
|
@@ -109,9 +110,16 @@ function propagateCapabilities(data) {
|
|
| 109 |
if (orIndex.length === 0) return;
|
| 110 |
|
| 111 |
let propagated = 0;
|
|
|
|
| 112 |
for (const provider of data.providers) {
|
| 113 |
-
if (provider.name === 'OpenRouter') continue;
|
| 114 |
for (const model of provider.models || []) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 115 |
if (model.capabilities && model.capabilities.length > 0) continue; // already set
|
| 116 |
const match = findOrMatch(model.name, orIndex);
|
| 117 |
if (!match) continue;
|
|
@@ -121,7 +129,8 @@ function propagateCapabilities(data) {
|
|
| 121 |
propagated++;
|
| 122 |
}
|
| 123 |
}
|
| 124 |
-
if (
|
|
|
|
| 125 |
}
|
| 126 |
|
| 127 |
async function runFetcher(fetcher, data) {
|
|
|
|
| 27 |
groq: require('./providers/groq'),
|
| 28 |
infomaniak: require('./providers/infomaniak'),
|
| 29 |
ionos: require('./providers/ionos'),
|
| 30 |
+
'black-forest-labs': require('./providers/black-forest-labs'),
|
| 31 |
};
|
| 32 |
|
| 33 |
const FETCHERS = Object.entries(FETCHER_MODULES).map(([key, mod]) => {
|
|
|
|
| 110 |
if (orIndex.length === 0) return;
|
| 111 |
|
| 112 |
let propagated = 0;
|
| 113 |
+
let autoTagged = 0;
|
| 114 |
for (const provider of data.providers) {
|
|
|
|
| 115 |
for (const model of provider.models || []) {
|
| 116 |
+
// Auto-tag image-gen models regardless of OR match
|
| 117 |
+
if (model.type === 'image' && (!model.capabilities || !model.capabilities.length)) {
|
| 118 |
+
model.capabilities = ['image-gen'];
|
| 119 |
+
autoTagged++;
|
| 120 |
+
continue;
|
| 121 |
+
}
|
| 122 |
+
if (provider.name === 'OpenRouter') continue;
|
| 123 |
if (model.capabilities && model.capabilities.length > 0) continue; // already set
|
| 124 |
const match = findOrMatch(model.name, orIndex);
|
| 125 |
if (!match) continue;
|
|
|
|
| 129 |
propagated++;
|
| 130 |
}
|
| 131 |
}
|
| 132 |
+
if (autoTagged > 0) console.log(`Auto-tagged ${autoTagged} image-gen models.`);
|
| 133 |
+
if (propagated > 0) console.log(`Propagated capabilities to ${propagated} models from OpenRouter.`);
|
| 134 |
}
|
| 135 |
|
| 136 |
async function runFetcher(fetcher, data) {
|
scripts/load-env.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use strict';
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Shared environment loader.
|
| 5 |
+
* Checks local project .env first, then ../AIToolkit/.env as a fallback.
|
| 6 |
+
* Only sets variables that are not already present in process.env.
|
| 7 |
+
*/
|
| 8 |
+
|
| 9 |
+
const fs = require('fs');
|
| 10 |
+
const path = require('path');
|
| 11 |
+
|
| 12 |
+
function loadEnv() {
|
| 13 |
+
const candidates = [
|
| 14 |
+
path.join(__dirname, '..', '.env'),
|
| 15 |
+
path.join(__dirname, '..', '..', 'AIToolkit', '.env'),
|
| 16 |
+
];
|
| 17 |
+
const envPath = candidates.find((p) => fs.existsSync(p));
|
| 18 |
+
if (!envPath) return;
|
| 19 |
+
|
| 20 |
+
const content = fs.readFileSync(envPath, 'utf8');
|
| 21 |
+
for (const line of content.split('\n')) {
|
| 22 |
+
const m = line.match(/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);
|
| 23 |
+
if (m && process.env[m[1]] === undefined) {
|
| 24 |
+
// Strip optional surrounding quotes
|
| 25 |
+
process.env[m[1]] = m[2].trim().replace(/^(['"])(.*)\1$/, '$2');
|
| 26 |
+
}
|
| 27 |
+
}
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
module.exports = { loadEnv };
|
scripts/providers/black-forest-labs.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use strict';
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Black Forest Labs (bfl.ai) pricing fetcher.
|
| 5 |
+
*
|
| 6 |
+
* bfl.ai/pricing uses Next.js App Router RSC streaming.
|
| 7 |
+
* Pricing data is embedded in self.__next_f.push([1,"..."]) script tags,
|
| 8 |
+
* delivered as Sanity CMS portable text via a `pricingCards` array.
|
| 9 |
+
*
|
| 10 |
+
* Each card has:
|
| 11 |
+
* title – portable text array → plain model name
|
| 12 |
+
* priceUnit – USD price per first generated megapixel (1MP = 1024×1024)
|
| 13 |
+
* apiEndpoint – REST endpoint slug (e.g. /v1/flux-2-max)
|
| 14 |
+
* category – { name } for model family (FLUX.2, FLUX.1, FLUX.1 Tools, …)
|
| 15 |
+
*
|
| 16 |
+
* We store priceUnit as price_per_image (cost for a standard 1MP / 1024×1024 image).
|
| 17 |
+
*/
|
| 18 |
+
|
| 19 |
+
const URL = 'https://bfl.ai/pricing';
|
| 20 |
+
|
| 21 |
+
// Extract plain text from Sanity portable text blocks.
|
| 22 |
+
function portableTextToString(blocks) {
|
| 23 |
+
if (!Array.isArray(blocks)) return '';
|
| 24 |
+
return blocks
|
| 25 |
+
.flatMap((b) => (b.children || []).map((s) => s.text || ''))
|
| 26 |
+
.join('')
|
| 27 |
+
.trim();
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
// Bracket-count extract a JSON array starting after `marker` in `str`.
|
| 31 |
+
function extractJsonArray(str, marker) {
|
| 32 |
+
const markerIdx = str.indexOf(marker);
|
| 33 |
+
if (markerIdx < 0) return null;
|
| 34 |
+
let i = markerIdx + marker.length;
|
| 35 |
+
while (i < str.length && str[i] !== '[') i++;
|
| 36 |
+
i++; // past opening '['
|
| 37 |
+
let depth = 0;
|
| 38 |
+
let end = -1;
|
| 39 |
+
for (let j = i; j < str.length; j++) {
|
| 40 |
+
if (str[j] === '[' || str[j] === '{') depth++;
|
| 41 |
+
else if (str[j] === ']' || str[j] === '}') {
|
| 42 |
+
if (depth === 0) { end = j; break; }
|
| 43 |
+
depth--;
|
| 44 |
+
}
|
| 45 |
+
}
|
| 46 |
+
if (end < 0) return null;
|
| 47 |
+
try {
|
| 48 |
+
return JSON.parse('[' + str.slice(i, end) + ']');
|
| 49 |
+
} catch {
|
| 50 |
+
return null;
|
| 51 |
+
}
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
async function fetchBfl() {
|
| 55 |
+
const response = await fetch(URL, {
|
| 56 |
+
headers: {
|
| 57 |
+
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
| 58 |
+
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
| 59 |
+
'Accept-Language': 'en-US,en;q=0.9',
|
| 60 |
+
},
|
| 61 |
+
});
|
| 62 |
+
|
| 63 |
+
if (!response.ok) throw new Error(`HTTP ${response.status} from ${URL}`);
|
| 64 |
+
const html = await response.text();
|
| 65 |
+
|
| 66 |
+
// Decode all RSC payload chunks
|
| 67 |
+
let combined = '';
|
| 68 |
+
const pushRe = /self\.__next_f\.push\(\[1,"([\s\S]*?)"\]\)/g;
|
| 69 |
+
let m;
|
| 70 |
+
while ((m = pushRe.exec(html)) !== null) {
|
| 71 |
+
try { combined += JSON.parse('"' + m[1] + '"'); } catch { /* skip malformed */ }
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
if (!combined) throw new Error('No RSC payload found in page');
|
| 75 |
+
|
| 76 |
+
const cards = extractJsonArray(combined, '"pricingCards":');
|
| 77 |
+
if (!cards) throw new Error('Could not find pricingCards in RSC payload');
|
| 78 |
+
|
| 79 |
+
const models = [];
|
| 80 |
+
for (const card of cards) {
|
| 81 |
+
const name = portableTextToString(card.title);
|
| 82 |
+
const priceUnit = parseFloat(card.priceUnit || '0');
|
| 83 |
+
const endpoint = (card.apiEndpoint || '').replace(/^\/v1\//, '');
|
| 84 |
+
const family = card.category?.name || 'BFL';
|
| 85 |
+
|
| 86 |
+
if (!name || priceUnit <= 0) continue;
|
| 87 |
+
|
| 88 |
+
models.push({
|
| 89 |
+
// Use the API endpoint slug as the model ID for stability
|
| 90 |
+
name: endpoint || name,
|
| 91 |
+
display_name: name,
|
| 92 |
+
type: 'image',
|
| 93 |
+
capabilities: ['image-gen'],
|
| 94 |
+
// priceUnit = USD per first generated megapixel (1024×1024)
|
| 95 |
+
price_per_image: priceUnit,
|
| 96 |
+
input_price_per_1m: 0,
|
| 97 |
+
output_price_per_1m: 0,
|
| 98 |
+
currency: 'USD',
|
| 99 |
+
category: family,
|
| 100 |
+
});
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
// Sort by price ascending
|
| 104 |
+
models.sort((a, b) => a.price_per_image - b.price_per_image);
|
| 105 |
+
|
| 106 |
+
return models;
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
module.exports = { fetchBfl, providerName: 'Black Forest Labs' };
|
| 110 |
+
|
| 111 |
+
// Run standalone: node scripts/providers/bfl.js
|
| 112 |
+
if (require.main === module) {
|
| 113 |
+
fetchBfl()
|
| 114 |
+
.then((models) => {
|
| 115 |
+
console.log(`Fetched ${models.length} models from Black Forest Labs:\n`);
|
| 116 |
+
models.forEach((m) =>
|
| 117 |
+
console.log(` ${m.name.padEnd(35)} [${m.category}] $${m.price_per_image}/MP (${m.display_name})`)
|
| 118 |
+
);
|
| 119 |
+
})
|
| 120 |
+
.catch((err) => {
|
| 121 |
+
console.error('Error:', err.message);
|
| 122 |
+
process.exit(1);
|
| 123 |
+
});
|
| 124 |
+
}
|
scripts/providers/openrouter.js
CHANGED
|
@@ -2,11 +2,23 @@
|
|
| 2 |
|
| 3 |
// OpenRouter exposes a public JSON API – no scraping needed.
|
| 4 |
// Docs: https://openrouter.ai/docs/models
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
const API_URL = 'https://openrouter.ai/api/v1/models';
|
| 6 |
|
| 7 |
// OpenRouter stores per-token prices; multiply by 1e6 to get per-1M price.
|
| 8 |
const toPerMillion = (val) => (val ? parseFloat(val) * 1_000_000 : 0);
|
| 9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
const getSizeB = (id) => {
|
| 11 |
const match = (id || '').match(/[^.\d](\d+)b/i) || (id || '').match(/^(\d+)b/i);
|
| 12 |
return match ? parseInt(match[1]) : undefined;
|
|
@@ -42,12 +54,14 @@ function getCapabilities(architecture, supportedParams) {
|
|
| 42 |
}
|
| 43 |
|
| 44 |
async function fetchOpenRouter() {
|
| 45 |
-
const
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
|
|
|
|
|
|
| 51 |
|
| 52 |
if (!response.ok) {
|
| 53 |
throw new Error(`HTTP ${response.status} from OpenRouter API`);
|
|
@@ -60,11 +74,17 @@ async function fetchOpenRouter() {
|
|
| 60 |
const pricing = model.pricing || {};
|
| 61 |
const inputPrice = toPerMillion(pricing.prompt);
|
| 62 |
const outputPrice = toPerMillion(pricing.completion);
|
|
|
|
|
|
|
|
|
|
| 63 |
|
| 64 |
-
// Skip meta-
|
| 65 |
if (inputPrice < 0 || outputPrice < 0) continue;
|
| 66 |
-
// Skip the free-router meta-model
|
| 67 |
if (model.id === 'openrouter/free') continue;
|
|
|
|
|
|
|
|
|
|
| 68 |
|
| 69 |
const type = getModelType(model.architecture);
|
| 70 |
const capabilities = getCapabilities(model.architecture, model.supported_parameters);
|
|
@@ -77,6 +97,11 @@ async function fetchOpenRouter() {
|
|
| 77 |
currency: 'USD',
|
| 78 |
};
|
| 79 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
if (capabilities.length) modelEntry.capabilities = capabilities;
|
| 81 |
const size_b = getSizeB(model.id);
|
| 82 |
if (size_b) modelEntry.size_b = size_b;
|
|
@@ -101,10 +126,12 @@ module.exports = { fetchOpenRouter, providerName: 'OpenRouter' };
|
|
| 101 |
if (require.main === module) {
|
| 102 |
fetchOpenRouter()
|
| 103 |
.then((models) => {
|
| 104 |
-
const
|
|
|
|
| 105 |
const vision = models.filter(m => m.type === 'vision');
|
| 106 |
-
|
| 107 |
-
console.log(`
|
|
|
|
| 108 |
console.log('\nFirst 5 paid:');
|
| 109 |
models.filter(m => m.input_price_per_1m > 0).slice(0, 5).forEach((m) =>
|
| 110 |
console.log(` ${m.name.padEnd(55)} $${m.input_price_per_1m} / $${m.output_price_per_1m} [${m.type}] ${(m.capabilities||[]).join(',')}`)
|
|
|
|
| 2 |
|
| 3 |
// OpenRouter exposes a public JSON API – no scraping needed.
|
| 4 |
// Docs: https://openrouter.ai/docs/models
|
| 5 |
+
//
|
| 6 |
+
// Without an API key: ~342 models (public subset).
|
| 7 |
+
// With an API key: ~600+ models including image-gen (FLUX, etc.) and subscriber-only models.
|
| 8 |
+
// Set OPENROUTER_API_KEY in env or ../AIToolkit/.env to unlock all models.
|
| 9 |
+
|
| 10 |
+
const { loadEnv } = require('../load-env');
|
| 11 |
+
loadEnv();
|
| 12 |
+
|
| 13 |
const API_URL = 'https://openrouter.ai/api/v1/models';
|
| 14 |
|
| 15 |
// OpenRouter stores per-token prices; multiply by 1e6 to get per-1M price.
|
| 16 |
const toPerMillion = (val) => (val ? parseFloat(val) * 1_000_000 : 0);
|
| 17 |
|
| 18 |
+
function loadApiKey() {
|
| 19 |
+
return process.env.OPENROUTER_API_KEY || null;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
const getSizeB = (id) => {
|
| 23 |
const match = (id || '').match(/[^.\d](\d+)b/i) || (id || '').match(/^(\d+)b/i);
|
| 24 |
return match ? parseInt(match[1]) : undefined;
|
|
|
|
| 54 |
}
|
| 55 |
|
| 56 |
async function fetchOpenRouter() {
|
| 57 |
+
const apiKey = loadApiKey();
|
| 58 |
+
const headers = {
|
| 59 |
+
Accept: 'application/json',
|
| 60 |
+
'HTTP-Referer': 'https://github.com/providers-comparison',
|
| 61 |
+
};
|
| 62 |
+
if (apiKey) headers['Authorization'] = `Bearer ${apiKey}`;
|
| 63 |
+
|
| 64 |
+
const response = await fetch(API_URL, { headers });
|
| 65 |
|
| 66 |
if (!response.ok) {
|
| 67 |
throw new Error(`HTTP ${response.status} from OpenRouter API`);
|
|
|
|
| 74 |
const pricing = model.pricing || {};
|
| 75 |
const inputPrice = toPerMillion(pricing.prompt);
|
| 76 |
const outputPrice = toPerMillion(pricing.completion);
|
| 77 |
+
// pricing.image: per-image cost for image-gen models (e.g. FLUX) — in USD per image
|
| 78 |
+
// (NOT the same as per-pixel input cost on vision models like Gemini, which also have prompt price set)
|
| 79 |
+
const imagePrice = parseFloat(pricing.image || '0');
|
| 80 |
|
| 81 |
+
// Skip meta-routes with sentinel negative prices (e.g. openrouter/auto)
|
| 82 |
if (inputPrice < 0 || outputPrice < 0) continue;
|
| 83 |
+
// Skip the free-router meta-model
|
| 84 |
if (model.id === 'openrouter/free') continue;
|
| 85 |
+
// Skip models with genuinely zero pricing across all fields (unpriced/placeholder entries).
|
| 86 |
+
// Exception: models with a :free suffix are real free models and should be kept.
|
| 87 |
+
if (inputPrice === 0 && outputPrice === 0 && imagePrice === 0 && !model.id.endsWith(':free')) continue;
|
| 88 |
|
| 89 |
const type = getModelType(model.architecture);
|
| 90 |
const capabilities = getCapabilities(model.architecture, model.supported_parameters);
|
|
|
|
| 97 |
currency: 'USD',
|
| 98 |
};
|
| 99 |
|
| 100 |
+
// For pure image-gen models (no per-token pricing), store the per-image price
|
| 101 |
+
if (imagePrice > 0 && inputPrice === 0 && outputPrice === 0) {
|
| 102 |
+
modelEntry.price_per_image = Math.round(imagePrice * 100000) / 100000;
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
if (capabilities.length) modelEntry.capabilities = capabilities;
|
| 106 |
const size_b = getSizeB(model.id);
|
| 107 |
if (size_b) modelEntry.size_b = size_b;
|
|
|
|
| 126 |
if (require.main === module) {
|
| 127 |
fetchOpenRouter()
|
| 128 |
.then((models) => {
|
| 129 |
+
const apiKey = loadApiKey();
|
| 130 |
+
const free = models.filter(m => m.input_price_per_1m === 0 && !m.price_per_image);
|
| 131 |
const vision = models.filter(m => m.type === 'vision');
|
| 132 |
+
const imageGen = models.filter(m => m.type === 'image');
|
| 133 |
+
console.log(`Fetched ${models.length} models from OpenRouter API ${apiKey ? '(authenticated)' : '(public – set OPENROUTER_API_KEY for more models)'}`);
|
| 134 |
+
console.log(` Free: ${free.length}, Vision: ${vision.length}, Image-gen: ${imageGen.length}`);
|
| 135 |
console.log('\nFirst 5 paid:');
|
| 136 |
models.filter(m => m.input_price_per_1m > 0).slice(0, 5).forEach((m) =>
|
| 137 |
console.log(` ${m.name.padEnd(55)} $${m.input_price_per_1m} / $${m.output_price_per_1m} [${m.type}] ${(m.capabilities||[]).join(',')}`)
|
scripts/providers/requesty.js
CHANGED
|
@@ -1,17 +1,12 @@
|
|
| 1 |
'use strict';
|
| 2 |
|
| 3 |
-
const
|
| 4 |
-
|
| 5 |
|
| 6 |
const API_URL = 'https://router.requesty.ai/v1/models';
|
| 7 |
|
| 8 |
-
// Load API key from ../AIToolkit/.env relative to the project root
|
| 9 |
function loadApiKey() {
|
| 10 |
-
|
| 11 |
-
if (!fs.existsSync(envPath)) return null;
|
| 12 |
-
const content = fs.readFileSync(envPath, 'utf8');
|
| 13 |
-
const match = content.match(/^REQUESTY_API_KEY=(.+)$/m);
|
| 14 |
-
return match ? match[1].trim() : null;
|
| 15 |
}
|
| 16 |
|
| 17 |
const toPerMillion = (val) => (val ? Math.round(parseFloat(val) * 1_000_000 * 10000) / 10000 : 0);
|
|
@@ -74,10 +69,30 @@ async function fetchRequesty() {
|
|
| 74 |
models.push(modelEntry);
|
| 75 |
}
|
| 76 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
// Sort by input price
|
| 78 |
-
|
| 79 |
|
| 80 |
-
return
|
| 81 |
}
|
| 82 |
|
| 83 |
module.exports = { fetchRequesty, providerName: 'Requesty' };
|
|
|
|
| 1 |
'use strict';
|
| 2 |
|
| 3 |
+
const { loadEnv } = require('../load-env');
|
| 4 |
+
loadEnv();
|
| 5 |
|
| 6 |
const API_URL = 'https://router.requesty.ai/v1/models';
|
| 7 |
|
|
|
|
| 8 |
function loadApiKey() {
|
| 9 |
+
return process.env.REQUESTY_API_KEY || null;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
}
|
| 11 |
|
| 12 |
const toPerMillion = (val) => (val ? Math.round(parseFloat(val) * 1_000_000 * 10000) / 10000 : 0);
|
|
|
|
| 69 |
models.push(modelEntry);
|
| 70 |
}
|
| 71 |
|
| 72 |
+
// Deduplicate @region and :effort variants — keep one entry per canonical base ID.
|
| 73 |
+
// e.g. "anthropic/claude-3-7-sonnet@us-east-2" and "anthropic/claude-3-7-sonnet:high"
|
| 74 |
+
// both collapse to "anthropic/claude-3-7-sonnet".
|
| 75 |
+
const canonicalId = (id) => id.replace(/@[^/]+$/, '').replace(/:[^/]+$/, '');
|
| 76 |
+
const seen = new Map();
|
| 77 |
+
for (const model of models) {
|
| 78 |
+
const base = canonicalId(model.name);
|
| 79 |
+
if (!seen.has(base)) {
|
| 80 |
+
// Store with canonical name
|
| 81 |
+
seen.set(base, { ...model, name: base });
|
| 82 |
+
} else {
|
| 83 |
+
// Prefer lower input price if already present
|
| 84 |
+
const existing = seen.get(base);
|
| 85 |
+
if (model.input_price_per_1m < existing.input_price_per_1m) {
|
| 86 |
+
seen.set(base, { ...model, name: base });
|
| 87 |
+
}
|
| 88 |
+
}
|
| 89 |
+
}
|
| 90 |
+
const deduped = [...seen.values()];
|
| 91 |
+
|
| 92 |
// Sort by input price
|
| 93 |
+
deduped.sort((a, b) => a.input_price_per_1m - b.input_price_per_1m);
|
| 94 |
|
| 95 |
+
return deduped;
|
| 96 |
}
|
| 97 |
|
| 98 |
module.exports = { fetchRequesty, providerName: 'Requesty' };
|
server.js
CHANGED
|
@@ -22,9 +22,12 @@ const BENCHMARKS_FILE = path.join(__dirname, 'data', 'benchmarks.json');
|
|
| 22 |
const SCRIPTS_DIR = path.join(__dirname, 'scripts', 'providers');
|
| 23 |
const BENCHMARKS_SCRIPT = path.join(__dirname, 'scripts', 'fetch-benchmarks.js');
|
| 24 |
|
| 25 |
-
// In-memory state: which providers are currently being refreshed
|
| 26 |
const refreshing = new Set();
|
| 27 |
|
|
|
|
|
|
|
|
|
|
| 28 |
// Allow cross-origin requests from the Vite dev server
|
| 29 |
app.use((req, res, next) => {
|
| 30 |
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
@@ -69,15 +72,20 @@ app.get('/api/status', (req, res) => {
|
|
| 69 |
};
|
| 70 |
});
|
| 71 |
|
| 72 |
-
// Include benchmark dataset info
|
| 73 |
let benchmarks = null;
|
| 74 |
if (fs.existsSync(BENCHMARKS_FILE)) {
|
| 75 |
try {
|
| 76 |
const bm = JSON.parse(fs.readFileSync(BENCHMARKS_FILE, 'utf8'));
|
|
|
|
| 77 |
benchmarks = {
|
| 78 |
entryCount: Array.isArray(bm) ? bm.length : (bm.entries?.length ?? 0),
|
| 79 |
-
lastUpdated:
|
| 80 |
refreshing: refreshing.has('__benchmarks__'),
|
|
|
|
|
|
|
|
|
|
|
|
|
| 81 |
};
|
| 82 |
} catch { /* ignore */ }
|
| 83 |
}
|
|
@@ -131,8 +139,31 @@ function runFetcher(providerName, scriptKey) {
|
|
| 131 |
}
|
| 132 |
|
| 133 |
// ------------------------------------------------------------------
|
| 134 |
-
// POST /api/fetch/benchmarks
|
|
|
|
| 135 |
// ------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
app.post('/api/fetch/benchmarks', async (req, res) => {
|
| 137 |
if (refreshing.has('__benchmarks__')) {
|
| 138 |
return res.json({ success: false, error: 'Already refreshing' });
|
|
@@ -141,19 +172,10 @@ app.post('/api/fetch/benchmarks', async (req, res) => {
|
|
| 141 |
execFile(
|
| 142 |
process.execPath,
|
| 143 |
[BENCHMARKS_SCRIPT],
|
| 144 |
-
{ cwd: __dirname, timeout:
|
| 145 |
(err, stdout, stderr) => {
|
| 146 |
refreshing.delete('__benchmarks__');
|
| 147 |
-
|
| 148 |
-
try {
|
| 149 |
-
const bm = JSON.parse(fs.readFileSync(BENCHMARKS_FILE, 'utf8'));
|
| 150 |
-
const arr = Array.isArray(bm) ? bm : (bm.entries ?? bm);
|
| 151 |
-
fs.writeFileSync(BENCHMARKS_FILE, JSON.stringify(
|
| 152 |
-
Array.isArray(bm) ? arr : Object.assign(bm, { lastUpdated: new Date().toISOString() }),
|
| 153 |
-
null, 2
|
| 154 |
-
));
|
| 155 |
-
} catch { /* best effort */ }
|
| 156 |
-
if (err) res.json({ success: false, error: err.message });
|
| 157 |
else res.json({ success: true });
|
| 158 |
}
|
| 159 |
);
|
|
|
|
| 22 |
const SCRIPTS_DIR = path.join(__dirname, 'scripts', 'providers');
|
| 23 |
const BENCHMARKS_SCRIPT = path.join(__dirname, 'scripts', 'fetch-benchmarks.js');
|
| 24 |
|
| 25 |
+
// In-memory state: which providers/benchmark sources are currently being refreshed
|
| 26 |
const refreshing = new Set();
|
| 27 |
|
| 28 |
+
// Valid benchmark source keys (must match fetch-benchmarks.js SOURCE_FIELDS keys)
|
| 29 |
+
const BENCHMARK_SOURCES = ['llmstats', 'hf', 'livebench', 'arena', 'aider'];
|
| 30 |
+
|
| 31 |
// Allow cross-origin requests from the Vite dev server
|
| 32 |
app.use((req, res, next) => {
|
| 33 |
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
|
|
| 72 |
};
|
| 73 |
});
|
| 74 |
|
| 75 |
+
// Include benchmark dataset info (benchmarks.json is a plain array; use file mtime for lastUpdated)
|
| 76 |
let benchmarks = null;
|
| 77 |
if (fs.existsSync(BENCHMARKS_FILE)) {
|
| 78 |
try {
|
| 79 |
const bm = JSON.parse(fs.readFileSync(BENCHMARKS_FILE, 'utf8'));
|
| 80 |
+
const mtime = fs.statSync(BENCHMARKS_FILE).mtime.toISOString();
|
| 81 |
benchmarks = {
|
| 82 |
entryCount: Array.isArray(bm) ? bm.length : (bm.entries?.length ?? 0),
|
| 83 |
+
lastUpdated: mtime,
|
| 84 |
refreshing: refreshing.has('__benchmarks__'),
|
| 85 |
+
sources: BENCHMARK_SOURCES.map((key) => ({
|
| 86 |
+
key,
|
| 87 |
+
refreshing: refreshing.has(`__benchmarks__:${key}`),
|
| 88 |
+
})),
|
| 89 |
};
|
| 90 |
} catch { /* ignore */ }
|
| 91 |
}
|
|
|
|
| 139 |
}
|
| 140 |
|
| 141 |
// ------------------------------------------------------------------
|
| 142 |
+
// POST /api/fetch/benchmarks/:source (refresh one benchmark source)
|
| 143 |
+
// POST /api/fetch/benchmarks (refresh all benchmark sources)
|
| 144 |
// ------------------------------------------------------------------
|
| 145 |
+
app.post('/api/fetch/benchmarks/:source', async (req, res) => {
|
| 146 |
+
const { source } = req.params;
|
| 147 |
+
if (!BENCHMARK_SOURCES.includes(source)) {
|
| 148 |
+
return res.json({ success: false, error: `Unknown source: ${source}` });
|
| 149 |
+
}
|
| 150 |
+
const key = `__benchmarks__:${source}`;
|
| 151 |
+
if (refreshing.has(key)) {
|
| 152 |
+
return res.json({ success: false, error: 'Already refreshing' });
|
| 153 |
+
}
|
| 154 |
+
refreshing.add(key);
|
| 155 |
+
execFile(
|
| 156 |
+
process.execPath,
|
| 157 |
+
[BENCHMARKS_SCRIPT, source],
|
| 158 |
+
{ cwd: __dirname, timeout: 300000 },
|
| 159 |
+
(err, stdout, stderr) => {
|
| 160 |
+
refreshing.delete(key);
|
| 161 |
+
if (err) res.json({ success: false, error: err.message, stderr });
|
| 162 |
+
else res.json({ success: true });
|
| 163 |
+
}
|
| 164 |
+
);
|
| 165 |
+
});
|
| 166 |
+
|
| 167 |
app.post('/api/fetch/benchmarks', async (req, res) => {
|
| 168 |
if (refreshing.has('__benchmarks__')) {
|
| 169 |
return res.json({ success: false, error: 'Already refreshing' });
|
|
|
|
| 172 |
execFile(
|
| 173 |
process.execPath,
|
| 174 |
[BENCHMARKS_SCRIPT],
|
| 175 |
+
{ cwd: __dirname, timeout: 600000 },
|
| 176 |
(err, stdout, stderr) => {
|
| 177 |
refreshing.delete('__benchmarks__');
|
| 178 |
+
if (err) res.json({ success: false, error: err.message, stderr });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 179 |
else res.json({ success: true });
|
| 180 |
}
|
| 181 |
);
|
src/App.css
CHANGED
|
@@ -341,6 +341,7 @@ footer {
|
|
| 341 |
margin: 1.5rem 0 0.5rem;
|
| 342 |
}
|
| 343 |
.mgmt-provider { font-weight: 600; }
|
|
|
|
| 344 |
.mgmt-count { color: #475569; font-variant-numeric: tabular-nums; }
|
| 345 |
.mgmt-age { color: #94a3b8; font-size: 0.8rem; }
|
| 346 |
.btn-refresh {
|
|
|
|
| 341 |
margin: 1.5rem 0 0.5rem;
|
| 342 |
}
|
| 343 |
.mgmt-provider { font-weight: 600; }
|
| 344 |
+
.mgmt-source-indent { font-weight: 400; padding-left: 1.5rem; color: #64748b; }
|
| 345 |
.mgmt-count { color: #475569; font-variant-numeric: tabular-nums; }
|
| 346 |
.mgmt-age { color: #94a3b8; font-size: 0.8rem; }
|
| 347 |
.btn-refresh {
|
src/App.tsx
CHANGED
|
@@ -15,6 +15,7 @@ interface Model {
|
|
| 15 |
price_per_1m_tokens_30d?: number
|
| 16 |
currency: string
|
| 17 |
capabilities?: string[]
|
|
|
|
| 18 |
}
|
| 19 |
|
| 20 |
interface Provider {
|
|
@@ -248,7 +249,7 @@ function App() {
|
|
| 248 |
}, [searchTerm, selectedType, selectedRegion, allModels])
|
| 249 |
|
| 250 |
const getNormalizedPriceUSD = (model: Model) => {
|
| 251 |
-
const price = model.input_price_per_1m
|
| 252 |
return model.currency === 'EUR' ? price * EXCHANGE_RATE_EUR_TO_USD : price
|
| 253 |
}
|
| 254 |
|
|
@@ -464,15 +465,23 @@ function App() {
|
|
| 464 |
{model.complianceStatus}
|
| 465 |
</span>
|
| 466 |
</td>
|
| 467 |
-
<td className="model-name">{model.name}</td>
|
| 468 |
<td className="caps-cell">
|
| 469 |
{(model.capabilities || []).map(cap => (
|
| 470 |
<span key={cap} className={`cap-badge cap-${cap}`} title={cap}>{CAP_ICON[cap] ?? cap}</span>
|
| 471 |
))}
|
| 472 |
</td>
|
| 473 |
<td className="size-cell">{model.size_b ? `${model.size_b}B` : '-'}</td>
|
| 474 |
-
<td>
|
| 475 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 476 |
{showBenchmarks && (() => {
|
| 477 |
const bm = findBenchmark(model.name);
|
| 478 |
const fmt = (v?: number) => Number.isFinite(v) ? `${(v! * 100).toFixed(0)}%` : '–';
|
|
|
|
| 15 |
price_per_1m_tokens_30d?: number
|
| 16 |
currency: string
|
| 17 |
capabilities?: string[]
|
| 18 |
+
display_name?: string
|
| 19 |
}
|
| 20 |
|
| 21 |
interface Provider {
|
|
|
|
| 249 |
}, [searchTerm, selectedType, selectedRegion, allModels])
|
| 250 |
|
| 251 |
const getNormalizedPriceUSD = (model: Model) => {
|
| 252 |
+
const price = model.input_price_per_1m || model.price_per_image || model.price_per_minute || 0
|
| 253 |
return model.currency === 'EUR' ? price * EXCHANGE_RATE_EUR_TO_USD : price
|
| 254 |
}
|
| 255 |
|
|
|
|
| 465 |
{model.complianceStatus}
|
| 466 |
</span>
|
| 467 |
</td>
|
| 468 |
+
<td className="model-name">{model.display_name ?? model.name}</td>
|
| 469 |
<td className="caps-cell">
|
| 470 |
{(model.capabilities || []).map(cap => (
|
| 471 |
<span key={cap} className={`cap-badge cap-${cap}`} title={cap}>{CAP_ICON[cap] ?? cap}</span>
|
| 472 |
))}
|
| 473 |
</td>
|
| 474 |
<td className="size-cell">{model.size_b ? `${model.size_b}B` : '-'}</td>
|
| 475 |
+
<td>
|
| 476 |
+
{model.price_per_image !== undefined && !model.input_price_per_1m
|
| 477 |
+
? `$${model.price_per_image}/MP`
|
| 478 |
+
: formatPrice(model.input_price_per_1m, model.currency)}
|
| 479 |
+
</td>
|
| 480 |
+
<td>
|
| 481 |
+
{model.price_per_image !== undefined && !model.output_price_per_1m
|
| 482 |
+
? '–'
|
| 483 |
+
: formatPrice(model.output_price_per_1m, model.currency)}
|
| 484 |
+
</td>
|
| 485 |
{showBenchmarks && (() => {
|
| 486 |
const bm = findBenchmark(model.name);
|
| 487 |
const fmt = (v?: number) => Number.isFinite(v) ? `${(v! * 100).toFixed(0)}%` : '–';
|
src/components/ManagementPanel.tsx
CHANGED
|
@@ -9,10 +9,24 @@ interface ProviderStatus {
|
|
| 9 |
refreshing: boolean
|
| 10 |
}
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
interface BenchmarkStatus {
|
| 13 |
entryCount: number
|
| 14 |
lastUpdated: string | null
|
| 15 |
refreshing: boolean
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
}
|
| 17 |
|
| 18 |
interface FetchResult {
|
|
@@ -45,6 +59,8 @@ export function ManagementPanel({ onClose, onDataUpdated }: Props) {
|
|
| 45 |
const [error, setError] = useState<string | null>(null)
|
| 46 |
const [results, setResults] = useState<Record<string, { success: boolean; error?: string }>>({})
|
| 47 |
const [bmResult, setBmResult] = useState<{ success: boolean; error?: string } | null>(null)
|
|
|
|
|
|
|
| 48 |
const [refreshingAll, setRefreshingAll] = useState(false)
|
| 49 |
const [serverAvailable, setServerAvailable] = useState(true)
|
| 50 |
|
|
@@ -101,6 +117,21 @@ export function ManagementPanel({ onClose, onDataUpdated }: Props) {
|
|
| 101 |
await fetchStatus()
|
| 102 |
}
|
| 103 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 104 |
const refreshAll = async () => {
|
| 105 |
setRefreshingAll(true)
|
| 106 |
setResults({})
|
|
@@ -205,7 +236,7 @@ export function ManagementPanel({ onClose, onDataUpdated }: Props) {
|
|
| 205 |
<table className="management-table">
|
| 206 |
<thead>
|
| 207 |
<tr>
|
| 208 |
-
<th>
|
| 209 |
<th>Entries</th>
|
| 210 |
<th>Last updated</th>
|
| 211 |
<th>Status</th>
|
|
@@ -213,8 +244,9 @@ export function ManagementPanel({ onClose, onDataUpdated }: Props) {
|
|
| 213 |
</tr>
|
| 214 |
</thead>
|
| 215 |
<tbody>
|
|
|
|
| 216 |
<tr>
|
| 217 |
-
<td className="mgmt-provider">
|
| 218 |
<td className="mgmt-count">{benchmarks.entryCount.toLocaleString()}</td>
|
| 219 |
<td className="mgmt-age">{formatAge(benchmarks.lastUpdated)}</td>
|
| 220 |
<td className="mgmt-status">
|
|
@@ -238,6 +270,38 @@ export function ManagementPanel({ onClose, onDataUpdated }: Props) {
|
|
| 238 |
</button>
|
| 239 |
</td>
|
| 240 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 241 |
</tbody>
|
| 242 |
</table>
|
| 243 |
</>
|
|
|
|
| 9 |
refreshing: boolean
|
| 10 |
}
|
| 11 |
|
| 12 |
+
interface BenchmarkSourceStatus {
|
| 13 |
+
key: string
|
| 14 |
+
refreshing: boolean
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
interface BenchmarkStatus {
|
| 18 |
entryCount: number
|
| 19 |
lastUpdated: string | null
|
| 20 |
refreshing: boolean
|
| 21 |
+
sources?: BenchmarkSourceStatus[]
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
const BENCHMARK_SOURCE_NAMES: Record<string, string> = {
|
| 25 |
+
llmstats: 'LLMStats',
|
| 26 |
+
hf: 'HF Leaderboard',
|
| 27 |
+
livebench: 'LiveBench',
|
| 28 |
+
arena: 'Chatbot Arena',
|
| 29 |
+
aider: 'Aider',
|
| 30 |
}
|
| 31 |
|
| 32 |
interface FetchResult {
|
|
|
|
| 59 |
const [error, setError] = useState<string | null>(null)
|
| 60 |
const [results, setResults] = useState<Record<string, { success: boolean; error?: string }>>({})
|
| 61 |
const [bmResult, setBmResult] = useState<{ success: boolean; error?: string } | null>(null)
|
| 62 |
+
const [bmSourceResults, setBmSourceResults] = useState<Record<string, { success: boolean; error?: string }>>({})
|
| 63 |
+
const [refreshingBmSource, setRefreshingBmSource] = useState<Record<string, boolean>>({})
|
| 64 |
const [refreshingAll, setRefreshingAll] = useState(false)
|
| 65 |
const [serverAvailable, setServerAvailable] = useState(true)
|
| 66 |
|
|
|
|
| 117 |
await fetchStatus()
|
| 118 |
}
|
| 119 |
|
| 120 |
+
const refreshBenchmarkSource = async (source: string) => {
|
| 121 |
+
setRefreshingBmSource((s) => ({ ...s, [source]: true }))
|
| 122 |
+
setBmSourceResults((r) => ({ ...r, [source]: { success: false } }))
|
| 123 |
+
try {
|
| 124 |
+
const res = await fetch(`/api/fetch/benchmarks/${source}`, { method: 'POST' })
|
| 125 |
+
const data = await res.json()
|
| 126 |
+
setBmSourceResults((r) => ({ ...r, [source]: { success: data.success, error: data.error } }))
|
| 127 |
+
if (data.success) onDataUpdated()
|
| 128 |
+
} catch {
|
| 129 |
+
setBmSourceResults((r) => ({ ...r, [source]: { success: false, error: 'Request failed' } }))
|
| 130 |
+
}
|
| 131 |
+
setRefreshingBmSource((s) => ({ ...s, [source]: false }))
|
| 132 |
+
await fetchStatus()
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
const refreshAll = async () => {
|
| 136 |
setRefreshingAll(true)
|
| 137 |
setResults({})
|
|
|
|
| 236 |
<table className="management-table">
|
| 237 |
<thead>
|
| 238 |
<tr>
|
| 239 |
+
<th>Source</th>
|
| 240 |
<th>Entries</th>
|
| 241 |
<th>Last updated</th>
|
| 242 |
<th>Status</th>
|
|
|
|
| 244 |
</tr>
|
| 245 |
</thead>
|
| 246 |
<tbody>
|
| 247 |
+
{/* All-sources row */}
|
| 248 |
<tr>
|
| 249 |
+
<td className="mgmt-provider">All sources</td>
|
| 250 |
<td className="mgmt-count">{benchmarks.entryCount.toLocaleString()}</td>
|
| 251 |
<td className="mgmt-age">{formatAge(benchmarks.lastUpdated)}</td>
|
| 252 |
<td className="mgmt-status">
|
|
|
|
| 270 |
</button>
|
| 271 |
</td>
|
| 272 |
</tr>
|
| 273 |
+
{/* Per-source rows */}
|
| 274 |
+
{(benchmarks.sources ?? []).map((src) => {
|
| 275 |
+
const result = bmSourceResults[src.key]
|
| 276 |
+
const isRefreshing = src.refreshing || refreshingBmSource[src.key]
|
| 277 |
+
return (
|
| 278 |
+
<tr key={src.key}>
|
| 279 |
+
<td className="mgmt-provider mgmt-source-indent">
|
| 280 |
+
{BENCHMARK_SOURCE_NAMES[src.key] ?? src.key}
|
| 281 |
+
</td>
|
| 282 |
+
<td className="mgmt-count"></td>
|
| 283 |
+
<td className="mgmt-age"></td>
|
| 284 |
+
<td className="mgmt-status">
|
| 285 |
+
{result ? (
|
| 286 |
+
result.success ? (
|
| 287 |
+
<span className="badge-ok">✓ updated</span>
|
| 288 |
+
) : (
|
| 289 |
+
<span className="badge-err" title={result.error}>✗ failed</span>
|
| 290 |
+
)
|
| 291 |
+
) : null}
|
| 292 |
+
</td>
|
| 293 |
+
<td>
|
| 294 |
+
<button
|
| 295 |
+
className="btn-refresh"
|
| 296 |
+
onClick={() => refreshBenchmarkSource(src.key)}
|
| 297 |
+
disabled={isRefreshing}
|
| 298 |
+
>
|
| 299 |
+
{isRefreshing ? '⟳' : '↻'}
|
| 300 |
+
</button>
|
| 301 |
+
</td>
|
| 302 |
+
</tr>
|
| 303 |
+
)
|
| 304 |
+
})}
|
| 305 |
</tbody>
|
| 306 |
</table>
|
| 307 |
</>
|
vercel.json
CHANGED
|
@@ -4,6 +4,6 @@
|
|
| 4 |
"installCommand": "npm install",
|
| 5 |
"framework": "vite",
|
| 6 |
"rewrites": [
|
| 7 |
-
{ "source": "/(.*)", "destination": "/index.html" }
|
| 8 |
]
|
| 9 |
}
|
|
|
|
| 4 |
"installCommand": "npm install",
|
| 5 |
"framework": "vite",
|
| 6 |
"rewrites": [
|
| 7 |
+
{ "source": "/((?!api/).*)", "destination": "/index.html" }
|
| 8 |
]
|
| 9 |
}
|