@plurnk/plurnk-providers 1.14.1 → 1.15.0
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/.env.defaults +21 -9
- package/SPEC.md +68 -12
- package/dist/AiSdkProvider.d.ts +5 -2
- package/dist/AiSdkProvider.d.ts.map +1 -1
- package/dist/AiSdkProvider.js +34 -342
- package/dist/AiSdkProvider.js.map +1 -1
- package/dist/AiSdkRequestBody.d.ts +40 -0
- package/dist/AiSdkRequestBody.d.ts.map +1 -0
- package/dist/AiSdkRequestBody.js +361 -0
- package/dist/AiSdkRequestBody.js.map +1 -0
- package/dist/Mock.d.ts +5 -1
- package/dist/Mock.d.ts.map +1 -1
- package/dist/Mock.js +9 -2
- package/dist/Mock.js.map +1 -1
- package/dist/Pool.d.ts +2 -1
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +7 -0
- package/dist/Pool.js.map +1 -1
- package/dist/aiSdkTransport.d.ts +1 -1
- package/dist/aiSdkTransport.d.ts.map +1 -1
- package/dist/aiSdkTransport.js +50 -34
- package/dist/aiSdkTransport.js.map +1 -1
- package/dist/capacity.d.ts +7 -0
- package/dist/capacity.d.ts.map +1 -1
- package/dist/capacity.js +21 -0
- package/dist/capacity.js.map +1 -1
- package/dist/catalogProvider.d.ts +2 -1
- package/dist/catalogProvider.d.ts.map +1 -1
- package/dist/catalogProvider.js +14 -3
- package/dist/catalogProvider.js.map +1 -1
- package/dist/compatibleProvider.d.ts.map +1 -1
- package/dist/compatibleProvider.js +6 -3
- package/dist/compatibleProvider.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +23 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/promptTokens.d.ts.map +1 -1
- package/dist/promptTokens.js +2 -1
- package/dist/promptTokens.js.map +1 -1
- package/dist/reasoning-effort.d.ts +4 -0
- package/dist/reasoning-effort.d.ts.map +1 -0
- package/dist/reasoning-effort.js +14 -0
- package/dist/reasoning-effort.js.map +1 -0
- package/dist/types.d.ts +18 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +14 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -6
- package/src/AiSdkProvider.test.ts +142 -115
- package/src/AiSdkProvider.ts +41 -382
- package/src/AiSdkRequestBody.ts +419 -0
- package/src/Mock.ts +10 -2
- package/src/Pool.test.ts +3 -0
- package/src/Pool.ts +8 -1
- package/src/aiSdkTransport.test.ts +31 -16
- package/src/aiSdkTransport.ts +55 -38
- package/src/boundaries.test.ts +2 -0
- package/src/capacity.test.ts +33 -1
- package/src/capacity.ts +34 -0
- package/src/catalogProvider.test.ts +22 -0
- package/src/catalogProvider.ts +16 -3
- package/src/compatibleProvider.test.ts +12 -0
- package/src/compatibleProvider.ts +6 -3
- package/src/errors.test.ts +1 -0
- package/src/errors.ts +22 -1
- package/src/index.ts +3 -0
- package/src/inputModalities.test.ts +53 -0
- package/src/promptTokens.ts +2 -1
- package/src/reasoning-effort.ts +15 -0
- package/src/types.ts +30 -2
package/.env.defaults
CHANGED
|
@@ -47,11 +47,13 @@ PLURNK_PROVIDERS_REASONING=adaptive
|
|
|
47
47
|
PLURNK_PROVIDERS_REASONING_RESPONSE_STYLE=verbatim
|
|
48
48
|
# PLURNK_PROVIDERS_REASONING_RESPONSE_STYLE_cfds1=think-tags
|
|
49
49
|
|
|
50
|
-
# --- Decode tuning (
|
|
51
|
-
#
|
|
52
|
-
#
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
# --- Decode tuning ({§provider-sampling-passthrough}, #480) ---
|
|
51
|
+
# The service imposes no sampling opinion: EMPTY (the normal default) sends no
|
|
52
|
+
# temperature and no repeat_penalty — the provider's or model's own defaults
|
|
53
|
+
# govern. Set a value (usually per-alias) only from measurement; the reference
|
|
54
|
+
# blocks below carry each local model's measured numbers.
|
|
55
|
+
PLURNK_PROVIDERS_TEMPERATURE=
|
|
56
|
+
PLURNK_PROVIDERS_REPEAT_PENALTY=
|
|
55
57
|
# FREQUENCY_PENALTY (https://github.com/plurnk/plurnk-service/issues/426):
|
|
56
58
|
# optional cloud anti-degeneration tuning. API acceptance
|
|
57
59
|
# permits the field to ride but does not establish its semantic effect, and provider
|
|
@@ -101,9 +103,10 @@ PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT=180000
|
|
|
101
103
|
# begins. Zero disables it. Both content deadlines consume the ordinary retry
|
|
102
104
|
# budget when they expire.
|
|
103
105
|
PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT=120000
|
|
104
|
-
#
|
|
105
|
-
#
|
|
106
|
-
#
|
|
106
|
+
# Provider-directed-wait retries (#479): N = retries on HTTP 429, any response
|
|
107
|
+
# carrying Retry-After (its duration wins over backoff), or an explicit
|
|
108
|
+
# X-Should-Retry:true; 0 = surface even those at once. Every other failure (5xx, deadlines, network) surfaces on
|
|
109
|
+
# the first attempt — the engine's {§provider-recovery} owns re-issue and park.
|
|
107
110
|
PLURNK_PROVIDERS_RETRY_ATTEMPTS=3
|
|
108
111
|
# Maximum characters retained from an upstream provider diagnostic in the
|
|
109
112
|
# public Problem detail. Structured failure facts are not truncated.
|
|
@@ -115,10 +118,14 @@ PLURNK_PROVIDERS_ERROR_DETAIL_LIMIT=512
|
|
|
115
118
|
PLURNK_PROVIDERS_PROBE_ATTEMPTS=3
|
|
116
119
|
PLURNK_PROVIDERS_PROBE_DELAY=250
|
|
117
120
|
|
|
118
|
-
# --- Optional local constrained sampling (GBNF, SPEC §
|
|
121
|
+
# --- Optional local constrained sampling (GBNF, SPEC §10) ---
|
|
119
122
|
# Unset by default. Set per alias only for a local llama-server whose GBNF
|
|
120
123
|
# transport is detected or pinned. Cloud and endpoint-managed model settings do
|
|
121
124
|
# not use this knob.
|
|
125
|
+
# Rails on a weak model need a recency reminder or turns death-march to the
|
|
126
|
+
# token ceiling ({§gbnf-forced-march}): put in the Recap footer (core
|
|
127
|
+
# PLURNK_SERVICE_RECAP) a line such as
|
|
128
|
+
# YOU MUST begin with `# PLAN0` and end with `## SEND0 [status code]`
|
|
122
129
|
# PLURNK_PROVIDERS_GBNF=plurnk.qwen.gbnf
|
|
123
130
|
# Debug toggle: validate but withhold a configured local GBNF, then report the
|
|
124
131
|
# unconstrained output's divergence. Development aid; leave unset in production.
|
|
@@ -222,6 +229,11 @@ PLURNK_BASE_URL=https://plurnk.ai/v1
|
|
|
222
229
|
# PLURNK_MODEL_qwen38=openai/<gguf name exactly as /v1/models lists it>
|
|
223
230
|
# PLURNK_PROVIDERS_PROVIDER_OPENAI_REASONING_STYLE=template
|
|
224
231
|
# PLURNK_PROVIDERS_GBNF_qwen38=plurnk.qwen.gbnf
|
|
232
|
+
# Reasoning disposition rides into the Qwen3.8 chat template as its own variable. The template
|
|
233
|
+
# knows three rungs: xhigh (its default; 'high' is an alias) injects "consider plausible
|
|
234
|
+
# alternatives" and dilates to any cap; medium injects nothing; low injects "brief and focused".
|
|
235
|
+
# Measured 2026-09-01 on a packet severed at 16k under xhigh: medium decided in ~560 tokens.
|
|
236
|
+
# PLURNK_PROVIDERS_REASONING_qwen38=medium
|
|
225
237
|
# PLURNK_PROVIDERS_REASONING_BUDGET_qwen38=4096
|
|
226
238
|
# PLURNK_PROVIDERS_OUTPUT_BUDGET_qwen38=8192
|
|
227
239
|
# PLURNK_PROVIDERS_TEMPERATURE_qwen38=0.6
|
package/SPEC.md
CHANGED
|
@@ -412,6 +412,20 @@ names without values. Construction rejects the same missing requirements at
|
|
|
412
412
|
the provider boundary instead of deferring a known configuration failure to a
|
|
413
413
|
model request.
|
|
414
414
|
|
|
415
|
+
### §provider-input-modalities Native input parts
|
|
416
|
+
|
|
417
|
+
A provider declares `inputModalities`, the set of native non-text inputs its model
|
|
418
|
+
accepts, from the catalog's input modalities (Models.dev `modalities.input` minus
|
|
419
|
+
`text`, kept to the vocabulary `image`, `pdf`, `audio`, `video`; empty when the
|
|
420
|
+
model is unknown). A user `ChatMessage` may then carry content parts: text beside
|
|
421
|
+
`{ type: "image", image: bytes, mediaType }` and `{ type: "file", data: bytes, mediaType }`,
|
|
422
|
+
which the AI SDK transport forwards as the model's native image and file input;
|
|
423
|
+
system and assistant messages stay text, and prompt-token estimates count text
|
|
424
|
+
only, the provider's reported usage owning each part's cost. A pool declares a
|
|
425
|
+
modality only when every backend does; the Mock declares them by option and
|
|
426
|
+
records every request it receives. Which parts actually ride a request is the
|
|
427
|
+
service's decision per attachment ({§packet-attachment-parts} in the core specification).
|
|
428
|
+
|
|
415
429
|
### §model-fact-resolution Model fact precedence
|
|
416
430
|
|
|
417
431
|
Provider and model facts resolve independently:
|
|
@@ -622,6 +636,36 @@ request-accounting row. Capacity failures are not connectivity failures and are
|
|
|
622
636
|
never retried by the provider scheduler; bounded packet recovery belongs to the
|
|
623
637
|
consumer.
|
|
624
638
|
|
|
639
|
+
§provider-flexed-allowance **Overflow is tolerated, never invited.** The
|
|
640
|
+
configured output budget is the floor curation packs the input against
|
|
641
|
+
(`window − outputBudget`), and it is the only allowance the model is ever
|
|
642
|
+
shown — the packet's disclosed `tokensResponseMax` stays the configured floor
|
|
643
|
+
so the response discipline it teaches never varies. The wire is quietly
|
|
644
|
+
generous: a transport with an exact prompt count (llama-server's input-token
|
|
645
|
+
endpoint) grants `max(outputBudget, window − promptTokens − 256)`, capped by
|
|
646
|
+
the model's own output limit, so a response overflowing the disclosed floor
|
|
647
|
+
completes whenever the window's unclaimed room can hold it. Every other
|
|
648
|
+
measurement kind — and any pool — keeps the floor, because an estimate proves
|
|
649
|
+
nothing about the true remainder. A response exceeding even the grant is cut,
|
|
650
|
+
and the notice names the true per-call grant (`capacity.responseMax` on the
|
|
651
|
+
response) — the tolerance's honest edge, never worse than the fixed allowance
|
|
652
|
+
it forgives.
|
|
653
|
+
|
|
654
|
+
§provider-sampling-passthrough **The service imposes no sampling opinion.** With
|
|
655
|
+
no configured value, a request carries no `temperature` and no repetition
|
|
656
|
+
control — the provider's or model's own defaults govern, as a normal agentic
|
|
657
|
+
service behaves. `PLURNK_PROVIDERS_TEMPERATURE` and
|
|
658
|
+
`PLURNK_PROVIDERS_REPEAT_PENALTY` parse empty as null and exist as per-alias
|
|
659
|
+
measurement instruments; caller `sampling` always outranks a configured value,
|
|
660
|
+
and router-owned-tuning providers suppress configured floors entirely. The
|
|
661
|
+
justified exception the penalty knob exists for: grammar-constrained decoding
|
|
662
|
+
can loop under the mask — greedy continuation of an exactly-repeatable sequence
|
|
663
|
+
the grammar keeps legal (measured on the July local rail work, #9/#30; and
|
|
664
|
+
unconstrained on firefast, where 4/86 bench turns ran straight to the token cap
|
|
665
|
+
on pure repetition, run52) — and a per-alias `repeat_penalty` (llama.cpp
|
|
666
|
+
backends) or `frequency_penalty` (cloud backends, #426) is the measured remedy
|
|
667
|
+
for a model that exhibits it, never a service-wide floor.
|
|
668
|
+
|
|
625
669
|
§provider-connectivity The provider adapter owns one attempt scheduler around
|
|
626
670
|
the complete generation exchange; SDK-internal retries are disabled.
|
|
627
671
|
`PLURNK_PROVIDERS_RETRY_ATTEMPTS=N` permits at most `N + 1` physical requests.
|
|
@@ -631,17 +675,17 @@ deadline:
|
|
|
631
675
|
| Layer | Operator knob | Boundary | Expiry |
|
|
632
676
|
| --- | --- | --- | --- |
|
|
633
677
|
| Operation | `PLURNK_PROVIDERS_OPERATION_TIMEOUT` | Complete logical call, including every attempt and retry delay. | Final `deadline_exceeded` Problem at 504 with `timeoutPhase=operation`; never retried. |
|
|
634
|
-
| Attempt | `PLURNK_PROVIDERS_FETCH_TIMEOUT` | One physical generation request, including response consumption. |
|
|
635
|
-
| First content | `PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT` | Response-stream start through first semantic model content; metadata, empty deltas, and transport activity do not satisfy it. |
|
|
636
|
-
| Stream idle | `PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT` | Silence between semantic content chunks after content begins. |
|
|
678
|
+
| Attempt | `PLURNK_PROVIDERS_FETCH_TIMEOUT` | One physical generation request, including response consumption. | Surfaced `network_failure` with `timeoutPhase=attempt`; never transport-retried (#479) — the consumer's recovery owns re-issue. Embedding requests share the same per-physical-request deadline, enforced as a race so a wedged adapter cannot hang its awaiters (#463). |
|
|
679
|
+
| First content | `PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT` | Response-stream start through first semantic model content; metadata, empty deltas, and transport activity do not satisfy it. | Surfaced `network_failure` with `timeoutPhase=first_content`; never transport-retried (#479). |
|
|
680
|
+
| Stream idle | `PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT` | Silence between semantic content chunks after content begins. | Surfaced `network_failure` with `timeoutPhase=stream_idle`; never transport-retried (#479). |
|
|
637
681
|
|
|
638
682
|
Caller cancellation spans the operation and preserves the caller's reason.
|
|
639
683
|
A 2xx exchange whose body cannot be processed (a provider invalid-response)
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
Inner deadline failures
|
|
643
|
-
|
|
644
|
-
|
|
684
|
+
classifies as the non-retryable 502 on the first failure unless an explicit
|
|
685
|
+
`x-should-retry` directive says otherwise (#479 supersedes #446's budgeted
|
|
686
|
+
promotion). Inner deadline failures surface on the first failure; when a
|
|
687
|
+
directive-driven retry sequence exhausts, `attempts` and `retryExhausted`
|
|
688
|
+
are added and the classification is final. Every scheduler iteration opens and settles exactly
|
|
645
689
|
one ordered {§provider-request-accounting} record, including response-less
|
|
646
690
|
network failures and timed-out attempts.
|
|
647
691
|
|
|
@@ -653,10 +697,14 @@ carries one `provider_retry` warning identifying that fact. A retry before any
|
|
|
653
697
|
semantic model output remains silent while its physical failure stays cardinally
|
|
654
698
|
accounted. Transient reasoning follows {§provider-reasoning-observer}.
|
|
655
699
|
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
700
|
+
Only a provider-directed wait earns a transport retry (#479): HTTP 429, any
|
|
701
|
+
response carrying `Retry-After` (RFC 9110 defines it on 503 exactly as a
|
|
702
|
+
directed wait) — header-level facts the consumer's recovery layer never sees —
|
|
703
|
+
and an explicit `X-Should-Retry: true`. That header stays authoritative both
|
|
704
|
+
ways, and endpoint control responses 520–527 stay final. HTTP 408, 409, and
|
|
705
|
+
ordinary 5xx surface on the first failure as consumer-recoverable kinds; one
|
|
706
|
+
retry authority — the consumer's own provider-recovery machinery — owns
|
|
707
|
+
re-issue, backoff, and park above the transport.
|
|
660
708
|
|
|
661
709
|
### §provider-interrupted-attempt Provider-declared interruption
|
|
662
710
|
|
|
@@ -695,6 +743,14 @@ an empty body therefore remains observable. An endpoint that projects despite
|
|
|
695
743
|
that request supplies no independent evidence. For an unsplit response, `input`
|
|
696
744
|
is `content` and `contentStart` is zero.
|
|
697
745
|
|
|
746
|
+
§gbnf-forced-march **A grammar masks end-of-generation until the sentence completes — pair rails on a weak model with a recency reminder.** llama-server admits EOG only in a grammar-accepting state, so a model whose intended emission diverges from the required turn shape cannot stop: each masked substitution drifts it further from the terminal, and the request runs to the token ceiling and dies as a length cut (measured 2026-09-01, #477 — the thought budget fires and throughput is unaffected; the march is the grammar's one failure mode, and the weaker the model, the likelier the divergence that triggers it). When enabling a GBNF rail for a model that does not reliably hold the frame shape, put the shape command where recency helps — the operator's Recap footer (core `PLURNK_SERVICE_RECAP`) — for example:
|
|
747
|
+
|
|
748
|
+
```text
|
|
749
|
+
YOU MUST begin with `# PLAN0` and end with `## SEND0 [status code]`
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
A model that emits valid frames freehand needs neither the rail nor the reminder.
|
|
753
|
+
|
|
698
754
|
§gbnf-response-observation The provider transports and represents; it does not grade its own enforcement.
|
|
699
755
|
The consumer validates `grammarEvidence.input` outside the enforcer's failure
|
|
700
756
|
domain. `PLURNK_PROVIDERS_GBNF_DEBUG` still validates grammar syntax before the
|
package/dist/AiSdkProvider.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { ChatMessage, PromptTokenMeasurement, Provider, ProviderCostNormali
|
|
|
2
2
|
import type { ProviderCost } from "@plurnk/plurnk-contracts";
|
|
3
3
|
import type { JSONValue } from "ai";
|
|
4
4
|
import { type Reasoning, type ReasoningResponseStyle } from "./env.ts";
|
|
5
|
+
import type { InputModality } from "./types.ts";
|
|
5
6
|
import type { LanguageModel } from "ai";
|
|
6
7
|
import type { PluginAttribution, PluginAttributionContext } from "@plurnk/plurnk-meta";
|
|
7
8
|
export type ProviderFetch = typeof globalThis.fetch;
|
|
@@ -30,6 +31,7 @@ export type AiSdkProviderConfig = {
|
|
|
30
31
|
headers?: Record<string, string>;
|
|
31
32
|
fetch?: ProviderFetch;
|
|
32
33
|
contextWindow?: number | null;
|
|
34
|
+
inputModalities?: ReadonlySet<InputModality>;
|
|
33
35
|
maxInputTokens?: number | null;
|
|
34
36
|
maxOutputTokens?: number | null;
|
|
35
37
|
outputBudget?: number | null;
|
|
@@ -64,8 +66,8 @@ export type AiSdkProviderConfig = {
|
|
|
64
66
|
servedModel?: string;
|
|
65
67
|
requiresOutputBudget?: boolean;
|
|
66
68
|
reasoning: Reasoning;
|
|
67
|
-
temperature: number;
|
|
68
|
-
repeatPenalty: number;
|
|
69
|
+
temperature: number | null;
|
|
70
|
+
repeatPenalty: number | null;
|
|
69
71
|
frequencyPenalty?: number;
|
|
70
72
|
dryMultiplier?: number;
|
|
71
73
|
dryBase?: number;
|
|
@@ -83,6 +85,7 @@ export default class AiSdkProvider implements Provider {
|
|
|
83
85
|
tokenize?: (text: string) => Promise<number[]>;
|
|
84
86
|
constructor(config: AiSdkProviderConfig);
|
|
85
87
|
get contextWindow(): number | null;
|
|
88
|
+
get inputModalities(): ReadonlySet<InputModality>;
|
|
86
89
|
get maxInputTokens(): number | null;
|
|
87
90
|
get maxOutputTokens(): number | null;
|
|
88
91
|
get outputBudget(): number | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiSdkProvider.d.ts","sourceRoot":"","sources":["../src/AiSdkProvider.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"AiSdkProvider.d.ts","sourceRoot":"","sources":["../src/AiSdkProvider.ts"],"names":[],"mappings":"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"}
|