@plurnk/plurnk-providers 1.3.7 → 1.3.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.
- package/.env.defaults +12 -3
- package/SPEC.md +12 -1
- package/dist/ProviderRegistry.d.ts.map +1 -1
- package/dist/ProviderRegistry.js +2 -0
- package/dist/ProviderRegistry.js.map +1 -1
- package/dist/catalogProvider.d.ts.map +1 -1
- package/dist/catalogProvider.js +14 -11
- package/dist/catalogProvider.js.map +1 -1
- package/dist/defaults.d.ts +2 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +8 -0
- package/dist/defaults.js.map +1 -0
- package/dist/env.d.ts +6 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +27 -3
- package/dist/env.js.map +1 -1
- package/package.json +5 -5
- package/src/ProviderRegistry.test.ts +77 -0
- package/src/ProviderRegistry.ts +2 -0
- package/src/catalogProvider.test.ts +24 -1
- package/src/catalogProvider.ts +16 -9
- package/src/defaults.test.ts +19 -0
- package/src/defaults.ts +9 -0
- package/src/env.test.ts +27 -1
- package/src/env.ts +29 -3
package/.env.defaults
CHANGED
|
@@ -88,6 +88,14 @@ PLURNK_PROVIDERS_PROBE_DELAY=250
|
|
|
88
88
|
# per-alias (_<alias>) for a box whose model the catalog doesn't know.
|
|
89
89
|
# PLURNK_PROVIDERS_CONTEXT_WINDOW=200000
|
|
90
90
|
|
|
91
|
+
# --- Model pricing override (USD per million tokens; SPEC §4) ---
|
|
92
|
+
# Models.dev owns catalog rates. Set these together for a model absent from the
|
|
93
|
+
# snapshot or to deliberately override its rates. Cached input defaults to the
|
|
94
|
+
# input rate when omitted. All three knobs are per-alias scopable.
|
|
95
|
+
# PLURNK_PROVIDERS_INPUT_USD_PER_MILLION=1
|
|
96
|
+
# PLURNK_PROVIDERS_CACHE_READ_USD_PER_MILLION=0.1
|
|
97
|
+
# PLURNK_PROVIDERS_OUTPUT_USD_PER_MILLION=5
|
|
98
|
+
|
|
91
99
|
# --- llama-server detection pin (#34) ---
|
|
92
100
|
# Unset = auto-detect from the /v1/models fingerprint. 1 = pin llama-server capabilities
|
|
93
101
|
# (grammar transport, slot pinning, /tokenize) WITHOUT trusting the probe; 0 = force plain
|
|
@@ -96,9 +104,10 @@ PLURNK_PROVIDERS_PROBE_DELAY=250
|
|
|
96
104
|
|
|
97
105
|
# --- Data capture (#36, SPEC §14) - OFF by default; the flag IS the isolation ---
|
|
98
106
|
# Enable ONLY on a dataset-scraping alias (append _<alias>); serving turns then request and
|
|
99
|
-
# carry nothing. TOP_LOGPROBS: non-negative
|
|
100
|
-
#
|
|
101
|
-
#
|
|
107
|
+
# carry nothing. TOP_LOGPROBS: "off" or a non-negative OpenAI top_logprobs count
|
|
108
|
+
# (0 captures only the chosen token; surfaced on assistant.logprobs). "off" lets
|
|
109
|
+
# an alias override process-wide capture. RAWBODY: truthy -> verbatim wire body
|
|
110
|
+
# on response.rawBody (keeps sampling_logprob/token_id/bytes the digest drops).
|
|
102
111
|
# PLURNK_PROVIDERS_TOP_LOGPROBS_myscraper=3
|
|
103
112
|
# PLURNK_PROVIDERS_RAWBODY_myscraper=1
|
|
104
113
|
|
package/SPEC.md
CHANGED
|
@@ -116,6 +116,12 @@ Every operational value is an environment knob documented in `.env.defaults`.
|
|
|
116
116
|
There are no hidden tuning constants. Every `PLURNK_PROVIDERS_*` knob may be
|
|
117
117
|
scoped to an alias by appending `_<alias>`; the scoped value wins.
|
|
118
118
|
|
|
119
|
+
The public Node provider registry applies this package's committed
|
|
120
|
+
`.env.defaults` as a set-if-unset operational floor. Consumers pass their
|
|
121
|
+
operator environment, not a manually composed copy of the provider floor.
|
|
122
|
+
Explicit operator values always win and invalid explicit values fail at the
|
|
123
|
+
knob's owning contract.
|
|
124
|
+
|
|
119
125
|
The universal groups are:
|
|
120
126
|
|
|
121
127
|
- reasoning activation and optional explicit budget;
|
|
@@ -123,6 +129,8 @@ The universal groups are:
|
|
|
123
129
|
- request, stream-idle, retry, and probe budgets;
|
|
124
130
|
- local GBNF and llama-server capability pins;
|
|
125
131
|
- context-window and generation-envelope overrides;
|
|
132
|
+
- explicit input, cached-input, and output USD-per-million rates for models
|
|
133
|
+
absent from the snapshot or deliberate operator overrides;
|
|
126
134
|
- opt-in logprob and raw-body capture.
|
|
127
135
|
|
|
128
136
|
Operator secrets and machine-specific values never belong in committed
|
|
@@ -144,7 +152,10 @@ defaults.
|
|
|
144
152
|
5. A precise unknown-provider error.
|
|
145
153
|
|
|
146
154
|
Earlier sources are authoritative. Installed plugins cannot shadow a cataloged
|
|
147
|
-
or explicitly declared name.
|
|
155
|
+
or explicitly declared name. This remains true when a named model is absent
|
|
156
|
+
from the Models.dev snapshot: construction requires an explicit
|
|
157
|
+
`PLURNK_PROVIDERS_CONTEXT_WINDOW` and never falls through to a same-name
|
|
158
|
+
plugin.
|
|
148
159
|
|
|
149
160
|
Model IDs resolve exactly first. A unique catalog suffix is accepted to avoid
|
|
150
161
|
forcing a vendor-owned resource prefix into PLURNK aliases. Ambiguous suffixes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderRegistry.d.ts","sourceRoot":"","sources":["../src/ProviderRegistry.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAuB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ProviderRegistry.d.ts","sourceRoot":"","sources":["../src/ProviderRegistry.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAuB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAW/E,KAAK,YAAY,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE5D,KAAK,UAAU,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAcpE,eAAO,MAAM,mBAAmB,SACtB,MAAM,OACP,MAAM,CAAC,UAAU,SACf,MAAM,eACD,YAAY,eACZ,UAAU,YACZ,MAAM,EAAE,+EAA+E;QACzF,MAAM,KACf,OAAO,CAAC,QAAQ,CA0ClB,CAAC;AAGF,eAAO,MAAM,mBAAmB,QAAO,IAAmC,CAAC;AAG3E,eAAO,MAAM,kBAAkB,SACtB,MAAM,CAAC,UAAU,eACV,YAAY,eACZ,UAAU,KACvB,OAAO,CAAC,QAAQ,CAMlB,CAAC"}
|
package/dist/ProviderRegistry.js
CHANGED
|
@@ -22,6 +22,7 @@ import { scopeEnvToAlias } from "./env.js";
|
|
|
22
22
|
import { ollamaProviderFromEnv } from "./ollama.js";
|
|
23
23
|
import { compatibleProviderFromEnv } from "./compatibleProvider.js";
|
|
24
24
|
import { contextWindowFromEnv } from "./env.js";
|
|
25
|
+
import { withProviderDefaults } from "./defaults.js";
|
|
25
26
|
const importModule = (specifier) => import(__rewriteRelativeImportExtension(specifier));
|
|
26
27
|
// The node_modules scan is filesystem work that never changes within a process,
|
|
27
28
|
// so it runs once and the result is memoized. A long-lived daemon pays one scan
|
|
@@ -36,6 +37,7 @@ const providerPackages = async (discoverFn, env) => {
|
|
|
36
37
|
// extensibility seam for an AI SDK provider that neither source describes.
|
|
37
38
|
export const instantiateProvider = async (name, env, model, importImpl = importModule, discoverFn = discover, baseUrl, // per-alias endpoint override (PLURNK_BASEURL_<alias>); threaded to both tiers
|
|
38
39
|
alias) => {
|
|
40
|
+
env = withProviderDefaults(env);
|
|
39
41
|
// Per-alias knob scoping overlays _<alias>-suffixed knobs onto their bare
|
|
40
42
|
// names before any resolver reads them.
|
|
41
43
|
if (alias !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderRegistry.js","sourceRoot":"","sources":["../src/ProviderRegistry.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,2EAA2E;AAC3E,+EAA+E;AAC/E,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,gEAAgE;;;;;;;;;AAGhE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAwC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ProviderRegistry.js","sourceRoot":"","sources":["../src/ProviderRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogProvider.d.ts","sourceRoot":"","sources":["../src/catalogProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"catalogProvider.d.ts","sourceRoot":"","sources":["../src/catalogProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAgBrF,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAG1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAmBxC,eAAO,MAAM,oBAAoB,4EAS9B;IACC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,SAAS,CAAC;CACpB,KAAG,QA0DH,CAAC;AAEF,eAAO,MAAM,sBAAsB,SACzB,MAAM,OACP,MAAM,CAAC,UAAU,SACf,MAAM,oBACK,MAAM,KACzB,QAAQ,GAAG,IAoCb,CAAC"}
|
package/dist/catalogProvider.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { lookupProvider, resolveModel } from "@plurnk/plurnk-models";
|
|
2
|
-
import { contextWindowFromEnv, dataCaptureFromEnv, envelopeFromEnv, parseRequiredFloat, parseRequiredInt, promptCacheKeyFromEnv, reasoningFromEnv, resolveReserve, } from "./env.js";
|
|
2
|
+
import { contextWindowFromEnv, dataCaptureFromEnv, envelopeFromEnv, parseRequiredFloat, parseRequiredInt, promptCacheKeyFromEnv, reasoningFromEnv, resolveReserve, tokenRatesFromEnv, } from "./env.js";
|
|
3
3
|
import AiSdkProvider from "./AiSdkProvider.js";
|
|
4
4
|
import { configuredProviderInfo, createSdkModel } from "./sdkModels.js";
|
|
5
5
|
import { providerSource } from "./telemetry.js";
|
|
@@ -36,14 +36,16 @@ export const providerFromSdkModel = ({ name, env, model, languageModel, url, hea
|
|
|
36
36
|
: completionTokens === null
|
|
37
37
|
? configuredReasoning
|
|
38
38
|
: { tokens: Math.round(completionTokens / 2) };
|
|
39
|
-
const
|
|
40
|
-
const
|
|
39
|
+
const configuredRates = tokenRatesFromEnv(env, name);
|
|
40
|
+
const catalogCost = info?.cost;
|
|
41
|
+
const rates = configuredRates ?? (catalogCost === undefined ? null : {
|
|
42
|
+
input: catalogCost.inputPer1M,
|
|
43
|
+
output: catalogCost.outputPer1M,
|
|
44
|
+
cached: catalogCost.cacheReadPer1M ?? catalogCost.inputPer1M,
|
|
45
|
+
});
|
|
46
|
+
const calculateCost = rates === null
|
|
41
47
|
? undefined
|
|
42
|
-
: (usage) => calculateCostUsd(usage,
|
|
43
|
-
input: cost.inputPer1M,
|
|
44
|
-
output: cost.outputPer1M,
|
|
45
|
-
cached: cost.cacheReadPer1M ?? cost.inputPer1M,
|
|
46
|
-
});
|
|
48
|
+
: (usage) => calculateCostUsd(usage, rates);
|
|
47
49
|
return new AiSdkProvider({
|
|
48
50
|
model,
|
|
49
51
|
...(languageModel === undefined ? {} : { languageModel }),
|
|
@@ -75,10 +77,11 @@ export const catalogProviderFromEnv = (name, env, model, baseUrlOverride) => {
|
|
|
75
77
|
const contextOverride = contextWindowFromEnv(env, name);
|
|
76
78
|
if (lookupProvider(name) === null && configuredProviderInfo(name, env) === null)
|
|
77
79
|
return null;
|
|
78
|
-
if (name === "openai" && resolved === null)
|
|
79
|
-
return null;
|
|
80
|
-
if (resolved === null && contextOverride === null)
|
|
80
|
+
if ((name === "openai" || name === "ollama") && resolved === null)
|
|
81
81
|
return null;
|
|
82
|
+
if (resolved === null && contextOverride === null) {
|
|
83
|
+
throw new Error(`${name} provider: context window unresolved for "${model}" — set PLURNK_PROVIDERS_CONTEXT_WINDOW or update the Models.dev snapshot`);
|
|
84
|
+
}
|
|
82
85
|
const wireModel = resolved?.id ?? model;
|
|
83
86
|
const sdk = createSdkModel(name, wireModel, env, baseUrlOverride);
|
|
84
87
|
if (sdk === null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogProvider.js","sourceRoot":"","sources":["../src/catalogProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AACrF,OAAO,EACH,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,
|
|
1
|
+
{"version":3,"file":"catalogProvider.js","sourceRoot":"","sources":["../src/catalogProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,QAAS,MAAM,CAAC,UAAU,KAAG,MAAM,CAAC,UAGnE,CAAC"}
|
package/dist/defaults.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { parseEnv } from "node:util";
|
|
3
|
+
const providerDefaults = parseEnv(readFileSync(new URL("../.env.defaults", import.meta.url), "utf8"));
|
|
4
|
+
export const withProviderDefaults = (env) => ({
|
|
5
|
+
...providerDefaults,
|
|
6
|
+
...env,
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEtG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAsB,EAAqB,EAAE,CAAC,CAAC;IAChF,GAAG,gBAAgB;IACnB,GAAG,GAAG;CACT,CAAC,CAAC"}
|
package/dist/env.d.ts
CHANGED
|
@@ -9,6 +9,12 @@ export declare const dataCaptureFromEnv: (env: NodeJS.ProcessEnv, label: string)
|
|
|
9
9
|
rawBody: boolean;
|
|
10
10
|
};
|
|
11
11
|
export declare const contextWindowFromEnv: (env: NodeJS.ProcessEnv, label: string) => number | null;
|
|
12
|
+
export type ProviderTokenRates = {
|
|
13
|
+
input: number;
|
|
14
|
+
cached: number;
|
|
15
|
+
output: number;
|
|
16
|
+
};
|
|
17
|
+
export declare const tokenRatesFromEnv: (env: NodeJS.ProcessEnv, label: string) => ProviderTokenRates | null;
|
|
12
18
|
export type ReserveSpec = {
|
|
13
19
|
percent: number;
|
|
14
20
|
} | {
|
package/dist/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAG,MAKvF,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAG,MAAM,GAAG,IAKhG,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,OAAO,MAAM,KAAG,MAKtG,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,OAAO,MAAM,KAAG,MAAM,GAAG,IAK/G,CAAC;AAEF,eAAO,MAAM,UAAU,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAG,MAGjF,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG,OAO7E,CAAC;
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAG,MAKvF,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAG,MAAM,GAAG,IAKhG,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,OAAO,MAAM,KAAG,MAKtG,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,OAAO,MAAM,KAAG,MAAM,GAAG,IAK/G,CAAC;AAEF,eAAO,MAAM,UAAU,QAAS,MAAM,GAAG,SAAS,QAAQ,MAAM,SAAS,MAAM,KAAG,MAGjF,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG,OAO7E,CAAC;AAmBF,eAAO,MAAM,kBAAkB,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CASxH,CAAC;AAMF,eAAO,MAAM,oBAAoB,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG,MAAM,GAAG,IAGrF,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,eAAO,MAAM,iBAAiB,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG,kBAAkB,GAAG,IAe9F,CAAC;AAcF,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAenE,eAAO,MAAM,eAAe,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG;IAAE,gBAAgB,EAAE,WAAW,CAAC;IAAC,iBAAiB,EAAE,WAAW,CAAA;CAGrI,CAAC;AAIH,eAAO,MAAM,cAAc,SAAU,WAAW,UAAU,MAAM,GAAG,IAAI,KAAG,MAAM,GAAG,IACY,CAAC;AAQhG,eAAO,MAAM,sBAAsB,QAAS,MAAM,CAAC,UAAU,UAAU,MAAM,GAAG,IAAI,KAAG;IAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;CAOzJ,CAAC;AAWF,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;AACtD,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAEvE,eAAO,MAAM,gBAAgB,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,KAAG,SAcxE,CAAC;AASF,eAAO,MAAM,eAAe,mBA2B1B,CAAC;AAaH,eAAO,MAAM,eAAe,QAAS,MAAM,CAAC,UAAU,SAAS,MAAM,UAAS,SAAS,MAAM,EAAE,KAAqB,MAAM,CAAC,UAkB1H,CAAC"}
|
package/dist/env.js
CHANGED
|
@@ -57,14 +57,18 @@ const shedRenamed = (env, oldName, newName, label, ref) => {
|
|
|
57
57
|
// Data-capture knobs (#36), read identically by every provider (standard AND
|
|
58
58
|
// plugin) so the opt-in surface is one source of truth. Both OFF by default —
|
|
59
59
|
// the flag is the isolation, so serving turns request and carry nothing.
|
|
60
|
-
// PLURNK_PROVIDERS_TOP_LOGPROBS non-negative int = the OpenAI
|
|
61
|
-
// count (
|
|
60
|
+
// PLURNK_PROVIDERS_TOP_LOGPROBS "off" or a non-negative int = the OpenAI
|
|
61
|
+
// `top_logprobs` count (0 captures the chosen token only). Unset -> off.
|
|
62
|
+
// Per-alias-scopable, so "off" can override process-wide capture.
|
|
62
63
|
// PLURNK_PROVIDERS_RAWBODY truthy (not ""/"0") → attach the verbatim wire
|
|
63
64
|
// body to response.rawBody. Per-alias-scopable.
|
|
64
65
|
export const dataCaptureFromEnv = (env, label) => {
|
|
65
66
|
shedRenamed(env, "PLURNK_PROVIDERS_LOGPROB", "PLURNK_PROVIDERS_TOP_LOGPROBS", label, "the OpenAI wire term"); // lexicon-allow
|
|
67
|
+
const topLogprobs = env.PLURNK_PROVIDERS_TOP_LOGPROBS === "off"
|
|
68
|
+
? null
|
|
69
|
+
: parseOptionalInt(env.PLURNK_PROVIDERS_TOP_LOGPROBS, "PLURNK_PROVIDERS_TOP_LOGPROBS", label);
|
|
66
70
|
return {
|
|
67
|
-
topLogprobs
|
|
71
|
+
topLogprobs,
|
|
68
72
|
rawBody: env.PLURNK_PROVIDERS_RAWBODY !== undefined && env.PLURNK_PROVIDERS_RAWBODY !== "" && env.PLURNK_PROVIDERS_RAWBODY !== "0",
|
|
69
73
|
};
|
|
70
74
|
};
|
|
@@ -76,6 +80,23 @@ export const contextWindowFromEnv = (env, label) => {
|
|
|
76
80
|
shedRenamed(env, "PLURNK_PROVIDERS_CONTEXT_SIZE", "PLURNK_PROVIDERS_CONTEXT_WINDOW", label, "the industry term, #472"); // lexicon-allow
|
|
77
81
|
return parseOptionalInt(env.PLURNK_PROVIDERS_CONTEXT_WINDOW, "PLURNK_PROVIDERS_CONTEXT_WINDOW", label);
|
|
78
82
|
};
|
|
83
|
+
export const tokenRatesFromEnv = (env, label) => {
|
|
84
|
+
const inputName = "PLURNK_PROVIDERS_INPUT_USD_PER_MILLION";
|
|
85
|
+
const cachedName = "PLURNK_PROVIDERS_CACHE_READ_USD_PER_MILLION";
|
|
86
|
+
const outputName = "PLURNK_PROVIDERS_OUTPUT_USD_PER_MILLION";
|
|
87
|
+
const configured = [inputName, cachedName, outputName]
|
|
88
|
+
.some((name) => env[name] !== undefined && env[name] !== "");
|
|
89
|
+
if (!configured)
|
|
90
|
+
return null;
|
|
91
|
+
const input = parseRequiredFloat(env[inputName], inputName, label, 0);
|
|
92
|
+
return {
|
|
93
|
+
input,
|
|
94
|
+
cached: env[cachedName] === undefined || env[cachedName] === ""
|
|
95
|
+
? input
|
|
96
|
+
: parseRequiredFloat(env[cachedName], cachedName, label, 0),
|
|
97
|
+
output: parseRequiredFloat(env[outputName], outputName, label, 0),
|
|
98
|
+
};
|
|
99
|
+
};
|
|
79
100
|
const parseReserve = (raw, name, label) => {
|
|
80
101
|
if (raw === undefined || raw.length === 0)
|
|
81
102
|
throw new Error(`${label} provider: ${name} must be set (a percentage of the window like "10%", or an absolute token count)`);
|
|
@@ -144,6 +165,9 @@ export const PROVIDERS_KNOBS = Object.freeze([
|
|
|
144
165
|
"PLURNK_PROVIDERS_REASONING_BUDGET",
|
|
145
166
|
"PLURNK_PROVIDERS_REASONING",
|
|
146
167
|
"PLURNK_PROVIDERS_CONTEXT_WINDOW",
|
|
168
|
+
"PLURNK_PROVIDERS_INPUT_USD_PER_MILLION",
|
|
169
|
+
"PLURNK_PROVIDERS_CACHE_READ_USD_PER_MILLION",
|
|
170
|
+
"PLURNK_PROVIDERS_OUTPUT_USD_PER_MILLION",
|
|
147
171
|
"PLURNK_PROVIDERS_RETRY_ATTEMPTS",
|
|
148
172
|
"PLURNK_PROVIDERS_FETCH_TIMEOUT",
|
|
149
173
|
"PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT",
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plurnk/plurnk-providers",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.9",
|
|
4
4
|
"description": "PLURNK's stable model-provider contract and AI SDK adapter.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"plurnk",
|
|
@@ -66,10 +66,10 @@
|
|
|
66
66
|
"@ai-sdk/togetherai": "^3.0.0",
|
|
67
67
|
"@ai-sdk/xai": "^4.0.0",
|
|
68
68
|
"@openrouter/ai-sdk-provider": "^3.0.0",
|
|
69
|
-
"@plurnk/gbnf": "1.3.
|
|
70
|
-
"@plurnk/plurnk-aliases": "1.3.
|
|
71
|
-
"@plurnk/plurnk-meta": "1.3.
|
|
72
|
-
"@plurnk/plurnk-models": "1.3.
|
|
69
|
+
"@plurnk/gbnf": "1.3.9",
|
|
70
|
+
"@plurnk/plurnk-aliases": "1.3.9",
|
|
71
|
+
"@plurnk/plurnk-meta": "1.3.9",
|
|
72
|
+
"@plurnk/plurnk-models": "1.3.9",
|
|
73
73
|
"ai": "^7.0.37",
|
|
74
74
|
"zod": "^3.25.76"
|
|
75
75
|
}
|
|
@@ -171,6 +171,83 @@ test("instantiateProvider: per-alias knobs scope through to the provider (per-al
|
|
|
171
171
|
mock.restoreAll();
|
|
172
172
|
});
|
|
173
173
|
|
|
174
|
+
test("#633: public construction applies the package floor to a sparse consumer environment", async () => {
|
|
175
|
+
const provider = await instantiateProvider(
|
|
176
|
+
"fireworks",
|
|
177
|
+
{ FIREWORKS_API_KEY: "fw" },
|
|
178
|
+
"deepseek-v4-pro",
|
|
179
|
+
async () => ({}),
|
|
180
|
+
mapOf({}),
|
|
181
|
+
);
|
|
182
|
+
assert.equal(provider.model, "accounts/fireworks/models/deepseek-v4-pro");
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
test("#633: an explicit malformed operator override still fails at its owning contract", async () => {
|
|
186
|
+
await assert.rejects(
|
|
187
|
+
() => instantiateProvider(
|
|
188
|
+
"fireworks",
|
|
189
|
+
{
|
|
190
|
+
FIREWORKS_API_KEY: "fw",
|
|
191
|
+
PLURNK_PROVIDERS_PROMPT_CACHE_KEY: "malformed",
|
|
192
|
+
},
|
|
193
|
+
"deepseek-v4-pro",
|
|
194
|
+
async () => ({}),
|
|
195
|
+
mapOf({}),
|
|
196
|
+
),
|
|
197
|
+
/fireworks provider: PLURNK_PROVIDERS_PROMPT_CACHE_KEY must be "0" or "1"/,
|
|
198
|
+
);
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
test("#634: a catalog provider with unknown model metadata never falls through to plugin discovery", async () => {
|
|
202
|
+
let scanned = false;
|
|
203
|
+
await assert.rejects(
|
|
204
|
+
() => instantiateProvider(
|
|
205
|
+
"cloudflare",
|
|
206
|
+
{
|
|
207
|
+
CLOUDFLARE_ACCOUNT_ID: "account",
|
|
208
|
+
CLOUDFLARE_API_TOKEN: "token",
|
|
209
|
+
},
|
|
210
|
+
"vendor/model-outside-snapshot",
|
|
211
|
+
async () => { throw new Error("plugin import must not run"); },
|
|
212
|
+
async () => {
|
|
213
|
+
scanned = true;
|
|
214
|
+
return {
|
|
215
|
+
registry: new Map([["cloudflare", "@plurnk/plurnk-providers-cloudflare"]]),
|
|
216
|
+
skipped: new Map(),
|
|
217
|
+
attributions: new Map(),
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
),
|
|
221
|
+
/cloudflare provider: context window unresolved for "vendor\/model-outside-snapshot" — set PLURNK_PROVIDERS_CONTEXT_WINDOW or update the Models.dev snapshot/,
|
|
222
|
+
);
|
|
223
|
+
assert.equal(scanned, false);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
test("#634: explicit metadata constructs an out-of-snapshot Cloudflare model in the consolidated transport", async () => {
|
|
227
|
+
let scanned = false;
|
|
228
|
+
const provider = await instantiateProvider(
|
|
229
|
+
"cloudflare",
|
|
230
|
+
{
|
|
231
|
+
CLOUDFLARE_ACCOUNT_ID: "account",
|
|
232
|
+
CLOUDFLARE_API_TOKEN: "token",
|
|
233
|
+
PLURNK_PROVIDERS_CONTEXT_WINDOW: "128000",
|
|
234
|
+
},
|
|
235
|
+
"vendor/model-outside-snapshot",
|
|
236
|
+
async () => { throw new Error("plugin import must not run"); },
|
|
237
|
+
async () => {
|
|
238
|
+
scanned = true;
|
|
239
|
+
return {
|
|
240
|
+
registry: new Map([["cloudflare", "@plurnk/plurnk-providers-cloudflare"]]),
|
|
241
|
+
skipped: new Map(),
|
|
242
|
+
attributions: new Map(),
|
|
243
|
+
};
|
|
244
|
+
},
|
|
245
|
+
);
|
|
246
|
+
assert.equal(provider.model, "vendor/model-outside-snapshot");
|
|
247
|
+
assert.equal(provider.contextWindow, 128000);
|
|
248
|
+
assert.equal(scanned, false);
|
|
249
|
+
});
|
|
250
|
+
|
|
174
251
|
test("#622: two Fireworks aliases independently select default and priority service tiers", async () => {
|
|
175
252
|
const bodies: Record<string, unknown>[] = [];
|
|
176
253
|
mock.method(globalThis, "fetch", async (_url: string, init?: RequestInit) => {
|
package/src/ProviderRegistry.ts
CHANGED
|
@@ -16,6 +16,7 @@ import { scopeEnvToAlias } from "./env.ts";
|
|
|
16
16
|
import { ollamaProviderFromEnv } from "./ollama.ts";
|
|
17
17
|
import { compatibleProviderFromEnv } from "./compatibleProvider.ts";
|
|
18
18
|
import { contextWindowFromEnv } from "./env.ts";
|
|
19
|
+
import { withProviderDefaults } from "./defaults.ts";
|
|
19
20
|
|
|
20
21
|
// Two injectable seams, both defaulting to production behavior and never passed
|
|
21
22
|
// by real callers: the module importer (tests exercise the bespoke path without
|
|
@@ -45,6 +46,7 @@ export const instantiateProvider = async (
|
|
|
45
46
|
baseUrl?: string, // per-alias endpoint override (PLURNK_BASEURL_<alias>); threaded to both tiers
|
|
46
47
|
alias?: string, // the alias this instantiation serves — scopes PLURNK_PROVIDERS_<KNOB>_<alias> overrides
|
|
47
48
|
): Promise<Provider> => {
|
|
49
|
+
env = withProviderDefaults(env);
|
|
48
50
|
// Per-alias knob scoping overlays _<alias>-suffixed knobs onto their bare
|
|
49
51
|
// names before any resolver reads them.
|
|
50
52
|
if (alias !== undefined) env = scopeEnvToAlias(env, alias);
|
|
@@ -90,7 +90,10 @@ test("official AI SDK provider owns the native request while PLURNK owns call se
|
|
|
90
90
|
});
|
|
91
91
|
|
|
92
92
|
test("cataloged unknown model fails unless its context is explicit", () => {
|
|
93
|
-
assert.
|
|
93
|
+
assert.throws(
|
|
94
|
+
() => catalogProviderFromEnv("xai", env, "not-in-the-catalog"),
|
|
95
|
+
/context window unresolved/,
|
|
96
|
+
);
|
|
94
97
|
const provider = catalogProviderFromEnv("xai", {
|
|
95
98
|
...env,
|
|
96
99
|
XAI_API_KEY: "test-key",
|
|
@@ -98,3 +101,23 @@ test("cataloged unknown model fails unless its context is explicit", () => {
|
|
|
98
101
|
}, "not-in-the-catalog");
|
|
99
102
|
assert.equal(provider?.contextWindow, 8192);
|
|
100
103
|
});
|
|
104
|
+
|
|
105
|
+
test("explicit operator rates price out-of-snapshot models and override catalog rates", () => {
|
|
106
|
+
const priced = {
|
|
107
|
+
...env,
|
|
108
|
+
XAI_API_KEY: "test-key",
|
|
109
|
+
PLURNK_PROVIDERS_CONTEXT_WINDOW: "8192",
|
|
110
|
+
PLURNK_PROVIDERS_INPUT_USD_PER_MILLION: "2",
|
|
111
|
+
PLURNK_PROVIDERS_CACHE_READ_USD_PER_MILLION: "0.5",
|
|
112
|
+
PLURNK_PROVIDERS_OUTPUT_USD_PER_MILLION: "8",
|
|
113
|
+
};
|
|
114
|
+
const usage = {
|
|
115
|
+
prompt: 1_000_000,
|
|
116
|
+
cached: 250_000,
|
|
117
|
+
completion: 500_000,
|
|
118
|
+
reasoning: 500_000,
|
|
119
|
+
total: 2_000_000,
|
|
120
|
+
};
|
|
121
|
+
assert.equal(catalogProviderFromEnv("xai", priced, "not-in-the-catalog")?.calculateCost(usage), 9.625);
|
|
122
|
+
assert.equal(catalogProviderFromEnv("openai", priced, "gpt-4.1-mini")?.calculateCost(usage), 9.625);
|
|
123
|
+
});
|
package/src/catalogProvider.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
promptCacheKeyFromEnv,
|
|
9
9
|
reasoningFromEnv,
|
|
10
10
|
resolveReserve,
|
|
11
|
+
tokenRatesFromEnv,
|
|
11
12
|
type ReserveSpec,
|
|
12
13
|
} from "./env.ts";
|
|
13
14
|
import AiSdkProvider, { type ReasoningStyle } from "./AiSdkProvider.ts";
|
|
@@ -75,14 +76,16 @@ export const providerFromSdkModel = ({
|
|
|
75
76
|
? configuredReasoning
|
|
76
77
|
: { tokens: Math.round(completionTokens / 2) };
|
|
77
78
|
|
|
78
|
-
const
|
|
79
|
-
const
|
|
79
|
+
const configuredRates = tokenRatesFromEnv(env, name);
|
|
80
|
+
const catalogCost = info?.cost;
|
|
81
|
+
const rates = configuredRates ?? (catalogCost === undefined ? null : {
|
|
82
|
+
input: catalogCost.inputPer1M,
|
|
83
|
+
output: catalogCost.outputPer1M,
|
|
84
|
+
cached: catalogCost.cacheReadPer1M ?? catalogCost.inputPer1M,
|
|
85
|
+
});
|
|
86
|
+
const calculateCost = rates === null
|
|
80
87
|
? undefined
|
|
81
|
-
: (usage: ProviderUsage): number => calculateCostUsd(usage,
|
|
82
|
-
input: cost.inputPer1M,
|
|
83
|
-
output: cost.outputPer1M,
|
|
84
|
-
cached: cost.cacheReadPer1M ?? cost.inputPer1M,
|
|
85
|
-
});
|
|
88
|
+
: (usage: ProviderUsage): number => calculateCostUsd(usage, rates);
|
|
86
89
|
|
|
87
90
|
return new AiSdkProvider({
|
|
88
91
|
model,
|
|
@@ -120,8 +123,12 @@ export const catalogProviderFromEnv = (
|
|
|
120
123
|
const resolved = resolveModel(name, model);
|
|
121
124
|
const contextOverride = contextWindowFromEnv(env, name);
|
|
122
125
|
if (lookupProvider(name) === null && configuredProviderInfo(name, env) === null) return null;
|
|
123
|
-
if (name === "openai" && resolved === null) return null;
|
|
124
|
-
if (resolved === null && contextOverride === null)
|
|
126
|
+
if ((name === "openai" || name === "ollama") && resolved === null) return null;
|
|
127
|
+
if (resolved === null && contextOverride === null) {
|
|
128
|
+
throw new Error(
|
|
129
|
+
`${name} provider: context window unresolved for "${model}" — set PLURNK_PROVIDERS_CONTEXT_WINDOW or update the Models.dev snapshot`,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
125
132
|
const wireModel = resolved?.id ?? model;
|
|
126
133
|
const sdk = createSdkModel(name, wireModel, env, baseUrlOverride);
|
|
127
134
|
if (sdk === null) return null;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { withProviderDefaults } from "./defaults.ts";
|
|
4
|
+
|
|
5
|
+
test("withProviderDefaults supplies the package-owned operational floor", () => {
|
|
6
|
+
const env = withProviderDefaults({});
|
|
7
|
+
assert.equal(env.PLURNK_PROVIDERS_PROMPT_CACHE_KEY, "1");
|
|
8
|
+
assert.equal(env.PLURNK_PROVIDERS_FETCH_TIMEOUT, "600000");
|
|
9
|
+
assert.equal(env.PLURNK_PROVIDERS_RETRY_ATTEMPTS, "3");
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("withProviderDefaults preserves every explicit operator value", () => {
|
|
13
|
+
const env = withProviderDefaults({
|
|
14
|
+
PLURNK_PROVIDERS_PROMPT_CACHE_KEY: "malformed",
|
|
15
|
+
PLURNK_PROVIDERS_FETCH_TIMEOUT: "42",
|
|
16
|
+
});
|
|
17
|
+
assert.equal(env.PLURNK_PROVIDERS_PROMPT_CACHE_KEY, "malformed");
|
|
18
|
+
assert.equal(env.PLURNK_PROVIDERS_FETCH_TIMEOUT, "42");
|
|
19
|
+
});
|
package/src/defaults.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { parseEnv } from "node:util";
|
|
3
|
+
|
|
4
|
+
const providerDefaults = parseEnv(readFileSync(new URL("../.env.defaults", import.meta.url), "utf8"));
|
|
5
|
+
|
|
6
|
+
export const withProviderDefaults = (env: NodeJS.ProcessEnv): NodeJS.ProcessEnv => ({
|
|
7
|
+
...providerDefaults,
|
|
8
|
+
...env,
|
|
9
|
+
});
|
package/src/env.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import test from "node:test";
|
|
2
2
|
import { strict as assert } from "node:assert";
|
|
3
|
-
import { parseRequiredInt, parseOptionalInt, requireEnv, reasoningFromEnv } from "./env.ts";
|
|
3
|
+
import { parseRequiredInt, parseOptionalInt, requireEnv, reasoningFromEnv, tokenRatesFromEnv } from "./env.ts";
|
|
4
4
|
|
|
5
5
|
test("parseRequiredInt: parses a non-negative integer", () => {
|
|
6
6
|
assert.equal(parseRequiredInt("600000", "PLURNK_PROVIDERS_FETCH_TIMEOUT", "openai"), 600000);
|
|
@@ -46,6 +46,31 @@ test("requireEnv: returns the value or throws a named error", () => {
|
|
|
46
46
|
assert.throws(() => requireEnv("", "GROQ_API_KEY", "groq"), /must be set/);
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
+
test("tokenRatesFromEnv is all-or-nothing, with cached input defaulting to input", () => {
|
|
50
|
+
assert.equal(tokenRatesFromEnv({}, "cloudflare"), null);
|
|
51
|
+
assert.deepEqual(tokenRatesFromEnv({
|
|
52
|
+
PLURNK_PROVIDERS_INPUT_USD_PER_MILLION: "0.435",
|
|
53
|
+
PLURNK_PROVIDERS_OUTPUT_USD_PER_MILLION: "0.87",
|
|
54
|
+
}, "cloudflare"), {
|
|
55
|
+
input: 0.435,
|
|
56
|
+
cached: 0.435,
|
|
57
|
+
output: 0.87,
|
|
58
|
+
});
|
|
59
|
+
assert.deepEqual(tokenRatesFromEnv({
|
|
60
|
+
PLURNK_PROVIDERS_INPUT_USD_PER_MILLION: "3",
|
|
61
|
+
PLURNK_PROVIDERS_CACHE_READ_USD_PER_MILLION: "0.3",
|
|
62
|
+
PLURNK_PROVIDERS_OUTPUT_USD_PER_MILLION: "15",
|
|
63
|
+
}, "cloudflare"), {
|
|
64
|
+
input: 3,
|
|
65
|
+
cached: 0.3,
|
|
66
|
+
output: 15,
|
|
67
|
+
});
|
|
68
|
+
assert.throws(
|
|
69
|
+
() => tokenRatesFromEnv({ PLURNK_PROVIDERS_INPUT_USD_PER_MILLION: "1" }, "cloudflare"),
|
|
70
|
+
/PLURNK_PROVIDERS_OUTPUT_USD_PER_MILLION must be set/,
|
|
71
|
+
);
|
|
72
|
+
});
|
|
73
|
+
|
|
49
74
|
// — per-alias knob scoping (per-alias scoping doctrine, user 2026-07-03) —
|
|
50
75
|
|
|
51
76
|
test("scopeEnvToAlias: suffixed knob wins, bare is the fallback, other aliases ignored", async () => {
|
|
@@ -84,6 +109,7 @@ test("#36 dataCaptureFromEnv: both knobs OFF by default, ON when set (TOP_LOGPRO
|
|
|
84
109
|
assert.deepEqual(dataCaptureFromEnv({ PLURNK_PROVIDERS_RAWBODY: "0" } as NodeJS.ProcessEnv, "x"), { topLogprobs: null, rawBody: false });
|
|
85
110
|
assert.deepEqual(dataCaptureFromEnv({ PLURNK_PROVIDERS_TOP_LOGPROBS: "3", PLURNK_PROVIDERS_RAWBODY: "1" } as NodeJS.ProcessEnv, "x"), { topLogprobs: 3, rawBody: true });
|
|
86
111
|
assert.deepEqual(dataCaptureFromEnv({ PLURNK_PROVIDERS_TOP_LOGPROBS: "0" } as NodeJS.ProcessEnv, "x"), { topLogprobs: 0, rawBody: false }); // set-to-0 = on, chosen-token only
|
|
112
|
+
assert.deepEqual(dataCaptureFromEnv({ PLURNK_PROVIDERS_TOP_LOGPROBS: "off" } as NodeJS.ProcessEnv, "x"), { topLogprobs: null, rawBody: false });
|
|
87
113
|
});
|
|
88
114
|
|
|
89
115
|
test("OpenAI-lexicon shed: a still-set PLURNK_PROVIDERS_LOGPROB fails hard with the rename pointer", async () => {
|
package/src/env.ts
CHANGED
|
@@ -55,14 +55,18 @@ const shedRenamed = (env: NodeJS.ProcessEnv, oldName: string, newName: string, l
|
|
|
55
55
|
// Data-capture knobs (#36), read identically by every provider (standard AND
|
|
56
56
|
// plugin) so the opt-in surface is one source of truth. Both OFF by default —
|
|
57
57
|
// the flag is the isolation, so serving turns request and carry nothing.
|
|
58
|
-
// PLURNK_PROVIDERS_TOP_LOGPROBS non-negative int = the OpenAI
|
|
59
|
-
// count (
|
|
58
|
+
// PLURNK_PROVIDERS_TOP_LOGPROBS "off" or a non-negative int = the OpenAI
|
|
59
|
+
// `top_logprobs` count (0 captures the chosen token only). Unset -> off.
|
|
60
|
+
// Per-alias-scopable, so "off" can override process-wide capture.
|
|
60
61
|
// PLURNK_PROVIDERS_RAWBODY truthy (not ""/"0") → attach the verbatim wire
|
|
61
62
|
// body to response.rawBody. Per-alias-scopable.
|
|
62
63
|
export const dataCaptureFromEnv = (env: NodeJS.ProcessEnv, label: string): { topLogprobs: number | null; rawBody: boolean } => {
|
|
63
64
|
shedRenamed(env, "PLURNK_PROVIDERS_LOGPROB", "PLURNK_PROVIDERS_TOP_LOGPROBS", label, "the OpenAI wire term"); // lexicon-allow
|
|
65
|
+
const topLogprobs = env.PLURNK_PROVIDERS_TOP_LOGPROBS === "off"
|
|
66
|
+
? null
|
|
67
|
+
: parseOptionalInt(env.PLURNK_PROVIDERS_TOP_LOGPROBS, "PLURNK_PROVIDERS_TOP_LOGPROBS", label);
|
|
64
68
|
return {
|
|
65
|
-
topLogprobs
|
|
69
|
+
topLogprobs,
|
|
66
70
|
rawBody: env.PLURNK_PROVIDERS_RAWBODY !== undefined && env.PLURNK_PROVIDERS_RAWBODY !== "" && env.PLURNK_PROVIDERS_RAWBODY !== "0",
|
|
67
71
|
};
|
|
68
72
|
};
|
|
@@ -76,6 +80,25 @@ export const contextWindowFromEnv = (env: NodeJS.ProcessEnv, label: string): num
|
|
|
76
80
|
return parseOptionalInt(env.PLURNK_PROVIDERS_CONTEXT_WINDOW, "PLURNK_PROVIDERS_CONTEXT_WINDOW", label);
|
|
77
81
|
};
|
|
78
82
|
|
|
83
|
+
export type ProviderTokenRates = { input: number; cached: number; output: number };
|
|
84
|
+
|
|
85
|
+
export const tokenRatesFromEnv = (env: NodeJS.ProcessEnv, label: string): ProviderTokenRates | null => {
|
|
86
|
+
const inputName = "PLURNK_PROVIDERS_INPUT_USD_PER_MILLION";
|
|
87
|
+
const cachedName = "PLURNK_PROVIDERS_CACHE_READ_USD_PER_MILLION";
|
|
88
|
+
const outputName = "PLURNK_PROVIDERS_OUTPUT_USD_PER_MILLION";
|
|
89
|
+
const configured = [inputName, cachedName, outputName]
|
|
90
|
+
.some((name) => env[name] !== undefined && env[name] !== "");
|
|
91
|
+
if (!configured) return null;
|
|
92
|
+
const input = parseRequiredFloat(env[inputName], inputName, label, 0);
|
|
93
|
+
return {
|
|
94
|
+
input,
|
|
95
|
+
cached: env[cachedName] === undefined || env[cachedName] === ""
|
|
96
|
+
? input
|
|
97
|
+
: parseRequiredFloat(env[cachedName], cachedName, label, 0),
|
|
98
|
+
output: parseRequiredFloat(env[outputName], outputName, label, 0),
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
|
|
79
102
|
// The generation-envelope reserves (#507, owner-ruled migration): how much of a
|
|
80
103
|
// DETECTED context window is reserved for reasoning and for completion — the
|
|
81
104
|
// remainder (minus the consumer's own packing-safety margin) is the prompt
|
|
@@ -169,6 +192,9 @@ export const PROVIDERS_KNOBS = Object.freeze([
|
|
|
169
192
|
"PLURNK_PROVIDERS_REASONING_BUDGET",
|
|
170
193
|
"PLURNK_PROVIDERS_REASONING",
|
|
171
194
|
"PLURNK_PROVIDERS_CONTEXT_WINDOW",
|
|
195
|
+
"PLURNK_PROVIDERS_INPUT_USD_PER_MILLION",
|
|
196
|
+
"PLURNK_PROVIDERS_CACHE_READ_USD_PER_MILLION",
|
|
197
|
+
"PLURNK_PROVIDERS_OUTPUT_USD_PER_MILLION",
|
|
172
198
|
"PLURNK_PROVIDERS_RETRY_ATTEMPTS",
|
|
173
199
|
"PLURNK_PROVIDERS_FETCH_TIMEOUT",
|
|
174
200
|
"PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT",
|