@ai-billing/gateway 0.0.0 → 0.0.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/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +24 -24
package/dist/index.cjs
CHANGED
|
@@ -45,13 +45,13 @@ function createGatewayV3Middleware(options) {
|
|
|
45
45
|
generationId: responseId ?? gatewayMetadata?.gateway?.generationId ?? crypto.randomUUID(),
|
|
46
46
|
modelId: model.modelId,
|
|
47
47
|
provider: model.provider || "gateway",
|
|
48
|
-
timestamp: Date.now(),
|
|
49
48
|
tags,
|
|
50
49
|
usage: {
|
|
51
50
|
subProviderId: gatewayMetadata?.gateway?.routing?.finalProvider,
|
|
52
51
|
inputTokens: usage?.inputTokens.total ?? 0,
|
|
53
52
|
outputTokens: usage?.outputTokens.total ?? 0,
|
|
54
53
|
cacheReadTokens: usage?.inputTokens.cacheRead ?? 0,
|
|
54
|
+
cacheWriteTokens: usage?.inputTokens.cacheWrite ?? 0,
|
|
55
55
|
reasoningTokens: usage?.outputTokens.reasoning ?? 0,
|
|
56
56
|
totalTokens: (usage?.outputTokens.total ?? 0) + (usage?.inputTokens.total ?? 0),
|
|
57
57
|
rawProviderCost: gatewayCost,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/ai-sdk/language-model-middleware/v3/language-model-v3-ai-gateway-billing-middleware.ts"],"sourcesContent":["export * from './ai-sdk/index.js';\n","import {\n createV3BillingMiddleware,\n type BaseBillingMiddlewareOptions,\n AiBillingExtractorError,\n DefaultTags,\n} from '@ai-billing/core';\nimport type { SharedV3ProviderMetadata } from '@ai-sdk/provider';\n\nexport interface GatewayAttempt {\n provider: string;\n internalModelId: string;\n providerApiModelId: string;\n credentialType: 'system' | 'user';\n success: boolean;\n startTime: number;\n endTime: number;\n statusCode: number;\n providerResponseId: string;\n}\n\nexport interface GatewayModelAttempt {\n modelId: string;\n canonicalSlug: string;\n success: boolean;\n providerAttemptCount: number;\n providerAttempts: GatewayAttempt[];\n}\n\nexport interface GatewayRouting {\n originalModelId: string;\n resolvedProvider: string;\n resolvedProviderApiModelId: string;\n internalResolvedModelId: string;\n fallbacksAvailable: string[];\n internalReasoning: string;\n planningReasoning: string;\n canonicalSlug: string;\n finalProvider: string;\n attempts: GatewayAttempt[];\n modelAttemptCount: number;\n modelAttempts: GatewayModelAttempt[];\n totalProviderAttemptCount: number;\n}\n\nexport type GatewayProviderMetadata = SharedV3ProviderMetadata & {\n gateway?: {\n generationId: string;\n cost?: string;\n marketCost?: string;\n enabledZeroDataRetention: boolean;\n enabledDisallowPromptTraining: boolean;\n routing?: GatewayRouting;\n };\n};\n\ntype GatewayMiddlewareOptions<TTags extends DefaultTags> =\n BaseBillingMiddlewareOptions<TTags>;\n\nexport function createGatewayV3Middleware<TTags extends DefaultTags>(\n options: GatewayMiddlewareOptions<TTags>,\n) {\n return createV3BillingMiddleware<TTags>({\n ...options,\n\n buildEvent: ({ model, usage, providerMetadata, responseId, tags }) => {\n const gatewayMetadata = providerMetadata as\n | GatewayProviderMetadata\n | undefined;\n\n const gatewayCost = Number(gatewayMetadata?.gateway?.cost ?? '0');\n const upstreamCost = Number(gatewayMetadata?.gateway?.marketCost ?? '0');\n\n const resolvedCost = gatewayCost || upstreamCost;\n\n if (!resolvedCost || isNaN(resolvedCost)) {\n throw new AiBillingExtractorError({\n message: `Expected cost or marketCost to be a valid number.`,\n cause: gatewayMetadata,\n });\n }\n\n return {\n generationId:\n responseId ??\n gatewayMetadata?.gateway?.generationId ??\n crypto.randomUUID(),\n modelId: model.modelId,\n provider: model.provider || 'gateway',\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/ai-sdk/language-model-middleware/v3/language-model-v3-ai-gateway-billing-middleware.ts"],"sourcesContent":["export * from './ai-sdk/index.js';\n","import {\n createV3BillingMiddleware,\n type BaseBillingMiddlewareOptions,\n AiBillingExtractorError,\n DefaultTags,\n BillingEvent,\n} from '@ai-billing/core';\nimport type { SharedV3ProviderMetadata } from '@ai-sdk/provider';\n\nexport interface GatewayAttempt {\n provider: string;\n internalModelId: string;\n providerApiModelId: string;\n credentialType: 'system' | 'user';\n success: boolean;\n startTime: number;\n endTime: number;\n statusCode: number;\n providerResponseId: string;\n}\n\nexport interface GatewayModelAttempt {\n modelId: string;\n canonicalSlug: string;\n success: boolean;\n providerAttemptCount: number;\n providerAttempts: GatewayAttempt[];\n}\n\nexport interface GatewayRouting {\n originalModelId: string;\n resolvedProvider: string;\n resolvedProviderApiModelId: string;\n internalResolvedModelId: string;\n fallbacksAvailable: string[];\n internalReasoning: string;\n planningReasoning: string;\n canonicalSlug: string;\n finalProvider: string;\n attempts: GatewayAttempt[];\n modelAttemptCount: number;\n modelAttempts: GatewayModelAttempt[];\n totalProviderAttemptCount: number;\n}\n\nexport type GatewayProviderMetadata = SharedV3ProviderMetadata & {\n gateway?: {\n generationId: string;\n cost?: string;\n marketCost?: string;\n enabledZeroDataRetention: boolean;\n enabledDisallowPromptTraining: boolean;\n routing?: GatewayRouting;\n };\n};\n\ntype GatewayMiddlewareOptions<TTags extends DefaultTags> =\n BaseBillingMiddlewareOptions<TTags>;\n\nexport function createGatewayV3Middleware<TTags extends DefaultTags>(\n options: GatewayMiddlewareOptions<TTags>,\n) {\n return createV3BillingMiddleware<TTags>({\n ...options,\n\n buildEvent: ({ model, usage, providerMetadata, responseId, tags }) => {\n const gatewayMetadata = providerMetadata as\n | GatewayProviderMetadata\n | undefined;\n\n const gatewayCost = Number(gatewayMetadata?.gateway?.cost ?? '0');\n const upstreamCost = Number(gatewayMetadata?.gateway?.marketCost ?? '0');\n\n const resolvedCost = gatewayCost || upstreamCost;\n\n if (!resolvedCost || isNaN(resolvedCost)) {\n throw new AiBillingExtractorError({\n message: `Expected cost or marketCost to be a valid number.`,\n cause: gatewayMetadata,\n });\n }\n\n return {\n generationId:\n responseId ??\n gatewayMetadata?.gateway?.generationId ??\n crypto.randomUUID(),\n modelId: model.modelId,\n provider: model.provider || 'gateway',\n tags: tags,\n usage: {\n subProviderId: gatewayMetadata?.gateway?.routing?.finalProvider,\n inputTokens: usage?.inputTokens.total ?? 0,\n outputTokens: usage?.outputTokens.total ?? 0,\n cacheReadTokens: usage?.inputTokens.cacheRead ?? 0,\n cacheWriteTokens: usage?.inputTokens.cacheWrite ?? 0,\n reasoningTokens: usage?.outputTokens.reasoning ?? 0,\n totalTokens:\n (usage?.outputTokens.total ?? 0) + (usage?.inputTokens.total ?? 0),\n rawProviderCost: gatewayCost,\n rawUpstreamInferenceCost: upstreamCost,\n },\n cost: {\n amount: resolvedCost,\n unit: 'base',\n currency: 'USD',\n },\n } satisfies BillingEvent<TTags>;\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,kBAMO;AAqDA,SAAS,0BACd,SACA;AACA,aAAO,uCAAiC;AAAA,IACtC,GAAG;AAAA,IAEH,YAAY,CAAC,EAAE,OAAO,OAAO,kBAAkB,YAAY,KAAK,MAAM;AACpE,YAAM,kBAAkB;AAIxB,YAAM,cAAc,OAAO,iBAAiB,SAAS,QAAQ,GAAG;AAChE,YAAM,eAAe,OAAO,iBAAiB,SAAS,cAAc,GAAG;AAEvE,YAAM,eAAe,eAAe;AAEpC,UAAI,CAAC,gBAAgB,MAAM,YAAY,GAAG;AACxC,cAAM,IAAI,oCAAwB;AAAA,UAChC,SAAS;AAAA,UACT,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,QACL,cACE,cACA,iBAAiB,SAAS,gBAC1B,OAAO,WAAW;AAAA,QACpB,SAAS,MAAM;AAAA,QACf,UAAU,MAAM,YAAY;AAAA,QAC5B;AAAA,QACA,OAAO;AAAA,UACL,eAAe,iBAAiB,SAAS,SAAS;AAAA,UAClD,aAAa,OAAO,YAAY,SAAS;AAAA,UACzC,cAAc,OAAO,aAAa,SAAS;AAAA,UAC3C,iBAAiB,OAAO,YAAY,aAAa;AAAA,UACjD,kBAAkB,OAAO,YAAY,cAAc;AAAA,UACnD,iBAAiB,OAAO,aAAa,aAAa;AAAA,UAClD,cACG,OAAO,aAAa,SAAS,MAAM,OAAO,YAAY,SAAS;AAAA,UAClE,iBAAiB;AAAA,UACjB,0BAA0B;AAAA,QAC5B;AAAA,QACA,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -21,13 +21,13 @@ function createGatewayV3Middleware(options) {
|
|
|
21
21
|
generationId: responseId ?? gatewayMetadata?.gateway?.generationId ?? crypto.randomUUID(),
|
|
22
22
|
modelId: model.modelId,
|
|
23
23
|
provider: model.provider || "gateway",
|
|
24
|
-
timestamp: Date.now(),
|
|
25
24
|
tags,
|
|
26
25
|
usage: {
|
|
27
26
|
subProviderId: gatewayMetadata?.gateway?.routing?.finalProvider,
|
|
28
27
|
inputTokens: usage?.inputTokens.total ?? 0,
|
|
29
28
|
outputTokens: usage?.outputTokens.total ?? 0,
|
|
30
29
|
cacheReadTokens: usage?.inputTokens.cacheRead ?? 0,
|
|
30
|
+
cacheWriteTokens: usage?.inputTokens.cacheWrite ?? 0,
|
|
31
31
|
reasoningTokens: usage?.outputTokens.reasoning ?? 0,
|
|
32
32
|
totalTokens: (usage?.outputTokens.total ?? 0) + (usage?.inputTokens.total ?? 0),
|
|
33
33
|
rawProviderCost: gatewayCost,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ai-sdk/language-model-middleware/v3/language-model-v3-ai-gateway-billing-middleware.ts"],"sourcesContent":["import {\n createV3BillingMiddleware,\n type BaseBillingMiddlewareOptions,\n AiBillingExtractorError,\n DefaultTags,\n} from '@ai-billing/core';\nimport type { SharedV3ProviderMetadata } from '@ai-sdk/provider';\n\nexport interface GatewayAttempt {\n provider: string;\n internalModelId: string;\n providerApiModelId: string;\n credentialType: 'system' | 'user';\n success: boolean;\n startTime: number;\n endTime: number;\n statusCode: number;\n providerResponseId: string;\n}\n\nexport interface GatewayModelAttempt {\n modelId: string;\n canonicalSlug: string;\n success: boolean;\n providerAttemptCount: number;\n providerAttempts: GatewayAttempt[];\n}\n\nexport interface GatewayRouting {\n originalModelId: string;\n resolvedProvider: string;\n resolvedProviderApiModelId: string;\n internalResolvedModelId: string;\n fallbacksAvailable: string[];\n internalReasoning: string;\n planningReasoning: string;\n canonicalSlug: string;\n finalProvider: string;\n attempts: GatewayAttempt[];\n modelAttemptCount: number;\n modelAttempts: GatewayModelAttempt[];\n totalProviderAttemptCount: number;\n}\n\nexport type GatewayProviderMetadata = SharedV3ProviderMetadata & {\n gateway?: {\n generationId: string;\n cost?: string;\n marketCost?: string;\n enabledZeroDataRetention: boolean;\n enabledDisallowPromptTraining: boolean;\n routing?: GatewayRouting;\n };\n};\n\ntype GatewayMiddlewareOptions<TTags extends DefaultTags> =\n BaseBillingMiddlewareOptions<TTags>;\n\nexport function createGatewayV3Middleware<TTags extends DefaultTags>(\n options: GatewayMiddlewareOptions<TTags>,\n) {\n return createV3BillingMiddleware<TTags>({\n ...options,\n\n buildEvent: ({ model, usage, providerMetadata, responseId, tags }) => {\n const gatewayMetadata = providerMetadata as\n | GatewayProviderMetadata\n | undefined;\n\n const gatewayCost = Number(gatewayMetadata?.gateway?.cost ?? '0');\n const upstreamCost = Number(gatewayMetadata?.gateway?.marketCost ?? '0');\n\n const resolvedCost = gatewayCost || upstreamCost;\n\n if (!resolvedCost || isNaN(resolvedCost)) {\n throw new AiBillingExtractorError({\n message: `Expected cost or marketCost to be a valid number.`,\n cause: gatewayMetadata,\n });\n }\n\n return {\n generationId:\n responseId ??\n gatewayMetadata?.gateway?.generationId ??\n crypto.randomUUID(),\n modelId: model.modelId,\n provider: model.provider || 'gateway',\n
|
|
1
|
+
{"version":3,"sources":["../src/ai-sdk/language-model-middleware/v3/language-model-v3-ai-gateway-billing-middleware.ts"],"sourcesContent":["import {\n createV3BillingMiddleware,\n type BaseBillingMiddlewareOptions,\n AiBillingExtractorError,\n DefaultTags,\n BillingEvent,\n} from '@ai-billing/core';\nimport type { SharedV3ProviderMetadata } from '@ai-sdk/provider';\n\nexport interface GatewayAttempt {\n provider: string;\n internalModelId: string;\n providerApiModelId: string;\n credentialType: 'system' | 'user';\n success: boolean;\n startTime: number;\n endTime: number;\n statusCode: number;\n providerResponseId: string;\n}\n\nexport interface GatewayModelAttempt {\n modelId: string;\n canonicalSlug: string;\n success: boolean;\n providerAttemptCount: number;\n providerAttempts: GatewayAttempt[];\n}\n\nexport interface GatewayRouting {\n originalModelId: string;\n resolvedProvider: string;\n resolvedProviderApiModelId: string;\n internalResolvedModelId: string;\n fallbacksAvailable: string[];\n internalReasoning: string;\n planningReasoning: string;\n canonicalSlug: string;\n finalProvider: string;\n attempts: GatewayAttempt[];\n modelAttemptCount: number;\n modelAttempts: GatewayModelAttempt[];\n totalProviderAttemptCount: number;\n}\n\nexport type GatewayProviderMetadata = SharedV3ProviderMetadata & {\n gateway?: {\n generationId: string;\n cost?: string;\n marketCost?: string;\n enabledZeroDataRetention: boolean;\n enabledDisallowPromptTraining: boolean;\n routing?: GatewayRouting;\n };\n};\n\ntype GatewayMiddlewareOptions<TTags extends DefaultTags> =\n BaseBillingMiddlewareOptions<TTags>;\n\nexport function createGatewayV3Middleware<TTags extends DefaultTags>(\n options: GatewayMiddlewareOptions<TTags>,\n) {\n return createV3BillingMiddleware<TTags>({\n ...options,\n\n buildEvent: ({ model, usage, providerMetadata, responseId, tags }) => {\n const gatewayMetadata = providerMetadata as\n | GatewayProviderMetadata\n | undefined;\n\n const gatewayCost = Number(gatewayMetadata?.gateway?.cost ?? '0');\n const upstreamCost = Number(gatewayMetadata?.gateway?.marketCost ?? '0');\n\n const resolvedCost = gatewayCost || upstreamCost;\n\n if (!resolvedCost || isNaN(resolvedCost)) {\n throw new AiBillingExtractorError({\n message: `Expected cost or marketCost to be a valid number.`,\n cause: gatewayMetadata,\n });\n }\n\n return {\n generationId:\n responseId ??\n gatewayMetadata?.gateway?.generationId ??\n crypto.randomUUID(),\n modelId: model.modelId,\n provider: model.provider || 'gateway',\n tags: tags,\n usage: {\n subProviderId: gatewayMetadata?.gateway?.routing?.finalProvider,\n inputTokens: usage?.inputTokens.total ?? 0,\n outputTokens: usage?.outputTokens.total ?? 0,\n cacheReadTokens: usage?.inputTokens.cacheRead ?? 0,\n cacheWriteTokens: usage?.inputTokens.cacheWrite ?? 0,\n reasoningTokens: usage?.outputTokens.reasoning ?? 0,\n totalTokens:\n (usage?.outputTokens.total ?? 0) + (usage?.inputTokens.total ?? 0),\n rawProviderCost: gatewayCost,\n rawUpstreamInferenceCost: upstreamCost,\n },\n cost: {\n amount: resolvedCost,\n unit: 'base',\n currency: 'USD',\n },\n } satisfies BillingEvent<TTags>;\n },\n });\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EAEA;AAAA,OAGK;AAqDA,SAAS,0BACd,SACA;AACA,SAAO,0BAAiC;AAAA,IACtC,GAAG;AAAA,IAEH,YAAY,CAAC,EAAE,OAAO,OAAO,kBAAkB,YAAY,KAAK,MAAM;AACpE,YAAM,kBAAkB;AAIxB,YAAM,cAAc,OAAO,iBAAiB,SAAS,QAAQ,GAAG;AAChE,YAAM,eAAe,OAAO,iBAAiB,SAAS,cAAc,GAAG;AAEvE,YAAM,eAAe,eAAe;AAEpC,UAAI,CAAC,gBAAgB,MAAM,YAAY,GAAG;AACxC,cAAM,IAAI,wBAAwB;AAAA,UAChC,SAAS;AAAA,UACT,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,QACL,cACE,cACA,iBAAiB,SAAS,gBAC1B,OAAO,WAAW;AAAA,QACpB,SAAS,MAAM;AAAA,QACf,UAAU,MAAM,YAAY;AAAA,QAC5B;AAAA,QACA,OAAO;AAAA,UACL,eAAe,iBAAiB,SAAS,SAAS;AAAA,UAClD,aAAa,OAAO,YAAY,SAAS;AAAA,UACzC,cAAc,OAAO,aAAa,SAAS;AAAA,UAC3C,iBAAiB,OAAO,YAAY,aAAa;AAAA,UACjD,kBAAkB,OAAO,YAAY,cAAc;AAAA,UACnD,iBAAiB,OAAO,aAAa,aAAa;AAAA,UAClD,cACG,OAAO,aAAa,SAAS,MAAM,OAAO,YAAY,SAAS;AAAA,UAClE,iBAAiB;AAAA,UACjB,0BAA0B;AAAA,QAC5B;AAAA,QACA,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-billing/gateway",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "git+https://github.com/narevai/ai-billing.git",
|
|
9
|
-
"directory": "packages/
|
|
9
|
+
"directory": "packages/gateway"
|
|
10
10
|
},
|
|
11
11
|
"main": "./dist/index.js",
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
@@ -23,39 +23,39 @@
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
"publishConfig": {
|
|
26
|
-
"access": "public"
|
|
26
|
+
"access": "public",
|
|
27
|
+
"provenance": true
|
|
27
28
|
},
|
|
28
29
|
"files": [
|
|
29
30
|
"dist"
|
|
30
31
|
],
|
|
31
|
-
"scripts": {
|
|
32
|
-
"build": "tsup",
|
|
33
|
-
"check-types": "tsc --noEmit",
|
|
34
|
-
"lint": "oxlint",
|
|
35
|
-
"dev": "tsup --watch",
|
|
36
|
-
"test": "vitest run",
|
|
37
|
-
"test:coverage": "vitest run --coverage",
|
|
38
|
-
"test:watch": "vitest",
|
|
39
|
-
"prepack": "node -e \"require('fs').copyFileSync('../../LICENSE', 'LICENSE')\"",
|
|
40
|
-
"postpack": "node -e \"require('fs').rmSync('LICENSE', { force: true })\""
|
|
41
|
-
},
|
|
42
32
|
"dependencies": {
|
|
43
|
-
"@ai-billing/core": "
|
|
33
|
+
"@ai-billing/core": "0.0.3"
|
|
44
34
|
},
|
|
45
35
|
"devDependencies": {
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"@
|
|
36
|
+
"tsup": "^8.5.1",
|
|
37
|
+
"typescript": "5.9.2",
|
|
38
|
+
"vitest": "4.1.1",
|
|
39
|
+
"ai": "^6.0.138",
|
|
40
|
+
"@ai-sdk/provider": "^3.0.8",
|
|
41
|
+
"@edge-runtime/vm": "^5.0.0",
|
|
42
|
+
"zod": "^4.3.6",
|
|
43
|
+
"@ai-billing/testing": "0.0.2",
|
|
44
|
+
"@ai-billing/typescript-config": "0.0.1"
|
|
54
45
|
},
|
|
55
46
|
"peerDependencies": {
|
|
56
47
|
"ai": "^6.0.0"
|
|
57
48
|
},
|
|
58
49
|
"engines": {
|
|
59
50
|
"node": ">=20.0.0"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"build": "tsup",
|
|
54
|
+
"check-types": "tsc --noEmit",
|
|
55
|
+
"lint": "oxlint",
|
|
56
|
+
"dev": "tsup --watch",
|
|
57
|
+
"test": "vitest run",
|
|
58
|
+
"test:coverage": "vitest run --coverage",
|
|
59
|
+
"test:watch": "vitest"
|
|
60
60
|
}
|
|
61
|
-
}
|
|
61
|
+
}
|