@exellix/exellix-runtime 3.6.0 → 3.7.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/execution-matrix/activity-record-adapters.d.ts +74 -0
- package/dist/execution-matrix/activity-record-adapters.d.ts.map +1 -0
- package/dist/execution-matrix/activity-record-adapters.js +248 -0
- package/dist/execution-matrix/activity-record-adapters.js.map +1 -0
- package/dist/execution-matrix/activity-record-adapters.spec.d.ts +2 -0
- package/dist/execution-matrix/activity-record-adapters.spec.d.ts.map +1 -0
- package/dist/execution-matrix/activity-record-adapters.spec.js +114 -0
- package/dist/execution-matrix/activity-record-adapters.spec.js.map +1 -0
- package/dist/execution-matrix/execution-matrix.spec.js +2 -2
- package/dist/execution-matrix/execution-matrix.spec.js.map +1 -1
- package/dist/execution-matrix/index.d.ts +2 -0
- package/dist/execution-matrix/index.d.ts.map +1 -1
- package/dist/execution-matrix/index.js +2 -0
- package/dist/execution-matrix/index.js.map +1 -1
- package/dist/execution-matrix/job-activity-rollup.d.ts +56 -0
- package/dist/execution-matrix/job-activity-rollup.d.ts.map +1 -0
- package/dist/execution-matrix/job-activity-rollup.js +185 -0
- package/dist/execution-matrix/job-activity-rollup.js.map +1 -0
- package/dist/execution-matrix/orchestrator.d.ts.map +1 -1
- package/dist/execution-matrix/orchestrator.js +39 -1
- package/dist/execution-matrix/orchestrator.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { ActivixCostShape } from '@x12i/activix';
|
|
2
|
+
/** Normalized token usage for one gateway / skill activity row. */
|
|
3
|
+
export type ActivityUsageView = {
|
|
4
|
+
promptTokens?: number;
|
|
5
|
+
completionTokens?: number;
|
|
6
|
+
totalTokens?: number;
|
|
7
|
+
cachedPromptTokens?: number;
|
|
8
|
+
reasoningTokens?: number;
|
|
9
|
+
costUsd?: number;
|
|
10
|
+
costStatus?: 'priced' | 'unpriced';
|
|
11
|
+
maxTokensRequested?: number;
|
|
12
|
+
isByok?: boolean;
|
|
13
|
+
};
|
|
14
|
+
/** Configured vs routed model fields on an activity row. */
|
|
15
|
+
export type ActivityModelView = {
|
|
16
|
+
configuredModel?: string;
|
|
17
|
+
modelUsed?: string;
|
|
18
|
+
/** `modelUsed` when set, otherwise `model` from metadata / response / config. */
|
|
19
|
+
effectiveModel?: string;
|
|
20
|
+
provider?: string;
|
|
21
|
+
};
|
|
22
|
+
export type ActivityTimingView = {
|
|
23
|
+
startTime?: number;
|
|
24
|
+
endTime?: number;
|
|
25
|
+
durationMs?: number;
|
|
26
|
+
status?: string;
|
|
27
|
+
};
|
|
28
|
+
/** Convenience bundle for dashboards and matrix rollups. */
|
|
29
|
+
export type ActivityRecordView = {
|
|
30
|
+
activityId?: string;
|
|
31
|
+
jobId?: string;
|
|
32
|
+
graphId?: string;
|
|
33
|
+
nodeId?: string;
|
|
34
|
+
activityType?: string;
|
|
35
|
+
status?: string;
|
|
36
|
+
hasResponse: boolean;
|
|
37
|
+
model: ActivityModelView;
|
|
38
|
+
usage: ActivityUsageView;
|
|
39
|
+
timing: ActivityTimingView;
|
|
40
|
+
};
|
|
41
|
+
export type ActivixActivityRecord = Record<string, unknown>;
|
|
42
|
+
/**
|
|
43
|
+
* Gateway completion payloads may be stored as `outer.output` (ai-gateway) or
|
|
44
|
+
* `outer.output.response` (nested envelope from some graph runtimes).
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveActivityGatewayResponse(doc: ActivixActivityRecord): Record<string, unknown> | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Token + cost usage for one activity (prefers Activix `outer.cost`, then gateway `usage`).
|
|
49
|
+
*/
|
|
50
|
+
export declare function resolveActivityUsage(doc: ActivixActivityRecord): ActivityUsageView;
|
|
51
|
+
/**
|
|
52
|
+
* Resolved model for an activity: prefers authoritative `modelUsed`, then `model`.
|
|
53
|
+
*/
|
|
54
|
+
export declare function resolveActivityModel(doc: ActivixActivityRecord): ActivityModelView;
|
|
55
|
+
/** Lifecycle timing from Activix-owned top-level fields. */
|
|
56
|
+
export declare function resolveActivityTiming(doc: ActivixActivityRecord): ActivityTimingView;
|
|
57
|
+
export declare function resolveActivityHasResponse(doc: ActivixActivityRecord): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Full normalized read model for one persisted Activix / gateway activity document.
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveActivityRecordView(doc: ActivixActivityRecord): ActivityRecordView;
|
|
62
|
+
/** Maps a rollup or single activity usage view to Activix `outer.cost`. */
|
|
63
|
+
export declare function toActivixCostShape(input: {
|
|
64
|
+
costUsd?: number;
|
|
65
|
+
promptTokens?: number;
|
|
66
|
+
completionTokens?: number;
|
|
67
|
+
totalTokens?: number;
|
|
68
|
+
reasoningTokens?: number;
|
|
69
|
+
provider?: string;
|
|
70
|
+
model?: string;
|
|
71
|
+
costStatus?: 'priced' | 'unpriced';
|
|
72
|
+
details?: Record<string, unknown>;
|
|
73
|
+
}): ActivixCostShape | undefined;
|
|
74
|
+
//# sourceMappingURL=activity-record-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-record-adapters.d.ts","sourceRoot":"","sources":["../../src/execution-matrix/activity-record-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,mEAAmE;AACnE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA+B5D;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,qBAAqB,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAMrC;AA8ED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,qBAAqB,GAAG,iBAAiB,CAsDlF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,qBAAqB,GAAG,iBAAiB,CAiClF;AAED,4DAA4D;AAC5D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,qBAAqB,GAAG,kBAAkB,CAapF;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAG9E;AAQD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,qBAAqB,GAAG,kBAAkB,CAexF;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,GAAG,gBAAgB,GAAG,SAAS,CA2B/B"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
function isPlainObject(v) {
|
|
2
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
3
|
+
}
|
|
4
|
+
function trimString(v) {
|
|
5
|
+
if (typeof v !== 'string')
|
|
6
|
+
return undefined;
|
|
7
|
+
const t = v.trim();
|
|
8
|
+
return t.length > 0 ? t : undefined;
|
|
9
|
+
}
|
|
10
|
+
function finiteNumber(v) {
|
|
11
|
+
return typeof v === 'number' && Number.isFinite(v) ? v : undefined;
|
|
12
|
+
}
|
|
13
|
+
function firstFiniteNumber(...values) {
|
|
14
|
+
for (const v of values) {
|
|
15
|
+
const n = finiteNumber(v);
|
|
16
|
+
if (n !== undefined)
|
|
17
|
+
return n;
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
function resolveOuter(doc) {
|
|
22
|
+
if (isPlainObject(doc.outer))
|
|
23
|
+
return doc.outer;
|
|
24
|
+
const legacy = doc.structure;
|
|
25
|
+
if (isPlainObject(legacy) && isPlainObject(legacy.outer))
|
|
26
|
+
return legacy.outer;
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Gateway completion payloads may be stored as `outer.output` (ai-gateway) or
|
|
31
|
+
* `outer.output.response` (nested envelope from some graph runtimes).
|
|
32
|
+
*/
|
|
33
|
+
export function resolveActivityGatewayResponse(doc) {
|
|
34
|
+
const outer = resolveOuter(doc);
|
|
35
|
+
const output = outer?.output;
|
|
36
|
+
if (!isPlainObject(output))
|
|
37
|
+
return undefined;
|
|
38
|
+
if (isPlainObject(output.response))
|
|
39
|
+
return output.response;
|
|
40
|
+
return output;
|
|
41
|
+
}
|
|
42
|
+
function readUsageObject(raw) {
|
|
43
|
+
if (!isPlainObject(raw))
|
|
44
|
+
return undefined;
|
|
45
|
+
if (isPlainObject(raw.usage))
|
|
46
|
+
return raw.usage;
|
|
47
|
+
if (isPlainObject(raw.tokens))
|
|
48
|
+
return raw.tokens;
|
|
49
|
+
return raw;
|
|
50
|
+
}
|
|
51
|
+
function normalizeUsageFields(raw) {
|
|
52
|
+
if (!raw)
|
|
53
|
+
return {};
|
|
54
|
+
const promptTokens = firstFiniteNumber(raw.prompt_tokens, raw.tokensPrompt, raw.prompt, raw.input, raw.tokensInput);
|
|
55
|
+
const completionTokens = firstFiniteNumber(raw.completion_tokens, raw.tokensCompletion, raw.completion, raw.output, raw.tokensOutput);
|
|
56
|
+
const totalTokens = firstFiniteNumber(raw.total_tokens, raw.tokensTotal, raw.total);
|
|
57
|
+
const promptDetails = isPlainObject(raw.prompt_tokens_details) ? raw.prompt_tokens_details : undefined;
|
|
58
|
+
const completionDetails = isPlainObject(raw.completion_tokens_details)
|
|
59
|
+
? raw.completion_tokens_details
|
|
60
|
+
: undefined;
|
|
61
|
+
const cachedPromptTokens = firstFiniteNumber(raw.cachedTokensPrompt, raw.cached_prompt_tokens, promptDetails?.cached_tokens);
|
|
62
|
+
const reasoningTokens = firstFiniteNumber(raw.reasoning_tokens, completionDetails?.reasoning_tokens);
|
|
63
|
+
const costUsd = firstFiniteNumber(raw.cost, raw.costUsd, raw.usd);
|
|
64
|
+
const costStatus = raw.costStatus === 'priced' || raw.costStatus === 'unpriced' ? raw.costStatus : undefined;
|
|
65
|
+
const maxTokensRequested = firstFiniteNumber(raw.maxTokensRequested, raw.max_tokens);
|
|
66
|
+
const isByok = typeof raw.is_byok === 'boolean' ? raw.is_byok : undefined;
|
|
67
|
+
return {
|
|
68
|
+
...(promptTokens !== undefined ? { promptTokens } : {}),
|
|
69
|
+
...(completionTokens !== undefined ? { completionTokens } : {}),
|
|
70
|
+
...(totalTokens !== undefined ? { totalTokens } : {}),
|
|
71
|
+
...(cachedPromptTokens !== undefined ? { cachedPromptTokens } : {}),
|
|
72
|
+
...(reasoningTokens !== undefined ? { reasoningTokens } : {}),
|
|
73
|
+
...(costUsd !== undefined ? { costUsd } : {}),
|
|
74
|
+
...(costStatus ? { costStatus } : {}),
|
|
75
|
+
...(maxTokensRequested !== undefined ? { maxTokensRequested } : {}),
|
|
76
|
+
...(isByok !== undefined ? { isByok } : {}),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function readOuterCostTokens(outer) {
|
|
80
|
+
const cost = outer?.cost;
|
|
81
|
+
if (!isPlainObject(cost))
|
|
82
|
+
return {};
|
|
83
|
+
const usd = finiteNumber(cost.usd);
|
|
84
|
+
const tokens = isPlainObject(cost.tokens) ? cost.tokens : undefined;
|
|
85
|
+
return {
|
|
86
|
+
...(usd !== undefined ? { costUsd: usd } : {}),
|
|
87
|
+
...(tokens
|
|
88
|
+
? normalizeUsageFields({
|
|
89
|
+
input: tokens.input,
|
|
90
|
+
output: tokens.output,
|
|
91
|
+
total: tokens.total,
|
|
92
|
+
reasoning: tokens.reasoning,
|
|
93
|
+
})
|
|
94
|
+
: {}),
|
|
95
|
+
...(isPlainObject(cost.details) && (cost.details.costStatus === 'priced' || cost.details.costStatus === 'unpriced')
|
|
96
|
+
? { costStatus: cost.details.costStatus }
|
|
97
|
+
: {}),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Token + cost usage for one activity (prefers Activix `outer.cost`, then gateway `usage`).
|
|
102
|
+
*/
|
|
103
|
+
export function resolveActivityUsage(doc) {
|
|
104
|
+
const outer = resolveOuter(doc);
|
|
105
|
+
const fromOuterCost = readOuterCostTokens(outer);
|
|
106
|
+
const response = resolveActivityGatewayResponse(doc);
|
|
107
|
+
const responseUsage = normalizeUsageFields(readUsageObject(response));
|
|
108
|
+
const metadataUsage = normalizeUsageFields(readUsageObject(isPlainObject(response?.metadata) ? response.metadata.tokens : undefined));
|
|
109
|
+
const topCost = firstFiniteNumber(doc.cost, doc.costUsd);
|
|
110
|
+
const topCostStatus = doc.costStatus === 'priced' || doc.costStatus === 'unpriced' ? doc.costStatus : undefined;
|
|
111
|
+
const promptTokens = fromOuterCost.promptTokens ?? responseUsage.promptTokens ?? metadataUsage.promptTokens;
|
|
112
|
+
const completionTokens = fromOuterCost.completionTokens ?? responseUsage.completionTokens ?? metadataUsage.completionTokens;
|
|
113
|
+
const totalTokens = fromOuterCost.totalTokens ??
|
|
114
|
+
responseUsage.totalTokens ??
|
|
115
|
+
metadataUsage.totalTokens ??
|
|
116
|
+
(promptTokens !== undefined && completionTokens !== undefined
|
|
117
|
+
? promptTokens + completionTokens
|
|
118
|
+
: undefined);
|
|
119
|
+
const costUsd = fromOuterCost.costUsd ??
|
|
120
|
+
responseUsage.costUsd ??
|
|
121
|
+
metadataUsage.costUsd ??
|
|
122
|
+
firstFiniteNumber(isPlainObject(outer?.metadata) ? outer.metadata.cost : undefined, isPlainObject(outer?.metadata) ? outer.metadata.costUsd : undefined, topCost);
|
|
123
|
+
const costStatus = fromOuterCost.costStatus ?? responseUsage.costStatus ?? metadataUsage.costStatus ?? topCostStatus;
|
|
124
|
+
return {
|
|
125
|
+
...(promptTokens !== undefined ? { promptTokens } : {}),
|
|
126
|
+
...(completionTokens !== undefined ? { completionTokens } : {}),
|
|
127
|
+
...(totalTokens !== undefined ? { totalTokens } : {}),
|
|
128
|
+
...(fromOuterCost.cachedPromptTokens ?? responseUsage.cachedPromptTokens
|
|
129
|
+
? { cachedPromptTokens: fromOuterCost.cachedPromptTokens ?? responseUsage.cachedPromptTokens }
|
|
130
|
+
: {}),
|
|
131
|
+
...(fromOuterCost.reasoningTokens ?? responseUsage.reasoningTokens
|
|
132
|
+
? { reasoningTokens: fromOuterCost.reasoningTokens ?? responseUsage.reasoningTokens }
|
|
133
|
+
: {}),
|
|
134
|
+
...(costUsd !== undefined ? { costUsd } : {}),
|
|
135
|
+
...(costStatus ? { costStatus } : {}),
|
|
136
|
+
...(responseUsage.maxTokensRequested ?? fromOuterCost.maxTokensRequested
|
|
137
|
+
? {
|
|
138
|
+
maxTokensRequested: responseUsage.maxTokensRequested ?? fromOuterCost.maxTokensRequested,
|
|
139
|
+
}
|
|
140
|
+
: {}),
|
|
141
|
+
...(responseUsage.isByok !== undefined ? { isByok: responseUsage.isByok } : {}),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Resolved model for an activity: prefers authoritative `modelUsed`, then `model`.
|
|
146
|
+
*/
|
|
147
|
+
export function resolveActivityModel(doc) {
|
|
148
|
+
const outer = resolveOuter(doc);
|
|
149
|
+
const outerMeta = isPlainObject(outer?.metadata) ? outer.metadata : undefined;
|
|
150
|
+
const topMeta = isPlainObject(doc.metadata) ? doc.metadata : undefined;
|
|
151
|
+
const config = isPlainObject(doc.config) ? doc.config : undefined;
|
|
152
|
+
const response = resolveActivityGatewayResponse(doc);
|
|
153
|
+
const responseMeta = isPlainObject(response?.metadata) ? response.metadata : undefined;
|
|
154
|
+
const modelUsed = trimString(topMeta?.modelUsed) ??
|
|
155
|
+
trimString(outerMeta?.modelUsed) ??
|
|
156
|
+
trimString(responseMeta?.modelUsed);
|
|
157
|
+
const model = trimString(topMeta?.model) ??
|
|
158
|
+
trimString(outerMeta?.model) ??
|
|
159
|
+
trimString(responseMeta?.model) ??
|
|
160
|
+
trimString(response?.model) ??
|
|
161
|
+
trimString(config?.model);
|
|
162
|
+
const configuredModel = trimString(config?.model);
|
|
163
|
+
const effectiveModel = modelUsed ?? model;
|
|
164
|
+
const provider = trimString(topMeta?.provider) ??
|
|
165
|
+
trimString(outerMeta?.provider) ??
|
|
166
|
+
trimString(responseMeta?.provider) ??
|
|
167
|
+
trimString(config?.provider) ??
|
|
168
|
+
(isPlainObject(outer?.cost) ? trimString(outer.cost.provider) : undefined);
|
|
169
|
+
return {
|
|
170
|
+
...(configuredModel ? { configuredModel } : {}),
|
|
171
|
+
...(modelUsed ? { modelUsed } : {}),
|
|
172
|
+
...(effectiveModel ? { effectiveModel } : {}),
|
|
173
|
+
...(provider ? { provider } : {}),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/** Lifecycle timing from Activix-owned top-level fields. */
|
|
177
|
+
export function resolveActivityTiming(doc) {
|
|
178
|
+
const startTime = finiteNumber(doc.startTime);
|
|
179
|
+
const endTime = finiteNumber(doc.endTime);
|
|
180
|
+
const durationMs = finiteNumber(doc.duration) ??
|
|
181
|
+
(startTime !== undefined && endTime !== undefined ? endTime - startTime : undefined);
|
|
182
|
+
const status = trimString(doc.status);
|
|
183
|
+
return {
|
|
184
|
+
...(startTime !== undefined ? { startTime } : {}),
|
|
185
|
+
...(endTime !== undefined ? { endTime } : {}),
|
|
186
|
+
...(durationMs !== undefined ? { durationMs } : {}),
|
|
187
|
+
...(status ? { status } : {}),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
export function resolveActivityHasResponse(doc) {
|
|
191
|
+
const outer = resolveOuter(doc);
|
|
192
|
+
return outer?.output !== null && outer?.output !== undefined;
|
|
193
|
+
}
|
|
194
|
+
function resolveRunContextJobId(doc) {
|
|
195
|
+
const rc = doc.runContext;
|
|
196
|
+
if (!isPlainObject(rc))
|
|
197
|
+
return undefined;
|
|
198
|
+
return trimString(rc.jobId);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Full normalized read model for one persisted Activix / gateway activity document.
|
|
202
|
+
*/
|
|
203
|
+
export function resolveActivityRecordView(doc) {
|
|
204
|
+
const rc = isPlainObject(doc.runContext) ? doc.runContext : undefined;
|
|
205
|
+
const activityId = trimString(doc.activityId) ?? trimString(doc._id);
|
|
206
|
+
return {
|
|
207
|
+
...(activityId ? { activityId } : {}),
|
|
208
|
+
...(resolveRunContextJobId(doc) ? { jobId: resolveRunContextJobId(doc) } : {}),
|
|
209
|
+
...(rc && trimString(rc.graphId) ? { graphId: trimString(rc.graphId) } : {}),
|
|
210
|
+
...(rc && trimString(rc.nodeId) ? { nodeId: trimString(rc.nodeId) } : {}),
|
|
211
|
+
...(trimString(doc.activityType) ? { activityType: trimString(doc.activityType) } : {}),
|
|
212
|
+
...(trimString(doc.status) ? { status: trimString(doc.status) } : {}),
|
|
213
|
+
hasResponse: resolveActivityHasResponse(doc),
|
|
214
|
+
model: resolveActivityModel(doc),
|
|
215
|
+
usage: resolveActivityUsage(doc),
|
|
216
|
+
timing: resolveActivityTiming(doc),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/** Maps a rollup or single activity usage view to Activix `outer.cost`. */
|
|
220
|
+
export function toActivixCostShape(input) {
|
|
221
|
+
const usd = finiteNumber(input.costUsd);
|
|
222
|
+
const tokens = input.promptTokens !== undefined ||
|
|
223
|
+
input.completionTokens !== undefined ||
|
|
224
|
+
input.totalTokens !== undefined ||
|
|
225
|
+
input.reasoningTokens !== undefined
|
|
226
|
+
? {
|
|
227
|
+
...(input.promptTokens !== undefined ? { input: input.promptTokens } : {}),
|
|
228
|
+
...(input.completionTokens !== undefined ? { output: input.completionTokens } : {}),
|
|
229
|
+
...(input.reasoningTokens !== undefined ? { reasoning: input.reasoningTokens } : {}),
|
|
230
|
+
...(input.totalTokens !== undefined ? { total: input.totalTokens } : {}),
|
|
231
|
+
}
|
|
232
|
+
: undefined;
|
|
233
|
+
const details = { ...(input.details ?? {}) };
|
|
234
|
+
if (input.costStatus)
|
|
235
|
+
details.costStatus = input.costStatus;
|
|
236
|
+
const hasDetails = Object.keys(details).length > 0;
|
|
237
|
+
if (usd === undefined && !tokens && !input.provider && !input.model && !hasDetails) {
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
...(usd !== undefined ? { usd, unit: 'USD' } : {}),
|
|
242
|
+
...(tokens ? { tokens } : {}),
|
|
243
|
+
...(input.provider ? { provider: input.provider } : {}),
|
|
244
|
+
...(input.model ? { model: input.model } : {}),
|
|
245
|
+
...(hasDetails ? { details } : {}),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=activity-record-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-record-adapters.js","sourceRoot":"","sources":["../../src/execution-matrix/activity-record-adapters.ts"],"names":[],"mappings":"AA+CA,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,UAAU,CAAC,CAAU;IAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnB,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC;AAED,SAAS,YAAY,CAAC,CAAU;IAC9B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAG,MAAiB;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,GAA0B;IAC9C,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC;IAC7B,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC9E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAC5C,GAA0B;IAE1B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC;IAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;IAC3D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC;IAC/C,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAwC;IACpE,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,YAAY,GAAG,iBAAiB,CACpC,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,WAAW,CAChB,CAAC;IACF,MAAM,gBAAgB,GAAG,iBAAiB,CACxC,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,gBAAgB,EACpB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,YAAY,CACjB,CAAC;IACF,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACpF,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,iBAAiB,GAAG,aAAa,CAAC,GAAG,CAAC,yBAAyB,CAAC;QACpE,CAAC,CAAC,GAAG,CAAC,yBAAyB;QAC/B,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,kBAAkB,GAAG,iBAAiB,CAC1C,GAAG,CAAC,kBAAkB,EACtB,GAAG,CAAC,oBAAoB,EACxB,aAAa,EAAE,aAAa,CAC7B,CAAC;IACF,MAAM,eAAe,GAAG,iBAAiB,CACvC,GAAG,CAAC,gBAAgB,EACpB,iBAAiB,EAAE,gBAAgB,CACpC,CAAC;IACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,UAAU,GACd,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,OAAO;QACL,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA0C;IACrE,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC;IACzB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,OAAO;QACL,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,MAAM;YACR,CAAC,CAAC,oBAAoB,CAAC;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,UAAU,CAAC;YACjH,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAmC,EAAE;YAClE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAA0B;IAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,aAAa,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,8BAA8B,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,oBAAoB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,oBAAoB,CACxC,eAAe,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAC1F,CAAC;IACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,aAAa,GACjB,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5F,MAAM,YAAY,GAChB,aAAa,CAAC,YAAY,IAAI,aAAa,CAAC,YAAY,IAAI,aAAa,CAAC,YAAY,CAAC;IACzF,MAAM,gBAAgB,GACpB,aAAa,CAAC,gBAAgB,IAAI,aAAa,CAAC,gBAAgB,IAAI,aAAa,CAAC,gBAAgB,CAAC;IACrG,MAAM,WAAW,GACf,aAAa,CAAC,WAAW;QACzB,aAAa,CAAC,WAAW;QACzB,aAAa,CAAC,WAAW;QACzB,CAAC,YAAY,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS;YAC3D,CAAC,CAAC,YAAY,GAAG,gBAAgB;YACjC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjB,MAAM,OAAO,GACX,aAAa,CAAC,OAAO;QACrB,aAAa,CAAC,OAAO;QACrB,aAAa,CAAC,OAAO;QACrB,iBAAiB,CACf,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAChE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACnE,OAAO,CACR,CAAC;IACJ,MAAM,UAAU,GACd,aAAa,CAAC,UAAU,IAAI,aAAa,CAAC,UAAU,IAAI,aAAa,CAAC,UAAU,IAAI,aAAa,CAAC;IAEpG,OAAO;QACL,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,aAAa,CAAC,kBAAkB,IAAI,aAAa,CAAC,kBAAkB;YACtE,CAAC,CAAC,EAAE,kBAAkB,EAAE,aAAa,CAAC,kBAAkB,IAAI,aAAa,CAAC,kBAAkB,EAAE;YAC9F,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,aAAa,CAAC,eAAe,IAAI,aAAa,CAAC,eAAe;YAChE,CAAC,CAAC,EAAE,eAAe,EAAE,aAAa,CAAC,eAAe,IAAI,aAAa,CAAC,eAAe,EAAE;YACrF,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,aAAa,CAAC,kBAAkB,IAAI,aAAa,CAAC,kBAAkB;YACtE,CAAC,CAAC;gBACE,kBAAkB,EAAE,aAAa,CAAC,kBAAkB,IAAI,aAAa,CAAC,kBAAkB;aACzF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAA0B;IAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,MAAM,QAAQ,GAAG,8BAA8B,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvF,MAAM,SAAS,GACb,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;QAC9B,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC;QAChC,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,KAAK,GACT,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;QAC1B,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC;QAC5B,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC;QAC/B,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC3B,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5B,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,SAAS,IAAI,KAAK,CAAC;IAC1C,MAAM,QAAQ,GACZ,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC7B,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC/B,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC;QAClC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC5B,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE7E,OAAO;QACL,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,qBAAqB,CAAC,GAA0B;IAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,UAAU,GACd,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO;QACL,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,GAA0B;IACnE,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;AAC/D,CAAC;AAED,SAAS,sBAAsB,CAAC,GAA0B;IACxD,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;IAC1B,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAA0B;IAClE,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO;QACL,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,WAAW,EAAE,0BAA0B,CAAC,GAAG,CAAC;QAC5C,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;QAChC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;QAChC,MAAM,EAAE,qBAAqB,CAAC,GAAG,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,KAUlC;IACC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GACV,KAAK,CAAC,YAAY,KAAK,SAAS;QAChC,KAAK,CAAC,gBAAgB,KAAK,SAAS;QACpC,KAAK,CAAC,WAAW,KAAK,SAAS;QAC/B,KAAK,CAAC,eAAe,KAAK,SAAS;QACjC,CAAC,CAAC;YACE,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,KAAK,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE;QACH,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7C,IAAI,KAAK,CAAC,UAAU;QAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QACnF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-record-adapters.spec.d.ts","sourceRoot":"","sources":["../../src/execution-matrix/activity-record-adapters.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { resolveActivityModel, resolveActivityRecordView, resolveActivityUsage, } from './activity-record-adapters.js';
|
|
3
|
+
import { rollupJobActivitiesFromRecords } from './job-activity-rollup.js';
|
|
4
|
+
/** Completed gateway row shape (outer.output.response envelope). */
|
|
5
|
+
function completedGatewayActivity(overrides) {
|
|
6
|
+
return {
|
|
7
|
+
activityId: 'act-1',
|
|
8
|
+
status: 'completed',
|
|
9
|
+
startTime: 1779206026578,
|
|
10
|
+
endTime: 1779206026590,
|
|
11
|
+
duration: 12,
|
|
12
|
+
runContext: { jobId: 'job-abc', graphId: 'graph-1', nodeId: 'step-1' },
|
|
13
|
+
config: { model: 'gpt-5-nano' },
|
|
14
|
+
outer: {
|
|
15
|
+
input: { activityType: 'gateway-invocation' },
|
|
16
|
+
output: {
|
|
17
|
+
response: {
|
|
18
|
+
model: 'openai/gpt-5.2',
|
|
19
|
+
usage: {
|
|
20
|
+
prompt_tokens: 693,
|
|
21
|
+
completion_tokens: 1078,
|
|
22
|
+
total_tokens: 1771,
|
|
23
|
+
cost: 0.01630475,
|
|
24
|
+
tokensPrompt: 693,
|
|
25
|
+
tokensCompletion: 1078,
|
|
26
|
+
tokensTotal: 1771,
|
|
27
|
+
},
|
|
28
|
+
metadata: {
|
|
29
|
+
modelUsed: 'openai/gpt-5.2',
|
|
30
|
+
costStatus: 'priced',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
metadata: { modelUsed: 'openai/gpt-5.2' },
|
|
35
|
+
cost: {
|
|
36
|
+
usd: 0.01630475,
|
|
37
|
+
unit: 'USD',
|
|
38
|
+
tokens: { input: 693, output: 1078, total: 1771 },
|
|
39
|
+
model: 'openai/gpt-5.2',
|
|
40
|
+
details: { costStatus: 'priced' },
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
...overrides,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
describe('resolveActivityModel', () => {
|
|
47
|
+
it('prefers modelUsed over configured model', () => {
|
|
48
|
+
const model = resolveActivityModel(completedGatewayActivity());
|
|
49
|
+
expect(model.configuredModel).toBe('gpt-5-nano');
|
|
50
|
+
expect(model.modelUsed).toBe('openai/gpt-5.2');
|
|
51
|
+
expect(model.effectiveModel).toBe('openai/gpt-5.2');
|
|
52
|
+
});
|
|
53
|
+
it('falls back to model when modelUsed is absent', () => {
|
|
54
|
+
const doc = completedGatewayActivity();
|
|
55
|
+
const outer = doc.outer;
|
|
56
|
+
const output = outer.output;
|
|
57
|
+
const response = output.response;
|
|
58
|
+
delete response.metadata.modelUsed;
|
|
59
|
+
delete outer.metadata.modelUsed;
|
|
60
|
+
const model = resolveActivityModel(doc);
|
|
61
|
+
expect(model.effectiveModel).toBe('openai/gpt-5.2');
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe('resolveActivityUsage', () => {
|
|
65
|
+
it('reads tokens and cost from gateway usage and outer.cost', () => {
|
|
66
|
+
const usage = resolveActivityUsage(completedGatewayActivity());
|
|
67
|
+
expect(usage.promptTokens).toBe(693);
|
|
68
|
+
expect(usage.completionTokens).toBe(1078);
|
|
69
|
+
expect(usage.totalTokens).toBe(1771);
|
|
70
|
+
expect(usage.costUsd).toBeCloseTo(0.01630475);
|
|
71
|
+
expect(usage.costStatus).toBe('priced');
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('rollupJobActivitiesFromRecords', () => {
|
|
75
|
+
it('sums duration, tokens, and cost for a job', () => {
|
|
76
|
+
const second = completedGatewayActivity({
|
|
77
|
+
activityId: 'act-2',
|
|
78
|
+
duration: 8,
|
|
79
|
+
outer: {
|
|
80
|
+
input: {},
|
|
81
|
+
output: {
|
|
82
|
+
response: {
|
|
83
|
+
model: 'openai/gpt-5.2',
|
|
84
|
+
usage: { prompt_tokens: 100, completion_tokens: 50, total_tokens: 150, cost: 0.01 },
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
metadata: {},
|
|
88
|
+
cost: { usd: 0.01, tokens: { input: 100, output: 50, total: 150 } },
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
const rollup = rollupJobActivitiesFromRecords([completedGatewayActivity(), second], 'job-abc');
|
|
92
|
+
expect(rollup.activityCount).toBe(2);
|
|
93
|
+
expect(rollup.completedCount).toBe(2);
|
|
94
|
+
expect(rollup.totalDurationMs).toBe(20);
|
|
95
|
+
expect(rollup.totalCostUsd).toBeCloseTo(0.02630475);
|
|
96
|
+
expect(rollup.tokens.prompt).toBe(793);
|
|
97
|
+
expect(rollup.tokens.completion).toBe(1128);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('resolveActivityRecordView', () => {
|
|
101
|
+
it('marks started rows without output as hasResponse false', () => {
|
|
102
|
+
const view = resolveActivityRecordView({
|
|
103
|
+
activityId: 'act-started',
|
|
104
|
+
status: 'started',
|
|
105
|
+
runContext: { jobId: 'job-x' },
|
|
106
|
+
config: { model: 'gpt-5-nano' },
|
|
107
|
+
outer: { input: {}, output: null, metadata: {} },
|
|
108
|
+
});
|
|
109
|
+
expect(view.hasResponse).toBe(false);
|
|
110
|
+
expect(view.model.configuredModel).toBe('gpt-5-nano');
|
|
111
|
+
expect(view.model.effectiveModel).toBe('gpt-5-nano');
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=activity-record-adapters.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-record-adapters.spec.js","sourceRoot":"","sources":["../../src/execution-matrix/activity-record-adapters.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,oEAAoE;AACpE,SAAS,wBAAwB,CAAC,SAAmC;IACnE,OAAO;QACL,UAAU,EAAE,OAAO;QACnB,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QACtE,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;QAC/B,KAAK,EAAE;YACL,KAAK,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE;YAC7C,MAAM,EAAE;gBACN,QAAQ,EAAE;oBACR,KAAK,EAAE,gBAAgB;oBACvB,KAAK,EAAE;wBACL,aAAa,EAAE,GAAG;wBAClB,iBAAiB,EAAE,IAAI;wBACvB,YAAY,EAAE,IAAI;wBAClB,IAAI,EAAE,UAAU;wBAChB,YAAY,EAAE,GAAG;wBACjB,gBAAgB,EAAE,IAAI;wBACtB,WAAW,EAAE,IAAI;qBAClB;oBACD,QAAQ,EAAE;wBACR,SAAS,EAAE,gBAAgB;wBAC3B,UAAU,EAAE,QAAQ;qBACrB;iBACF;aACF;YACD,QAAQ,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;YACzC,IAAI,EAAE;gBACJ,GAAG,EAAE,UAAU;gBACf,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;gBACjD,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;aAClC;SACF;QACD,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,KAAK,GAAG,oBAAoB,CAAC,wBAAwB,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,GAAG,GAAG,wBAAwB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAgC,CAAC;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAmC,CAAC;QAC5D,OAAQ,QAAQ,CAAC,QAAoC,CAAC,SAAS,CAAC;QAChE,OAAQ,KAAK,CAAC,QAAoC,CAAC,SAAS,CAAC;QAC7D,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,KAAK,GAAG,oBAAoB,CAAC,wBAAwB,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,wBAAwB,CAAC;YACtC,UAAU,EAAE,OAAO;YACnB,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE;gBACL,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE;oBACN,QAAQ,EAAE;wBACR,KAAK,EAAE,gBAAgB;wBACvB,KAAK,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;qBACpF;iBACF;gBACD,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;aACpE;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,8BAA8B,CAC3C,CAAC,wBAAwB,EAAE,EAAE,MAAM,CAAC,EACpC,SAAS,CACV,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG,yBAAyB,CAAC;YACrC,UAAU,EAAE,aAAa;YACzB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;YAC9B,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;YAC/B,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SACjD,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1069,8 +1069,8 @@ describe('matrix boundaries (integration-style)', () => {
|
|
|
1069
1069
|
}),
|
|
1070
1070
|
}, { matrixCatalogId: 'cat', matrixRunId: 'r1', graphIds: ['G'], limit: 1 });
|
|
1071
1071
|
const call = executeGraph.mock.calls[0][0];
|
|
1072
|
-
expect(call.runtime.input).
|
|
1073
|
-
expect(call.runtime.executionMemory.input).
|
|
1072
|
+
expect(call.runtime.input).toMatchObject({ blob: 9 });
|
|
1073
|
+
expect(call.runtime.executionMemory.input).toMatchObject({ blob: 9 });
|
|
1074
1074
|
});
|
|
1075
1075
|
});
|
|
1076
1076
|
/* ============================================================================
|