@jaypie/mcp 0.8.144 → 0.8.146
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.
- package/dist/suites/docs/index.js +1 -1
- package/package.json +1 -1
- package/release-notes/jaypie/1.2.96.md +9 -0
- package/release-notes/jaypie/1.2.97.md +10 -0
- package/release-notes/llm/1.3.38.md +43 -0
- package/release-notes/llm/1.3.39.md +70 -0
- package/release-notes/mcp/0.8.145.md +10 -0
- package/release-notes/mcp/0.8.146.md +14 -0
- package/release-notes/testkit/1.2.68.md +10 -0
- package/skills/llm.md +25 -14
|
@@ -10,7 +10,7 @@ import { gt } from 'semver';
|
|
|
10
10
|
/**
|
|
11
11
|
* Docs Suite - Documentation services (skill, version, release_notes)
|
|
12
12
|
*/
|
|
13
|
-
const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.
|
|
13
|
+
const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.146#5d742935"
|
|
14
14
|
;
|
|
15
15
|
const __filename$1 = fileURLToPath(import.meta.url);
|
|
16
16
|
const __dirname$1 = path.dirname(__filename$1);
|
package/package.json
CHANGED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.3.38
|
|
3
|
+
date: 2026-09-04
|
|
4
|
+
summary: Catalog MODEL.ASTRA as gpt-6-astra
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- `MODEL.ASTRA` is `gpt-6-astra`, added alongside `MODEL.SOL` rather than
|
|
10
|
+
replacing it. Astra is a new-generation flagship at twice Sol's rate, so the
|
|
11
|
+
two coexist as distinct offerings and `PROVIDER.OPENAI.DEFAULT` stays on
|
|
12
|
+
`MODEL.SOL`. The catalog addition puts Astra in the live capability matrix and
|
|
13
|
+
the OpenAI hot tests.
|
|
14
|
+
- `COST` gains `gpt-6-astra` at $10.00 input / $50.00 output per million tokens
|
|
15
|
+
with $1.00 cache reads.
|
|
16
|
+
- `reasoning.effort` follows the gpt-6 ladder: `highest` reaches `max`, the rung
|
|
17
|
+
above `xhigh`, and `lowest` clamps to `low` because gpt-6 drops `minimal`. The
|
|
18
|
+
gpt-5 line is unchanged.
|
|
19
|
+
- `PROVIDER.OPENAI.MODEL_MATCH_WORDS` gains `astra`, matching how `sol`, `terra`,
|
|
20
|
+
and `luna` are carried.
|
|
21
|
+
|
|
22
|
+
- CI no longer shards Mistral. The provider's availability does not survive a
|
|
23
|
+
per-push run — a `Rate limit exceeded` 429 across all seven cells, and an
|
|
24
|
+
entitlement refusal before that — so `npm-check.yml` and `npm-deploy.yml` drop
|
|
25
|
+
the `mistral` group. Mistral models stay cataloged, priced, and adapter-tested;
|
|
26
|
+
`APP_GROUP=mistral npm run test:llm:matrix` still reaches the live cells.
|
|
27
|
+
|
|
28
|
+
- `AnthropicAdapter` now logs a warning when a response carries no text block,
|
|
29
|
+
naming the `stop_reason` and the block types actually returned. The call still
|
|
30
|
+
settles with `undefined` content, but a refusal, a thinking-only turn, and a
|
|
31
|
+
truncated one are no longer indistinguishable from each other. Tool-use turns
|
|
32
|
+
are unaffected: they legitimately carry no text.
|
|
33
|
+
|
|
34
|
+
## Testing
|
|
35
|
+
|
|
36
|
+
- `determineModelProvider` resolves the id on the existing `gpt` match word;
|
|
37
|
+
`astra` is added for the bare name.
|
|
38
|
+
- `maxOutputTokens` leaves OpenAI unset by policy: Astra's 128K ceiling is not a
|
|
39
|
+
low ceiling, and streaming requests carry no limit.
|
|
40
|
+
- The matrix takes no `MATRIX_EXPECT` entry. Astra advertises the same input
|
|
41
|
+
modalities as Sol (text and image), and Sol passes every capability cell.
|
|
42
|
+
- Deprecated `PROVIDER.OPENAI.MODEL` size tiers and the `MODEL.GPT*` aliases are
|
|
43
|
+
unchanged by policy.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.3.39
|
|
3
|
+
date: 2026-09-05
|
|
4
|
+
summary: Meta Model API provider with MODEL.MUSE_SPARK and MODEL.MUSE_SPARK_CONTRIBUTOR
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- `MetaProvider` (`PROVIDER.META`, name `meta`) calls Meta's Model API at
|
|
10
|
+
`https://api.meta.ai/v1`. The API serves the OpenAI Responses protocol, so
|
|
11
|
+
`MetaAdapter` extends `OpenAiAdapter` the way `XaiAdapter` does and inherits
|
|
12
|
+
request building, tool handling, structured output, streaming, and `input_file`
|
|
13
|
+
data URIs. `Llm` resolves the provider from the model id, the bare name
|
|
14
|
+
`meta`, or a `meta:` prefix.
|
|
15
|
+
- `MODEL.MUSE_SPARK` is `muse-spark-1.3` and `PROVIDER.META.DEFAULT`.
|
|
16
|
+
`MODEL.MUSE_SPARK_CONTRIBUTOR` is `muse-spark-1.3-contributor`: the same
|
|
17
|
+
model at roughly a tenth of the price in exchange for data use (prompts and
|
|
18
|
+
completions may train Meta models), limited to 100 RPM. The contributor tier
|
|
19
|
+
is an explicit opt-in and is never the default.
|
|
20
|
+
- `COST` prices all five Muse Spark ids: `muse-spark-1.3` and `muse-spark-1.2`
|
|
21
|
+
at $1.25 input / $4.25 output with $0.15 cache reads, the `-contributor` ids
|
|
22
|
+
at $0.10 / $0.20 with $0.002 cache reads, and `muse-spark-1.1` at the
|
|
23
|
+
standard rate. Reasoning bills as output; no write premium is published.
|
|
24
|
+
- The API key is read from `META_API_KEY`, then from `MODEL_API_KEY` (the name
|
|
25
|
+
Meta's own docs and SDK examples use), then an explicit `apiKey` option wins
|
|
26
|
+
over both. `ConfigurationError` when none resolves.
|
|
27
|
+
- `reasoning.effort` walks Meta's `minimal | low | medium | high | xhigh | max`
|
|
28
|
+
ladder. `max` is limited to the Standard-tier `muse-spark-1.3`, so `highest`
|
|
29
|
+
on the contributor id or an older release clamps to `xhigh` and logs at
|
|
30
|
+
debug. Muse Spark always reasons: `none` is rejected and never emitted.
|
|
31
|
+
`reasoning.summary: "auto"` is requested on every Muse Spark id.
|
|
32
|
+
- The `user` option is sent as `safety_identifier`, the field Meta names as the
|
|
33
|
+
successor to the deprecated `user`.
|
|
34
|
+
- A 402 from Meta is classified as a terminal billing failure (`LlmQuotaError`,
|
|
35
|
+
`reason: "billing"`) rather than retried.
|
|
36
|
+
- `PROVIDER.META.MODEL_MATCH_WORDS` is `["muse"]`. `meta` is deliberately not a
|
|
37
|
+
match word: `meta.llama-*` stays on Bedrock and `meta-llama/*` on OpenRouter.
|
|
38
|
+
- `OpenAiAdapter` gains a `protected supportsReasoningSummary(model)` hook so
|
|
39
|
+
OpenAI-compatible subclasses can request reasoning summaries for models
|
|
40
|
+
outside OpenAI's `gpt-5+` / o-series naming.
|
|
41
|
+
|
|
42
|
+
## Testing
|
|
43
|
+
|
|
44
|
+
- Unit coverage for the adapter (field renaming, reasoning summary, effort
|
|
45
|
+
ladder and the `max` gate, `prompt_cache_key`, usage with `cached_tokens` and
|
|
46
|
+
`reasoning_tokens`, 402 classification), the provider (key resolution order),
|
|
47
|
+
routing (every cataloged and priced id, the `meta:` prefix, Bedrock and
|
|
48
|
+
OpenRouter ids left alone), and constants (default never the contributor
|
|
49
|
+
tier, every Muse Spark price within the `COST` invariants).
|
|
50
|
+
- A `meta` group joins the CI capability matrix in `npm-check.yml` and
|
|
51
|
+
`npm-deploy.yml`, keyed on `CICD_META_API_KEY`.
|
|
52
|
+
- Live verification on 2026-09-05: the capability matrix passed on both
|
|
53
|
+
cataloged models. The `pdf` cell on `muse-spark-1.3` overran the 180 second
|
|
54
|
+
cell deadline on the first run and passed on a rerun, so no `MATRIX_EXPECT`
|
|
55
|
+
entry is pinned for it. Live probes confirmed `max` is accepted on
|
|
56
|
+
`muse-spark-1.3` and rejected with a 400 on the contributor tier, the
|
|
57
|
+
response echoes the literal model id, a repeat call reports `cached_tokens`,
|
|
58
|
+
and a two-turn tool call replays the reasoning item without error. Before
|
|
59
|
+
billing was configured every call returned 402 `billing_not_configured`,
|
|
60
|
+
which exercised the billing classification.
|
|
61
|
+
- `test/matrix.ts` now exits the process explicitly after a passing run. An
|
|
62
|
+
abandoned cell keeps retrying in the background, and its backoff timers and
|
|
63
|
+
open socket held the event loop open after the verdict printed.
|
|
64
|
+
- `test/matrix.ts` treats a provider refusal (`stopReason: "refusal"`) as an
|
|
65
|
+
inconclusive cell, alongside the cell deadline and an exhausted turn budget.
|
|
66
|
+
The `claude-opus-5` pdf cell refused on five of seven CI runs across two
|
|
67
|
+
branches and answered on every local run, so failing on it reported a
|
|
68
|
+
classifier flake as a missing capability. Every cell now requests the
|
|
69
|
+
exchange envelope so the stop reason is observable; the refusal still prints
|
|
70
|
+
in ISSUES.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.8.145
|
|
3
|
+
date: 2026-09-04
|
|
4
|
+
summary: Release notes for @jaypie/llm 1.3.38 and jaypie 1.2.96
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- Added release notes for `@jaypie/llm` 1.3.38 and `jaypie` 1.2.96
|
|
10
|
+
- `skills/llm.md` documents `MODEL.ASTRA` and the gpt-6 reasoning effort ladder
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.8.146
|
|
3
|
+
date: 2026-09-05
|
|
4
|
+
summary: Release notes for @jaypie/llm 1.3.39, @jaypie/testkit 1.2.68, and jaypie 1.2.97
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- Added release notes for `@jaypie/llm` 1.3.39, `@jaypie/testkit` 1.2.68, and
|
|
10
|
+
`jaypie` 1.2.97
|
|
11
|
+
- `skills/llm.md` documents the Meta provider: the `muse` match word and
|
|
12
|
+
`meta:` prefix, `MODEL.MUSE_SPARK` and `MODEL.MUSE_SPARK_CONTRIBUTOR` with the
|
|
13
|
+
contributor tier's data-use terms, `META_API_KEY` with the `MODEL_API_KEY`
|
|
14
|
+
fallback, the Meta column of the reasoning effort table, and prompt caching
|
package/skills/llm.md
CHANGED
|
@@ -32,23 +32,27 @@ the alias rather than the id it currently resolves to. Read the id off
|
|
|
32
32
|
|
|
33
33
|
| Provider | Match Keywords | Default Model (`PROVIDER.*.DEFAULT`) |
|
|
34
34
|
|----------|----------------|---------------|
|
|
35
|
-
| OpenAI | "openai", "gpt", "sol", "terra", "luna", /^o\d/ | `MODEL.SOL` |
|
|
35
|
+
| OpenAI | "openai", "gpt", "astra", "sol", "terra", "luna", /^o\d/ | `MODEL.SOL` |
|
|
36
36
|
| Anthropic | "anthropic", "claude", "fable", "haiku", "mythos", "opus", "sonnet" | `MODEL.SONNET` |
|
|
37
37
|
| Google | "google", "gemini" | `MODEL.GEMINI_FLASH` |
|
|
38
38
|
| Fireworks | "fireworks" (also matched inside ids like `accounts/fireworks/models/...`) | `MODEL.FIREWORKS.GLM` |
|
|
39
39
|
| Mistral | "mistral", "ministral", "codestral", "devstral", "magistral", "pixtral", "voxtral" | `MODEL.MISTRAL.LARGE` |
|
|
40
40
|
| OpenRouter | "openrouter" | `MODEL.OPENROUTER.SONNET` |
|
|
41
41
|
| xAI | "xai", "grok" | `MODEL.GROK` |
|
|
42
|
+
| Meta | "muse" (plus the exact name `meta` and a `meta:` prefix) | `MODEL.MUSE_SPARK` |
|
|
42
43
|
| Bedrock | "amazon.nova", "anthropic.claude", "meta.llama", "deepseek.", "google.gemma", "moonshotai.", "openai.gpt-oss", … | `MODEL.NOVA_PRO` |
|
|
43
44
|
|
|
44
45
|
The provider name for Gemini models is `"google"` — `"gemini"` is accepted as a deprecated alias.
|
|
45
46
|
|
|
46
47
|
Mistral's family names mostly do not contain the substring "mistral" (`ministral` is m-i-n-i-s-t-r-a-l; `codestral`/`devstral`/`pixtral`/`voxtral` share only the `-tral` suffix), so each family carries its own match word. Bedrock-hosted `mistral.mistral-*` ids still resolve to `bedrock`, and `mistralai/*` routes still resolve to `openrouter`; use the `mistral:` prefix to force the direct API.
|
|
47
48
|
|
|
49
|
+
"meta" is deliberately not a Meta match word: `meta.llama-*` is a Bedrock id and `meta-llama/*` an OpenRouter route. Muse Spark ids resolve on "muse"; use the `meta:` prefix to force the Meta Model API for any other id.
|
|
50
|
+
|
|
48
51
|
### Model Constants
|
|
49
52
|
|
|
50
53
|
- **`PROVIDER.<name>.DEFAULT`** — the single default model per provider (above), used when no `model` is given.
|
|
51
|
-
- **`LLM.MODEL.*`** — the named model catalog (e.g. `MODEL.SONNET`, `MODEL.SOL`, `MODEL.GEMINI_FLASH`, `MODEL.GROK`, `MODEL.NOVA_PRO`, `MODEL.NOVA_LITE`), plus three nested subtrees: `MODEL.FIREWORKS.*` for Fireworks serverless models (`DEEPSEEK`, `GLM`, `GPT_OSS`, `INKLING`, `KIMI`, `MINIMAX`, `NEMOTRON`, `QWEN`), `MODEL.MISTRAL.*` (`LARGE`, `OCR`, `SMALL`), and `MODEL.OPENROUTER.*` for provider-prefixed routes (`GLM`, `LUNA`, `SONNET`). Pick specific models from here. `MODEL.MISTRAL.OCR` serves `POST /v1/ocr` rather than chat completions: it is priced per page, carries no `COST` entry, and is reached through `MistralProvider.ocr()`. Amazon's Nova models are first-class ids served over Bedrock; Bedrock's third-party routes are not catalogued — pass the literal id (e.g. `us.anthropic.claude-sonnet-4-6`) and `determineModelProvider` resolves it to `bedrock`.
|
|
54
|
+
- **`LLM.MODEL.*`** — the named model catalog (e.g. `MODEL.SONNET`, `MODEL.ASTRA`, `MODEL.SOL`, `MODEL.GEMINI_FLASH`, `MODEL.GROK`, `MODEL.MUSE_SPARK`, `MODEL.MUSE_SPARK_CONTRIBUTOR`, `MODEL.NOVA_PRO`, `MODEL.NOVA_LITE`), plus three nested subtrees: `MODEL.FIREWORKS.*` for Fireworks serverless models (`DEEPSEEK`, `GLM`, `GPT_OSS`, `INKLING`, `KIMI`, `MINIMAX`, `NEMOTRON`, `QWEN`), `MODEL.MISTRAL.*` (`LARGE`, `OCR`, `SMALL`), and `MODEL.OPENROUTER.*` for provider-prefixed routes (`GLM`, `LUNA`, `SONNET`). Pick specific models from here. `MODEL.MISTRAL.OCR` serves `POST /v1/ocr` rather than chat completions: it is priced per page, carries no `COST` entry, and is reached through `MistralProvider.ocr()`. Amazon's Nova models are first-class ids served over Bedrock; Bedrock's third-party routes are not catalogued — pass the literal id (e.g. `us.anthropic.claude-sonnet-4-6`) and `determineModelProvider` resolves it to `bedrock`.
|
|
55
|
+
- `MODEL.MUSE_SPARK` and `MODEL.MUSE_SPARK_CONTRIBUTOR` are the same Meta model at two tiers. The contributor tier is roughly a tenth of the price because prompts and completions may train Meta models; it is limited to 100 RPM and does not accept `reasoning.effort: "max"`. It is an explicit opt-in: `PROVIDER.META.DEFAULT` is `MODEL.MUSE_SPARK`.
|
|
52
56
|
- The catalog is the **single source of truth for CI coverage**: `packages/llm/test/models.ts` derives the live capability matrix from `MODEL.*` plus each `PROVIDER.*.DEFAULT`, and the workflow shards it by provider. Adding a model to `MODEL.*` puts it under test; no id list exists anywhere else.
|
|
53
57
|
- **Deprecated:** the size-tier map `PROVIDER.<name>.MODEL.{DEFAULT,LARGE,SMALL,TINY}`, the `DEFAULT.MODEL` bundle, and `ALL` are `@deprecated` and retired in 2.0 — use `PROVIDER.*.DEFAULT` for defaults and `MODEL.*` for named models.
|
|
54
58
|
|
|
@@ -644,6 +648,7 @@ MISTRAL_API_KEY # Required for Mistral
|
|
|
644
648
|
OPENAI_API_KEY # Required for OpenAI
|
|
645
649
|
OPENROUTER_API_KEY # Required for OpenRouter
|
|
646
650
|
XAI_API_KEY # Required for xAI (Grok)
|
|
651
|
+
META_API_KEY # Required for Meta (Muse Spark); MODEL_API_KEY is read as a fallback
|
|
647
652
|
```
|
|
648
653
|
|
|
649
654
|
Keys are resolved via `getEnvSecret()` which supports AWS Secrets Manager.
|
|
@@ -858,13 +863,13 @@ await Llm.operate("Solve this step by step", {
|
|
|
858
863
|
Per-provider translation (`medium`/`high` stay aligned across providers; ends
|
|
859
864
|
collapse where a provider has fewer rungs):
|
|
860
865
|
|
|
861
|
-
| `effort` | OpenAI `reasoning.effort` | Anthropic `output_config.effort` | Gemini 3 `thinkingLevel` | Gemini 2.5 `thinkingBudget` | Grok `reasoning_effort` | OpenRouter `reasoning.effort` | Fireworks `reasoning_effort` | Mistral `reasoning_effort` |
|
|
862
|
-
|
|
863
|
-
| `lowest` | minimal | low | MINIMAL | 512 | low | minimal | low | none |
|
|
864
|
-
| `low` | low | low | LOW | 4096 | low | low | low | high |
|
|
865
|
-
| `medium` | medium | medium | MEDIUM | 8192 | medium | medium | medium | high |
|
|
866
|
-
| `high` | high | high | HIGH | 16384 | high | high | high | high |
|
|
867
|
-
| `highest` | xhigh | max | HIGH | 24576 | high | xhigh | high | high |
|
|
866
|
+
| `effort` | OpenAI `reasoning.effort` | Anthropic `output_config.effort` | Gemini 3 `thinkingLevel` | Gemini 2.5 `thinkingBudget` | Grok `reasoning_effort` | Meta `reasoning.effort` | OpenRouter `reasoning.effort` | Fireworks `reasoning_effort` | Mistral `reasoning_effort` |
|
|
867
|
+
|-----------|---------------------------|----------------------------------|--------------------------|-----------------------------|-------------------------|-------------------------|-------------------------------|------------------------------|----------------------------|
|
|
868
|
+
| `lowest` | minimal | low | MINIMAL | 512 | low | minimal | minimal | low | none |
|
|
869
|
+
| `low` | low | low | LOW | 4096 | low | low | low | low | high |
|
|
870
|
+
| `medium` | medium | medium | MEDIUM | 8192 | medium | medium | medium | medium | high |
|
|
871
|
+
| `high` | high | high | HIGH | 16384 | high | high | high | high | high |
|
|
872
|
+
| `highest` | xhigh | max | HIGH | 24576 | high | max | xhigh | high | high |
|
|
868
873
|
|
|
869
874
|
When a neutral level has no distinct native rung and collapses onto a neighbor
|
|
870
875
|
it is "papered over." Papering that follows from the provider's native scale
|
|
@@ -873,21 +878,27 @@ Anthropic `lowest`) is the only possible outcome for that provider and is not
|
|
|
873
878
|
logged. Papering that depends on the specific model, such as OpenAI clamping
|
|
874
879
|
`highest` on a model predating `xhigh`, logs at `log.debug`. OpenAI's extremes
|
|
875
880
|
are also version-gated: `xhigh` (`highest`) applies
|
|
876
|
-
only to gpt-5.2+ and `minimal` (`lowest`) only to gpt-5.4
|
|
877
|
-
non-monotonic); older gpt-5 / o-series
|
|
881
|
+
only to gpt-5.2+ and `minimal` (`lowest`) only to gpt-5.4 through gpt-5 (its
|
|
882
|
+
history is non-monotonic and gpt-6 drops it again); older gpt-5 / o-series
|
|
883
|
+
clamp the end to `high`/`low`. From gpt-6 onward `highest` reaches `max`, the
|
|
884
|
+
rung above `xhigh`, and `lowest` clamps to `low`.
|
|
878
885
|
|
|
879
886
|
Gating (effort is silently ignored where reasoning is unavailable, never
|
|
880
887
|
erroring):
|
|
881
888
|
|
|
882
889
|
- **OpenAI** — only reasoning models (`gpt-5+`, `o`-series); merges with the
|
|
883
890
|
auto `reasoning.summary`. `xhigh` requires gpt-5.2+, `minimal` requires
|
|
884
|
-
gpt-5.4+ (else clamped).
|
|
891
|
+
gpt-5.4 through gpt-5, and gpt-6+ takes `max` for `highest` (else clamped).
|
|
885
892
|
- **Anthropic** — only Claude 4.5+ / 5 models (`output_config.effort`); merges
|
|
886
893
|
alongside a structured-output `format` config.
|
|
887
894
|
- **Google** — `thinkingLevel` for Gemini 3.x, `thinkingBudget` for Gemini 2.5;
|
|
888
895
|
other models get nothing.
|
|
889
896
|
- **xAI** — only models whose name advertises reasoning (a `*-reasoning`
|
|
890
897
|
suffix); a bare version name and `*-non-reasoning` are skipped.
|
|
898
|
+
- **Meta** — every `muse-spark` id; merges with the auto `reasoning.summary`.
|
|
899
|
+
`max` is limited to the Standard-tier `muse-spark-1.3`, so `highest` on the
|
|
900
|
+
contributor id or an older release clamps to `xhigh` (logged at debug).
|
|
901
|
+
Muse Spark always reasons: `none` is rejected by the API and never emitted.
|
|
891
902
|
- **OpenRouter** — always forwarded; OpenRouter maps to the routed model's
|
|
892
903
|
nearest supported level.
|
|
893
904
|
- **Fireworks** — always forwarded (`reasoning_effort`); the API accepts it on
|
|
@@ -925,7 +936,7 @@ elsewhere); `false`/`0` = disabled; `"5m"`/`"1h"` = that TTL.
|
|
|
925
936
|
|
|
926
937
|
Per provider: Anthropic `cache_control` on system + last tool; Bedrock
|
|
927
938
|
`cachePoint` blocks (model-gated, auto-denylisted and retried without on a 400;
|
|
928
|
-
5m only); OpenAI/xAI automatic caching + a stable `prompt_cache_key`; OpenRouter
|
|
939
|
+
5m only); OpenAI/xAI/Meta automatic caching + a stable `prompt_cache_key`; OpenRouter
|
|
929
940
|
`cache_control` on the system message (forwarded to Anthropic/Gemini backends);
|
|
930
941
|
Google implicit caching only (Gemini 2.5+). TTL applies to Anthropic/OpenRouter;
|
|
931
942
|
others use provider defaults. Sub-threshold prefixes silently no-op. Cache
|
|
@@ -965,7 +976,7 @@ await Llm.operate(input, {
|
|
|
965
976
|
});
|
|
966
977
|
```
|
|
967
978
|
|
|
968
|
-
OpenAI and
|
|
979
|
+
OpenAI, xAI, and Meta leave the limit unset (their defaults do not truncate early).
|
|
969
980
|
Mistral is capped (32,768 streaming / 16,384 non-streaming) despite publishing
|
|
970
981
|
no low ceiling: a Mistral model can degenerate into restating its answer when
|
|
971
982
|
`format` and tools are combined, and an uncapped completion turns that into a
|