llm.rb 16.0.0.pre.8 → 16.0.0.pre.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +69 -43
- data/data/bedrock.json +255 -0
- data/data/deepinfra.json +9 -3
- data/data/deepseek.json +4 -4
- data/data/moonshot.json +0 -3
- data/data/openai.json +323 -0
- data/data/openrouter.json +162 -61
- data/data/xai.json +27 -0
- data/docs/deepdive/advanced/cancellation.md +16 -11
- data/lib/llm/error.rb +14 -0
- data/lib/llm/function/async/task.rb +38 -29
- data/lib/llm/function/fiber/task.rb +61 -37
- data/lib/llm/function/fork/task.rb +88 -6
- data/lib/llm/function/ractor/task.rb +28 -1
- data/lib/llm/function/thread/task.rb +73 -30
- data/lib/llm/function/window.rb +160 -14
- data/lib/llm/provider.rb +1 -1
- data/lib/llm/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 05acffd1b6e5349176d0f54466c43f26d7918aa7132de40f99b57ccce25c1bf4
|
|
4
|
+
data.tar.gz: 0cd1c8e985a857b207e8024d7fa65c84bd5ae3de742f11bf761683542d8eb637
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: db1d654420ee79781bcb296b0b975005b38199d7c0fabd0d83dbbe6392648bd6c3c6f41b701132ddbb4ae1b87289e9edce12b4c588b1c79736275944b4c4d279
|
|
7
|
+
data.tar.gz: b71bd520cdf43918b5223dd6a78985f174cbb07dd3f8b03b1d62ee4f4b2a178e39b0af4b4157d4db6d9f038b8418b330363b8c81b226125d30993ca9d090bf3b
|
data/CHANGELOG.md
CHANGED
|
@@ -27,7 +27,7 @@ Releases before v15 are kept in [changelog/old.md](changelog/old.md).
|
|
|
27
27
|
| Ruby 3.3 or later | Ruby 3.4 or later |
|
|
28
28
|
| `record.messages` returns the messages the runtime holds | a `:jsonb` record returns a relation of `LLM::ActiveRecord::Message` rows |
|
|
29
29
|
| a `set_tracer` method on an ORM model | `set tracer:` in the block, or `tracer:` on the wrapper |
|
|
30
|
-
| a `:thread
|
|
30
|
+
| a pre-start cancel is dropped on `:thread`, `:fiber`, and `:async`, a `NoMethodError` on `:fork`, and says nothing on `:ractor` | the cancel is held, and delivered inside the tool's call |
|
|
31
31
|
| a cancel that arrives between two requests does nothing | the turn ends there, and the caller sees `LLM::Interrupt` |
|
|
32
32
|
| a bare `rescue`, or `rescue => ex`, catches a cancel | `LLM::Interrupt` is outside `StandardError`, so both forms pass it through |
|
|
33
33
|
|
|
@@ -43,12 +43,16 @@ Releases before v15 are kept in [changelog/old.md](changelog/old.md).
|
|
|
43
43
|
that again with `#messages!`, and order the relation by `position`
|
|
44
44
|
because it is unordered.
|
|
45
45
|
|
|
46
|
-
* **function: hold a cancel
|
|
47
|
-
A cancel that arrived before the tool started used to be dropped
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
* **function: hold a cancel that arrives before the tool starts** <br>
|
|
47
|
+
A cancel that arrived before the tool started used to be lost: dropped on
|
|
48
|
+
`:thread`, `:fiber`, and `:async`, a `NoMethodError` on a `:fork` task that
|
|
49
|
+
had not been spawned, and nothing at all on `:ractor`. It is now held until
|
|
50
|
+
the call opens and delivered inside it, so the tool is entered, its own
|
|
51
|
+
`rescue` sees the interrupt, and a caller that cancelled a task it had not
|
|
52
|
+
yet spawned is answered with the cancel rather than a return. On `:async`
|
|
53
|
+
and `:fiber` the raise is asked of the scheduler rather than issued, so a
|
|
54
|
+
tool that never yields still answers, and that caller sees a return with the
|
|
55
|
+
tool told it was asked about.
|
|
52
56
|
|
|
53
57
|
* **interrupt: reach a turn that is between its requests** <br>
|
|
54
58
|
A cancel that arrived between two requests used to do nothing, because
|
|
@@ -110,42 +114,50 @@ Releases before v15 are kept in [changelog/old.md](changelog/old.md).
|
|
|
110
114
|
### Function
|
|
111
115
|
|
|
112
116
|
* **function: deliver an interrupt to the tool, not to whatever is running** <br>
|
|
113
|
-
A cancel now
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
is a no-op instead of throwing the result away. Applies to `:fork` and
|
|
118
|
-
`:ractor`.
|
|
119
|
-
|
|
120
|
-
* **function: answer a ractor-backed task once its ractor has gone** <br>
|
|
121
|
-
A `:ractor` tool's result is now held by the task instead of asked of the
|
|
122
|
-
ractor that ran it, so a late wait is answered, a second wait comes from
|
|
123
|
-
memory, and a cancel returns `nil` instead of raising. A group's cancel now
|
|
124
|
-
reaches every task, not just the ones still running.
|
|
125
|
-
|
|
126
|
-
* **function: tell an `:async` tool it was cancelled** <br>
|
|
127
|
-
A cancel now raises `LLM::Interrupt` on the fiber the tool runs in, so the
|
|
128
|
-
tool is told and can clean up. Before, the cancel was queued and the tool
|
|
129
|
-
kept running, its result written to a queue nobody read.
|
|
130
|
-
|
|
131
|
-
* **function: run the interrupt hook on every strategy** <br>
|
|
132
|
-
A tool that implements
|
|
117
|
+
A cancel is now aimed at the tool on every concurrency strategy. A running
|
|
118
|
+
tool is entered and
|
|
119
|
+
[`LLM::Interrupt`](https://r.uby.dev/api-docs/llm.rb/LLM/Interrupt.html) raised
|
|
120
|
+
inside it, so its own `rescue` and its
|
|
133
121
|
[`LLM::Tool#on_interrupt`](https://r.uby.dev/api-docs/llm.rb/LLM/Tool.html#on_interrupt-instance_method)
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
122
|
+
hook see it, whether the tool was given as an instance or a class. A cancel
|
|
123
|
+
that arrives before the tool starts is held and delivered inside the call, and
|
|
124
|
+
one that arrives after the tool returns is a no-op that leaves the result
|
|
125
|
+
alone. Before, the raise landed wherever the target thread or fiber had got
|
|
126
|
+
to, and a tool's hook ran on some strategies but not others. A pre-start
|
|
127
|
+
cancel was dropped on `:thread`, `:fiber`, and `:async`, was a `NoMethodError`
|
|
128
|
+
on `:fork`, and said nothing on `:ractor`. Three strategies keep a shape of
|
|
129
|
+
their own: `:fiber` and `:async` ask the fiber scheduler for the raise, so a
|
|
130
|
+
tool that never yields is one it cannot reach, and `:sequential` runs the tool
|
|
131
|
+
in the caller's own thread, so it tells the tool through its hook alone.
|
|
142
132
|
|
|
143
133
|
* **function: answer a task that has already answered** <br>
|
|
144
|
-
A second `#wait`
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
134
|
+
A second `#wait` is answered from what the first one took, which is what
|
|
135
|
+
`Thread#value` does, so a task that has answered answers again. That covers an
|
|
136
|
+
`:async` queue the first wait drained, a `:fork` channel the task closed, and
|
|
137
|
+
a `:ractor` whose result is held by a ractor of the task's own rather than
|
|
138
|
+
asked of the ractor that ran the tool and has gone. A group's cancel reaches
|
|
139
|
+
every task it holds, and an interrupt re-raises the same exception rather than
|
|
140
|
+
blocking. Before, a second wait blocked on a queue nothing would fill, or read
|
|
141
|
+
a channel or ractor that had already closed.
|
|
142
|
+
|
|
143
|
+
* **function: answer a forked call that ended without a result** <br>
|
|
144
|
+
A `:fork` tool that died before it wrote anything used to leave
|
|
145
|
+
[`LLM::Function::Fork::Task#wait`](https://r.uby.dev/api-docs/llm.rb/LLM/Function/Fork/Task.html#wait-instance_method)
|
|
146
|
+
blocked on a read that never ended, because this side still held the write
|
|
147
|
+
end of the same channel and so never saw end of file. Each side now closes
|
|
148
|
+
the end it does not use, which makes that ending an `EOFError`, and `#wait`
|
|
149
|
+
answers it in band rather than raising into the turn, the way the runtime
|
|
150
|
+
answers a tool that raised: `{error: true, type: "EOFError", message: "the
|
|
151
|
+
tool exited unexpectedly"}`. A second wait is given the same return.
|
|
152
|
+
|
|
153
|
+
* **function: refuse a `:fiber` scheduler that cannot hold a cancel** <br>
|
|
154
|
+
The `:fiber` strategy now raises
|
|
155
|
+
[`LLM::FiberError`](https://r.uby.dev/api-docs/llm.rb/LLM/FiberError.html) when
|
|
156
|
+
`Fiber.scheduler` does not implement `fiber_interrupt`, because a cancel that
|
|
157
|
+
arrives before the call is held by asking the scheduler for a raise at the
|
|
158
|
+
call's first instruction. A scheduler that cannot be asked would be sent the
|
|
159
|
+
cancel before the call instead, where the tool never runs, so the strategy
|
|
160
|
+
refuses in the caller's hands, before a fiber is scheduled at all.
|
|
149
161
|
|
|
150
162
|
### ORM
|
|
151
163
|
|
|
@@ -181,12 +193,26 @@ Releases before v15 are kept in [changelog/old.md](changelog/old.md).
|
|
|
181
193
|
because DeepSeek has no Files API, and a non-image local file raises because
|
|
182
194
|
its models read images only.
|
|
183
195
|
|
|
196
|
+
* **provider: keep a scoped header alive through garbage collection** <br>
|
|
197
|
+
Fix a bug where a header set by
|
|
198
|
+
[`LLM::Provider#with`](https://r.uby.dev/api-docs/llm.rb/LLM/Provider.html#with-instance_method)
|
|
199
|
+
could be collected before its block returned, so a garbage collection inside
|
|
200
|
+
the block was enough to make a request later in the same scope go out without
|
|
201
|
+
it. The store held the header hash weakly. It now holds it for as long as the
|
|
202
|
+
provider is alive, so a scoped header lasts as long as the scope does.
|
|
203
|
+
|
|
184
204
|
### Registry
|
|
185
205
|
|
|
186
206
|
* **refresh model metadata** <br>
|
|
187
|
-
Update `data/` with current listings, limits, and pricing.
|
|
188
|
-
|
|
189
|
-
|
|
207
|
+
Update `data/` with current listings, limits, and pricing. Anthropic adds
|
|
208
|
+
Claude Sonnet 5.5, OpenAI adds GPT-6.1 Sol and the Daybreak Blue and Daybreak
|
|
209
|
+
Red models, Bedrock adds Claude Sonnet 5.5, GPT-6 Sol, GPT-6 Luna, and GPT-6.1
|
|
210
|
+
Sol across regions plus Grok 4.7 in the global and US regions, Alibaba adds
|
|
211
|
+
the Qwen3.5, Qwen3.7, and Qwen3.8 Flash models, DeepInfra adds the Xiaomi
|
|
212
|
+
MiMo V2.6 models and `tencent/Hy4-preview`, xAI adds Grok Imagine Video 1.5
|
|
213
|
+
Lite, and OpenRouter adds ten models. OpenRouter drops six entries, Mistral
|
|
214
|
+
drops `magistral-small`, and Google, DeepSeek, Moonshot, and Z.ai correct
|
|
215
|
+
limits and prices.
|
|
190
216
|
|
|
191
217
|
### Schema
|
|
192
218
|
|
data/data/bedrock.json
CHANGED
|
@@ -371,6 +371,23 @@
|
|
|
371
371
|
"input": 922000,
|
|
372
372
|
"output": 128000
|
|
373
373
|
},
|
|
374
|
+
"experimental": {
|
|
375
|
+
"modes": {
|
|
376
|
+
"ultrafast": {
|
|
377
|
+
"cost": {
|
|
378
|
+
"input": 60,
|
|
379
|
+
"output": 300,
|
|
380
|
+
"cache_read": 6,
|
|
381
|
+
"cache_write": 75
|
|
382
|
+
},
|
|
383
|
+
"provider": {
|
|
384
|
+
"body": {
|
|
385
|
+
"service_tier": "ultrafast"
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
},
|
|
374
391
|
"cost": {
|
|
375
392
|
"input": 10,
|
|
376
393
|
"output": 50,
|
|
@@ -397,6 +414,72 @@
|
|
|
397
414
|
},
|
|
398
415
|
"canonical_model_id": "openai/gpt-6-astra"
|
|
399
416
|
},
|
|
417
|
+
"us.openai.gpt-6.1-sol": {
|
|
418
|
+
"id": "us.openai.gpt-6.1-sol",
|
|
419
|
+
"name": "GPT-6.1 Sol (US)",
|
|
420
|
+
"description": "Near-Astra performance for complex coding, computer use, and professional work at a lower cost.",
|
|
421
|
+
"family": "gpt-sol",
|
|
422
|
+
"attachment": true,
|
|
423
|
+
"reasoning": true,
|
|
424
|
+
"reasoning_options": [
|
|
425
|
+
{
|
|
426
|
+
"type": "effort",
|
|
427
|
+
"values": [
|
|
428
|
+
"low",
|
|
429
|
+
"medium",
|
|
430
|
+
"high",
|
|
431
|
+
"xhigh",
|
|
432
|
+
"max"
|
|
433
|
+
]
|
|
434
|
+
}
|
|
435
|
+
],
|
|
436
|
+
"tool_call": true,
|
|
437
|
+
"structured_output": true,
|
|
438
|
+
"temperature": false,
|
|
439
|
+
"knowledge": "2026-04-30",
|
|
440
|
+
"release_date": "2026-09-29",
|
|
441
|
+
"last_updated": "2026-09-29",
|
|
442
|
+
"modalities": {
|
|
443
|
+
"input": [
|
|
444
|
+
"text",
|
|
445
|
+
"image"
|
|
446
|
+
],
|
|
447
|
+
"output": [
|
|
448
|
+
"text"
|
|
449
|
+
]
|
|
450
|
+
},
|
|
451
|
+
"open_weights": false,
|
|
452
|
+
"limit": {
|
|
453
|
+
"context": 1050000,
|
|
454
|
+
"input": 922000,
|
|
455
|
+
"output": 128000
|
|
456
|
+
},
|
|
457
|
+
"cost": {
|
|
458
|
+
"input": 2.2,
|
|
459
|
+
"output": 11,
|
|
460
|
+
"cache_read": 0.11,
|
|
461
|
+
"cache_write": 2.75,
|
|
462
|
+
"tiers": [
|
|
463
|
+
{
|
|
464
|
+
"input": 4.4,
|
|
465
|
+
"output": 16.5,
|
|
466
|
+
"cache_read": 0.22,
|
|
467
|
+
"cache_write": 5.5,
|
|
468
|
+
"tier": {
|
|
469
|
+
"type": "context",
|
|
470
|
+
"size": 272000
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
],
|
|
474
|
+
"context_over_200k": {
|
|
475
|
+
"input": 4.4,
|
|
476
|
+
"output": 16.5,
|
|
477
|
+
"cache_read": 0.22,
|
|
478
|
+
"cache_write": 5.5
|
|
479
|
+
}
|
|
480
|
+
},
|
|
481
|
+
"canonical_model_id": "openai/gpt-6.1-sol"
|
|
482
|
+
},
|
|
400
483
|
"eu.amazon.nova-lite-v1:0": {
|
|
401
484
|
"id": "eu.amazon.nova-lite-v1:0",
|
|
402
485
|
"name": "Nova Lite (EU)",
|
|
@@ -2379,6 +2462,78 @@
|
|
|
2379
2462
|
},
|
|
2380
2463
|
"canonical_model_id": "nvidia/nemotron-nano-12b-v2-vl"
|
|
2381
2464
|
},
|
|
2465
|
+
"openai.gpt-6.1-sol": {
|
|
2466
|
+
"id": "openai.gpt-6.1-sol",
|
|
2467
|
+
"name": "GPT-6.1 Sol",
|
|
2468
|
+
"description": "Near-Astra performance for complex coding, computer use, and professional work at a lower cost.",
|
|
2469
|
+
"family": "gpt-sol",
|
|
2470
|
+
"attachment": true,
|
|
2471
|
+
"reasoning": true,
|
|
2472
|
+
"reasoning_options": [
|
|
2473
|
+
{
|
|
2474
|
+
"type": "effort",
|
|
2475
|
+
"values": [
|
|
2476
|
+
"low",
|
|
2477
|
+
"medium",
|
|
2478
|
+
"high",
|
|
2479
|
+
"xhigh",
|
|
2480
|
+
"max"
|
|
2481
|
+
]
|
|
2482
|
+
}
|
|
2483
|
+
],
|
|
2484
|
+
"tool_call": true,
|
|
2485
|
+
"structured_output": true,
|
|
2486
|
+
"temperature": false,
|
|
2487
|
+
"knowledge": "2026-04-30",
|
|
2488
|
+
"release_date": "2026-09-29",
|
|
2489
|
+
"last_updated": "2026-09-29",
|
|
2490
|
+
"modalities": {
|
|
2491
|
+
"input": [
|
|
2492
|
+
"text",
|
|
2493
|
+
"image",
|
|
2494
|
+
"pdf"
|
|
2495
|
+
],
|
|
2496
|
+
"output": [
|
|
2497
|
+
"text"
|
|
2498
|
+
]
|
|
2499
|
+
},
|
|
2500
|
+
"open_weights": false,
|
|
2501
|
+
"limit": {
|
|
2502
|
+
"context": 1050000,
|
|
2503
|
+
"input": 922000,
|
|
2504
|
+
"output": 128000
|
|
2505
|
+
},
|
|
2506
|
+
"provider": {
|
|
2507
|
+
"npm": "@ai-sdk/amazon-bedrock/mantle",
|
|
2508
|
+
"api": "https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1",
|
|
2509
|
+
"shape": "responses"
|
|
2510
|
+
},
|
|
2511
|
+
"cost": {
|
|
2512
|
+
"input": 2.2,
|
|
2513
|
+
"output": 11,
|
|
2514
|
+
"cache_read": 0.11,
|
|
2515
|
+
"cache_write": 2.75,
|
|
2516
|
+
"tiers": [
|
|
2517
|
+
{
|
|
2518
|
+
"input": 4.4,
|
|
2519
|
+
"output": 16.5,
|
|
2520
|
+
"cache_read": 0.22,
|
|
2521
|
+
"cache_write": 5.5,
|
|
2522
|
+
"tier": {
|
|
2523
|
+
"type": "context",
|
|
2524
|
+
"size": 272000
|
|
2525
|
+
}
|
|
2526
|
+
}
|
|
2527
|
+
],
|
|
2528
|
+
"context_over_200k": {
|
|
2529
|
+
"input": 4.4,
|
|
2530
|
+
"output": 16.5,
|
|
2531
|
+
"cache_read": 0.22,
|
|
2532
|
+
"cache_write": 5.5
|
|
2533
|
+
}
|
|
2534
|
+
},
|
|
2535
|
+
"canonical_model_id": "openai/gpt-6.1-sol"
|
|
2536
|
+
},
|
|
2382
2537
|
"us.amazon.nova-2-lite-v1:0": {
|
|
2383
2538
|
"id": "us.amazon.nova-2-lite-v1:0",
|
|
2384
2539
|
"name": "Nova 2 Lite (US)",
|
|
@@ -2468,6 +2623,23 @@
|
|
|
2468
2623
|
"input": 922000,
|
|
2469
2624
|
"output": 128000
|
|
2470
2625
|
},
|
|
2626
|
+
"experimental": {
|
|
2627
|
+
"modes": {
|
|
2628
|
+
"ultrafast": {
|
|
2629
|
+
"cost": {
|
|
2630
|
+
"input": 66,
|
|
2631
|
+
"output": 330,
|
|
2632
|
+
"cache_read": 6.6,
|
|
2633
|
+
"cache_write": 82.5
|
|
2634
|
+
},
|
|
2635
|
+
"provider": {
|
|
2636
|
+
"body": {
|
|
2637
|
+
"service_tier": "ultrafast"
|
|
2638
|
+
}
|
|
2639
|
+
}
|
|
2640
|
+
}
|
|
2641
|
+
}
|
|
2642
|
+
},
|
|
2471
2643
|
"cost": {
|
|
2472
2644
|
"input": 11,
|
|
2473
2645
|
"output": 55,
|
|
@@ -2567,6 +2739,72 @@
|
|
|
2567
2739
|
},
|
|
2568
2740
|
"canonical_model_id": "openai/gpt-5.6-terra"
|
|
2569
2741
|
},
|
|
2742
|
+
"global.openai.gpt-6.1-sol": {
|
|
2743
|
+
"id": "global.openai.gpt-6.1-sol",
|
|
2744
|
+
"name": "GPT-6.1 Sol (Global)",
|
|
2745
|
+
"description": "Near-Astra performance for complex coding, computer use, and professional work at a lower cost.",
|
|
2746
|
+
"family": "gpt-sol",
|
|
2747
|
+
"attachment": true,
|
|
2748
|
+
"reasoning": true,
|
|
2749
|
+
"reasoning_options": [
|
|
2750
|
+
{
|
|
2751
|
+
"type": "effort",
|
|
2752
|
+
"values": [
|
|
2753
|
+
"low",
|
|
2754
|
+
"medium",
|
|
2755
|
+
"high",
|
|
2756
|
+
"xhigh",
|
|
2757
|
+
"max"
|
|
2758
|
+
]
|
|
2759
|
+
}
|
|
2760
|
+
],
|
|
2761
|
+
"tool_call": true,
|
|
2762
|
+
"structured_output": true,
|
|
2763
|
+
"temperature": false,
|
|
2764
|
+
"knowledge": "2026-04-30",
|
|
2765
|
+
"release_date": "2026-09-29",
|
|
2766
|
+
"last_updated": "2026-09-29",
|
|
2767
|
+
"modalities": {
|
|
2768
|
+
"input": [
|
|
2769
|
+
"text",
|
|
2770
|
+
"image"
|
|
2771
|
+
],
|
|
2772
|
+
"output": [
|
|
2773
|
+
"text"
|
|
2774
|
+
]
|
|
2775
|
+
},
|
|
2776
|
+
"open_weights": false,
|
|
2777
|
+
"limit": {
|
|
2778
|
+
"context": 1050000,
|
|
2779
|
+
"input": 922000,
|
|
2780
|
+
"output": 128000
|
|
2781
|
+
},
|
|
2782
|
+
"cost": {
|
|
2783
|
+
"input": 2,
|
|
2784
|
+
"output": 10,
|
|
2785
|
+
"cache_read": 0.1,
|
|
2786
|
+
"cache_write": 2.5,
|
|
2787
|
+
"tiers": [
|
|
2788
|
+
{
|
|
2789
|
+
"input": 4,
|
|
2790
|
+
"output": 15,
|
|
2791
|
+
"cache_read": 0.2,
|
|
2792
|
+
"cache_write": 5,
|
|
2793
|
+
"tier": {
|
|
2794
|
+
"type": "context",
|
|
2795
|
+
"size": 272000
|
|
2796
|
+
}
|
|
2797
|
+
}
|
|
2798
|
+
],
|
|
2799
|
+
"context_over_200k": {
|
|
2800
|
+
"input": 4,
|
|
2801
|
+
"output": 15,
|
|
2802
|
+
"cache_read": 0.2,
|
|
2803
|
+
"cache_write": 5
|
|
2804
|
+
}
|
|
2805
|
+
},
|
|
2806
|
+
"canonical_model_id": "openai/gpt-6.1-sol"
|
|
2807
|
+
},
|
|
2570
2808
|
"anthropic.claude-opus-4-6-v1": {
|
|
2571
2809
|
"id": "anthropic.claude-opus-4-6-v1",
|
|
2572
2810
|
"name": "Claude Opus 4.6",
|
|
@@ -7092,6 +7330,23 @@
|
|
|
7092
7330
|
"input": 922000,
|
|
7093
7331
|
"output": 128000
|
|
7094
7332
|
},
|
|
7333
|
+
"experimental": {
|
|
7334
|
+
"modes": {
|
|
7335
|
+
"ultrafast": {
|
|
7336
|
+
"cost": {
|
|
7337
|
+
"input": 66,
|
|
7338
|
+
"output": 330,
|
|
7339
|
+
"cache_read": 6.6,
|
|
7340
|
+
"cache_write": 82.5
|
|
7341
|
+
},
|
|
7342
|
+
"provider": {
|
|
7343
|
+
"body": {
|
|
7344
|
+
"service_tier": "ultrafast"
|
|
7345
|
+
}
|
|
7346
|
+
}
|
|
7347
|
+
}
|
|
7348
|
+
}
|
|
7349
|
+
},
|
|
7095
7350
|
"provider": {
|
|
7096
7351
|
"npm": "@ai-sdk/amazon-bedrock/mantle",
|
|
7097
7352
|
"api": "https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1",
|
data/data/deepinfra.json
CHANGED
|
@@ -166,6 +166,7 @@
|
|
|
166
166
|
"context": 1048576,
|
|
167
167
|
"output": 16384
|
|
168
168
|
},
|
|
169
|
+
"status": "deprecated",
|
|
169
170
|
"cost": {
|
|
170
171
|
"input": 0.2,
|
|
171
172
|
"output": 0.8
|
|
@@ -541,8 +542,8 @@
|
|
|
541
542
|
"output": 32768
|
|
542
543
|
},
|
|
543
544
|
"cost": {
|
|
544
|
-
"input": 0.
|
|
545
|
-
"output": 0.
|
|
545
|
+
"input": 0.15,
|
|
546
|
+
"output": 0.4
|
|
546
547
|
},
|
|
547
548
|
"canonical_model_id": "google/gemma-4-31b-it"
|
|
548
549
|
},
|
|
@@ -615,6 +616,7 @@
|
|
|
615
616
|
"context": 131072,
|
|
616
617
|
"output": 8192
|
|
617
618
|
},
|
|
619
|
+
"status": "deprecated",
|
|
618
620
|
"cost": {
|
|
619
621
|
"input": 0.02,
|
|
620
622
|
"output": 0.1
|
|
@@ -886,7 +888,8 @@
|
|
|
886
888
|
},
|
|
887
889
|
"cost": {
|
|
888
890
|
"input": 0.1,
|
|
889
|
-
"output": 0.95
|
|
891
|
+
"output": 0.95,
|
|
892
|
+
"cache_read": 0.1
|
|
890
893
|
}
|
|
891
894
|
},
|
|
892
895
|
"Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo": {
|
|
@@ -1135,6 +1138,7 @@
|
|
|
1135
1138
|
"context": 262144,
|
|
1136
1139
|
"output": 65536
|
|
1137
1140
|
},
|
|
1141
|
+
"status": "deprecated",
|
|
1138
1142
|
"cost": {
|
|
1139
1143
|
"input": 0.29,
|
|
1140
1144
|
"output": 2.4
|
|
@@ -1793,6 +1797,7 @@
|
|
|
1793
1797
|
"context": 262144,
|
|
1794
1798
|
"output": 256000
|
|
1795
1799
|
},
|
|
1800
|
+
"status": "deprecated",
|
|
1796
1801
|
"cost": {
|
|
1797
1802
|
"input": 0.2,
|
|
1798
1803
|
"output": 1.15,
|
|
@@ -2110,6 +2115,7 @@
|
|
|
2110
2115
|
"context": 202752,
|
|
2111
2116
|
"output": 16384
|
|
2112
2117
|
},
|
|
2118
|
+
"status": "deprecated",
|
|
2113
2119
|
"cost": {
|
|
2114
2120
|
"input": 1.05,
|
|
2115
2121
|
"output": 3.5,
|
data/data/deepseek.json
CHANGED
|
@@ -153,10 +153,10 @@
|
|
|
153
153
|
"output": 393216
|
|
154
154
|
},
|
|
155
155
|
"cost": {
|
|
156
|
-
"input": 0.
|
|
157
|
-
"output":
|
|
158
|
-
"reasoning":
|
|
159
|
-
"cache_read": 0.
|
|
156
|
+
"input": 0.66,
|
|
157
|
+
"output": 1.98,
|
|
158
|
+
"reasoning": 1.98,
|
|
159
|
+
"cache_read": 0.022
|
|
160
160
|
},
|
|
161
161
|
"canonical_model_id": "deepseek/deepseek-v4-pro-0813"
|
|
162
162
|
},
|