@x12i/ai-profiles 3.2.1 → 3.4.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/README.md +95 -23
- package/dist/buildResolvedCatalogModel.d.ts +27 -0
- package/dist/buildResolvedCatalogModel.d.ts.map +1 -0
- package/dist/buildResolvedCatalogModel.js +179 -0
- package/dist/buildResolvedCatalogModel.js.map +1 -0
- package/dist/buildResolvedProfile.d.ts +4 -2
- package/dist/buildResolvedProfile.d.ts.map +1 -1
- package/dist/buildResolvedProfile.js +22 -6
- package/dist/buildResolvedProfile.js.map +1 -1
- package/dist/calculateInvokeCost.d.ts +57 -0
- package/dist/calculateInvokeCost.d.ts.map +1 -0
- package/dist/calculateInvokeCost.js +106 -0
- package/dist/calculateInvokeCost.js.map +1 -0
- package/dist/catalogEnrichment.d.ts +2 -2
- package/dist/catalogEnrichment.d.ts.map +1 -1
- package/dist/catalogEnrichment.js +16 -4
- package/dist/catalogEnrichment.js.map +1 -1
- package/dist/cost/computeInvokeCost.d.ts +33 -0
- package/dist/cost/computeInvokeCost.d.ts.map +1 -0
- package/dist/cost/computeInvokeCost.js +95 -0
- package/dist/cost/computeInvokeCost.js.map +1 -0
- package/dist/cost/constants.d.ts +7 -0
- package/dist/cost/constants.d.ts.map +1 -0
- package/dist/cost/constants.js +7 -0
- package/dist/cost/constants.js.map +1 -0
- package/dist/cost/invokePricingRecord.d.ts +55 -0
- package/dist/cost/invokePricingRecord.d.ts.map +1 -0
- package/dist/cost/invokePricingRecord.js +68 -0
- package/dist/cost/invokePricingRecord.js.map +1 -0
- package/dist/cost/reasoningWire.d.ts +13 -0
- package/dist/cost/reasoningWire.d.ts.map +1 -0
- package/dist/cost/reasoningWire.js +28 -0
- package/dist/cost/reasoningWire.js.map +1 -0
- package/dist/cost/resolveInvokePricing.d.ts +40 -0
- package/dist/cost/resolveInvokePricing.d.ts.map +1 -0
- package/dist/cost/resolveInvokePricing.js +170 -0
- package/dist/cost/resolveInvokePricing.js.map +1 -0
- package/dist/ensureConcreteModel.d.ts +2 -2
- package/dist/ensureConcreteModel.d.ts.map +1 -1
- package/dist/ensureConcreteModel.js +2 -2
- package/dist/ensureConcreteModel.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/isReasoningModel.d.ts +2 -2
- package/dist/isReasoningModel.d.ts.map +1 -1
- package/dist/isReasoningModel.js +1 -1
- package/dist/isReasoningModel.js.map +1 -1
- package/dist/lookupBundledCatalogCaps.d.ts +11 -1
- package/dist/lookupBundledCatalogCaps.d.ts.map +1 -1
- package/dist/lookupBundledCatalogCaps.js +25 -11
- package/dist/lookupBundledCatalogCaps.js.map +1 -1
- package/dist/modelInputFallback.d.ts +2 -2
- package/dist/modelInputFallback.d.ts.map +1 -1
- package/dist/modelInputFallback.js +4 -3
- package/dist/modelInputFallback.js.map +1 -1
- package/dist/normalizeInvokeModel.d.ts +4 -4
- package/dist/normalizeInvokeModel.d.ts.map +1 -1
- package/dist/normalizeInvokeModel.js +11 -11
- package/dist/normalizeInvokeModel.js.map +1 -1
- package/dist/requireCatalogModel.d.ts +13 -3
- package/dist/requireCatalogModel.d.ts.map +1 -1
- package/dist/requireCatalogModel.js +139 -13
- package/dist/requireCatalogModel.js.map +1 -1
- package/dist/resolveAIProfile.d.ts.map +1 -1
- package/dist/resolveAIProfile.js +4 -2
- package/dist/resolveAIProfile.js.map +1 -1
- package/dist/resolveAIProfileWithCostAlternatives.js +2 -2
- package/dist/resolveAIProfileWithCostAlternatives.js.map +1 -1
- package/dist/resolveBundledCatalogModel.d.ts +8 -2
- package/dist/resolveBundledCatalogModel.d.ts.map +1 -1
- package/dist/resolveBundledCatalogModel.js +12 -12
- package/dist/resolveBundledCatalogModel.js.map +1 -1
- package/dist/resolveCatalogModel.d.ts.map +1 -1
- package/dist/resolveCatalogModel.js +17 -2
- package/dist/resolveCatalogModel.js.map +1 -1
- package/dist/resolveCatalogModelDetails.d.ts +18 -0
- package/dist/resolveCatalogModelDetails.d.ts.map +1 -0
- package/dist/resolveCatalogModelDetails.js +79 -0
- package/dist/resolveCatalogModelDetails.js.map +1 -0
- package/dist/resolveModelRouting.d.ts +11 -6
- package/dist/resolveModelRouting.d.ts.map +1 -1
- package/dist/resolveModelRouting.js +37 -19
- package/dist/resolveModelRouting.js.map +1 -1
- package/dist/resolveProfileInputCore.d.ts.map +1 -1
- package/dist/resolveProfileInputCore.js +3 -1
- package/dist/resolveProfileInputCore.js.map +1 -1
- package/dist/resolveSecondaryModel.d.ts +1 -1
- package/dist/resolveSecondaryModel.d.ts.map +1 -1
- package/dist/resolveSecondaryModel.js +3 -3
- package/dist/resolveSecondaryModel.js.map +1 -1
- package/dist/secondaryModel.d.ts +4 -4
- package/dist/secondaryModel.d.ts.map +1 -1
- package/dist/secondaryModel.js +2 -2
- package/dist/secondaryModel.js.map +1 -1
- package/dist/types.d.ts +82 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/validateProfileCatalogLinkage.js +1 -1
- package/dist/validateProfileCatalogLinkage.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type InvokeCostBreakdown, type InvokeTokenUsage } from "./cost/computeInvokeCost.js";
|
|
2
|
+
import { buildInvokePricingRecord, type InvokePricingRecord, type InvokeUsageTokens } from "./cost/invokePricingRecord.js";
|
|
3
|
+
import { type InvokePricingModelInput } from "./cost/resolveInvokePricing.js";
|
|
4
|
+
import type { AIProvider, PreferOpenRouterInput, ProfileCatalogLane, RegistrySourceMode } from "./types.js";
|
|
5
|
+
export type InvokeCostStatus = "priced" | "unpriced";
|
|
6
|
+
export type InvokeCostSource = "catalog" | "estimate-fallback";
|
|
7
|
+
export interface CalculateInvokeCostInput {
|
|
8
|
+
/** Resolved profile key or concrete OpenRouter / vendor slug. */
|
|
9
|
+
model: InvokePricingModelInput;
|
|
10
|
+
tokens: InvokeTokenUsage;
|
|
11
|
+
routing?: "openrouter" | "direct";
|
|
12
|
+
profileChoice?: {
|
|
13
|
+
profile: string;
|
|
14
|
+
choice: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface CalculateInvokeCostOptions {
|
|
18
|
+
bundledOnly?: boolean;
|
|
19
|
+
includeBreakdown?: boolean;
|
|
20
|
+
catalogLane?: ProfileCatalogLane;
|
|
21
|
+
preferOpenRouter?: PreferOpenRouterInput;
|
|
22
|
+
source?: RegistrySourceMode;
|
|
23
|
+
refresh?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface CalculateInvokeCostResult {
|
|
26
|
+
costUsd: number;
|
|
27
|
+
costStatus: InvokeCostStatus;
|
|
28
|
+
source: InvokeCostSource;
|
|
29
|
+
isAuthoritative: boolean;
|
|
30
|
+
unknownModel?: boolean;
|
|
31
|
+
provider?: AIProvider;
|
|
32
|
+
modelId?: string;
|
|
33
|
+
routing?: "openrouter" | "direct";
|
|
34
|
+
profileChoice?: {
|
|
35
|
+
profile: string;
|
|
36
|
+
choice: string;
|
|
37
|
+
};
|
|
38
|
+
breakdown?: InvokeCostBreakdown;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Calculate invoke-time USD cost from catalog pricing and token usage.
|
|
42
|
+
*
|
|
43
|
+
* Profile/choice inputs require `options.catalogLane`. Unknown models return
|
|
44
|
+
* `costStatus: "unpriced"` with `unknownModel: true` (no silent guess).
|
|
45
|
+
*/
|
|
46
|
+
export declare function calculateInvokeCost(input: CalculateInvokeCostInput, options?: CalculateInvokeCostOptions): Promise<CalculateInvokeCostResult>;
|
|
47
|
+
/** Sync bundled variant of {@link calculateInvokeCost} (no network). */
|
|
48
|
+
export declare function calculateInvokeCostSync(input: CalculateInvokeCostInput, options?: Omit<CalculateInvokeCostOptions, "source" | "refresh" | "bundledOnly">): CalculateInvokeCostResult;
|
|
49
|
+
/**
|
|
50
|
+
* Activix-compatible entry: snake_case usage keys on the record.
|
|
51
|
+
* Parity with ai-tools `CostCalculator.calculateFromRecord`.
|
|
52
|
+
*/
|
|
53
|
+
export declare function calculateInvokeCostFromRecord(record: InvokePricingRecord, options?: CalculateInvokeCostOptions): Promise<CalculateInvokeCostResult>;
|
|
54
|
+
/** Sync bundled variant of {@link calculateInvokeCostFromRecord}. */
|
|
55
|
+
export declare function calculateInvokeCostFromRecordSync(record: InvokePricingRecord, options?: Omit<CalculateInvokeCostOptions, "source" | "refresh" | "bundledOnly">): CalculateInvokeCostResult;
|
|
56
|
+
export { buildInvokePricingRecord, type InvokePricingRecord, type InvokeUsageTokens, };
|
|
57
|
+
//# sourceMappingURL=calculateInvokeCost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateInvokeCost.d.ts","sourceRoot":"","sources":["../src/calculateInvokeCost.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,wBAAwB,EAGxB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,UAAU,EACV,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,CAAC;AACrD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,mBAAmB,CAAC;AAE/D,MAAM,WAAW,wBAAwB;IACvC,iEAAiE;IACjE,KAAK,EAAE,uBAAuB,CAAC;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;IAClC,aAAa,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;IAClC,aAAa,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC;AAsDD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,wBAAwB,EAC/B,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,yBAAyB,CAAC,CAgBpC;AAED,wEAAwE;AACxE,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,wBAAwB,EAC/B,OAAO,GAAE,IAAI,CACX,0BAA0B,EAC1B,QAAQ,GAAG,SAAS,GAAG,aAAa,CAChC,GACL,yBAAyB,CAa3B;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,mBAAmB,EAC3B,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,yBAAyB,CAAC,CAapC;AAED,qEAAqE;AACrE,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,GAAE,IAAI,CACX,0BAA0B,EAC1B,QAAQ,GAAG,SAAS,GAAG,aAAa,CAChC,GACL,yBAAyB,CAa3B;AAED,OAAO,EACL,wBAAwB,EACxB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,GACvB,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { computeInvokeCostUsd, hasPricedRates, } from "./cost/computeInvokeCost.js";
|
|
2
|
+
import { buildInvokePricingRecord, normalizeInvokeUsageTokens, resolveModelFromInvokeRecord, } from "./cost/invokePricingRecord.js";
|
|
3
|
+
import { resolveInvokePricing, resolveInvokePricingBundled, } from "./cost/resolveInvokePricing.js";
|
|
4
|
+
function toInvokeCostResult(params) {
|
|
5
|
+
const { pricingResolved, tokens, includeBreakdown } = params;
|
|
6
|
+
if (pricingResolved.unknownModel ||
|
|
7
|
+
pricingResolved.localProvider ||
|
|
8
|
+
!hasPricedRates(pricingResolved.pricing, pricingResolved.catalogPricing)) {
|
|
9
|
+
return {
|
|
10
|
+
costUsd: 0,
|
|
11
|
+
costStatus: "unpriced",
|
|
12
|
+
source: "catalog",
|
|
13
|
+
isAuthoritative: false,
|
|
14
|
+
unknownModel: pricingResolved.unknownModel || pricingResolved.localProvider,
|
|
15
|
+
provider: pricingResolved.provider,
|
|
16
|
+
modelId: pricingResolved.modelId,
|
|
17
|
+
routing: pricingResolved.routing,
|
|
18
|
+
...(pricingResolved.profileChoice
|
|
19
|
+
? { profileChoice: pricingResolved.profileChoice }
|
|
20
|
+
: {}),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const { costUsd, breakdown } = computeInvokeCostUsd({
|
|
24
|
+
tokens,
|
|
25
|
+
pricing: pricingResolved.pricing,
|
|
26
|
+
catalogPricing: pricingResolved.catalogPricing,
|
|
27
|
+
routing: pricingResolved.routing,
|
|
28
|
+
includeBreakdown,
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
costUsd,
|
|
32
|
+
costStatus: "priced",
|
|
33
|
+
source: "catalog",
|
|
34
|
+
isAuthoritative: true,
|
|
35
|
+
provider: pricingResolved.provider,
|
|
36
|
+
modelId: pricingResolved.modelId,
|
|
37
|
+
routing: pricingResolved.routing,
|
|
38
|
+
...(pricingResolved.profileChoice
|
|
39
|
+
? { profileChoice: pricingResolved.profileChoice }
|
|
40
|
+
: {}),
|
|
41
|
+
...(breakdown ? { breakdown } : {}),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Calculate invoke-time USD cost from catalog pricing and token usage.
|
|
46
|
+
*
|
|
47
|
+
* Profile/choice inputs require `options.catalogLane`. Unknown models return
|
|
48
|
+
* `costStatus: "unpriced"` with `unknownModel: true` (no silent guess).
|
|
49
|
+
*/
|
|
50
|
+
export async function calculateInvokeCost(input, options = {}) {
|
|
51
|
+
const pricingResolved = await resolveInvokePricing(input.model, {
|
|
52
|
+
bundledOnly: options.bundledOnly,
|
|
53
|
+
catalogLane: options.catalogLane,
|
|
54
|
+
preferOpenRouter: options.preferOpenRouter,
|
|
55
|
+
profileChoice: input.profileChoice,
|
|
56
|
+
routing: input.routing,
|
|
57
|
+
source: options.source,
|
|
58
|
+
refresh: options.refresh,
|
|
59
|
+
});
|
|
60
|
+
return toInvokeCostResult({
|
|
61
|
+
pricingResolved,
|
|
62
|
+
tokens: input.tokens,
|
|
63
|
+
includeBreakdown: options.includeBreakdown,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** Sync bundled variant of {@link calculateInvokeCost} (no network). */
|
|
67
|
+
export function calculateInvokeCostSync(input, options = {}) {
|
|
68
|
+
const pricingResolved = resolveInvokePricingBundled(input.model, {
|
|
69
|
+
catalogLane: options.catalogLane,
|
|
70
|
+
preferOpenRouter: options.preferOpenRouter,
|
|
71
|
+
profileChoice: input.profileChoice,
|
|
72
|
+
routing: input.routing,
|
|
73
|
+
});
|
|
74
|
+
return toInvokeCostResult({
|
|
75
|
+
pricingResolved,
|
|
76
|
+
tokens: input.tokens,
|
|
77
|
+
includeBreakdown: options.includeBreakdown,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Activix-compatible entry: snake_case usage keys on the record.
|
|
82
|
+
* Parity with ai-tools `CostCalculator.calculateFromRecord`.
|
|
83
|
+
*/
|
|
84
|
+
export async function calculateInvokeCostFromRecord(record, options = {}) {
|
|
85
|
+
const model = resolveModelFromInvokeRecord(record);
|
|
86
|
+
const tokens = normalizeInvokeUsageTokens(record.usage);
|
|
87
|
+
return calculateInvokeCost({
|
|
88
|
+
model,
|
|
89
|
+
tokens,
|
|
90
|
+
...(record.routing ? { routing: record.routing } : {}),
|
|
91
|
+
...(record.profileChoice ? { profileChoice: record.profileChoice } : {}),
|
|
92
|
+
}, options);
|
|
93
|
+
}
|
|
94
|
+
/** Sync bundled variant of {@link calculateInvokeCostFromRecord}. */
|
|
95
|
+
export function calculateInvokeCostFromRecordSync(record, options = {}) {
|
|
96
|
+
const model = resolveModelFromInvokeRecord(record);
|
|
97
|
+
const tokens = normalizeInvokeUsageTokens(record.usage);
|
|
98
|
+
return calculateInvokeCostSync({
|
|
99
|
+
model,
|
|
100
|
+
tokens,
|
|
101
|
+
...(record.routing ? { routing: record.routing } : {}),
|
|
102
|
+
...(record.profileChoice ? { profileChoice: record.profileChoice } : {}),
|
|
103
|
+
}, options);
|
|
104
|
+
}
|
|
105
|
+
export { buildInvokePricingRecord, };
|
|
106
|
+
//# sourceMappingURL=calculateInvokeCost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateInvokeCost.js","sourceRoot":"","sources":["../src/calculateInvokeCost.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,GAGf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,GAG7B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,2BAA2B,GAE5B,MAAM,gCAAgC,CAAC;AAyCxC,SAAS,kBAAkB,CACzB,MAIC;IAED,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAE7D,IACE,eAAe,CAAC,YAAY;QAC5B,eAAe,CAAC,aAAa;QAC7B,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,cAAc,CAAC,EACxE,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,UAAU;YACtB,MAAM,EAAE,SAAS;YACjB,eAAe,EAAE,KAAK;YACtB,YAAY,EAAE,eAAe,CAAC,YAAY,IAAI,eAAe,CAAC,aAAa;YAC3E,QAAQ,EAAE,eAAe,CAAC,QAAQ;YAClC,OAAO,EAAE,eAAe,CAAC,OAAO;YAChC,OAAO,EAAE,eAAe,CAAC,OAAO;YAChC,GAAG,CAAC,eAAe,CAAC,aAAa;gBAC/B,CAAC,CAAC,EAAE,aAAa,EAAE,eAAe,CAAC,aAAa,EAAE;gBAClD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC;QAClD,MAAM;QACN,OAAO,EAAE,eAAe,CAAC,OAAQ;QACjC,cAAc,EAAE,eAAe,CAAC,cAAc;QAC9C,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,gBAAgB;KACjB,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,UAAU,EAAE,QAAQ;QACpB,MAAM,EAAE,SAAS;QACjB,eAAe,EAAE,IAAI;QACrB,QAAQ,EAAE,eAAe,CAAC,QAAQ;QAClC,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,GAAG,CAAC,eAAe,CAAC,aAAa;YAC/B,CAAC,CAAC,EAAE,aAAa,EAAE,eAAe,CAAC,aAAa,EAAE;YAClD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAA+B,EAC/B,UAAsC,EAAE;IAExC,MAAM,eAAe,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE;QAC9D,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IAEH,OAAO,kBAAkB,CAAC;QACxB,eAAe;QACf,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,uBAAuB,CACrC,KAA+B,EAC/B,UAGI,EAAE;IAEN,MAAM,eAAe,GAAG,2BAA2B,CAAC,KAAK,CAAC,KAAK,EAAE;QAC/D,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;IAEH,OAAO,kBAAkB,CAAC;QACxB,eAAe;QACf,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,MAA2B,EAC3B,UAAsC,EAAE;IAExC,MAAM,KAAK,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAExD,OAAO,mBAAmB,CACxB;QACE,KAAK;QACL,MAAM;QACN,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,EACD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,iCAAiC,CAC/C,MAA2B,EAC3B,UAGI,EAAE;IAEN,MAAM,KAAK,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAExD,OAAO,uBAAuB,CAC5B;QACE,KAAK;QACL,MAAM;QACN,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,EACD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,OAAO,EACL,wBAAwB,GAGzB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AIProfileChoice, AIModelPricing, AIProvider, CatalogModelEntry, ModelsCatalogJson, ModelCapabilitiesSnapshot, ProfileChoiceLimits } from "./types.js";
|
|
2
2
|
export declare function pricingFromCatalogEntry(entry: CatalogModelEntry): AIModelPricing | undefined;
|
|
3
3
|
export declare function limitsFromCatalogEntry(entry: CatalogModelEntry): ProfileChoiceLimits;
|
|
4
|
-
export declare function capabilitiesFromCatalogEntry(entry: CatalogModelEntry): ModelCapabilitiesSnapshot;
|
|
4
|
+
export declare function capabilitiesFromCatalogEntry(entry: CatalogModelEntry, instructionTier?: import("./types.js").InstructionTier): ModelCapabilitiesSnapshot;
|
|
5
5
|
export declare function findCatalogModelEntry(catalog: ModelsCatalogJson, params: {
|
|
6
6
|
provider: AIProvider;
|
|
7
7
|
modelId: string;
|
|
@@ -10,7 +10,7 @@ export declare function findCatalogModelEntry(catalog: ModelsCatalogJson, params
|
|
|
10
10
|
export declare function enrichChoiceFromCatalog(catalog: ModelsCatalogJson, choice: AIProfileChoice, routed?: {
|
|
11
11
|
provider: AIProvider;
|
|
12
12
|
modelId: string;
|
|
13
|
-
}): {
|
|
13
|
+
}, instructionTier?: import("./types.js").InstructionTier): {
|
|
14
14
|
pricing?: AIModelPricing;
|
|
15
15
|
limits?: ProfileChoiceLimits;
|
|
16
16
|
capabilities?: ModelCapabilitiesSnapshot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogEnrichment.d.ts","sourceRoot":"","sources":["../src/catalogEnrichment.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"catalogEnrichment.d.ts","sourceRoot":"","sources":["../src/catalogEnrichment.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,UAAU,EACV,iBAAiB,EAGjB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAwCpB,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,GACvB,cAAc,GAAG,SAAS,CAiB5B;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,iBAAiB,GACvB,mBAAmB,CAMrB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iBAAiB,EACxB,eAAe,CAAC,EAAE,OAAO,YAAY,EAAE,eAAe,GACrD,yBAAyB,CAwB3B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE;IACN,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,GACA,iBAAiB,GAAG,SAAS,CA6B/B;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAClD,eAAe,CAAC,EAAE,OAAO,YAAY,EAAE,eAAe,GACrD;IACD,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,YAAY,CAAC,EAAE,yBAAyB,CAAC;IACzC,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC,CAiBA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { openRouterReasoningWireFromCatalog } from "./cost/reasoningWire.js";
|
|
1
2
|
import { buildModelsCatalogIndex } from "./modelsCatalog.js";
|
|
2
3
|
import { normalizeModalityContract } from "./modalityPolicy.js";
|
|
3
4
|
import { getChoiceOpenRouterModelId, getChoiceVendorModelId } from "./profileRegistryV2.js";
|
|
@@ -50,9 +51,20 @@ export function limitsFromCatalogEntry(entry) {
|
|
|
50
51
|
maxOutputTokens: entry.maxCompletionTokens ?? entry.openrouter.maxCompletionTokens,
|
|
51
52
|
};
|
|
52
53
|
}
|
|
53
|
-
export function capabilitiesFromCatalogEntry(entry) {
|
|
54
|
+
export function capabilitiesFromCatalogEntry(entry, instructionTier) {
|
|
54
55
|
const modalities = entry.modalities ?? entry.openrouter.modalities;
|
|
55
|
-
|
|
56
|
+
const limits = limitsFromCatalogEntry(entry);
|
|
57
|
+
const reasoningWire = openRouterReasoningWireFromCatalog(entry.openrouter.capabilities, entry.openrouter.pricing, instructionTier);
|
|
58
|
+
return {
|
|
59
|
+
...capabilitiesFromSlice(entry.openrouter.capabilities, modalities, entry.openrouter.pricing),
|
|
60
|
+
contextWindow: limits.contextWindow,
|
|
61
|
+
maxOutputTokens: limits.maxOutputTokens,
|
|
62
|
+
supportsOpenRouterReasoningParam: reasoningWire.supportsOpenRouterReasoningParam,
|
|
63
|
+
hasReasoningPricing: reasoningWire.hasReasoningPricing,
|
|
64
|
+
...(reasoningWire.suggestedReasoningEffort
|
|
65
|
+
? { suggestedReasoningEffort: reasoningWire.suggestedReasoningEffort }
|
|
66
|
+
: {}),
|
|
67
|
+
};
|
|
56
68
|
}
|
|
57
69
|
export function findCatalogModelEntry(catalog, params) {
|
|
58
70
|
const index = buildModelsCatalogIndex(catalog);
|
|
@@ -75,7 +87,7 @@ export function findCatalogModelEntry(catalog, params) {
|
|
|
75
87
|
return catalog.models.find((model) => model.direct.provider === params.provider &&
|
|
76
88
|
normalizeKey(model.direct.modelId) === normalizeKey(params.modelId));
|
|
77
89
|
}
|
|
78
|
-
export function enrichChoiceFromCatalog(catalog, choice, routed) {
|
|
90
|
+
export function enrichChoiceFromCatalog(catalog, choice, routed, instructionTier) {
|
|
79
91
|
const entry = findCatalogModelEntry(catalog, {
|
|
80
92
|
provider: choice.provider,
|
|
81
93
|
modelId: getChoiceVendorModelId(choice),
|
|
@@ -87,7 +99,7 @@ export function enrichChoiceFromCatalog(catalog, choice, routed) {
|
|
|
87
99
|
return {
|
|
88
100
|
pricing: pricingFromCatalogEntry(entry),
|
|
89
101
|
limits: limitsFromCatalogEntry(entry),
|
|
90
|
-
capabilities: capabilitiesFromCatalogEntry(entry),
|
|
102
|
+
capabilities: capabilitiesFromCatalogEntry(entry, instructionTier),
|
|
91
103
|
catalogEntry: entry,
|
|
92
104
|
};
|
|
93
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogEnrichment.js","sourceRoot":"","sources":["../src/catalogEnrichment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAa5F,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,sBAAsB,CAC7B,UAAuD;IAEvD,OAAO,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;AACvD,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAA+C,EAC/C,UAAuD,EACvD,OAAkC;IAElC,MAAM,oBAAoB,GAAG,UAAU;QACrC,CAAC,CAAC,yBAAyB,CAAC,UAAU,CAAC;QACvC,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,cAAc,EAAE,sBAAsB,CAAC,UAAU,CAAC;QAClD,aAAa,EAAE,IAAI,EAAE,WAAW;QAChC,iBAAiB,EAAE,IAAI,EAAE,SAAS;QAClC,kBAAkB,EAAE,IAAI,EAAE,iBAAiB;QAC3C,eAAe,EACb,OAAO,EAAE,WAAW,KAAK,SAAS,IAAI,OAAO,EAAE,UAAU,KAAK,SAAS;QACzE,aAAa,EACX,OAAO,EAAE,UAAU,KAAK,SAAS,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS;QACzE,iBAAiB,EAAE,IAAI;QACvB,GAAG,CAAC,oBAAoB;YACtB,CAAC,CAAC;gBACE,eAAe,EAAE,oBAAoB,CAAC,KAAK;gBAC3C,gBAAgB,EAAE,oBAAoB,CAAC,MAAM;aAC9C;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAwB;IAExB,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,YAAY,EAAE,OAAO,CAAC,UAAU;QAChC,KAAK,EAAE,OAAO,CAAC,mBAAmB;YAChC,CAAC,CAAC,4BAA4B,OAAO,CAAC,mBAAmB,EAAE;YAC3D,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAwB;IAExB,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa;QACpE,eAAe,EACb,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB;KACpE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAAwB;
|
|
1
|
+
{"version":3,"file":"catalogEnrichment.js","sourceRoot":"","sources":["../src/catalogEnrichment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AIModelPricing, CatalogOpenRouterPricing } from "../types.js";
|
|
2
|
+
export interface InvokeTokenUsage {
|
|
3
|
+
prompt: number;
|
|
4
|
+
completion: number;
|
|
5
|
+
total?: number;
|
|
6
|
+
cachedPrompt?: number;
|
|
7
|
+
cacheWrite?: number;
|
|
8
|
+
reasoning?: number;
|
|
9
|
+
audio?: number;
|
|
10
|
+
image?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface InvokeCostBreakdown {
|
|
13
|
+
promptCostUsd?: number;
|
|
14
|
+
completionCostUsd?: number;
|
|
15
|
+
reasoningCostUsd?: number;
|
|
16
|
+
cachingCostUsd?: number;
|
|
17
|
+
audioCostUsd?: number;
|
|
18
|
+
imageCostUsd?: number;
|
|
19
|
+
requestFlatCostUsd?: number;
|
|
20
|
+
openRouterMarkupCostUsd?: number;
|
|
21
|
+
}
|
|
22
|
+
export declare function hasPricedRates(pricing?: AIModelPricing, catalogPricing?: CatalogOpenRouterPricing): boolean;
|
|
23
|
+
export declare function computeInvokeCostUsd(params: {
|
|
24
|
+
tokens: InvokeTokenUsage;
|
|
25
|
+
pricing: AIModelPricing;
|
|
26
|
+
catalogPricing?: CatalogOpenRouterPricing;
|
|
27
|
+
routing?: "openrouter" | "direct";
|
|
28
|
+
includeBreakdown?: boolean;
|
|
29
|
+
}): {
|
|
30
|
+
costUsd: number;
|
|
31
|
+
breakdown?: InvokeCostBreakdown;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=computeInvokeCost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeInvokeCost.d.ts","sourceRoot":"","sources":["../../src/cost/computeInvokeCost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAO5E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAoCD,wBAAgB,cAAc,CAC5B,OAAO,CAAC,EAAE,cAAc,EACxB,cAAc,CAAC,EAAE,wBAAwB,GACxC,OAAO,CAgBT;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,OAAO,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,mBAAmB,CAAA;CAAE,CA2EvD"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { DEFAULT_OPENROUTER_MARKUP_RATE, PROFILE_TIERED_CONTEXT_THRESHOLD, TOKENS_PER_MILLION, } from "./constants.js";
|
|
2
|
+
function usdPerToken(perMillion) {
|
|
3
|
+
return (perMillion ?? 0) / TOKENS_PER_MILLION;
|
|
4
|
+
}
|
|
5
|
+
function pickInputRatePerMillion(pricing, promptTokens) {
|
|
6
|
+
if (pricing.inputBelow200k !== undefined &&
|
|
7
|
+
pricing.inputAbove200k !== undefined) {
|
|
8
|
+
return promptTokens <= PROFILE_TIERED_CONTEXT_THRESHOLD
|
|
9
|
+
? pricing.inputBelow200k
|
|
10
|
+
: pricing.inputAbove200k;
|
|
11
|
+
}
|
|
12
|
+
return pricing.input ?? pricing.inputBelow200k ?? pricing.inputAbove200k;
|
|
13
|
+
}
|
|
14
|
+
function pickOutputRatePerMillion(pricing, promptTokens) {
|
|
15
|
+
if (pricing.outputBelow200k !== undefined &&
|
|
16
|
+
pricing.outputAbove200k !== undefined) {
|
|
17
|
+
return promptTokens <= PROFILE_TIERED_CONTEXT_THRESHOLD
|
|
18
|
+
? pricing.outputBelow200k
|
|
19
|
+
: pricing.outputAbove200k;
|
|
20
|
+
}
|
|
21
|
+
return pricing.output ?? pricing.outputBelow200k ?? pricing.outputAbove200k;
|
|
22
|
+
}
|
|
23
|
+
export function hasPricedRates(pricing, catalogPricing) {
|
|
24
|
+
if (!pricing) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const hasCore = pricing.input !== undefined ||
|
|
28
|
+
pricing.output !== undefined ||
|
|
29
|
+
pricing.inputBelow200k !== undefined ||
|
|
30
|
+
pricing.outputBelow200k !== undefined;
|
|
31
|
+
return (hasCore ||
|
|
32
|
+
catalogPricing?.internalReasoning !== undefined ||
|
|
33
|
+
catalogPricing?.webSearchPerRequest !== undefined);
|
|
34
|
+
}
|
|
35
|
+
export function computeInvokeCostUsd(params) {
|
|
36
|
+
const { tokens, pricing, catalogPricing } = params;
|
|
37
|
+
const routedViaOpenRouter = params.routing === "openrouter";
|
|
38
|
+
const promptTokens = tokens.prompt;
|
|
39
|
+
const promptRate = pickInputRatePerMillion(pricing, promptTokens);
|
|
40
|
+
const completionRate = pickOutputRatePerMillion(pricing, promptTokens);
|
|
41
|
+
const promptUsdPerToken = usdPerToken(promptRate);
|
|
42
|
+
const completionUsdPerToken = usdPerToken(completionRate);
|
|
43
|
+
const cacheReadUsdPerToken = usdPerToken(pricing.cachedInput ?? pricing.cacheHit);
|
|
44
|
+
const cacheWriteUsdPerToken = usdPerToken(pricing.cacheWrite5m ?? pricing.cacheWrite1h);
|
|
45
|
+
const reasoningUsdPerToken = catalogPricing?.internalReasoning !== undefined
|
|
46
|
+
? usdPerToken(catalogPricing.internalReasoning)
|
|
47
|
+
: promptUsdPerToken;
|
|
48
|
+
const audioUsdPerToken = usdPerToken(catalogPricing?.audioInput ?? promptRate);
|
|
49
|
+
const imageUsdPerToken = usdPerToken(catalogPricing?.imageInput);
|
|
50
|
+
let promptCost = tokens.prompt * promptUsdPerToken;
|
|
51
|
+
let completionCost = tokens.completion * completionUsdPerToken;
|
|
52
|
+
const cachedPrompt = tokens.cachedPrompt ?? 0;
|
|
53
|
+
const cachingCost = (tokens.cacheWrite ?? 0) * cacheWriteUsdPerToken +
|
|
54
|
+
cachedPrompt * cacheReadUsdPerToken;
|
|
55
|
+
const reasoningTokens = tokens.reasoning ?? 0;
|
|
56
|
+
const reasoningCost = reasoningTokens * reasoningUsdPerToken;
|
|
57
|
+
const audioCost = (tokens.audio ?? 0) * audioUsdPerToken;
|
|
58
|
+
const imageCost = (tokens.image ?? 0) * imageUsdPerToken;
|
|
59
|
+
const requestFlat = catalogPricing?.webSearchPerRequest ?? 0;
|
|
60
|
+
let openRouterMarkupCostUsd = 0;
|
|
61
|
+
if (routedViaOpenRouter) {
|
|
62
|
+
openRouterMarkupCostUsd =
|
|
63
|
+
tokens.prompt * promptUsdPerToken * DEFAULT_OPENROUTER_MARKUP_RATE +
|
|
64
|
+
tokens.completion * completionUsdPerToken * DEFAULT_OPENROUTER_MARKUP_RATE;
|
|
65
|
+
promptCost += tokens.prompt * promptUsdPerToken * DEFAULT_OPENROUTER_MARKUP_RATE;
|
|
66
|
+
completionCost +=
|
|
67
|
+
tokens.completion * completionUsdPerToken * DEFAULT_OPENROUTER_MARKUP_RATE;
|
|
68
|
+
}
|
|
69
|
+
const costUsd = promptCost +
|
|
70
|
+
completionCost +
|
|
71
|
+
cachingCost +
|
|
72
|
+
reasoningCost +
|
|
73
|
+
audioCost +
|
|
74
|
+
imageCost +
|
|
75
|
+
requestFlat;
|
|
76
|
+
if (!params.includeBreakdown) {
|
|
77
|
+
return { costUsd };
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
costUsd,
|
|
81
|
+
breakdown: {
|
|
82
|
+
promptCostUsd: promptCost,
|
|
83
|
+
completionCostUsd: completionCost,
|
|
84
|
+
...(cachingCost > 0 ? { cachingCostUsd: cachingCost } : {}),
|
|
85
|
+
...(reasoningCost > 0 ? { reasoningCostUsd: reasoningCost } : {}),
|
|
86
|
+
...(audioCost > 0 ? { audioCostUsd: audioCost } : {}),
|
|
87
|
+
...(imageCost > 0 ? { imageCostUsd: imageCost } : {}),
|
|
88
|
+
...(requestFlat > 0 ? { requestFlatCostUsd: requestFlat } : {}),
|
|
89
|
+
...(openRouterMarkupCostUsd > 0
|
|
90
|
+
? { openRouterMarkupCostUsd }
|
|
91
|
+
: {}),
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=computeInvokeCost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeInvokeCost.js","sourceRoot":"","sources":["../../src/cost/computeInvokeCost.ts"],"names":[],"mappings":"AACA,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAwBxB,SAAS,WAAW,CAAC,UAAmB;IACtC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,kBAAkB,CAAC;AAChD,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAuB,EACvB,YAAoB;IAEpB,IACE,OAAO,CAAC,cAAc,KAAK,SAAS;QACpC,OAAO,CAAC,cAAc,KAAK,SAAS,EACpC,CAAC;QACD,OAAO,YAAY,IAAI,gCAAgC;YACrD,CAAC,CAAC,OAAO,CAAC,cAAc;YACxB,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC;AAC3E,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAuB,EACvB,YAAoB;IAEpB,IACE,OAAO,CAAC,eAAe,KAAK,SAAS;QACrC,OAAO,CAAC,eAAe,KAAK,SAAS,EACrC,CAAC;QACD,OAAO,YAAY,IAAI,gCAAgC;YACrD,CAAC,CAAC,OAAO,CAAC,eAAe;YACzB,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAwB,EACxB,cAAyC;IAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GACX,OAAO,CAAC,KAAK,KAAK,SAAS;QAC3B,OAAO,CAAC,MAAM,KAAK,SAAS;QAC5B,OAAO,CAAC,cAAc,KAAK,SAAS;QACpC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC;IAExC,OAAO,CACL,OAAO;QACP,cAAc,EAAE,iBAAiB,KAAK,SAAS;QAC/C,cAAc,EAAE,mBAAmB,KAAK,SAAS,CAClD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAMpC;IACC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IACnD,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,KAAK,YAAY,CAAC;IAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IAEnC,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,wBAAwB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACvE,MAAM,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,qBAAqB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAC1D,MAAM,oBAAoB,GAAG,WAAW,CACtC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,CACxC,CAAC;IACF,MAAM,qBAAqB,GAAG,WAAW,CACvC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAC7C,CAAC;IACF,MAAM,oBAAoB,GACxB,cAAc,EAAE,iBAAiB,KAAK,SAAS;QAC7C,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB,CAAC;QAC/C,CAAC,CAAC,iBAAiB,CAAC;IACxB,MAAM,gBAAgB,GAAG,WAAW,CAAC,cAAc,EAAE,UAAU,IAAI,UAAU,CAAC,CAAC;IAC/E,MAAM,gBAAgB,GAAG,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAEjE,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC;IACnD,IAAI,cAAc,GAAG,MAAM,CAAC,UAAU,GAAG,qBAAqB,CAAC;IAE/D,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAC9C,MAAM,WAAW,GACf,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,qBAAqB;QAChD,YAAY,GAAG,oBAAoB,CAAC;IAEtC,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,eAAe,GAAG,oBAAoB,CAAC;IAE7D,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC;IACzD,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC;IACzD,MAAM,WAAW,GAAG,cAAc,EAAE,mBAAmB,IAAI,CAAC,CAAC;IAE7D,IAAI,uBAAuB,GAAG,CAAC,CAAC;IAChC,IAAI,mBAAmB,EAAE,CAAC;QACxB,uBAAuB;YACrB,MAAM,CAAC,MAAM,GAAG,iBAAiB,GAAG,8BAA8B;gBAClE,MAAM,CAAC,UAAU,GAAG,qBAAqB,GAAG,8BAA8B,CAAC;QAC7E,UAAU,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,GAAG,8BAA8B,CAAC;QACjF,cAAc;YACZ,MAAM,CAAC,UAAU,GAAG,qBAAqB,GAAG,8BAA8B,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,GACX,UAAU;QACV,cAAc;QACd,WAAW;QACX,aAAa;QACb,SAAS;QACT,SAAS;QACT,WAAW,CAAC;IAEd,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO;QACP,SAAS,EAAE;YACT,aAAa,EAAE,UAAU;YACzB,iBAAiB,EAAE,cAAc;YACjC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,uBAAuB,GAAG,CAAC;gBAC7B,CAAC,CAAC,EAAE,uBAAuB,EAAE;gBAC7B,CAAC,CAAC,EAAE,CAAC;SACR;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** USD rates in ai-profiles catalog are per 1M tokens. */
|
|
2
|
+
export declare const TOKENS_PER_MILLION = 1000000;
|
|
3
|
+
/** Tiered input/output rates switch at this prompt token count. */
|
|
4
|
+
export declare const PROFILE_TIERED_CONTEXT_THRESHOLD = 200000;
|
|
5
|
+
/** Applied to prompt/completion when routed via OpenRouter and catalog has no explicit markup. */
|
|
6
|
+
export declare const DEFAULT_OPENROUTER_MARKUP_RATE = 0.05;
|
|
7
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/cost/constants.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,UAAY,CAAC;AAE5C,mEAAmE;AACnE,eAAO,MAAM,gCAAgC,SAAU,CAAC;AAExD,kGAAkG;AAClG,eAAO,MAAM,8BAA8B,OAAO,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** USD rates in ai-profiles catalog are per 1M tokens. */
|
|
2
|
+
export const TOKENS_PER_MILLION = 1_000_000;
|
|
3
|
+
/** Tiered input/output rates switch at this prompt token count. */
|
|
4
|
+
export const PROFILE_TIERED_CONTEXT_THRESHOLD = 200_000;
|
|
5
|
+
/** Applied to prompt/completion when routed via OpenRouter and catalog has no explicit markup. */
|
|
6
|
+
export const DEFAULT_OPENROUTER_MARKUP_RATE = 0.05;
|
|
7
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cost/constants.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C,mEAAmE;AACnE,MAAM,CAAC,MAAM,gCAAgC,GAAG,OAAO,CAAC;AAExD,kGAAkG;AAClG,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { AIProvider } from "../types.js";
|
|
2
|
+
import type { InvokeTokenUsage } from "./computeInvokeCost.js";
|
|
3
|
+
/**
|
|
4
|
+
* Activix-compatible snake_case usage keys (parity with ai-tools `calculateFromRecord`).
|
|
5
|
+
*/
|
|
6
|
+
export interface InvokeUsageTokens {
|
|
7
|
+
prompt_tokens: number;
|
|
8
|
+
completion_tokens: number;
|
|
9
|
+
total_tokens?: number;
|
|
10
|
+
cachedTokensPrompt?: number;
|
|
11
|
+
cached_prompt_tokens?: number;
|
|
12
|
+
cache_write_tokens?: number;
|
|
13
|
+
reasoning_tokens?: number;
|
|
14
|
+
audio_tokens?: number;
|
|
15
|
+
image_tokens?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Activix / FuncX invoke billing record shape (parity with ai-tools `calculateFromRecord` input).
|
|
19
|
+
*/
|
|
20
|
+
export interface InvokePricingRecord {
|
|
21
|
+
model?: string;
|
|
22
|
+
modelAlias?: string;
|
|
23
|
+
modelUsed?: string;
|
|
24
|
+
usedModel?: string;
|
|
25
|
+
provider?: string;
|
|
26
|
+
routing?: "openrouter" | "direct";
|
|
27
|
+
profileChoice?: {
|
|
28
|
+
profile: string;
|
|
29
|
+
choice: string;
|
|
30
|
+
};
|
|
31
|
+
usage: InvokeUsageTokens;
|
|
32
|
+
metadata?: {
|
|
33
|
+
maxTokensRequested?: number;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare function normalizeInvokeUsageTokens(usage: InvokeUsageTokens): InvokeTokenUsage;
|
|
37
|
+
export declare function resolveModelFromInvokeRecord(record: InvokePricingRecord): string | {
|
|
38
|
+
provider: AIProvider;
|
|
39
|
+
modelId: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Build an Activix-compatible invoke billing record from resolved invoke metadata.
|
|
43
|
+
*/
|
|
44
|
+
export declare function buildInvokePricingRecord(input: {
|
|
45
|
+
model: string;
|
|
46
|
+
provider?: AIProvider;
|
|
47
|
+
routing?: "openrouter" | "direct";
|
|
48
|
+
profileChoice?: {
|
|
49
|
+
profile: string;
|
|
50
|
+
choice: string;
|
|
51
|
+
};
|
|
52
|
+
usage: InvokeTokenUsage | InvokeUsageTokens;
|
|
53
|
+
metadata?: InvokePricingRecord["metadata"];
|
|
54
|
+
}): InvokePricingRecord;
|
|
55
|
+
//# sourceMappingURL=invokePricingRecord.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invokePricingRecord.d.ts","sourceRoot":"","sources":["../../src/cost/invokePricingRecord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;IAClC,aAAa,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,CAAC,EAAE;QACT,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,iBAAiB,GACvB,gBAAgB,CAkBlB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,GAC1B,MAAM,GAAG;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAepD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;IAClC,aAAa,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;IAC5C,QAAQ,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;CAC5C,GAAG,mBAAmB,CAmCtB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export function normalizeInvokeUsageTokens(usage) {
|
|
2
|
+
const cachedPrompt = usage.cachedTokensPrompt ?? usage.cached_prompt_tokens ?? 0;
|
|
3
|
+
return {
|
|
4
|
+
prompt: usage.prompt_tokens,
|
|
5
|
+
completion: usage.completion_tokens,
|
|
6
|
+
...(usage.total_tokens !== undefined ? { total: usage.total_tokens } : {}),
|
|
7
|
+
...(cachedPrompt > 0 ? { cachedPrompt } : {}),
|
|
8
|
+
...(usage.cache_write_tokens !== undefined
|
|
9
|
+
? { cacheWrite: usage.cache_write_tokens }
|
|
10
|
+
: {}),
|
|
11
|
+
...(usage.reasoning_tokens !== undefined
|
|
12
|
+
? { reasoning: usage.reasoning_tokens }
|
|
13
|
+
: {}),
|
|
14
|
+
...(usage.audio_tokens !== undefined ? { audio: usage.audio_tokens } : {}),
|
|
15
|
+
...(usage.image_tokens !== undefined ? { image: usage.image_tokens } : {}),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function resolveModelFromInvokeRecord(record) {
|
|
19
|
+
const runtime = record.usedModel ?? record.modelUsed ?? record.model ?? record.modelAlias;
|
|
20
|
+
if (!runtime) {
|
|
21
|
+
throw new Error("InvokePricingRecord requires model, usedModel, or modelUsed");
|
|
22
|
+
}
|
|
23
|
+
if (record.provider && !runtime.includes("/")) {
|
|
24
|
+
return {
|
|
25
|
+
provider: record.provider,
|
|
26
|
+
modelId: runtime,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return runtime;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build an Activix-compatible invoke billing record from resolved invoke metadata.
|
|
33
|
+
*/
|
|
34
|
+
export function buildInvokePricingRecord(input) {
|
|
35
|
+
const usage = "prompt_tokens" in input.usage
|
|
36
|
+
? input.usage
|
|
37
|
+
: {
|
|
38
|
+
prompt_tokens: input.usage.prompt,
|
|
39
|
+
completion_tokens: input.usage.completion,
|
|
40
|
+
...(input.usage.total !== undefined
|
|
41
|
+
? { total_tokens: input.usage.total }
|
|
42
|
+
: {}),
|
|
43
|
+
...(input.usage.cachedPrompt !== undefined
|
|
44
|
+
? { cachedTokensPrompt: input.usage.cachedPrompt }
|
|
45
|
+
: {}),
|
|
46
|
+
...(input.usage.cacheWrite !== undefined
|
|
47
|
+
? { cache_write_tokens: input.usage.cacheWrite }
|
|
48
|
+
: {}),
|
|
49
|
+
...(input.usage.reasoning !== undefined
|
|
50
|
+
? { reasoning_tokens: input.usage.reasoning }
|
|
51
|
+
: {}),
|
|
52
|
+
...(input.usage.audio !== undefined
|
|
53
|
+
? { audio_tokens: input.usage.audio }
|
|
54
|
+
: {}),
|
|
55
|
+
...(input.usage.image !== undefined
|
|
56
|
+
? { image_tokens: input.usage.image }
|
|
57
|
+
: {}),
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
model: input.model,
|
|
61
|
+
...(input.provider ? { provider: input.provider } : {}),
|
|
62
|
+
...(input.routing ? { routing: input.routing } : {}),
|
|
63
|
+
...(input.profileChoice ? { profileChoice: input.profileChoice } : {}),
|
|
64
|
+
usage,
|
|
65
|
+
...(input.metadata ? { metadata: input.metadata } : {}),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=invokePricingRecord.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invokePricingRecord.js","sourceRoot":"","sources":["../../src/cost/invokePricingRecord.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CatalogModelEntry, CatalogOpenRouterCapabilities, CatalogOpenRouterPricing, InstructionTier } from "../types.js";
|
|
2
|
+
export interface OpenRouterReasoningWire {
|
|
3
|
+
/** Model supports OpenRouter `reasoning: { effort }` on chat requests. */
|
|
4
|
+
supportsOpenRouterReasoningParam: boolean;
|
|
5
|
+
/** Catalog defines a separate internal-reasoning token rate. */
|
|
6
|
+
hasReasoningPricing: boolean;
|
|
7
|
+
/** Suggested `reasoning.effort` for gateway callers when not overridden by runtime. */
|
|
8
|
+
suggestedReasoningEffort?: "low" | "medium" | "high";
|
|
9
|
+
}
|
|
10
|
+
export declare function suggestedReasoningEffortFromTier(tier?: InstructionTier): "low" | "medium" | "high" | undefined;
|
|
11
|
+
export declare function openRouterReasoningWireFromCatalog(capabilities?: CatalogOpenRouterCapabilities, pricing?: CatalogOpenRouterPricing, instructionTier?: InstructionTier): OpenRouterReasoningWire;
|
|
12
|
+
export declare function openRouterReasoningWireFromEntry(entry: CatalogModelEntry, instructionTier?: InstructionTier): OpenRouterReasoningWire;
|
|
13
|
+
//# sourceMappingURL=reasoningWire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoningWire.d.ts","sourceRoot":"","sources":["../../src/cost/reasoningWire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,6BAA6B,EAC7B,wBAAwB,EACxB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,gCAAgC,EAAE,OAAO,CAAC;IAC1C,gEAAgE;IAChE,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uFAAuF;IACvF,wBAAwB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtD;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,CAAC,EAAE,eAAe,GACrB,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAUvC;AAED,wBAAgB,kCAAkC,CAChD,YAAY,CAAC,EAAE,6BAA6B,EAC5C,OAAO,CAAC,EAAE,wBAAwB,EAClC,eAAe,CAAC,EAAE,eAAe,GAChC,uBAAuB,CAczB;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,iBAAiB,EACxB,eAAe,CAAC,EAAE,eAAe,GAChC,uBAAuB,CAMzB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function suggestedReasoningEffortFromTier(tier) {
|
|
2
|
+
switch (tier) {
|
|
3
|
+
case "default":
|
|
4
|
+
case "cpu":
|
|
5
|
+
return "low";
|
|
6
|
+
case "reasoning":
|
|
7
|
+
return "high";
|
|
8
|
+
default:
|
|
9
|
+
return "medium";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function openRouterReasoningWireFromCatalog(capabilities, pricing, instructionTier) {
|
|
13
|
+
const supportsOpenRouterReasoningParam = Boolean(capabilities?.reasoning);
|
|
14
|
+
const hasReasoningPricing = pricing?.internalReasoning !== undefined;
|
|
15
|
+
return {
|
|
16
|
+
supportsOpenRouterReasoningParam,
|
|
17
|
+
hasReasoningPricing,
|
|
18
|
+
...(supportsOpenRouterReasoningParam
|
|
19
|
+
? {
|
|
20
|
+
suggestedReasoningEffort: suggestedReasoningEffortFromTier(instructionTier) ?? "medium",
|
|
21
|
+
}
|
|
22
|
+
: {}),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function openRouterReasoningWireFromEntry(entry, instructionTier) {
|
|
26
|
+
return openRouterReasoningWireFromCatalog(entry.openrouter.capabilities, entry.openrouter.pricing, instructionTier);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=reasoningWire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoningWire.js","sourceRoot":"","sources":["../../src/cost/reasoningWire.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,gCAAgC,CAC9C,IAAsB;IAEtB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,WAAW;YACd,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,YAA4C,EAC5C,OAAkC,EAClC,eAAiC;IAEjC,MAAM,gCAAgC,GAAG,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC1E,MAAM,mBAAmB,GAAG,OAAO,EAAE,iBAAiB,KAAK,SAAS,CAAC;IAErE,OAAO;QACL,gCAAgC;QAChC,mBAAmB;QACnB,GAAG,CAAC,gCAAgC;YAClC,CAAC,CAAC;gBACE,wBAAwB,EACtB,gCAAgC,CAAC,eAAe,CAAC,IAAI,QAAQ;aAChE;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,KAAwB,EACxB,eAAiC;IAEjC,OAAO,kCAAkC,CACvC,KAAK,CAAC,UAAU,CAAC,YAAY,EAC7B,KAAK,CAAC,UAAU,CAAC,OAAO,EACxB,eAAe,CAChB,CAAC;AACJ,CAAC"}
|