@plurnk/plurnk-providers 1.5.0 → 1.6.1
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 +41 -34
- package/README.md +15 -0
- package/SPEC.md +242 -89
- package/dist/AiSdkProvider.d.ts +33 -33
- package/dist/AiSdkProvider.d.ts.map +1 -1
- package/dist/AiSdkProvider.js +442 -133
- package/dist/AiSdkProvider.js.map +1 -1
- package/dist/Mock.d.ts +10 -11
- package/dist/Mock.d.ts.map +1 -1
- package/dist/Mock.js +87 -25
- package/dist/Mock.js.map +1 -1
- package/dist/Pool.d.ts +9 -24
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +86 -25
- package/dist/Pool.js.map +1 -1
- package/dist/accounting.d.ts +5 -2
- package/dist/accounting.d.ts.map +1 -1
- package/dist/accounting.js +100 -16
- package/dist/accounting.js.map +1 -1
- package/dist/accountingPublic.d.ts +5 -0
- package/dist/accountingPublic.d.ts.map +1 -0
- package/dist/accountingPublic.js +3 -0
- package/dist/accountingPublic.js.map +1 -0
- package/dist/aiSdkTransport.d.ts +9 -2
- package/dist/aiSdkTransport.d.ts.map +1 -1
- package/dist/aiSdkTransport.js +160 -62
- package/dist/aiSdkTransport.js.map +1 -1
- package/dist/capacity.d.ts +26 -0
- package/dist/capacity.d.ts.map +1 -0
- package/dist/capacity.js +90 -0
- package/dist/capacity.js.map +1 -0
- package/dist/catalogProvider.d.ts +8 -3
- package/dist/catalogProvider.d.ts.map +1 -1
- package/dist/catalogProvider.js +45 -41
- package/dist/catalogProvider.js.map +1 -1
- package/dist/compatibleProvider.d.ts.map +1 -1
- package/dist/compatibleProvider.js +26 -12
- package/dist/compatibleProvider.js.map +1 -1
- package/dist/cost.d.ts +10 -10
- package/dist/cost.d.ts.map +1 -1
- package/dist/cost.js +90 -42
- package/dist/cost.js.map +1 -1
- package/dist/env.d.ts +13 -11
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +83 -46
- package/dist/env.js.map +1 -1
- package/dist/errors.d.ts +17 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +91 -8
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/ollama.js +3 -3
- package/dist/ollama.js.map +1 -1
- package/dist/promptTokens.d.ts.map +1 -1
- package/dist/promptTokens.js +7 -4
- package/dist/promptTokens.js.map +1 -1
- package/dist/sdkModels.d.ts +7 -2
- package/dist/sdkModels.d.ts.map +1 -1
- package/dist/sdkModels.js +43 -13
- package/dist/sdkModels.js.map +1 -1
- package/dist/types.d.ts +55 -33
- package/dist/types.d.ts.map +1 -1
- package/dist/usage.d.ts +22 -5
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +169 -83
- package/dist/usage.js.map +1 -1
- package/package.json +18 -7
- package/src/AiSdkProvider.test.ts +964 -206
- package/src/AiSdkProvider.ts +545 -155
- package/src/Mock.test.ts +69 -30
- package/src/Mock.ts +99 -29
- package/src/Pool.test.ts +90 -19
- package/src/Pool.ts +96 -27
- package/src/ProviderRegistry.test.ts +16 -11
- package/src/accounting.test.ts +58 -22
- package/src/accounting.ts +119 -18
- package/src/accountingPublic.ts +9 -0
- package/src/aiSdkTransport.test.ts +42 -49
- package/src/aiSdkTransport.ts +174 -62
- package/src/boundaries.test.ts +2 -0
- package/src/capacity.test.ts +92 -0
- package/src/capacity.ts +140 -0
- package/src/catalogProvider.test.ts +339 -30
- package/src/catalogProvider.ts +65 -47
- package/src/compatibleProvider.test.ts +7 -5
- package/src/compatibleProvider.ts +29 -13
- package/src/cost.test.ts +86 -36
- package/src/cost.ts +111 -50
- package/src/defaults.test.ts +13 -3
- package/src/env.test.ts +103 -25
- package/src/env.ts +153 -65
- package/src/errors.test.ts +80 -2
- package/src/errors.ts +107 -8
- package/src/index.ts +26 -7
- package/src/ollama.test.ts +5 -3
- package/src/ollama.ts +3 -3
- package/src/promptTokens.ts +8 -5
- package/src/sdkModels.test.ts +77 -8
- package/src/sdkModels.ts +51 -15
- package/src/types.ts +112 -51
- package/src/usage.test.ts +112 -116
- package/src/usage.ts +214 -93
package/dist/catalogProvider.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { lookupProvider, resolveModel } from "@plurnk/plurnk-models";
|
|
2
|
-
import { contextWindowFromEnv, effectiveContextWindow, dataCaptureFromEnv,
|
|
2
|
+
import { contextWindowFromEnv, effectiveContextWindow, dataCaptureFromEnv, generationEnvelopeFromEnv, parseRequiredFloat, parseRequiredInt, parseTimeoutMs, cacheAffinityFromEnv, cacheWritePolicyFromEnv, reasoningFromEnv, reasoningResponseStyleFromEnv, } from "./env.js";
|
|
3
3
|
import AiSdkProvider from "./AiSdkProvider.js";
|
|
4
4
|
import { configuredProviderInfo, createSdkModel } from "./sdkModels.js";
|
|
5
5
|
import { providerSource } from "./notices.js";
|
|
6
|
-
import {
|
|
6
|
+
import { estimateProviderCost } from "./cost.js";
|
|
7
7
|
import { emitWarningOnce } from "./warnings.js";
|
|
8
8
|
const reasoningStyleFromEnv = (env, name) => {
|
|
9
9
|
const prefix = name.replaceAll(/[^a-zA-Z0-9]/g, "_").toUpperCase();
|
|
@@ -19,65 +19,65 @@ const reasoningStyleFromEnv = (env, name) => {
|
|
|
19
19
|
}
|
|
20
20
|
return value;
|
|
21
21
|
};
|
|
22
|
-
export const providerFromSdkModel = ({ name, env, model, languageModel,
|
|
23
|
-
emitWarningOnce(`${name} provider:
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
: { tokens: Math.min(info.maxOutput, Math.round(configuredCompletion.percent * contextWindow)) };
|
|
31
|
-
const completionTokens = resolveReserve(completionReserve, contextWindow);
|
|
32
|
-
const reasoningReserve = "tokens" in configuredReasoning
|
|
33
|
-
? configuredReasoning
|
|
34
|
-
: reasoning.budget !== null
|
|
35
|
-
? { tokens: reasoning.budget }
|
|
36
|
-
: completionTokens === null
|
|
37
|
-
? configuredReasoning
|
|
38
|
-
: { tokens: Math.round(completionTokens / 2) };
|
|
22
|
+
export const providerFromSdkModel = ({ name, env, model, languageModel, normalizeCost, url, headers, contextWindow, info, attributions, cacheAffinity, systemCacheProviderOptions, reasoningResponseProviderOptions, additiveReasoningProvider, }) => {
|
|
23
|
+
emitWarningOnce(`${name} provider: request-level prompt counting is a chars/2 estimate; capacity is deferred to the provider`, "PLURNK_PROMPT_COUNT_ESTIMATE");
|
|
24
|
+
const maxInputTokens = info?.maxInputTokens ?? null;
|
|
25
|
+
const maxOutputTokens = info?.maxOutputTokens === undefined
|
|
26
|
+
? null
|
|
27
|
+
: Math.min(info.maxOutputTokens, contextWindow);
|
|
28
|
+
const envelope = generationEnvelopeFromEnv(env, name, contextWindow, maxOutputTokens);
|
|
29
|
+
const reasoning = reasoningFromEnv(env, name, envelope.reasoningBudget);
|
|
39
30
|
const catalogCost = info?.cost;
|
|
40
31
|
const rates = catalogCost === undefined ? null : {
|
|
41
32
|
input: catalogCost.inputPer1M,
|
|
42
33
|
output: catalogCost.outputPer1M,
|
|
43
|
-
|
|
34
|
+
...(catalogCost.reasoningPer1M === undefined
|
|
35
|
+
? {}
|
|
36
|
+
: { reasoning: catalogCost.reasoningPer1M }),
|
|
37
|
+
...(catalogCost.cacheReadPer1M === undefined
|
|
38
|
+
? {}
|
|
39
|
+
: { cacheRead: catalogCost.cacheReadPer1M }),
|
|
40
|
+
...(catalogCost.cacheWritePer1M === undefined
|
|
41
|
+
? {}
|
|
42
|
+
: { cacheWrite: catalogCost.cacheWritePer1M }),
|
|
44
43
|
};
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const calculateCharge = rates === null
|
|
49
|
-
? () => ({ kind: "unknown", reason: "the response reported no cost and Models.dev has no rate for this model" })
|
|
50
|
-
: rates.input === 0 && rates.output === 0 && rates.cached === 0
|
|
51
|
-
? () => ({ kind: "free", source: "Models.dev catalog rates" })
|
|
52
|
-
: (usage) => ({
|
|
53
|
-
kind: "estimated",
|
|
54
|
-
usd: calculateCostUsdDecimal(usage, rates),
|
|
55
|
-
source: "Models.dev catalog rates",
|
|
56
|
-
});
|
|
44
|
+
const estimateCost = (usage) => estimateProviderCost(usage, rates, "Models.dev catalog rates");
|
|
45
|
+
const affinityEnabled = cacheAffinityFromEnv(env, name);
|
|
46
|
+
const cacheWritePolicy = cacheWritePolicyFromEnv(env, name);
|
|
57
47
|
return new AiSdkProvider({
|
|
58
48
|
model,
|
|
59
49
|
...(attributions === undefined ? {} : { attributions }),
|
|
60
50
|
...(languageModel === undefined ? {} : { languageModel }),
|
|
61
|
-
...(
|
|
51
|
+
...(normalizeCost === undefined ? {} : { normalizeCost }),
|
|
62
52
|
...(url === undefined ? {} : { url }),
|
|
63
53
|
...(headers === undefined ? {} : { headers: { ...headers } }),
|
|
64
54
|
contextWindow,
|
|
65
|
-
|
|
66
|
-
|
|
55
|
+
maxInputTokens,
|
|
56
|
+
maxOutputTokens,
|
|
57
|
+
outputBudget: envelope.outputBudget,
|
|
58
|
+
reasoningBudget: reasoning.budget,
|
|
59
|
+
...(additiveReasoningProvider === undefined ? {} : { additiveReasoningProvider }),
|
|
60
|
+
fetchTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_FETCH_TIMEOUT, "PLURNK_PROVIDERS_FETCH_TIMEOUT", name),
|
|
61
|
+
operationTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_OPERATION_TIMEOUT, "PLURNK_PROVIDERS_OPERATION_TIMEOUT", name),
|
|
62
|
+
firstContentTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT, "PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT", name),
|
|
63
|
+
streamIdleTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT, "PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT", name),
|
|
67
64
|
reasoning,
|
|
68
65
|
reasoningResponseStyle: reasoningResponseStyleFromEnv(env, name),
|
|
69
66
|
temperature: parseRequiredFloat(env.PLURNK_PROVIDERS_TEMPERATURE, "PLURNK_PROVIDERS_TEMPERATURE", name, 0),
|
|
70
67
|
repeatPenalty: parseRequiredFloat(env.PLURNK_PROVIDERS_REPEAT_PENALTY, "PLURNK_PROVIDERS_REPEAT_PENALTY", name, 0),
|
|
71
68
|
frequencyPenalty: parseRequiredFloat(env.PLURNK_PROVIDERS_FREQUENCY_PENALTY, "PLURNK_PROVIDERS_FREQUENCY_PENALTY", name, 0),
|
|
72
|
-
reasoningReserve,
|
|
73
|
-
completionReserve,
|
|
74
69
|
retryAttempts: parseRequiredInt(env.PLURNK_PROVIDERS_RETRY_ATTEMPTS, "PLURNK_PROVIDERS_RETRY_ATTEMPTS", name),
|
|
75
70
|
errorDetailLimit: parseRequiredInt(env.PLURNK_PROVIDERS_ERROR_DETAIL_LIMIT, "PLURNK_PROVIDERS_ERROR_DETAIL_LIMIT", name),
|
|
76
71
|
reasoningStyle: reasoningStyleFromEnv(env, name),
|
|
77
|
-
|
|
72
|
+
...(affinityEnabled && cacheAffinity !== undefined ? { cacheAffinity } : {}),
|
|
73
|
+
...(cacheWritePolicy === "stable-system" && systemCacheProviderOptions !== undefined
|
|
74
|
+
? { systemCacheProviderOptions }
|
|
75
|
+
: {}),
|
|
76
|
+
...(reasoningResponseProviderOptions === undefined
|
|
77
|
+
? {}
|
|
78
|
+
: { reasoningResponseProviderOptions }),
|
|
78
79
|
serviceTier: env.PLURNK_PROVIDERS_SERVICE_TIER,
|
|
79
|
-
|
|
80
|
-
calculateCharge,
|
|
80
|
+
estimateCost,
|
|
81
81
|
source: providerSource(name),
|
|
82
82
|
gbnfDebug: env.PLURNK_PROVIDERS_GBNF_DEBUG !== undefined
|
|
83
83
|
&& env.PLURNK_PROVIDERS_GBNF_DEBUG !== ""
|
|
@@ -109,9 +109,13 @@ export const catalogProviderFromEnv = (name, env, model, baseUrlOverride) => {
|
|
|
109
109
|
env,
|
|
110
110
|
model: wireModel,
|
|
111
111
|
languageModel: sdk.languageModel,
|
|
112
|
-
|
|
112
|
+
normalizeCost: sdk.normalizeCost,
|
|
113
113
|
url: sdk.compatible?.url,
|
|
114
114
|
headers: sdk.compatible?.headers,
|
|
115
|
+
cacheAffinity: sdk.cacheAffinity,
|
|
116
|
+
systemCacheProviderOptions: sdk.systemCacheProviderOptions,
|
|
117
|
+
reasoningResponseProviderOptions: sdk.reasoningResponseProviderOptions,
|
|
118
|
+
additiveReasoningProvider: sdk.additiveReasoningProvider,
|
|
115
119
|
contextWindow,
|
|
116
120
|
info,
|
|
117
121
|
});
|
|
@@ -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,sBAAsB,EACtB,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"catalogProvider.js","sourceRoot":"","sources":["../src/catalogProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compatibleProvider.d.ts","sourceRoot":"","sources":["../src/compatibleProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compatibleProvider.d.ts","sourceRoot":"","sources":["../src/compatibleProvider.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAgG3C,eAAO,MAAM,yBAAyB,aACxB,QAAQ,GAAG,QAAQ,OACxB,MAAM,CAAC,UAAU,SACf,MAAM,oBACK,MAAM,KACzB,OAAO,CAAC,QAAQ,CA8GlB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import AiSdkProvider from "./AiSdkProvider.js";
|
|
2
|
-
import { contextWindowFromEnv, effectiveContextWindow, dataCaptureFromEnv,
|
|
2
|
+
import { contextWindowFromEnv, effectiveContextWindow, dataCaptureFromEnv, generationEnvelopeFromEnv, parseOptionalFloat, parseOptionalInt, parseRequiredFloat, parseRequiredInt, parseTimeoutMs, cacheAffinityFromEnv, cacheWritePolicyFromEnv, reasoningFromEnv, reasoningResponseStyleFromEnv, } from "./env.js";
|
|
3
3
|
import { providerSource } from "./notices.js";
|
|
4
|
+
import { plurnkCostNormalizer } from "./accounting.js";
|
|
4
5
|
import { emitWarningOnce } from "./warnings.js";
|
|
5
6
|
const chatUrl = (provider, env, override) => {
|
|
6
7
|
const configured = override
|
|
@@ -20,7 +21,10 @@ const chatUrl = (provider, env, override) => {
|
|
|
20
21
|
const probeModels = async (url, headers, model, timeout) => {
|
|
21
22
|
const modelsUrl = url.replace(/\/chat\/completions$/, "/models");
|
|
22
23
|
try {
|
|
23
|
-
const response = await fetch(modelsUrl, {
|
|
24
|
+
const response = await fetch(modelsUrl, {
|
|
25
|
+
headers,
|
|
26
|
+
...(timeout > 0 ? { signal: AbortSignal.timeout(timeout) } : {}),
|
|
27
|
+
});
|
|
24
28
|
if (!response.ok)
|
|
25
29
|
return { nCtx: null, llamaServer: false, servedModel: null, failed: true };
|
|
26
30
|
const data = await response.json();
|
|
@@ -53,7 +57,7 @@ const probeProps = async (url, headers, timeout) => {
|
|
|
53
57
|
try {
|
|
54
58
|
const response = await fetch(url.replace(/\/v1\/chat\/completions$/, "/props"), {
|
|
55
59
|
headers,
|
|
56
|
-
signal: AbortSignal.timeout(timeout),
|
|
60
|
+
...(timeout > 0 ? { signal: AbortSignal.timeout(timeout) } : {}),
|
|
57
61
|
});
|
|
58
62
|
if (!response.ok)
|
|
59
63
|
return { slotCount: null, eosText: null };
|
|
@@ -68,12 +72,17 @@ const probeProps = async (url, headers, timeout) => {
|
|
|
68
72
|
}
|
|
69
73
|
};
|
|
70
74
|
export const compatibleProviderFromEnv = async (provider, env, model, baseUrlOverride) => {
|
|
75
|
+
// The knobs remain universal and fail hard when malformed, but this local /
|
|
76
|
+
// first-party compatible route declares no vendor cache projection. llama-server
|
|
77
|
+
// already owns slot affinity and the first-party endpoint receives worker metadata.
|
|
78
|
+
cacheAffinityFromEnv(env, provider);
|
|
79
|
+
cacheWritePolicyFromEnv(env, provider);
|
|
71
80
|
const url = chatUrl(provider, env, baseUrlOverride);
|
|
72
81
|
const apiKey = provider === "openai" ? env.OPENAI_API_KEY : env.PLURNK_API_KEY;
|
|
73
82
|
const headers = apiKey === undefined || apiKey.length === 0
|
|
74
83
|
? {}
|
|
75
84
|
: { Authorization: `Bearer ${apiKey}` };
|
|
76
|
-
const timeout =
|
|
85
|
+
const timeout = parseTimeoutMs(env.PLURNK_PROVIDERS_FETCH_TIMEOUT, "PLURNK_PROVIDERS_FETCH_TIMEOUT", provider);
|
|
77
86
|
const attempts = parseRequiredInt(env.PLURNK_PROVIDERS_PROBE_ATTEMPTS, "PLURNK_PROVIDERS_PROBE_ATTEMPTS", provider);
|
|
78
87
|
const probe = await probeModelsRetrying(url, headers, model, timeout, attempts, parseRequiredInt(env.PLURNK_PROVIDERS_PROBE_DELAY, "PLURNK_PROVIDERS_PROBE_DELAY", provider));
|
|
79
88
|
const contextWindow = effectiveContextWindow(contextWindowFromEnv(env, provider), probe.nCtx);
|
|
@@ -105,17 +114,24 @@ export const compatibleProviderFromEnv = async (provider, env, model, baseUrlOve
|
|
|
105
114
|
promptTokensUrl = url.replace(/\/v1\/chat\/completions$/, "/v1/chat/completions/input_tokens");
|
|
106
115
|
}
|
|
107
116
|
if (!llamaServer) {
|
|
108
|
-
emitWarningOnce(`${provider} provider:
|
|
117
|
+
emitWarningOnce(`${provider} provider: request-level prompt counting is a chars/2 estimate; capacity is deferred to the provider`, "PLURNK_PROMPT_COUNT_ESTIMATE");
|
|
109
118
|
}
|
|
110
|
-
const
|
|
119
|
+
const envelope = generationEnvelopeFromEnv(env, provider, contextWindow, null);
|
|
120
|
+
const reasoning = reasoningFromEnv(env, provider, envelope.reasoningBudget);
|
|
111
121
|
return new AiSdkProvider({
|
|
112
122
|
model,
|
|
113
123
|
url,
|
|
114
124
|
headers,
|
|
115
125
|
contextWindow,
|
|
126
|
+
maxInputTokens: null,
|
|
127
|
+
maxOutputTokens: null,
|
|
128
|
+
outputBudget: envelope.outputBudget,
|
|
129
|
+
reasoningBudget: reasoning.budget,
|
|
116
130
|
fetchTimeoutMs: timeout,
|
|
117
|
-
|
|
118
|
-
|
|
131
|
+
operationTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_OPERATION_TIMEOUT, "PLURNK_PROVIDERS_OPERATION_TIMEOUT", provider),
|
|
132
|
+
firstContentTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT, "PLURNK_PROVIDERS_FIRST_CONTENT_TIMEOUT", provider),
|
|
133
|
+
streamIdleTimeoutMs: parseTimeoutMs(env.PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT, "PLURNK_PROVIDERS_STREAM_IDLE_TIMEOUT", provider),
|
|
134
|
+
reasoning,
|
|
119
135
|
reasoningResponseStyle: reasoningResponseStyleFromEnv(env, provider),
|
|
120
136
|
reasoningStyle,
|
|
121
137
|
temperature: parseRequiredFloat(env.PLURNK_PROVIDERS_TEMPERATURE, "PLURNK_PROVIDERS_TEMPERATURE", provider, 0),
|
|
@@ -125,12 +141,9 @@ export const compatibleProviderFromEnv = async (provider, env, model, baseUrlOve
|
|
|
125
141
|
dryBase: parseOptionalFloat(env.PLURNK_PROVIDERS_DRY_BASE, "PLURNK_PROVIDERS_DRY_BASE", provider, 0) ?? undefined,
|
|
126
142
|
dryAllowedLength: parseOptionalInt(env.PLURNK_PROVIDERS_DRY_ALLOWED_LENGTH, "PLURNK_PROVIDERS_DRY_ALLOWED_LENGTH", provider) ?? undefined,
|
|
127
143
|
repeatLastN: parseOptionalInt(env.PLURNK_PROVIDERS_REPEAT_LAST_N, "PLURNK_PROVIDERS_REPEAT_LAST_N", provider) ?? undefined,
|
|
128
|
-
reasoningReserve,
|
|
129
|
-
completionReserve,
|
|
130
144
|
tuningFloors: provider !== "plurnk",
|
|
131
145
|
retryAttempts: parseRequiredInt(env.PLURNK_PROVIDERS_RETRY_ATTEMPTS, "PLURNK_PROVIDERS_RETRY_ATTEMPTS", provider),
|
|
132
146
|
errorDetailLimit: parseRequiredInt(env.PLURNK_PROVIDERS_ERROR_DETAIL_LIMIT, "PLURNK_PROVIDERS_ERROR_DETAIL_LIMIT", provider),
|
|
133
|
-
promptCacheKey: promptCacheKeyFromEnv(env, provider),
|
|
134
147
|
source: providerSource(provider),
|
|
135
148
|
grammarStyle,
|
|
136
149
|
gbnfDebug: env.PLURNK_PROVIDERS_GBNF_DEBUG !== undefined
|
|
@@ -138,6 +151,7 @@ export const compatibleProviderFromEnv = async (provider, env, model, baseUrlOve
|
|
|
138
151
|
&& env.PLURNK_PROVIDERS_GBNF_DEBUG !== "0",
|
|
139
152
|
...dataCaptureFromEnv(env, provider),
|
|
140
153
|
firstPartyMetadata: provider === "plurnk",
|
|
154
|
+
normalizeCost: provider === "plurnk" ? plurnkCostNormalizer : undefined,
|
|
141
155
|
apiKeyRejectedMessage: provider === "plurnk"
|
|
142
156
|
? "PLURNK_API_KEY was rejected by plurnk.ai (invalid or expired)."
|
|
143
157
|
: undefined,
|
|
@@ -147,7 +161,7 @@ export const compatibleProviderFromEnv = async (provider, env, model, baseUrlOve
|
|
|
147
161
|
tokenizeUrl,
|
|
148
162
|
promptTokensUrl,
|
|
149
163
|
servedModel: probe.servedModel ?? undefined,
|
|
150
|
-
|
|
164
|
+
requiresOutputBudget: llamaServer || undefined,
|
|
151
165
|
});
|
|
152
166
|
};
|
|
153
167
|
//# sourceMappingURL=compatibleProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compatibleProvider.js","sourceRoot":"","sources":["../src/compatibleProvider.ts"],"names":[],"mappings":"AAAA,OAAO,aAAyD,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EACH,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"compatibleProvider.js","sourceRoot":"","sources":["../src/compatibleProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/cost.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import type { ChargedCost, ProviderCost, ProviderUsage } from "./types.ts";
|
|
2
|
+
import { type TokenRates } from "./usage.ts";
|
|
3
|
+
export declare const validateDecimal: (value: unknown, name: string) => string;
|
|
4
|
+
export declare const validateChargedCost: (value: unknown) => ChargedCost;
|
|
5
|
+
export declare const validateProviderCost: (value: unknown) => ProviderCost;
|
|
6
|
+
export declare const estimateProviderCost: (usage: ProviderUsage | undefined, rates: TokenRates | null, source: string) => ProviderCost;
|
|
7
|
+
export declare const resolveProviderCost: (direct: ProviderCost | undefined, estimated: ProviderCost) => ProviderCost;
|
|
8
|
+
export declare const providerCostUsd: (cost: ProviderCost) => string | null;
|
|
9
|
+
export declare const addDecimals: (values: readonly string[]) => string;
|
|
10
|
+
export declare const sumProviderCostsUsd: (costs: readonly ProviderCost[]) => string | null;
|
|
11
11
|
//# sourceMappingURL=cost.d.ts.map
|
package/dist/cost.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,
|
|
1
|
+
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,WAAW,EACX,YAAY,EACZ,aAAa,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAGH,KAAK,UAAU,EAClB,MAAM,YAAY,CAAC;AAmBpB,eAAO,MAAM,eAAe,UAAW,OAAO,QAAQ,MAAM,KAAG,MAK9D,CAAC;AAWF,eAAO,MAAM,mBAAmB,UAAW,OAAO,KAAG,WASpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,UAAW,OAAO,KAAG,YAerD,CAAC;AAEF,eAAO,MAAM,oBAAoB,UACtB,aAAa,GAAG,SAAS,SACzB,UAAU,GAAG,IAAI,UAChB,MAAM,KACf,YAkBF,CAAC;AAEF,eAAO,MAAM,mBAAmB,WACpB,YAAY,GAAG,SAAS,aACrB,YAAY,KACxB,YAE+B,CAAC;AAEnC,eAAO,MAAM,eAAe,SAAU,YAAY,KAAG,MAAM,GAAG,IAY7D,CAAC;AAQF,eAAO,MAAM,WAAW,WAAY,SAAS,MAAM,EAAE,KAAG,MAQvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAAW,SAAS,YAAY,EAAE,KAAG,MAAM,GAAG,IAK7E,CAAC"}
|
package/dist/cost.js
CHANGED
|
@@ -1,61 +1,109 @@
|
|
|
1
|
+
import { calculateCostUsdDecimal, canonicalDecimal, } from "./usage.js";
|
|
1
2
|
const DECIMAL = /^(?:0|[1-9]\d*)(?:\.\d+)?$/;
|
|
2
3
|
const CURRENCY = /^[A-Z][A-Z0-9]{2,11}$/;
|
|
4
|
+
const recordOf = (value, name) => {
|
|
5
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
6
|
+
throw new TypeError(`${name} must be an object`);
|
|
7
|
+
}
|
|
8
|
+
return value;
|
|
9
|
+
};
|
|
3
10
|
const nonEmpty = (value, name) => {
|
|
4
|
-
if (value.trim() === "")
|
|
5
|
-
throw new TypeError(`${name} must be non-empty`);
|
|
11
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
12
|
+
throw new TypeError(`${name} must be a non-empty string`);
|
|
13
|
+
}
|
|
6
14
|
return value;
|
|
7
15
|
};
|
|
8
|
-
const
|
|
9
|
-
if (!DECIMAL.test(value))
|
|
16
|
+
export const validateDecimal = (value, name) => {
|
|
17
|
+
if (typeof value !== "string" || !DECIMAL.test(value)) {
|
|
10
18
|
throw new TypeError(`${name} must be a canonical non-negative decimal string`);
|
|
19
|
+
}
|
|
11
20
|
return value;
|
|
12
21
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
throw new TypeError("provider charge currency must be an uppercase currency code");
|
|
22
|
+
const monetaryAmount = (value, name) => {
|
|
23
|
+
const amount = recordOf(value, name);
|
|
24
|
+
const decimalAmount = validateDecimal(amount.amount, `${name} amount`);
|
|
25
|
+
if (typeof amount.currency !== "string" || !CURRENCY.test(amount.currency)) {
|
|
26
|
+
throw new TypeError(`${name} currency must be an uppercase currency code`);
|
|
19
27
|
}
|
|
20
|
-
|
|
21
|
-
nonEmpty(charge.source, "provider charge source");
|
|
22
|
-
return charge;
|
|
28
|
+
return { amount: decimalAmount, currency: amount.currency };
|
|
23
29
|
};
|
|
24
|
-
export const
|
|
30
|
+
export const validateChargedCost = (value) => {
|
|
31
|
+
const cost = recordOf(value, "provider charged cost");
|
|
32
|
+
if (cost.kind !== "charged")
|
|
33
|
+
throw new TypeError("provider charged cost kind must be charged");
|
|
34
|
+
monetaryAmount(cost.amount, "provider charged cost");
|
|
35
|
+
if (cost.usdEquivalent !== undefined) {
|
|
36
|
+
validateDecimal(cost.usdEquivalent, "provider charged cost USD equivalent");
|
|
37
|
+
}
|
|
38
|
+
nonEmpty(cost.source, "provider charged cost source");
|
|
39
|
+
return value;
|
|
40
|
+
};
|
|
41
|
+
export const validateProviderCost = (value) => {
|
|
42
|
+
const cost = recordOf(value, "provider cost");
|
|
25
43
|
switch (cost.kind) {
|
|
26
|
-
case "
|
|
27
|
-
return
|
|
44
|
+
case "charged":
|
|
45
|
+
return validateChargedCost(value);
|
|
28
46
|
case "estimated":
|
|
29
|
-
|
|
30
|
-
nonEmpty(cost.source, "provider cost
|
|
31
|
-
return
|
|
32
|
-
case "free":
|
|
33
|
-
nonEmpty(cost.source, "provider free source");
|
|
34
|
-
return cost;
|
|
47
|
+
monetaryAmount(cost.amount, "provider estimated cost");
|
|
48
|
+
nonEmpty(cost.source, "provider estimated cost source");
|
|
49
|
+
return value;
|
|
35
50
|
case "unknown":
|
|
36
51
|
nonEmpty(cost.reason, "provider unknown-cost reason");
|
|
37
|
-
return
|
|
52
|
+
return value;
|
|
53
|
+
default:
|
|
54
|
+
throw new TypeError("provider cost kind must be charged, estimated, or unknown");
|
|
38
55
|
}
|
|
39
56
|
};
|
|
40
|
-
export const
|
|
41
|
-
if (
|
|
42
|
-
return
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
57
|
+
export const estimateProviderCost = (usage, rates, source) => {
|
|
58
|
+
if (usage === undefined) {
|
|
59
|
+
return { kind: "unknown", reason: "the provider response reported no normalized usage" };
|
|
60
|
+
}
|
|
61
|
+
if (rates === null) {
|
|
62
|
+
return { kind: "unknown", reason: "Models.dev has no complete rate for this model" };
|
|
63
|
+
}
|
|
64
|
+
const usd = calculateCostUsdDecimal(usage, rates);
|
|
65
|
+
return usd === null
|
|
66
|
+
? {
|
|
67
|
+
kind: "unknown",
|
|
68
|
+
reason: "the provider response omitted a token category with a distinct Models.dev rate",
|
|
69
|
+
}
|
|
70
|
+
: {
|
|
71
|
+
kind: "estimated",
|
|
72
|
+
amount: { amount: usd, currency: "USD" },
|
|
73
|
+
source,
|
|
74
|
+
};
|
|
49
75
|
};
|
|
76
|
+
export const resolveProviderCost = (direct, estimated) => direct === undefined
|
|
77
|
+
? validateProviderCost(estimated)
|
|
78
|
+
: validateProviderCost(direct);
|
|
50
79
|
export const providerCostUsd = (cost) => {
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
80
|
+
const validated = validateProviderCost(cost);
|
|
81
|
+
switch (validated.kind) {
|
|
82
|
+
case "charged":
|
|
83
|
+
return validated.amount.currency === "USD"
|
|
84
|
+
? validated.amount.amount
|
|
85
|
+
: validated.usdEquivalent ?? null;
|
|
86
|
+
case "estimated":
|
|
87
|
+
return validated.amount.currency === "USD" ? validated.amount.amount : null;
|
|
88
|
+
case "unknown":
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const decimalParts = (value) => {
|
|
93
|
+
validateDecimal(value, "decimal amount");
|
|
94
|
+
const [integer, fraction = ""] = value.split(".");
|
|
95
|
+
return { coefficient: BigInt(`${integer}${fraction}`), scale: fraction.length };
|
|
96
|
+
};
|
|
97
|
+
export const addDecimals = (values) => {
|
|
98
|
+
const parts = values.map(decimalParts);
|
|
99
|
+
const scale = Math.max(0, ...parts.map((part) => part.scale));
|
|
100
|
+
const coefficient = parts.reduce((sum, part) => sum + part.coefficient * 10n ** BigInt(scale - part.scale), 0n);
|
|
101
|
+
return canonicalDecimal(coefficient, scale);
|
|
102
|
+
};
|
|
103
|
+
export const sumProviderCostsUsd = (costs) => {
|
|
104
|
+
const values = costs.map(providerCostUsd);
|
|
105
|
+
return values.some((value) => value === null)
|
|
106
|
+
? null
|
|
107
|
+
: addDecimals(values);
|
|
108
|
+
};
|
|
61
109
|
//# sourceMappingURL=cost.js.map
|
package/dist/cost.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
export declare const parseRequiredInt: (raw: string | undefined, name: string, label: string) => number;
|
|
2
|
+
export declare const MAX_PROVIDER_TIMEOUT_MS = 2147483647;
|
|
3
|
+
export declare const parseTimeoutMs: (raw: string | undefined, name: string, label: string) => number;
|
|
2
4
|
export declare const parseOptionalInt: (raw: string | undefined, name: string, label: string) => number | null;
|
|
3
5
|
export declare const parseRequiredFloat: (raw: string | undefined, name: string, label: string, min: number) => number;
|
|
4
6
|
export declare const parseOptionalFloat: (raw: string | undefined, name: string, label: string, min: number) => number | null;
|
|
5
7
|
export declare const requireEnv: (raw: string | undefined, name: string, label: string) => string;
|
|
6
|
-
export
|
|
8
|
+
export type CacheWritePolicy = "off" | "stable-system";
|
|
9
|
+
export declare const cacheAffinityFromEnv: (env: NodeJS.ProcessEnv, label: string) => boolean;
|
|
10
|
+
export declare const cacheWritePolicyFromEnv: (env: NodeJS.ProcessEnv, label: string) => CacheWritePolicy;
|
|
7
11
|
export declare const dataCaptureFromEnv: (env: NodeJS.ProcessEnv, label: string) => {
|
|
8
12
|
topLogprobs: number | null;
|
|
9
13
|
rawBody: boolean;
|
|
@@ -11,20 +15,18 @@ export declare const dataCaptureFromEnv: (env: NodeJS.ProcessEnv, label: string)
|
|
|
11
15
|
export declare const contextWindowFromEnv: (env: NodeJS.ProcessEnv, label: string) => number | null;
|
|
12
16
|
export declare function effectiveContextWindow(operatorCap: number | null, naturalWindow: number): number;
|
|
13
17
|
export declare function effectiveContextWindow(operatorCap: number | null, naturalWindow: number | null): number | null;
|
|
14
|
-
export type
|
|
18
|
+
export type TokenBudgetSpec = {
|
|
15
19
|
percent: number;
|
|
16
20
|
} | {
|
|
17
21
|
tokens: number;
|
|
18
22
|
};
|
|
19
|
-
export declare const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export declare const resolveReserve: (spec: ReserveSpec, window: number | null) => number | null;
|
|
24
|
-
export declare const resolveEnvelopeFromEnv: (env: NodeJS.ProcessEnv, window: number | null) => {
|
|
25
|
-
reasoningReserve: number | null;
|
|
26
|
-
completionReserve: number | null;
|
|
23
|
+
export declare const resolveTokenBudget: (spec: TokenBudgetSpec, window: number | null) => number | null;
|
|
24
|
+
export type GenerationEnvelope = {
|
|
25
|
+
readonly outputBudget: number | null;
|
|
26
|
+
readonly reasoningBudget: number | null;
|
|
27
27
|
};
|
|
28
|
+
export declare const generationEnvelopeFromEnv: (env: NodeJS.ProcessEnv, label: string, contextWindow: number | null, maxOutputTokens: number | null) => GenerationEnvelope;
|
|
29
|
+
export declare const resolveGenerationEnvelopeFromEnv: (env: NodeJS.ProcessEnv, contextWindow: number | null, maxOutputTokens?: number | null) => GenerationEnvelope;
|
|
28
30
|
export type ReasoningMode = "off" | "adaptive" | "on";
|
|
29
31
|
export type Reasoning = {
|
|
30
32
|
mode: ReasoningMode;
|
|
@@ -32,7 +34,7 @@ export type Reasoning = {
|
|
|
32
34
|
};
|
|
33
35
|
export type ReasoningResponseStyle = "verbatim" | "think-tags";
|
|
34
36
|
export declare const reasoningResponseStyleFromEnv: (env: NodeJS.ProcessEnv, label: string) => ReasoningResponseStyle;
|
|
35
|
-
export declare const reasoningFromEnv: (env: NodeJS.ProcessEnv, label: string) => Reasoning;
|
|
37
|
+
export declare const reasoningFromEnv: (env: NodeJS.ProcessEnv, label: string, resolvedBudget?: number | null) => Reasoning;
|
|
36
38
|
export declare const PROVIDERS_KNOBS: readonly string[];
|
|
37
39
|
export declare const scopeEnvToAlias: (env: NodeJS.ProcessEnv, alias: string, knobs?: readonly string[]) => NodeJS.ProcessEnv;
|
|
38
40
|
//# sourceMappingURL=env.d.ts.map
|
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,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|