@carlonicora/nestjs-neo4jsonapi 1.116.0 → 1.118.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/dist/common/guards/jwt.auth.admin.guard.d.ts +3 -2
- package/dist/common/guards/jwt.auth.admin.guard.d.ts.map +1 -1
- package/dist/common/guards/jwt.auth.admin.guard.js +19 -4
- package/dist/common/guards/jwt.auth.admin.guard.js.map +1 -1
- package/dist/common/helpers/define-entity.d.ts +11 -1
- package/dist/common/helpers/define-entity.d.ts.map +1 -1
- package/dist/common/helpers/define-entity.js +7 -0
- package/dist/common/helpers/define-entity.js.map +1 -1
- package/dist/common/tokens.d.ts +4 -0
- package/dist/common/tokens.d.ts.map +1 -1
- package/dist/config/base.config.d.ts.map +1 -1
- package/dist/config/base.config.js +8 -0
- package/dist/config/base.config.js.map +1 -1
- package/dist/config/interfaces/base.config.interface.d.ts +2 -0
- package/dist/config/interfaces/base.config.interface.d.ts.map +1 -1
- package/dist/config/interfaces/config.ai.interface.d.ts +8 -0
- package/dist/config/interfaces/config.ai.interface.d.ts.map +1 -1
- package/dist/config/interfaces/config.credits.interface.d.ts +24 -0
- package/dist/config/interfaces/config.credits.interface.d.ts.map +1 -0
- package/dist/config/interfaces/config.credits.interface.js +3 -0
- package/dist/config/interfaces/config.credits.interface.js.map +1 -0
- package/dist/config/interfaces/index.d.ts +1 -0
- package/dist/config/interfaces/index.d.ts.map +1 -1
- package/dist/config/interfaces/index.js +1 -0
- package/dist/config/interfaces/index.js.map +1 -1
- package/dist/core/llm/services/embedder.service.d.ts +36 -2
- package/dist/core/llm/services/embedder.service.d.ts.map +1 -1
- package/dist/core/llm/services/embedder.service.js +87 -7
- package/dist/core/llm/services/embedder.service.js.map +1 -1
- package/dist/core/neo4j/abstracts/abstract.repository.d.ts.map +1 -1
- package/dist/core/neo4j/abstracts/abstract.repository.js +6 -2
- package/dist/core/neo4j/abstracts/abstract.repository.js.map +1 -1
- package/dist/foundations/community/repositories/community.repository.d.ts.map +1 -1
- package/dist/foundations/community/repositories/community.repository.js +2 -1
- package/dist/foundations/community/repositories/community.repository.js.map +1 -1
- package/dist/foundations/company/dtos/company.post.dto.d.ts +3 -3
- package/dist/foundations/company/dtos/company.post.dto.d.ts.map +1 -1
- package/dist/foundations/company/dtos/company.post.dto.js +3 -3
- package/dist/foundations/company/dtos/company.post.dto.js.map +1 -1
- package/dist/foundations/company/dtos/company.put.dto.d.ts +3 -3
- package/dist/foundations/company/dtos/company.put.dto.d.ts.map +1 -1
- package/dist/foundations/company/dtos/company.put.dto.js +3 -3
- package/dist/foundations/company/dtos/company.put.dto.js.map +1 -1
- package/dist/foundations/company/entities/company.d.ts +3 -3
- package/dist/foundations/company/entities/company.d.ts.map +1 -1
- package/dist/foundations/company/entities/company.js +3 -3
- package/dist/foundations/company/entities/company.js.map +1 -1
- package/dist/foundations/company/repositories/company.repository.d.ts +31 -24
- package/dist/foundations/company/repositories/company.repository.d.ts.map +1 -1
- package/dist/foundations/company/repositories/company.repository.js +66 -77
- package/dist/foundations/company/repositories/company.repository.js.map +1 -1
- package/dist/foundations/company/services/company.service.d.ts +8 -9
- package/dist/foundations/company/services/company.service.d.ts.map +1 -1
- package/dist/foundations/company/services/company.service.js +29 -32
- package/dist/foundations/company/services/company.service.js.map +1 -1
- package/dist/foundations/notification/repositories/notification.repository.d.ts.map +1 -1
- package/dist/foundations/notification/repositories/notification.repository.js +2 -1
- package/dist/foundations/notification/repositories/notification.repository.js.map +1 -1
- package/dist/foundations/referral/services/referral.service.js +4 -4
- package/dist/foundations/referral/services/referral.service.js.map +1 -1
- package/dist/foundations/stripe-customer/repositories/stripe-customer.repository.js +1 -1
- package/dist/foundations/stripe-customer/repositories/stripe-customer.repository.js.map +1 -1
- package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js +3 -2
- package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js.map +1 -1
- package/dist/foundations/stripe-subscription/services/token-allocation.service.d.ts +1 -1
- package/dist/foundations/stripe-subscription/services/token-allocation.service.js +10 -10
- package/dist/foundations/stripe-subscription/services/token-allocation.service.js.map +1 -1
- package/dist/foundations/stripe-trial/services/trial.service.js +2 -2
- package/dist/foundations/stripe-trial/services/trial.service.js.map +1 -1
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js +2 -2
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js.map +1 -1
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.d.ts +27 -0
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.d.ts.map +1 -0
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.js +136 -0
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.d.ts +26 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.js +24 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.d.ts +3 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.js +10 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.d.ts +24 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.js +21 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.d.ts +3 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.js +10 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.d.ts +22 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.js +21 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.d.ts +3 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.js +10 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage.d.ts +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage.d.ts.map +1 -1
- package/dist/foundations/tokenusage/entities/tokenusage.js +4 -0
- package/dist/foundations/tokenusage/entities/tokenusage.js.map +1 -1
- package/dist/foundations/tokenusage/enums/tokenusage.type.d.ts +2 -1
- package/dist/foundations/tokenusage/enums/tokenusage.type.d.ts.map +1 -1
- package/dist/foundations/tokenusage/enums/tokenusage.type.js +1 -0
- package/dist/foundations/tokenusage/enums/tokenusage.type.js.map +1 -1
- package/dist/foundations/tokenusage/events/tokenusage.events.d.ts +2 -0
- package/dist/foundations/tokenusage/events/tokenusage.events.d.ts.map +1 -1
- package/dist/foundations/tokenusage/index.d.ts +10 -1
- package/dist/foundations/tokenusage/index.d.ts.map +1 -1
- package/dist/foundations/tokenusage/index.js +19 -1
- package/dist/foundations/tokenusage/index.js.map +1 -1
- package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.d.ts +73 -0
- package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.d.ts.map +1 -0
- package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.js +342 -0
- package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.js.map +1 -0
- package/dist/foundations/tokenusage/repositories/tokenusage.repository.d.ts +78 -3
- package/dist/foundations/tokenusage/repositories/tokenusage.repository.d.ts.map +1 -1
- package/dist/foundations/tokenusage/repositories/tokenusage.repository.js +155 -5
- package/dist/foundations/tokenusage/repositories/tokenusage.repository.js.map +1 -1
- package/dist/foundations/tokenusage/services/tokenusage.admin.service.d.ts +50 -0
- package/dist/foundations/tokenusage/services/tokenusage.admin.service.d.ts.map +1 -0
- package/dist/foundations/tokenusage/services/tokenusage.admin.service.js +84 -0
- package/dist/foundations/tokenusage/services/tokenusage.admin.service.js.map +1 -0
- package/dist/foundations/tokenusage/services/tokenusage.service.d.ts +37 -1
- package/dist/foundations/tokenusage/services/tokenusage.service.d.ts.map +1 -1
- package/dist/foundations/tokenusage/services/tokenusage.service.js +56 -5
- package/dist/foundations/tokenusage/services/tokenusage.service.js.map +1 -1
- package/dist/foundations/tokenusage/tokenusage.module.d.ts.map +1 -1
- package/dist/foundations/tokenusage/tokenusage.module.js +21 -3
- package/dist/foundations/tokenusage/tokenusage.module.js.map +1 -1
- package/package.json +2 -1
|
@@ -27,17 +27,41 @@ const tokenusage_meta_1 = require("../../tokenusage/entities/tokenusage.meta");
|
|
|
27
27
|
* never by a registry lookup: Nest constructs providers long before
|
|
28
28
|
* `onModuleInit`, where models are registered.
|
|
29
29
|
*
|
|
30
|
-
* `onModuleInit`
|
|
31
|
-
*
|
|
30
|
+
* `onModuleInit` DELEGATES to `AbstractRepository.onModuleInit` first, which emits
|
|
31
|
+
* `CREATE CONSTRAINT tokenusage_id IF NOT EXISTS FOR (tokenusage:TokenUsage)
|
|
32
32
|
* REQUIRE tokenusage.id IS UNIQUE` from `descriptor.constraints` — byte-identical to
|
|
33
33
|
* the constraint this repository used to declare by hand — plus the FULLTEXT index
|
|
34
|
-
* derived from the descriptor's string fields.
|
|
34
|
+
* derived from the descriptor's string fields. It then adds the one index the
|
|
35
|
+
* descriptor cannot express; see the override below.
|
|
35
36
|
*/
|
|
36
37
|
let TokenUsageRepository = class TokenUsageRepository extends abstract_repository_1.AbstractRepository {
|
|
37
38
|
constructor(neo4j, securityService, clsService) {
|
|
38
39
|
super(neo4j, securityService, clsService);
|
|
39
40
|
this.descriptor = tokenusage_1.TokenUsageDescriptor;
|
|
40
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Adds the range index every date-filtered finder here depends on —
|
|
44
|
+
* findByCompany, findAggregatedByDateAndType, findUsageSummary, and the
|
|
45
|
+
* cross-tenant admin queries in TokenUsageAdminRepository. Without it each of
|
|
46
|
+
* them scans the whole :TokenUsage label, which is the fastest-growing label
|
|
47
|
+
* in the database.
|
|
48
|
+
*
|
|
49
|
+
* There is no declarative way to express a non-FULLTEXT index via
|
|
50
|
+
* defineEntity(): EntityDescriptor.indexes is hard-coded to the string-field
|
|
51
|
+
* fulltext index, and AbstractRepository.onModuleInit only acts on
|
|
52
|
+
* type === "FULLTEXT". Hence the explicit override — same pattern, and same
|
|
53
|
+
* stated reason, as UserActivityRepository.
|
|
54
|
+
*
|
|
55
|
+
* super.onModuleInit() MUST be called first: it creates the descriptor-derived
|
|
56
|
+
* id constraint and fulltext index. Dropping it would silently remove both.
|
|
57
|
+
*/
|
|
58
|
+
async onModuleInit() {
|
|
59
|
+
await super.onModuleInit();
|
|
60
|
+
const { nodeName, labelName } = this.descriptor.model;
|
|
61
|
+
await this.neo4j.writeOne({
|
|
62
|
+
query: `CREATE INDEX ${nodeName}_createdAt IF NOT EXISTS FOR (${nodeName}:${labelName}) ON (${nodeName}.createdAt)`,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
41
65
|
/**
|
|
42
66
|
* Custom create (KEPT — "non-standard relationships" rule): USED_FOR's target is
|
|
43
67
|
* polymorphic (any entity label — Content, Chunk, Conversation, ...), which the
|
|
@@ -59,7 +83,9 @@ let TokenUsageRepository = class TokenUsageRepository extends abstract_repositor
|
|
|
59
83
|
cachedInputTokens: params.cachedInputTokens ?? 0,
|
|
60
84
|
relationshipId: params.relationshipId,
|
|
61
85
|
cost: params.cost ?? 0,
|
|
86
|
+
credits: params.credits ?? 0,
|
|
62
87
|
};
|
|
88
|
+
// Guarded: initQuery() binds this variable only when the id is in CLS; an unbound CREATE target creates an orphan node.
|
|
63
89
|
query.query += `
|
|
64
90
|
CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName}:${tokenusage_meta_1.tokenUsageMeta.labelName} {
|
|
65
91
|
id: $id,
|
|
@@ -68,17 +94,141 @@ let TokenUsageRepository = class TokenUsageRepository extends abstract_repositor
|
|
|
68
94
|
outputTokens: $outputTokens,
|
|
69
95
|
cachedInputTokens: $cachedInputTokens,
|
|
70
96
|
cost: $cost,
|
|
97
|
+
credits: $credits,
|
|
71
98
|
createdAt: datetime(),
|
|
72
99
|
updatedAt: datetime()
|
|
73
100
|
})
|
|
74
|
-
CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:BELONGS_TO]->(company)
|
|
75
|
-
CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:TRIGGERED_BY]->(currentUser)
|
|
101
|
+
${query.queryParams.companyId ? `CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:BELONGS_TO]->(company)` : ``}
|
|
102
|
+
${query.queryParams.currentUserId ? `CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:TRIGGERED_BY]->(currentUser)` : ``}
|
|
76
103
|
WITH ${tokenusage_meta_1.tokenUsageMeta.nodeName}
|
|
77
104
|
MATCH (relEntity:${params.relationshipType} {id: $relationshipId})
|
|
78
105
|
CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:USED_FOR]->(relEntity)
|
|
79
106
|
`;
|
|
80
107
|
await this.neo4j.writeOne(query);
|
|
81
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Custom list (KEPT — date-range + tokenUsageType filtering is not expressible via the
|
|
111
|
+
* inherited descriptor-driven find()). Reuses buildDefaultMatch()/buildReturnStatement()
|
|
112
|
+
* for company scoping and security consistency.
|
|
113
|
+
*/
|
|
114
|
+
async findByCompany(params) {
|
|
115
|
+
const query = this.neo4j.initQuery({ serialiser: tokenusage_1.TokenUsageDescriptor.model, cursor: params.cursor });
|
|
116
|
+
if (params.startDate) {
|
|
117
|
+
query.queryParams = { ...query.queryParams, startDate: params.startDate };
|
|
118
|
+
}
|
|
119
|
+
if (params.endDate) {
|
|
120
|
+
query.queryParams = { ...query.queryParams, endDate: params.endDate };
|
|
121
|
+
}
|
|
122
|
+
if (params.tokenUsageType) {
|
|
123
|
+
query.queryParams = { ...query.queryParams, tokenUsageType: params.tokenUsageType };
|
|
124
|
+
}
|
|
125
|
+
query.query += `
|
|
126
|
+
${this.buildDefaultMatch()}
|
|
127
|
+
${this.securityService.userHasAccess({ validator: () => this.buildUserHasAccess() })}
|
|
128
|
+
${params.startDate ? `WHERE ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt >= datetime($startDate)` : ""}
|
|
129
|
+
${params.endDate ? `${params.startDate ? "AND" : "WHERE"} ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt <= datetime($endDate)` : ""}
|
|
130
|
+
${params.tokenUsageType ? `${params.startDate || params.endDate ? "AND" : "WHERE"} ${tokenusage_meta_1.tokenUsageMeta.nodeName}.tokenUsageType = $tokenUsageType` : ""}
|
|
131
|
+
|
|
132
|
+
ORDER BY ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt DESC
|
|
133
|
+
{CURSOR}
|
|
134
|
+
|
|
135
|
+
${this.buildReturnStatement()}
|
|
136
|
+
`;
|
|
137
|
+
return this.neo4j.readMany(query);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Aggregation query (KEPT — "aggregations" rule): returns grouped totals, not
|
|
141
|
+
* TokenUsage entities, so it intentionally bypasses readMany()/the serialiser — there
|
|
142
|
+
* is nothing to map onto the entity type.
|
|
143
|
+
*/
|
|
144
|
+
async findAggregatedByDateAndType(params) {
|
|
145
|
+
const query = this.neo4j.initQuery();
|
|
146
|
+
if (params.startDate) {
|
|
147
|
+
query.queryParams = { ...query.queryParams, startDate: params.startDate };
|
|
148
|
+
}
|
|
149
|
+
if (params.endDate) {
|
|
150
|
+
query.queryParams = { ...query.queryParams, endDate: params.endDate };
|
|
151
|
+
}
|
|
152
|
+
query.query += `
|
|
153
|
+
${this.buildDefaultMatch()}
|
|
154
|
+
${params.startDate ? `WHERE ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt >= datetime($startDate)` : ""}
|
|
155
|
+
${params.endDate ? `${params.startDate ? "AND" : "WHERE"} ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt <= datetime($endDate)` : ""}
|
|
156
|
+
|
|
157
|
+
WITH date(${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt) as usageDate,
|
|
158
|
+
${tokenusage_meta_1.tokenUsageMeta.nodeName}.tokenUsageType as usageType,
|
|
159
|
+
${tokenusage_meta_1.tokenUsageMeta.nodeName}
|
|
160
|
+
|
|
161
|
+
RETURN toString(usageDate) as date,
|
|
162
|
+
usageType as tokenUsageType,
|
|
163
|
+
round(sum(toFloat(${tokenusage_meta_1.tokenUsageMeta.nodeName}.credits)), 2) as totalCredits,
|
|
164
|
+
sum(toInteger(${tokenusage_meta_1.tokenUsageMeta.nodeName}.inputTokens)) as totalInputTokens,
|
|
165
|
+
sum(toInteger(${tokenusage_meta_1.tokenUsageMeta.nodeName}.outputTokens)) as totalOutputTokens,
|
|
166
|
+
sum(toFloat(${tokenusage_meta_1.tokenUsageMeta.nodeName}.cost)) as totalCost,
|
|
167
|
+
count(${tokenusage_meta_1.tokenUsageMeta.nodeName}) as count
|
|
168
|
+
ORDER BY date DESC, tokenUsageType
|
|
169
|
+
`;
|
|
170
|
+
const result = await this.neo4j.read(query.query, query.queryParams); // nja-lint-ignore: buildDefaultMatch()-scoped scalar aggregation — non-entity shape
|
|
171
|
+
return result.records.map((record) => ({
|
|
172
|
+
// nja-lint-ignore: aggregation rows, not entity nodes
|
|
173
|
+
date: record.get("date"),
|
|
174
|
+
tokenUsageType: record.get("tokenUsageType"),
|
|
175
|
+
totalCredits: this.toNumber(record.get("totalCredits")),
|
|
176
|
+
totalInputTokens: this.toNumber(record.get("totalInputTokens")),
|
|
177
|
+
totalOutputTokens: this.toNumber(record.get("totalOutputTokens")),
|
|
178
|
+
totalCost: this.toNumber(record.get("totalCost")),
|
|
179
|
+
count: this.toNumber(record.get("count")),
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Aggregation query (KEPT — see findAggregatedByDateAndType above), single-row totals.
|
|
184
|
+
*/
|
|
185
|
+
async findUsageSummary(params) {
|
|
186
|
+
const query = this.neo4j.initQuery();
|
|
187
|
+
if (params.startDate) {
|
|
188
|
+
query.queryParams = { ...query.queryParams, startDate: params.startDate };
|
|
189
|
+
}
|
|
190
|
+
if (params.endDate) {
|
|
191
|
+
query.queryParams = { ...query.queryParams, endDate: params.endDate };
|
|
192
|
+
}
|
|
193
|
+
query.query += `
|
|
194
|
+
${this.buildDefaultMatch()}
|
|
195
|
+
${params.startDate ? `WHERE ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt >= datetime($startDate)` : ""}
|
|
196
|
+
${params.endDate ? `${params.startDate ? "AND" : "WHERE"} ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt <= datetime($endDate)` : ""}
|
|
197
|
+
|
|
198
|
+
RETURN round(sum(toFloat(${tokenusage_meta_1.tokenUsageMeta.nodeName}.credits)), 2) as totalCredits,
|
|
199
|
+
sum(toInteger(${tokenusage_meta_1.tokenUsageMeta.nodeName}.inputTokens)) as totalInputTokens,
|
|
200
|
+
sum(toInteger(${tokenusage_meta_1.tokenUsageMeta.nodeName}.outputTokens)) as totalOutputTokens,
|
|
201
|
+
sum(toFloat(${tokenusage_meta_1.tokenUsageMeta.nodeName}.cost)) as totalCost,
|
|
202
|
+
count(${tokenusage_meta_1.tokenUsageMeta.nodeName}) as count
|
|
203
|
+
`;
|
|
204
|
+
const result = await this.neo4j.read(query.query, query.queryParams); // nja-lint-ignore: buildDefaultMatch()-scoped scalar aggregation — non-entity shape
|
|
205
|
+
if (result.records.length === 0) {
|
|
206
|
+
return {
|
|
207
|
+
totalCredits: 0,
|
|
208
|
+
totalInputTokens: 0,
|
|
209
|
+
totalOutputTokens: 0,
|
|
210
|
+
totalCost: 0,
|
|
211
|
+
count: 0,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
const record = result.records[0];
|
|
215
|
+
return {
|
|
216
|
+
totalCredits: this.toNumber(record.get("totalCredits")),
|
|
217
|
+
totalInputTokens: this.toNumber(record.get("totalInputTokens")),
|
|
218
|
+
totalOutputTokens: this.toNumber(record.get("totalOutputTokens")),
|
|
219
|
+
totalCost: this.toNumber(record.get("totalCost")),
|
|
220
|
+
count: this.toNumber(record.get("count")),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
toNumber(value) {
|
|
224
|
+
if (value === null || value === undefined)
|
|
225
|
+
return 0;
|
|
226
|
+
if (typeof value === "number")
|
|
227
|
+
return value;
|
|
228
|
+
if (typeof value.toNumber === "function")
|
|
229
|
+
return value.toNumber();
|
|
230
|
+
return Number(value) || 0;
|
|
231
|
+
}
|
|
82
232
|
};
|
|
83
233
|
exports.TokenUsageRepository = TokenUsageRepository;
|
|
84
234
|
exports.TokenUsageRepository = TokenUsageRepository = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage.repository.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/repositories/tokenusage.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAwC;
|
|
1
|
+
{"version":3,"file":"tokenusage.repository.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/repositories/tokenusage.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ClsService } from "nestjs-cls";
|
|
2
|
+
import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
|
|
3
|
+
import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
|
|
4
|
+
import { TokenUsage, TokenUsageDescriptor } from "../entities/tokenusage";
|
|
5
|
+
import { TokenUsageAdminRepository } from "../repositories/tokenusage.admin.repository";
|
|
6
|
+
/**
|
|
7
|
+
* Serialises the cross-tenant reporting rollups as JSON:API documents.
|
|
8
|
+
*
|
|
9
|
+
* Extends AbstractService with the same generics, descriptor and super()
|
|
10
|
+
* argument order as its sibling TokenUsageService in this folder, so both
|
|
11
|
+
* services in the tokenusage foundation are wired identically. The inherited
|
|
12
|
+
* generic CRUD (find / findById / create / put / patch / delete) is not reachable
|
|
13
|
+
* from any route on TokenUsageAdminController — the three reporting endpoints are
|
|
14
|
+
* the whole surface — but is available to a consuming app that mounts its own
|
|
15
|
+
* controller, exactly as the docblock on TokenUsageService already notes.
|
|
16
|
+
*
|
|
17
|
+
* `descriptor` and the inherited `model` are the TokenUsage entity: that is what
|
|
18
|
+
* the repository reads and what the base class needs to be coherent. The three
|
|
19
|
+
* methods below deliberately serialise with the AGGREGATE descriptors' models
|
|
20
|
+
* instead, because their return shapes are rollups, not TokenUsage nodes.
|
|
21
|
+
*
|
|
22
|
+
* JSON:API documents are built exclusively by the framework — nothing here
|
|
23
|
+
* hand-assembles a { data: { type, attributes } } object.
|
|
24
|
+
*/
|
|
25
|
+
export declare class TokenUsageAdminService extends AbstractService<TokenUsage, typeof TokenUsageDescriptor.relationships> {
|
|
26
|
+
protected readonly tokenUsageAdminRepository: TokenUsageAdminRepository;
|
|
27
|
+
protected readonly descriptor: import("../../..").EntityDescriptor<TokenUsage, {}>;
|
|
28
|
+
constructor(jsonApiService: JsonApiService, tokenUsageAdminRepository: TokenUsageAdminRepository, clsService: ClsService);
|
|
29
|
+
getSummary(params: {
|
|
30
|
+
from: string;
|
|
31
|
+
to: string;
|
|
32
|
+
companyId?: string;
|
|
33
|
+
}): Promise<any>;
|
|
34
|
+
getTimeline(params: {
|
|
35
|
+
from: string;
|
|
36
|
+
to: string;
|
|
37
|
+
granularity: "day" | "week" | "month";
|
|
38
|
+
stackBy: "scope" | "type" | "company";
|
|
39
|
+
companyId?: string;
|
|
40
|
+
}): Promise<any>;
|
|
41
|
+
getBreakdown(params: {
|
|
42
|
+
from: string;
|
|
43
|
+
to: string;
|
|
44
|
+
dimension: "company" | "user" | "operation";
|
|
45
|
+
scope: "customer" | "platform";
|
|
46
|
+
companyId?: string;
|
|
47
|
+
limit: number;
|
|
48
|
+
}): Promise<any>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=tokenusage.admin.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage.admin.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.admin.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAExF;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBACa,sBAAuB,SAAQ,eAAe,CAAC,UAAU,EAAE,OAAO,oBAAoB,CAAC,aAAa,CAAC;IAK9G,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB;IAJzE,SAAS,CAAC,QAAQ,CAAC,UAAU,sDAAwB;gBAGnD,cAAc,EAAE,cAAc,EACX,yBAAyB,EAAE,yBAAyB,EACvE,UAAU,EAAE,UAAU;IAKlB,UAAU,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAUlF,WAAW,CAAC,MAAM,EAAE;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;QACtC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;QACtC,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,GAAG,CAAC;IAYV,YAAY,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;QAC5C,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,GAAG,CAAC;CAYjB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.TokenUsageAdminService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const nestjs_cls_1 = require("nestjs-cls");
|
|
15
|
+
const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
|
|
16
|
+
const abstract_service_1 = require("../../../core/neo4j/abstracts/abstract.service");
|
|
17
|
+
const tokenusage_1 = require("../entities/tokenusage");
|
|
18
|
+
const tokenusage_admin_breakdown_1 = require("../entities/tokenusage-admin-breakdown");
|
|
19
|
+
const tokenusage_admin_summary_1 = require("../entities/tokenusage-admin-summary");
|
|
20
|
+
const tokenusage_admin_timeline_1 = require("../entities/tokenusage-admin-timeline");
|
|
21
|
+
const tokenusage_admin_repository_1 = require("../repositories/tokenusage.admin.repository");
|
|
22
|
+
/**
|
|
23
|
+
* Serialises the cross-tenant reporting rollups as JSON:API documents.
|
|
24
|
+
*
|
|
25
|
+
* Extends AbstractService with the same generics, descriptor and super()
|
|
26
|
+
* argument order as its sibling TokenUsageService in this folder, so both
|
|
27
|
+
* services in the tokenusage foundation are wired identically. The inherited
|
|
28
|
+
* generic CRUD (find / findById / create / put / patch / delete) is not reachable
|
|
29
|
+
* from any route on TokenUsageAdminController — the three reporting endpoints are
|
|
30
|
+
* the whole surface — but is available to a consuming app that mounts its own
|
|
31
|
+
* controller, exactly as the docblock on TokenUsageService already notes.
|
|
32
|
+
*
|
|
33
|
+
* `descriptor` and the inherited `model` are the TokenUsage entity: that is what
|
|
34
|
+
* the repository reads and what the base class needs to be coherent. The three
|
|
35
|
+
* methods below deliberately serialise with the AGGREGATE descriptors' models
|
|
36
|
+
* instead, because their return shapes are rollups, not TokenUsage nodes.
|
|
37
|
+
*
|
|
38
|
+
* JSON:API documents are built exclusively by the framework — nothing here
|
|
39
|
+
* hand-assembles a { data: { type, attributes } } object.
|
|
40
|
+
*/
|
|
41
|
+
let TokenUsageAdminService = class TokenUsageAdminService extends abstract_service_1.AbstractService {
|
|
42
|
+
constructor(jsonApiService, tokenUsageAdminRepository, clsService) {
|
|
43
|
+
super(jsonApiService, tokenUsageAdminRepository, clsService, tokenusage_1.TokenUsageDescriptor.model);
|
|
44
|
+
this.tokenUsageAdminRepository = tokenUsageAdminRepository;
|
|
45
|
+
this.descriptor = tokenusage_1.TokenUsageDescriptor;
|
|
46
|
+
}
|
|
47
|
+
async getSummary(params) {
|
|
48
|
+
const rows = await this.tokenUsageAdminRepository.findSummary({
|
|
49
|
+
from: params.from,
|
|
50
|
+
to: params.to,
|
|
51
|
+
companyId: params.companyId,
|
|
52
|
+
});
|
|
53
|
+
return this.jsonApiService.buildList(tokenusage_admin_summary_1.TokenUsageAdminSummaryDescriptor.model, rows);
|
|
54
|
+
}
|
|
55
|
+
async getTimeline(params) {
|
|
56
|
+
const rows = await this.tokenUsageAdminRepository.findTimeline({
|
|
57
|
+
from: params.from,
|
|
58
|
+
to: params.to,
|
|
59
|
+
granularity: params.granularity,
|
|
60
|
+
stackBy: params.stackBy,
|
|
61
|
+
companyId: params.companyId,
|
|
62
|
+
});
|
|
63
|
+
return this.jsonApiService.buildList(tokenusage_admin_timeline_1.TokenUsageAdminTimelineDescriptor.model, rows);
|
|
64
|
+
}
|
|
65
|
+
async getBreakdown(params) {
|
|
66
|
+
const rows = await this.tokenUsageAdminRepository.findBreakdown({
|
|
67
|
+
from: params.from,
|
|
68
|
+
to: params.to,
|
|
69
|
+
dimension: params.dimension,
|
|
70
|
+
scope: params.scope,
|
|
71
|
+
companyId: params.companyId,
|
|
72
|
+
limit: params.limit,
|
|
73
|
+
});
|
|
74
|
+
return this.jsonApiService.buildList(tokenusage_admin_breakdown_1.TokenUsageAdminBreakdownDescriptor.model, rows);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
exports.TokenUsageAdminService = TokenUsageAdminService;
|
|
78
|
+
exports.TokenUsageAdminService = TokenUsageAdminService = __decorate([
|
|
79
|
+
(0, common_1.Injectable)(),
|
|
80
|
+
__metadata("design:paramtypes", [jsonapi_service_1.JsonApiService,
|
|
81
|
+
tokenusage_admin_repository_1.TokenUsageAdminRepository,
|
|
82
|
+
nestjs_cls_1.ClsService])
|
|
83
|
+
], TokenUsageAdminService);
|
|
84
|
+
//# sourceMappingURL=tokenusage.admin.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage.admin.service.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.admin.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAwC;AACxC,oFAAgF;AAChF,qFAAiF;AACjF,uDAA0E;AAC1E,uFAA4F;AAC5F,mFAAwF;AACxF,qFAA0F;AAC1F,6FAAwF;AAExF;;;;;;;;;;;;;;;;;;GAkBG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,kCAAsE;IAGhH,YACE,cAA8B,EACX,yBAAoD,EACvE,UAAsB;QAEtB,KAAK,CAAC,cAAc,EAAE,yBAAyB,EAAE,UAAU,EAAE,iCAAoB,CAAC,KAAK,CAAC,CAAC;QAHtE,8BAAyB,GAAzB,yBAAyB,CAA2B;QAJtD,eAAU,GAAG,iCAAoB,CAAC;IAQrD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAwD;QACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC;YAC5D,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,2DAAgC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAMjB;QACC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC;YAC7D,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,6DAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAOlB;QACC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC;YAC9D,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,+DAAkC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvF,CAAC;CACF,CAAA;AA1DY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;qCAKO,gCAAc;QACgB,uDAAyB;QAC3D,uBAAU;GANb,sBAAsB,CA0DlC"}
|
|
@@ -7,7 +7,7 @@ import { TokenUsageInterface } from "../../../common/interfaces/token.usage.inte
|
|
|
7
7
|
import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
|
|
8
8
|
import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
|
|
9
9
|
import { TokenUsage, TokenUsageDescriptor } from "../../tokenusage/entities/tokenusage";
|
|
10
|
-
import { TokenUsageRepository } from "../../tokenusage/repositories/tokenusage.repository";
|
|
10
|
+
import { TokenUsageAggregated, TokenUsageRepository, TokenUsageSummary } from "../../tokenusage/repositories/tokenusage.repository";
|
|
11
11
|
import { ModelWeight } from "../../../core/llm/enums/model.weight";
|
|
12
12
|
/**
|
|
13
13
|
* TokenUsage service.
|
|
@@ -49,6 +49,12 @@ export declare class TokenUsageService extends AbstractService<TokenUsage, typeo
|
|
|
49
49
|
useVisionCosts?: boolean;
|
|
50
50
|
modelWeight?: ModelWeight;
|
|
51
51
|
}): number;
|
|
52
|
+
/**
|
|
53
|
+
* Persists one usage record and converts its monetary cost into billing
|
|
54
|
+
* credits: `credits = max(minCreditsPerRecord, round2(cost / creditCost))`.
|
|
55
|
+
* `creditCost` absent or 0 disables credits entirely (records store 0 and no
|
|
56
|
+
* balance is deducted), so consumers without a `credits` config are unaffected.
|
|
57
|
+
*/
|
|
52
58
|
recordTokenUsage(params: {
|
|
53
59
|
tokens: TokenUsageInterface;
|
|
54
60
|
type: string;
|
|
@@ -56,6 +62,36 @@ export declare class TokenUsageService extends AbstractService<TokenUsage, typeo
|
|
|
56
62
|
relationshipType: string;
|
|
57
63
|
useVisionCosts?: boolean;
|
|
58
64
|
modelWeight?: ModelWeight;
|
|
65
|
+
/** When false the per-record credits floor (`minCreditsPerRecord`) is skipped — sub-cent calls (embeddings) must not be floored. Defaults to true. */
|
|
66
|
+
applyMinimum?: boolean;
|
|
67
|
+
/** Pre-computed cost in euros; when provided `computeCost` is skipped (embeddings: estimated tokens × the embedder rate). */
|
|
68
|
+
costOverride?: number;
|
|
59
69
|
}): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* KEPT (custom filtering not covered by inherited find()): date-range + tokenUsageType
|
|
72
|
+
* filtering. Backs GET /tokenusages in consuming apps.
|
|
73
|
+
*/
|
|
74
|
+
findByCompany(params: {
|
|
75
|
+
query: any;
|
|
76
|
+
startDate?: string;
|
|
77
|
+
endDate?: string;
|
|
78
|
+
tokenUsageType?: string;
|
|
79
|
+
}): Promise<any>;
|
|
80
|
+
/**
|
|
81
|
+
* KEPT (raw aggregation, not JSON:API entities — inherited find()/findById() can't
|
|
82
|
+
* produce this shape). Backs GET /tokenusages/aggregated in consuming apps.
|
|
83
|
+
*/
|
|
84
|
+
getUsageByDateAndType(params: {
|
|
85
|
+
startDate?: string;
|
|
86
|
+
endDate?: string;
|
|
87
|
+
}): Promise<TokenUsageAggregated[]>;
|
|
88
|
+
/**
|
|
89
|
+
* KEPT (raw aggregation — see getUsageByDateAndType above). Backs GET
|
|
90
|
+
* /tokenusages/summary in consuming apps.
|
|
91
|
+
*/
|
|
92
|
+
getUsageSummary(params: {
|
|
93
|
+
startDate?: string;
|
|
94
|
+
endDate?: string;
|
|
95
|
+
}): Promise<TokenUsageSummary>;
|
|
60
96
|
}
|
|
61
97
|
//# sourceMappingURL=tokenusage.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"tokenusage.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAA0B,MAAM,4BAA4B,CAAC;AAC5G,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGnE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBACa,iBAAkB,SAAQ,eAAe,CAAC,UAAU,EAAE,OAAO,oBAAoB,CAAC,aAAa,CAAC;IAOzG,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IAE7D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IACpE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa;IAThD,SAAS,CAAC,QAAQ,CAAC,UAAU,sDAAwB;IAErD,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAsC;gBAG7D,cAAc,EAAE,cAAc,EACX,oBAAoB,EAAE,oBAAoB,EAC7D,UAAU,EAAE,UAAU,EACH,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC,EACjD,YAAY,EAAE,aAAa;IAKhD,SAAS,KAAK,QAAQ,IAAI,iBAAiB,CAE1C;IAED,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW;IAW9C;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,mBAAmB,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,MAAM;IAYjH;;;;;OAKG;IACG,gBAAgB,CAAC,MAAM,EAAE;QAC7B,MAAM,EAAE,mBAAmB,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,sJAAsJ;QACtJ,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,6HAA6H;QAC7H,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CjB;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE;IAezG;;;OAGG;IACG,qBAAqB,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAO9G;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAMpG"}
|
|
@@ -16,6 +16,7 @@ const config_1 = require("@nestjs/config");
|
|
|
16
16
|
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
17
17
|
const crypto_1 = require("crypto");
|
|
18
18
|
const nestjs_cls_1 = require("nestjs-cls");
|
|
19
|
+
const jsonapi_paginator_1 = require("../../../core/jsonapi/serialisers/jsonapi.paginator");
|
|
19
20
|
const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
|
|
20
21
|
const abstract_service_1 = require("../../../core/neo4j/abstracts/abstract.service");
|
|
21
22
|
const tokenusage_1 = require("../../tokenusage/entities/tokenusage");
|
|
@@ -81,12 +82,26 @@ let TokenUsageService = TokenUsageService_1 = class TokenUsageService extends ab
|
|
|
81
82
|
const cost = uncachedInput * inputRate + cached * cachedRate + params.tokens.output * outputRate;
|
|
82
83
|
return cost / 1_000_000;
|
|
83
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Persists one usage record and converts its monetary cost into billing
|
|
87
|
+
* credits: `credits = max(minCreditsPerRecord, round2(cost / creditCost))`.
|
|
88
|
+
* `creditCost` absent or 0 disables credits entirely (records store 0 and no
|
|
89
|
+
* balance is deducted), so consumers without a `credits` config are unaffected.
|
|
90
|
+
*/
|
|
84
91
|
async recordTokenUsage(params) {
|
|
85
|
-
const cost =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
92
|
+
const cost = params.costOverride ??
|
|
93
|
+
this.computeCost({
|
|
94
|
+
tokens: params.tokens,
|
|
95
|
+
useVisionCosts: params.useVisionCosts,
|
|
96
|
+
modelWeight: params.modelWeight,
|
|
97
|
+
});
|
|
98
|
+
const creditsConfig = this.configService.get("credits");
|
|
99
|
+
let credits = 0;
|
|
100
|
+
if (creditsConfig && creditsConfig.creditCost > 0) {
|
|
101
|
+
credits = Math.round((cost / creditsConfig.creditCost) * 100) / 100;
|
|
102
|
+
if (params.applyMinimum !== false)
|
|
103
|
+
credits = Math.max(creditsConfig.minCreditsPerRecord, credits);
|
|
104
|
+
}
|
|
90
105
|
await this.tokenUsageRepository.create({
|
|
91
106
|
id: (0, crypto_1.randomUUID)(),
|
|
92
107
|
tokenUsageType: params.type,
|
|
@@ -94,6 +109,7 @@ let TokenUsageService = TokenUsageService_1 = class TokenUsageService extends ab
|
|
|
94
109
|
outputTokens: params.tokens.output,
|
|
95
110
|
cachedInputTokens: params.tokens.cached ?? 0,
|
|
96
111
|
cost: cost,
|
|
112
|
+
credits: credits,
|
|
97
113
|
relationshipId: params.relationshipId,
|
|
98
114
|
relationshipType: params.relationshipType,
|
|
99
115
|
});
|
|
@@ -104,6 +120,8 @@ let TokenUsageService = TokenUsageService_1 = class TokenUsageService extends ab
|
|
|
104
120
|
const payload = {
|
|
105
121
|
input: params.tokens.input,
|
|
106
122
|
output: params.tokens.output,
|
|
123
|
+
cost: cost,
|
|
124
|
+
credits: credits,
|
|
107
125
|
};
|
|
108
126
|
this.eventEmitter.emit(tokenusage_events_1.TOKEN_USAGE_RECORDED_EVENT, payload);
|
|
109
127
|
}
|
|
@@ -111,6 +129,39 @@ let TokenUsageService = TokenUsageService_1 = class TokenUsageService extends ab
|
|
|
111
129
|
this.logger.warn(`Failed to emit ${tokenusage_events_1.TOKEN_USAGE_RECORDED_EVENT}: ${error instanceof Error ? error.message : String(error)}`);
|
|
112
130
|
}
|
|
113
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* KEPT (custom filtering not covered by inherited find()): date-range + tokenUsageType
|
|
134
|
+
* filtering. Backs GET /tokenusages in consuming apps.
|
|
135
|
+
*/
|
|
136
|
+
async findByCompany(params) {
|
|
137
|
+
const paginator = new jsonapi_paginator_1.JsonApiPaginator(params.query);
|
|
138
|
+
return this.jsonApiService.buildList(tokenusage_1.TokenUsageDescriptor.model, await this.tokenUsageRepository.findByCompany({
|
|
139
|
+
startDate: params.startDate,
|
|
140
|
+
endDate: params.endDate,
|
|
141
|
+
tokenUsageType: params.tokenUsageType,
|
|
142
|
+
cursor: paginator.generateCursor(),
|
|
143
|
+
}), paginator);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* KEPT (raw aggregation, not JSON:API entities — inherited find()/findById() can't
|
|
147
|
+
* produce this shape). Backs GET /tokenusages/aggregated in consuming apps.
|
|
148
|
+
*/
|
|
149
|
+
async getUsageByDateAndType(params) {
|
|
150
|
+
return this.tokenUsageRepository.findAggregatedByDateAndType({
|
|
151
|
+
startDate: params.startDate,
|
|
152
|
+
endDate: params.endDate,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* KEPT (raw aggregation — see getUsageByDateAndType above). Backs GET
|
|
157
|
+
* /tokenusages/summary in consuming apps.
|
|
158
|
+
*/
|
|
159
|
+
async getUsageSummary(params) {
|
|
160
|
+
return this.tokenUsageRepository.findUsageSummary({
|
|
161
|
+
startDate: params.startDate,
|
|
162
|
+
endDate: params.endDate,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
114
165
|
};
|
|
115
166
|
exports.TokenUsageService = TokenUsageService;
|
|
116
167
|
exports.TokenUsageService = TokenUsageService = TokenUsageService_1 = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage.service.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2CAA+C;AAC/C,yDAAsD;AACtD,mCAAoC;AACpC,2CAAwC;AAGxC,oFAAgF;AAChF,qFAAiF;AACjF,qEAAwF;AACxF,+
|
|
1
|
+
{"version":3,"file":"tokenusage.service.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage.module.d.ts","sourceRoot":"","sources":["../../../src/foundations/tokenusage/tokenusage.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"tokenusage.module.d.ts","sourceRoot":"","sources":["../../../src/foundations/tokenusage/tokenusage.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAYtD,qBAea,gBAAiB,YAAW,YAAY;IACnD,YAAY;CAMb"}
|
|
@@ -9,20 +9,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.TokenUsageModule = void 0;
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
11
|
const registry_1 = require("../../common/registries/registry");
|
|
12
|
+
const tokenusage_admin_controller_1 = require("./controllers/tokenusage.admin.controller");
|
|
12
13
|
const tokenusage_1 = require("./entities/tokenusage");
|
|
14
|
+
const tokenusage_admin_breakdown_1 = require("./entities/tokenusage-admin-breakdown");
|
|
15
|
+
const tokenusage_admin_summary_1 = require("./entities/tokenusage-admin-summary");
|
|
16
|
+
const tokenusage_admin_timeline_1 = require("./entities/tokenusage-admin-timeline");
|
|
17
|
+
const tokenusage_admin_repository_1 = require("./repositories/tokenusage.admin.repository");
|
|
13
18
|
const tokenusage_repository_1 = require("./repositories/tokenusage.repository");
|
|
19
|
+
const tokenusage_admin_service_1 = require("./services/tokenusage.admin.service");
|
|
14
20
|
const tokenusage_service_1 = require("./services/tokenusage.service");
|
|
15
21
|
let TokenUsageModule = class TokenUsageModule {
|
|
16
22
|
onModuleInit() {
|
|
17
23
|
registry_1.modelRegistry.register(tokenusage_1.TokenUsageDescriptor.model);
|
|
24
|
+
registry_1.modelRegistry.register(tokenusage_admin_summary_1.TokenUsageAdminSummaryDescriptor.model);
|
|
25
|
+
registry_1.modelRegistry.register(tokenusage_admin_timeline_1.TokenUsageAdminTimelineDescriptor.model);
|
|
26
|
+
registry_1.modelRegistry.register(tokenusage_admin_breakdown_1.TokenUsageAdminBreakdownDescriptor.model);
|
|
18
27
|
}
|
|
19
28
|
};
|
|
20
29
|
exports.TokenUsageModule = TokenUsageModule;
|
|
21
30
|
exports.TokenUsageModule = TokenUsageModule = __decorate([
|
|
22
31
|
(0, common_1.Module)({
|
|
23
|
-
controllers: [],
|
|
24
|
-
providers: [
|
|
25
|
-
|
|
32
|
+
controllers: [tokenusage_admin_controller_1.TokenUsageAdminController],
|
|
33
|
+
providers: [
|
|
34
|
+
tokenusage_1.TokenUsageDescriptor.model.serialiser,
|
|
35
|
+
tokenusage_admin_summary_1.TokenUsageAdminSummaryDescriptor.model.serialiser,
|
|
36
|
+
tokenusage_admin_timeline_1.TokenUsageAdminTimelineDescriptor.model.serialiser,
|
|
37
|
+
tokenusage_admin_breakdown_1.TokenUsageAdminBreakdownDescriptor.model.serialiser,
|
|
38
|
+
tokenusage_repository_1.TokenUsageRepository,
|
|
39
|
+
tokenusage_admin_repository_1.TokenUsageAdminRepository,
|
|
40
|
+
tokenusage_service_1.TokenUsageService,
|
|
41
|
+
tokenusage_admin_service_1.TokenUsageAdminService,
|
|
42
|
+
],
|
|
43
|
+
exports: [tokenusage_service_1.TokenUsageService, tokenusage_admin_service_1.TokenUsageAdminService],
|
|
26
44
|
imports: [],
|
|
27
45
|
})
|
|
28
46
|
], TokenUsageModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage.module.js","sourceRoot":"","sources":["../../../src/foundations/tokenusage/tokenusage.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AACtD,+DAAiE;AACjE,sDAA6D;AAC7D,gFAA4E;AAC5E,sEAAkE;
|
|
1
|
+
{"version":3,"file":"tokenusage.module.js","sourceRoot":"","sources":["../../../src/foundations/tokenusage/tokenusage.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AACtD,+DAAiE;AACjE,2FAAsF;AACtF,sDAA6D;AAC7D,sFAA2F;AAC3F,kFAAuF;AACvF,oFAAyF;AACzF,4FAAuF;AACvF,gFAA4E;AAC5E,kFAA6E;AAC7E,sEAAkE;AAiB3D,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAAY;QACV,wBAAa,CAAC,QAAQ,CAAC,iCAAoB,CAAC,KAAK,CAAC,CAAC;QACnD,wBAAa,CAAC,QAAQ,CAAC,2DAAgC,CAAC,KAAK,CAAC,CAAC;QAC/D,wBAAa,CAAC,QAAQ,CAAC,6DAAiC,CAAC,KAAK,CAAC,CAAC;QAChE,wBAAa,CAAC,QAAQ,CAAC,+DAAkC,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;CACF,CAAA;AAPY,4CAAgB;2BAAhB,gBAAgB;IAf5B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,uDAAyB,CAAC;QACxC,SAAS,EAAE;YACT,iCAAoB,CAAC,KAAK,CAAC,UAAU;YACrC,2DAAgC,CAAC,KAAK,CAAC,UAAU;YACjD,6DAAiC,CAAC,KAAK,CAAC,UAAU;YAClD,+DAAkC,CAAC,KAAK,CAAC,UAAU;YACnD,4CAAoB;YACpB,uDAAyB;YACzB,sCAAiB;YACjB,iDAAsB;SACvB;QACD,OAAO,EAAE,CAAC,sCAAiB,EAAE,iDAAsB,CAAC;QACpD,OAAO,EAAE,EAAE;KACZ,CAAC;GACW,gBAAgB,CAO5B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@carlonicora/nestjs-neo4jsonapi",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.118.0",
|
|
4
4
|
"description": "NestJS foundation package with JSON:API, Neo4j, Redis, LangChain agents, and common utilities",
|
|
5
5
|
"author": "Carlo Nicora",
|
|
6
6
|
"license": "GPL-3.0-or-later",
|
|
@@ -107,6 +107,7 @@
|
|
|
107
107
|
"gray-matter": "^4.0.3",
|
|
108
108
|
"handlebars": "^4.7.9",
|
|
109
109
|
"ioredis": "^5.11.1",
|
|
110
|
+
"js-tiktoken": "^1.0.21",
|
|
110
111
|
"js-yaml": "^5.2.2",
|
|
111
112
|
"jszip": "^3.10.1",
|
|
112
113
|
"langsmith": "^0.8.8",
|