airbyte-faros-destination 0.23.38 → 0.23.40
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/lib/converters/claude/configured_spend_limits.d.ts +8 -0
- package/lib/converters/claude/configured_spend_limits.js +87 -0
- package/lib/converters/claude/configured_spend_limits.js.map +1 -0
- package/lib/converters/claude/spend_limits.d.ts +1 -0
- package/lib/converters/claude/spend_limits.js +1 -0
- package/lib/converters/claude/spend_limits.js.map +1 -1
- package/lib/converters/codex/costs.d.ts +9 -0
- package/lib/converters/codex/costs.js +69 -0
- package/lib/converters/codex/costs.js.map +1 -0
- package/lib/converters/codex/usage.d.ts +6 -2
- package/lib/converters/codex/usage.js +55 -21
- package/lib/converters/codex/usage.js.map +1 -1
- package/lib/converters/codex/usage_limits.d.ts +12 -0
- package/lib/converters/codex/usage_limits.js +175 -0
- package/lib/converters/codex/usage_limits.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
2
|
+
import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
|
|
3
|
+
import { ClaudePlatformConverter } from './platform_common';
|
|
4
|
+
export declare class ConfiguredSpendLimits extends ClaudePlatformConverter {
|
|
5
|
+
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
6
|
+
id(record: AirbyteRecord): any;
|
|
7
|
+
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfiguredSpendLimits = void 0;
|
|
4
|
+
const luxon_1 = require("luxon");
|
|
5
|
+
const ai_1 = require("../common/ai");
|
|
6
|
+
const platform_common_1 = require("./platform_common");
|
|
7
|
+
const spend_limits_1 = require("./spend_limits");
|
|
8
|
+
function scopeMapping(scope) {
|
|
9
|
+
switch (scope?.type) {
|
|
10
|
+
case 'organization':
|
|
11
|
+
return { category: 'Account', detail: null, pooled: true };
|
|
12
|
+
case 'seat_tier':
|
|
13
|
+
return { category: 'Plan', detail: scope.seat_tier ?? null, pooled: false };
|
|
14
|
+
case 'rbac_group':
|
|
15
|
+
return { category: 'Group', detail: null, pooled: false };
|
|
16
|
+
case 'organization_service':
|
|
17
|
+
return { category: 'Custom', detail: scope.service ?? null, pooled: true };
|
|
18
|
+
default:
|
|
19
|
+
return { category: 'Custom', detail: scope?.type ?? null, pooled: null };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
class ConfiguredSpendLimits extends platform_common_1.ClaudePlatformConverter {
|
|
23
|
+
constructor() {
|
|
24
|
+
super(...arguments);
|
|
25
|
+
this.destinationModels = [
|
|
26
|
+
ai_1.AI_ACCOUNT_MODEL,
|
|
27
|
+
ai_1.AI_GROUP_MODEL,
|
|
28
|
+
ai_1.AI_LIMIT_MODEL,
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
id(record) {
|
|
32
|
+
return record?.record?.data?.id;
|
|
33
|
+
}
|
|
34
|
+
async convert(record, ctx) {
|
|
35
|
+
const item = record.record.data;
|
|
36
|
+
if (!item?.id || item.scope?.type === 'user')
|
|
37
|
+
return [];
|
|
38
|
+
const account = this.account(platform_common_1.ENTERPRISE_ACCOUNT_UID);
|
|
39
|
+
const result = [];
|
|
40
|
+
const accountRecord = this.destinationDimensionRecord(ai_1.AI_ACCOUNT_MODEL, account.uid, account);
|
|
41
|
+
if (accountRecord)
|
|
42
|
+
result.push(accountRecord);
|
|
43
|
+
let group = null;
|
|
44
|
+
if (item.scope.type === 'rbac_group') {
|
|
45
|
+
group = this.accountEntity(item.scope.rbac_group_id, account);
|
|
46
|
+
if (group) {
|
|
47
|
+
// Key fields only, so a null name never clears one set elsewhere.
|
|
48
|
+
const groupRecord = this.destinationDimensionRecord(ai_1.AI_GROUP_MODEL, group.uid, { ...group });
|
|
49
|
+
if (groupRecord)
|
|
50
|
+
result.push(groupRecord);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const periodStart = item.period === 'monthly'
|
|
54
|
+
? luxon_1.DateTime.fromISO(item.observed_at, { zone: 'utc' }).startOf('month')
|
|
55
|
+
: null;
|
|
56
|
+
const { category, detail, pooled } = scopeMapping(item.scope);
|
|
57
|
+
result.push(this.destinationRecord(ai_1.AI_LIMIT_MODEL, {
|
|
58
|
+
uid: [
|
|
59
|
+
'configured_spend_limit',
|
|
60
|
+
item.id,
|
|
61
|
+
item.period,
|
|
62
|
+
periodStart?.toISODate() ?? '',
|
|
63
|
+
].join(':'),
|
|
64
|
+
source: this.source,
|
|
65
|
+
type: { category: 'Spend', detail: null },
|
|
66
|
+
scope: { category, detail },
|
|
67
|
+
inheritedFrom: null,
|
|
68
|
+
model: null,
|
|
69
|
+
amount: (0, spend_limits_1.majorUnits)(item.amount, item.currency),
|
|
70
|
+
unit: item.currency ?? null,
|
|
71
|
+
consumed: (0, spend_limits_1.majorUnits)(item.period_to_date_spend, item.currency),
|
|
72
|
+
period: item.period ?? null,
|
|
73
|
+
periodStartedAt: periodStart?.toJSDate() ?? null,
|
|
74
|
+
periodEndedAt: periodStart?.plus({ months: 1 }).toJSDate() ?? null,
|
|
75
|
+
pooled,
|
|
76
|
+
enforced: item.is_enabled ?? null,
|
|
77
|
+
account,
|
|
78
|
+
project: null,
|
|
79
|
+
group,
|
|
80
|
+
principal: null,
|
|
81
|
+
credential: null,
|
|
82
|
+
}));
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.ConfiguredSpendLimits = ConfiguredSpendLimits;
|
|
87
|
+
//# sourceMappingURL=configured_spend_limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configured_spend_limits.js","sourceRoot":"","sources":["../../../src/converters/claude/configured_spend_limits.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
2
2
|
import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
|
|
3
3
|
import { ClaudePlatformConverter } from './platform_common';
|
|
4
|
+
export declare function majorUnits(minorUnits: string | null | undefined, currency: string): number | null;
|
|
4
5
|
export declare class SpendLimits extends ClaudePlatformConverter {
|
|
5
6
|
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
6
7
|
id(record: AirbyteRecord): any;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SpendLimits = void 0;
|
|
4
|
+
exports.majorUnits = majorUnits;
|
|
4
5
|
const luxon_1 = require("luxon");
|
|
5
6
|
const ai_1 = require("../common/ai");
|
|
6
7
|
const platform_common_1 = require("./platform_common");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spend_limits.js","sourceRoot":"","sources":["../../../src/converters/claude/spend_limits.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"spend_limits.js","sourceRoot":"","sources":["../../../src/converters/claude/spend_limits.ts"],"names":[],"mappings":";;;AAmCA,gCAUC;AA3CD,iCAA+B;AAE/B,qCAKsB;AAEtB,uDAG2B;AAE3B,MAAM,uBAAuB,GAAgC,IAAI,GAAG,CAAC;IACnE,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,YAAY,EAAE,OAAO,CAAC;IACvB,CAAC,cAAc,EAAE,SAAS,CAAC;CAC5B,CAAC,CAAC;AAEH,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,OAAO,CACL,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;YAC1B,KAAK,EAAE,UAAU;YACjB,QAAQ;SACT,CAAC,CAAC,eAAe,EAAE,CAAC,qBAAqB,IAAI,CAAC,CAChD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CACxB,UAAqC,EACrC,QAAgB;IAEhB,IAAI,UAAU,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,sEAAsE;IACtE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC3B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;QAC1E,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,MAAa,WAAY,SAAQ,yCAAuB;IAAxD;;QACW,sBAAiB,GAAoC;YAC5D,qBAAgB;YAChB,uBAAkB;YAClB,mBAAc;YACd,mBAAc;SACf,CAAC;IA0FJ,CAAC;IAxFC,EAAE,CAAC,MAAqB;QACtB,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,IAAwB,CAAC;QACtD,OAAO,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM;YAClC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;YAClC,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAqB,EACrB,GAAkB;QAElB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAwB,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,wCAAsB,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE1B,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,0BAA0B,CACnD,qBAAgB,EAChB,OAAO,CAAC,GAAG,EACX,OAAO,CACR,CAAC;QACF,IAAI,aAAa;YAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,0BAA0B,CACrD,uBAAkB,EAClB,SAAS,CAAC,GAAG,EACb,EAAC,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,IAAI,IAAI,EAAC,CACzD,CAAC;QACF,IAAI,eAAe;YAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAElD,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,KAAK,SAAS;YACvB,CAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACpE,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;QACrC,MAAM,KAAK,GACT,UAAU,KAAK,YAAY;YACzB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC;YACzD,CAAC,CAAC,IAAI,CAAC;QACX,IAAI,KAAK,EAAE,CAAC;YACV,kEAAkE;YAClE,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CACjD,mBAAc,EACd,KAAK,CAAC,GAAG,EACT,EAAC,GAAG,KAAK,EAAC,CACX,CAAC;YACF,IAAI,WAAW;gBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,iBAAiB,CAAC,mBAAc,EAAE;YACrC,GAAG,EAAE;gBACH,aAAa;gBACb,IAAI,CAAC,OAAO;gBACZ,IAAI,CAAC,MAAM;gBACX,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE;aAC/B,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAC;YACvC,KAAK,EAAE,EAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,EAAC;YAChE,aAAa,EACX,UAAU,IAAI,UAAU,KAAK,MAAM;gBACjC,CAAC,CAAC;oBACE,QAAQ,EAAE,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,QAAQ;oBAC7D,MAAM,EACJ,IAAI,CAAC,MAAM,EAAE,SAAS;wBACtB,IAAI,CAAC,MAAM,EAAE,aAAa;wBAC1B,UAAU;iBACb;gBACH,CAAC,CAAC,IAAI;YACV,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;YAC9C,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC3B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC;YAC9D,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;YAC3B,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,IAAI;YAChD,aAAa,EAAE,WAAW,EAAE,IAAI,CAAC,EAAC,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI;YAChE,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;YACd,OAAO;YACP,OAAO,EAAE,IAAI;YACb,KAAK;YACL,SAAS;YACT,UAAU,EAAE,IAAI;SACjB,CAAC,CACH,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAhGD,kCAgGC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
2
|
+
import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
|
|
3
|
+
import { Usage } from './usage';
|
|
4
|
+
export declare class Costs extends Usage {
|
|
5
|
+
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
6
|
+
id(record: AirbyteRecord): any;
|
|
7
|
+
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
8
|
+
onProcessingComplete(): Promise<ReadonlyArray<DestinationRecord>>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Costs = void 0;
|
|
4
|
+
const vcs_1 = require("../common/vcs");
|
|
5
|
+
const usage_1 = require("./usage");
|
|
6
|
+
// site_hosting and unknown products are dropped
|
|
7
|
+
const PRODUCT_TOOLS = {
|
|
8
|
+
codex: vcs_1.VCSToolDetail.Codex,
|
|
9
|
+
ChatGPT: vcs_1.VCSToolDetail.ChatGPT,
|
|
10
|
+
Work: vcs_1.VCSToolDetail.Work,
|
|
11
|
+
};
|
|
12
|
+
// Model rows per product. They share uids with usage model rows, which the
|
|
13
|
+
// source omits on days costs covers, so each model bucket is written once.
|
|
14
|
+
class Costs extends usage_1.Usage {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.destinationModels = [
|
|
18
|
+
'vcs_User',
|
|
19
|
+
'vcs_UserEmail',
|
|
20
|
+
'vcs_UserTool',
|
|
21
|
+
'vcs_AssistantMetric',
|
|
22
|
+
'vcs_UserToolUsage',
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
id(record) {
|
|
26
|
+
const data = record?.record?.data;
|
|
27
|
+
return [
|
|
28
|
+
data?.start_time,
|
|
29
|
+
data?.user_id,
|
|
30
|
+
data?.product,
|
|
31
|
+
data?.model,
|
|
32
|
+
data?.speed,
|
|
33
|
+
].join('__');
|
|
34
|
+
}
|
|
35
|
+
async convert(record, ctx) {
|
|
36
|
+
const item = record.record.data;
|
|
37
|
+
const tool = PRODUCT_TOOLS[item.product];
|
|
38
|
+
if (!tool || !item.model || !item.user_email) {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
const startedAt = new Date(item.start_time * 1000);
|
|
42
|
+
const organization = {
|
|
43
|
+
uid: this.streamName.source,
|
|
44
|
+
source: this.streamName.source,
|
|
45
|
+
};
|
|
46
|
+
const values = [...(0, usage_1.billingMetrics)(item), ...(0, usage_1.tokenMetrics)(item)];
|
|
47
|
+
const metrics = values.flatMap(([assistantMetricType, value, assistantMetricTypeDetail]) => this.getAssistantMetric({
|
|
48
|
+
startedAt,
|
|
49
|
+
endedAt: new Date(item.end_time * 1000),
|
|
50
|
+
organization,
|
|
51
|
+
userEmail: item.user_email,
|
|
52
|
+
model: item.model,
|
|
53
|
+
speed: item.speed,
|
|
54
|
+
tool,
|
|
55
|
+
assistantMetricType,
|
|
56
|
+
assistantMetricTypeDetail,
|
|
57
|
+
value,
|
|
58
|
+
}));
|
|
59
|
+
// Usage rows omit models here, so a user whose only spend is in model
|
|
60
|
+
// buckets would otherwise have no user or activity records
|
|
61
|
+
const active = values.some(([, value]) => value > 0);
|
|
62
|
+
return this.withUserRecords(metrics, item.user_email, organization, startedAt, new Set([tool]), new Set(active ? [tool] : []));
|
|
63
|
+
}
|
|
64
|
+
async onProcessingComplete() {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.Costs = Costs;
|
|
69
|
+
//# sourceMappingURL=costs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"costs.js","sourceRoot":"","sources":["../../../src/converters/codex/costs.ts"],"names":[],"mappings":";;;AAEA,uCAA4C;AAE5C,mCAAyE;AAYzE,gDAAgD;AAChD,MAAM,aAAa,GAAkC;IACnD,KAAK,EAAE,mBAAa,CAAC,KAAK;IAC1B,OAAO,EAAE,mBAAa,CAAC,OAAO;IAC9B,IAAI,EAAE,mBAAa,CAAC,IAAI;CACzB,CAAC;AAEF,2EAA2E;AAC3E,2EAA2E;AAC3E,MAAa,KAAM,SAAQ,aAAK;IAAhC;;QACW,sBAAiB,GAAoC;YAC5D,UAAU;YACV,eAAe;YACf,cAAc;YACd,qBAAqB;YACrB,mBAAmB;SACpB,CAAC;IA4DJ,CAAC;IA1DC,EAAE,CAAC,MAAqB;QACtB,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;QAClC,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK;SACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAqB,EACrB,GAAkB;QAElB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAqB,CAAC;QACjD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG;YACnB,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAC3B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SAC/B,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,EAAE,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAC5B,CAAC,CAAC,mBAAmB,EAAE,KAAK,EAAE,yBAAyB,CAAC,EAAE,EAAE,CAC1D,IAAI,CAAC,kBAAkB,CAAC;YACtB,SAAS;YACT,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvC,YAAY;YACZ,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI;YACJ,mBAAmB;YACnB,yBAAyB;YACzB,KAAK;SACN,CAAC,CACL,CAAC;QACF,sEAAsE;QACtE,2DAA2D;QAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,eAAe,CACzB,OAAO,EACP,IAAI,CAAC,UAAU,EACf,YAAY,EACZ,SAAS,EACT,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EACf,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAnED,sBAmEC"}
|
|
@@ -2,13 +2,13 @@ import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
|
2
2
|
import { AssistantMetric, OrgKey, VCSToolDetail } from '../common/vcs';
|
|
3
3
|
import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
|
|
4
4
|
import { CodexConverter } from './common';
|
|
5
|
-
interface TextTokenUsage {
|
|
5
|
+
export interface TextTokenUsage {
|
|
6
6
|
uncached_text_input_tokens?: number | null;
|
|
7
7
|
cached_text_input_tokens?: number | null;
|
|
8
8
|
text_output_tokens?: number | null;
|
|
9
9
|
text_total_tokens?: number | null;
|
|
10
10
|
}
|
|
11
|
-
interface BilledUsage extends TextTokenUsage {
|
|
11
|
+
export interface BilledUsage extends TextTokenUsage {
|
|
12
12
|
credits: number | null;
|
|
13
13
|
cost_usd?: number | null;
|
|
14
14
|
estimated_cost_usd?: number | null;
|
|
@@ -69,12 +69,16 @@ export interface CodexAssistantMetricConfig {
|
|
|
69
69
|
}
|
|
70
70
|
export declare function clientTool(clientId: string): VCSToolDetail | undefined;
|
|
71
71
|
export declare function isCodexClient(clientId: string): boolean;
|
|
72
|
+
type MetricValue = [AssistantMetric, number, string?];
|
|
73
|
+
export declare function billingMetrics(usage: BilledUsage): MetricValue[];
|
|
74
|
+
export declare function tokenMetrics(usage: TextTokenUsage): MetricValue[];
|
|
72
75
|
export declare class Usage extends CodexConverter {
|
|
73
76
|
private readonly seenUsers;
|
|
74
77
|
private readonly seenUserTools;
|
|
75
78
|
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
76
79
|
protected getAssistantMetric(config: CodexAssistantMetricConfig): DestinationRecord[];
|
|
77
80
|
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
81
|
+
protected withUserRecords(metrics: ReadonlyArray<DestinationRecord>, userEmail: string, organization: OrgKey, startedAt: Date, tools: ReadonlySet<VCSToolDetail>, activeTools: ReadonlySet<VCSToolDetail>): DestinationRecord[];
|
|
78
82
|
onProcessingComplete(): Promise<ReadonlyArray<DestinationRecord>>;
|
|
79
83
|
}
|
|
80
84
|
export {};
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Usage = void 0;
|
|
4
4
|
exports.clientTool = clientTool;
|
|
5
5
|
exports.isCodexClient = isCodexClient;
|
|
6
|
+
exports.billingMetrics = billingMetrics;
|
|
7
|
+
exports.tokenMetrics = tokenMetrics;
|
|
6
8
|
const common_1 = require("faros-airbyte-common/common");
|
|
7
9
|
const lodash_1 = require("lodash");
|
|
8
10
|
const vcs_1 = require("../common/vcs");
|
|
@@ -21,6 +23,51 @@ function clientTool(clientId) {
|
|
|
21
23
|
function isCodexClient(clientId) {
|
|
22
24
|
return clientTool(clientId) === vcs_1.VCSToolDetail.Codex;
|
|
23
25
|
}
|
|
26
|
+
// Null means not reported and is skipped; a reported zero is kept
|
|
27
|
+
function billingMetrics(usage) {
|
|
28
|
+
const metrics = [];
|
|
29
|
+
if (!(0, lodash_1.isNil)(usage.credits)) {
|
|
30
|
+
metrics.push([vcs_1.AssistantMetric.Cost, usage.credits]);
|
|
31
|
+
}
|
|
32
|
+
// Cost/USD is estimated_cost_usd: credits priced at the workspace's
|
|
33
|
+
// overage rate, not billed spend. API rounds it to the cent; store
|
|
34
|
+
// integer cents, matching the Claude path.
|
|
35
|
+
if (!(0, lodash_1.isNil)(usage.estimated_cost_usd)) {
|
|
36
|
+
metrics.push([
|
|
37
|
+
vcs_1.AssistantMetric.Cost,
|
|
38
|
+
Math.round(usage.estimated_cost_usd * 100),
|
|
39
|
+
'USD',
|
|
40
|
+
]);
|
|
41
|
+
}
|
|
42
|
+
// Native USD-priced usage, excluding credit-priced usage
|
|
43
|
+
if (!(0, lodash_1.isNil)(usage.cost_usd)) {
|
|
44
|
+
metrics.push([
|
|
45
|
+
vcs_1.AssistantMetric.Cost,
|
|
46
|
+
Math.round(usage.cost_usd * 100),
|
|
47
|
+
'NativeUSD',
|
|
48
|
+
]);
|
|
49
|
+
}
|
|
50
|
+
return metrics;
|
|
51
|
+
}
|
|
52
|
+
function tokenMetrics(usage) {
|
|
53
|
+
const metrics = [];
|
|
54
|
+
if (usage.uncached_text_input_tokens) {
|
|
55
|
+
metrics.push([
|
|
56
|
+
vcs_1.AssistantMetric.InputTokens,
|
|
57
|
+
usage.uncached_text_input_tokens,
|
|
58
|
+
]);
|
|
59
|
+
}
|
|
60
|
+
if (usage.cached_text_input_tokens) {
|
|
61
|
+
metrics.push([
|
|
62
|
+
vcs_1.AssistantMetric.CacheReadTokens,
|
|
63
|
+
usage.cached_text_input_tokens,
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
if (usage.text_output_tokens) {
|
|
67
|
+
metrics.push([vcs_1.AssistantMetric.OutputTokens, usage.text_output_tokens]);
|
|
68
|
+
}
|
|
69
|
+
return metrics;
|
|
70
|
+
}
|
|
24
71
|
function isBilled(usage) {
|
|
25
72
|
return Boolean(usage.credits || usage.cost_usd || usage.estimated_cost_usd);
|
|
26
73
|
}
|
|
@@ -120,31 +167,14 @@ class Usage extends common_2.CodexConverter {
|
|
|
120
167
|
...dims,
|
|
121
168
|
}));
|
|
122
169
|
};
|
|
123
|
-
// Null means not reported and is skipped; a reported zero is kept
|
|
124
170
|
const emitBilling = (usage, dims) => {
|
|
125
|
-
|
|
126
|
-
emit(
|
|
127
|
-
}
|
|
128
|
-
// Cost/USD is estimated_cost_usd: credits priced at the workspace's
|
|
129
|
-
// overage rate, not billed spend. API rounds it to the cent; store
|
|
130
|
-
// integer cents, matching the Claude path.
|
|
131
|
-
if (!(0, lodash_1.isNil)(usage.estimated_cost_usd)) {
|
|
132
|
-
emit(vcs_1.AssistantMetric.Cost, Math.round(usage.estimated_cost_usd * 100), dims, 'USD');
|
|
133
|
-
}
|
|
134
|
-
// Native USD-priced usage, excluding credit-priced usage
|
|
135
|
-
if (!(0, lodash_1.isNil)(usage.cost_usd)) {
|
|
136
|
-
emit(vcs_1.AssistantMetric.Cost, Math.round(usage.cost_usd * 100), dims, 'NativeUSD');
|
|
171
|
+
for (const [type, value, detail] of billingMetrics(usage)) {
|
|
172
|
+
emit(type, value, dims, detail);
|
|
137
173
|
}
|
|
138
174
|
};
|
|
139
175
|
const emitTokens = (usage, dims) => {
|
|
140
|
-
|
|
141
|
-
emit(
|
|
142
|
-
}
|
|
143
|
-
if (usage.cached_text_input_tokens) {
|
|
144
|
-
emit(vcs_1.AssistantMetric.CacheReadTokens, usage.cached_text_input_tokens, dims);
|
|
145
|
-
}
|
|
146
|
-
if (usage.text_output_tokens) {
|
|
147
|
-
emit(vcs_1.AssistantMetric.OutputTokens, usage.text_output_tokens, dims);
|
|
176
|
+
for (const [type, value] of tokenMetrics(usage)) {
|
|
177
|
+
emit(type, value, dims);
|
|
148
178
|
}
|
|
149
179
|
};
|
|
150
180
|
// Per-client breakdown, attributed to each client's product. Totals are
|
|
@@ -212,6 +242,10 @@ class Usage extends common_2.CodexConverter {
|
|
|
212
242
|
if (commitAttribution?.with_codex_contribution) {
|
|
213
243
|
emit(vcs_1.AssistantMetric.CommitsCreated, commitAttribution.with_codex_contribution, codeDims);
|
|
214
244
|
}
|
|
245
|
+
return this.withUserRecords(metrics, userEmail, organization, startedAt, tools, activeTools);
|
|
246
|
+
}
|
|
247
|
+
// Wraps metrics with the user and tool records they reference
|
|
248
|
+
withUserRecords(metrics, userEmail, organization, startedAt, tools, activeTools) {
|
|
215
249
|
// Rows with no known product must not register the user
|
|
216
250
|
if (!metrics.length) {
|
|
217
251
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/converters/codex/usage.ts"],"names":[],"mappings":";;;AAyFA,gCAKC;AAED,sCAEC;
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/converters/codex/usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
2
|
+
import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
|
|
3
|
+
import { CodexConverter } from './common';
|
|
4
|
+
export declare class UsageLimits extends CodexConverter {
|
|
5
|
+
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
6
|
+
private readonly seenDimensions;
|
|
7
|
+
id(record: AirbyteRecord): any;
|
|
8
|
+
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
9
|
+
private firstSetting;
|
|
10
|
+
private limitRecord;
|
|
11
|
+
private pushDimension;
|
|
12
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UsageLimits = void 0;
|
|
4
|
+
const luxon_1 = require("luxon");
|
|
5
|
+
const ai_1 = require("../common/ai");
|
|
6
|
+
const common_1 = require("./common");
|
|
7
|
+
const SCOPE_CATEGORIES = {
|
|
8
|
+
workspace: 'Account',
|
|
9
|
+
group: 'Group',
|
|
10
|
+
user: 'Principal',
|
|
11
|
+
};
|
|
12
|
+
const UNITS = { usd: 'USD', credit: 'credit' };
|
|
13
|
+
class UsageLimits extends common_1.CodexConverter {
|
|
14
|
+
constructor() {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
this.destinationModels = [
|
|
17
|
+
ai_1.AI_ACCOUNT_MODEL,
|
|
18
|
+
ai_1.AI_PRINCIPAL_MODEL,
|
|
19
|
+
ai_1.AI_GROUP_MODEL,
|
|
20
|
+
ai_1.AI_LIMIT_MODEL,
|
|
21
|
+
];
|
|
22
|
+
this.seenDimensions = new Set();
|
|
23
|
+
}
|
|
24
|
+
id(record) {
|
|
25
|
+
const item = record?.record?.data;
|
|
26
|
+
return item?.level && item?.id ? `${item.level}:${item.id}` : undefined;
|
|
27
|
+
}
|
|
28
|
+
async convert(record, ctx) {
|
|
29
|
+
const item = record.record.data;
|
|
30
|
+
if (!item.workspace_id || !item.id)
|
|
31
|
+
return [];
|
|
32
|
+
const account = { uid: item.workspace_id, source: this.source };
|
|
33
|
+
const result = [];
|
|
34
|
+
this.pushDimension(result, ai_1.AI_ACCOUNT_MODEL, account.uid, account);
|
|
35
|
+
const periodStart = luxon_1.DateTime.fromISO(item.observed_at, {
|
|
36
|
+
zone: 'utc',
|
|
37
|
+
}).startOf('month');
|
|
38
|
+
const limitOf = (setting, fields) => this.limitRecord(item, setting, periodStart, account, fields);
|
|
39
|
+
if (item.level === 'workspace') {
|
|
40
|
+
const setting = this.firstSetting(item, ctx);
|
|
41
|
+
if (setting)
|
|
42
|
+
result.push(limitOf(setting, { pooled: false }));
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
if (item.level === 'group') {
|
|
46
|
+
const group = { uid: item.id, account };
|
|
47
|
+
this.pushDimension(result, ai_1.AI_GROUP_MODEL, group.uid, {
|
|
48
|
+
...group,
|
|
49
|
+
name: item.group_name ?? null,
|
|
50
|
+
});
|
|
51
|
+
const setting = this.firstSetting(item, ctx);
|
|
52
|
+
if (setting)
|
|
53
|
+
result.push(limitOf(setting, { pooled: false, group }));
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
const principal = { uid: item.id, account };
|
|
57
|
+
this.pushDimension(result, ai_1.AI_PRINCIPAL_MODEL, principal.uid, {
|
|
58
|
+
...principal,
|
|
59
|
+
email: item.email ?? null,
|
|
60
|
+
});
|
|
61
|
+
const effective = item.effective_monthly_usage_limit;
|
|
62
|
+
if (!effective?.limit)
|
|
63
|
+
return result;
|
|
64
|
+
const source = effective.source ?? { kind: 'unknown' };
|
|
65
|
+
let group = null;
|
|
66
|
+
if (source.kind === 'group_default' && source.group_id) {
|
|
67
|
+
group = { uid: source.group_id, account };
|
|
68
|
+
this.pushDimension(result, ai_1.AI_GROUP_MODEL, group.uid, {
|
|
69
|
+
...group,
|
|
70
|
+
name: source.group_name ?? null,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
result.push(limitOf(effective.limit, {
|
|
74
|
+
inheritedFrom: inheritedFrom(source),
|
|
75
|
+
consumed: consumed(item, limitUnit(effective.limit)),
|
|
76
|
+
pooled: null,
|
|
77
|
+
group,
|
|
78
|
+
principal,
|
|
79
|
+
}));
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
firstSetting(item, ctx) {
|
|
83
|
+
const settings = item.default_user_monthly_usage_limit ?? [];
|
|
84
|
+
if (settings.length > 1) {
|
|
85
|
+
ctx.logger.warn(`Codex ${item.level} ${item.id} has ${settings.length} default usage limits; only the first is synced`);
|
|
86
|
+
}
|
|
87
|
+
return settings[0];
|
|
88
|
+
}
|
|
89
|
+
limitRecord(item, setting, periodStart, account, fields) {
|
|
90
|
+
const unit = limitUnit(setting);
|
|
91
|
+
return {
|
|
92
|
+
model: ai_1.AI_LIMIT_MODEL,
|
|
93
|
+
record: {
|
|
94
|
+
uid: [
|
|
95
|
+
'usage_limit',
|
|
96
|
+
item.workspace_id,
|
|
97
|
+
item.level,
|
|
98
|
+
item.id,
|
|
99
|
+
'monthly',
|
|
100
|
+
periodStart.toISODate(),
|
|
101
|
+
].join(':'),
|
|
102
|
+
source: this.source,
|
|
103
|
+
type: unit
|
|
104
|
+
? { category: unit === 'usd' ? 'Spend' : 'Credits', detail: null }
|
|
105
|
+
: null,
|
|
106
|
+
scope: { category: SCOPE_CATEGORIES[item.level], detail: null },
|
|
107
|
+
inheritedFrom: null,
|
|
108
|
+
model: null,
|
|
109
|
+
amount: limitAmount(setting),
|
|
110
|
+
unit: unit ? UNITS[unit] : null,
|
|
111
|
+
consumed: null,
|
|
112
|
+
period: 'monthly',
|
|
113
|
+
periodStartedAt: periodStart.toJSDate(),
|
|
114
|
+
periodEndedAt: periodStart.plus({ months: 1 }).toJSDate(),
|
|
115
|
+
pooled: null,
|
|
116
|
+
enforced: true,
|
|
117
|
+
account,
|
|
118
|
+
project: null,
|
|
119
|
+
group: null,
|
|
120
|
+
principal: null,
|
|
121
|
+
credential: null,
|
|
122
|
+
...fields,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
pushDimension(result, model, uid, record) {
|
|
127
|
+
const key = `${model}:${uid}`;
|
|
128
|
+
if (this.seenDimensions.has(key))
|
|
129
|
+
return;
|
|
130
|
+
this.seenDimensions.add(key);
|
|
131
|
+
result.push({ model, record });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.UsageLimits = UsageLimits;
|
|
135
|
+
// Plans without unit-aware limits report only the legacy credit limit
|
|
136
|
+
function limitUnit(setting) {
|
|
137
|
+
if (setting.limit_amount?.unit)
|
|
138
|
+
return setting.limit_amount.unit;
|
|
139
|
+
return setting.limit != null ? 'credit' : null;
|
|
140
|
+
}
|
|
141
|
+
function limitAmount(setting) {
|
|
142
|
+
if (setting.type === 'unlimited')
|
|
143
|
+
return null;
|
|
144
|
+
const amount = setting.limit_amount
|
|
145
|
+
? Number(setting.limit_amount.amount)
|
|
146
|
+
: setting.limit;
|
|
147
|
+
return Number.isFinite(amount) ? amount : null;
|
|
148
|
+
}
|
|
149
|
+
// Usage is only comparable to the limit when both are in the same unit
|
|
150
|
+
function consumed(item, unit) {
|
|
151
|
+
if (!unit)
|
|
152
|
+
return null;
|
|
153
|
+
if (item.current_month_usage_amount?.unit === unit) {
|
|
154
|
+
return item.current_month_usage_amount.amount ?? null;
|
|
155
|
+
}
|
|
156
|
+
if (item.current_month_usage_unit === unit) {
|
|
157
|
+
return item.current_month_usage ?? null;
|
|
158
|
+
}
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
function inheritedFrom(source) {
|
|
162
|
+
switch (source.kind) {
|
|
163
|
+
case 'individual_override':
|
|
164
|
+
return null;
|
|
165
|
+
case 'group_default':
|
|
166
|
+
return { category: 'Group', detail: source.group_id ?? null };
|
|
167
|
+
case 'workspace_default':
|
|
168
|
+
return { category: 'Account', detail: source.seat_type ?? null };
|
|
169
|
+
case 'role_based_personal_budget':
|
|
170
|
+
return { category: 'Custom', detail: source.role_id ?? source.kind };
|
|
171
|
+
default:
|
|
172
|
+
return { category: 'Custom', detail: source.kind };
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=usage_limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage_limits.js","sourceRoot":"","sources":["../../../src/converters/codex/usage_limits.ts"],"names":[],"mappings":"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"}
|