@autobe/utils 0.30.0-dev.20260315 → 0.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,161 +1,161 @@
1
- import {
2
- AutoBeAggregateEventBase,
3
- AutoBePhase,
4
- AutoBeProcessAggregate,
5
- AutoBeProcessAggregateCollection,
6
- } from "@autobe/interface";
7
-
8
- import { AutoBeFunctionCallingMetricFactory } from "./AutoBeFunctionCallingMetricFactory";
9
- import { TokenUsageComputer } from "./TokenUsageComputer";
10
-
11
- export namespace AutoBeProcessAggregateFactory {
12
- export const createAggregate = (): AutoBeProcessAggregate => ({
13
- metric: AutoBeFunctionCallingMetricFactory.create(),
14
- tokenUsage: {
15
- total: 0,
16
- input: {
17
- total: 0,
18
- cached: 0,
19
- },
20
- output: {
21
- total: 0,
22
- reasoning: 0,
23
- accepted_prediction: 0,
24
- rejected_prediction: 0,
25
- },
26
- },
27
- });
28
-
29
- export const createCollection = <
30
- Phase extends AutoBePhase | "all",
31
- >(): AutoBeProcessAggregateCollection<Phase> =>
32
- ({
33
- total: createAggregate(),
34
- }) satisfies AutoBeProcessAggregateCollection as AutoBeProcessAggregateCollection<Phase>;
35
-
36
- export const computeTotal = <Phase extends AutoBePhase | "all">(
37
- collection: AutoBeProcessAggregateCollection<Phase>,
38
- ): AutoBeProcessAggregate => {
39
- const total: AutoBeProcessAggregate = createAggregate();
40
- for (const [key, value] of Object.entries(collection)) {
41
- if (key === "total") continue;
42
- AutoBeFunctionCallingMetricFactory.increment(total.metric, value.metric);
43
- TokenUsageComputer.increment(total.tokenUsage, value.tokenUsage);
44
- }
45
- return total;
46
- };
47
-
48
- export const emplaceEvent = <
49
- Event extends AutoBeAggregateEventBase & {
50
- type: string;
51
- },
52
- >(
53
- collection: AutoBeProcessAggregateCollection,
54
- event: Event,
55
- ): void => {
56
- // biome-ignore lint: intended
57
- (collection as any)[event.type] ??= createAggregate();
58
- collection.total ??= computeTotal(collection);
59
-
60
- // biome-ignore lint: intended
61
- const local: AutoBeProcessAggregate = (collection as any)[
62
- event.type
63
- ] as AutoBeProcessAggregate;
64
- const total: AutoBeProcessAggregate = collection.total;
65
-
66
- AutoBeFunctionCallingMetricFactory.increment(local.metric, event.metric);
67
- AutoBeFunctionCallingMetricFactory.increment(total.metric, event.metric);
68
- TokenUsageComputer.increment(local.tokenUsage, event.tokenUsage);
69
- TokenUsageComputer.increment(total.tokenUsage, event.tokenUsage);
70
- };
71
-
72
- export const filterPhase = <Phase extends AutoBePhase>(
73
- collection: AutoBeProcessAggregateCollection,
74
- phase: Phase,
75
- ): AutoBeProcessAggregateCollection<Phase> => {
76
- const result: AutoBeProcessAggregateCollection<Phase> = createCollection();
77
- for (const [key, value] of Object.entries(collection)) {
78
- if (key === "total") continue;
79
- else if (key.startsWith(phase) === false) continue;
80
-
81
- // biome-ignore lint: intended
82
- (result as any)[key] = value;
83
- AutoBeFunctionCallingMetricFactory.increment(
84
- result.total.metric,
85
- value.metric,
86
- );
87
- TokenUsageComputer.increment(result.total.tokenUsage, value.tokenUsage);
88
- }
89
- return result;
90
- };
91
-
92
- export const reduce = (
93
- collections: AutoBeProcessAggregateCollection[],
94
- ): AutoBeProcessAggregateCollection => {
95
- const result: AutoBeProcessAggregateCollection = createCollection();
96
- for (const collection of collections) {
97
- for (const [key, value] of Object.entries(collection)) {
98
- if (key === "total") continue;
99
- // biome-ignore lint: intended
100
- (result as any)[key] ??= createAggregate();
101
- // biome-ignore lint: intended
102
- const local: AutoBeProcessAggregate = (result as any)[
103
- key
104
- ] as AutoBeProcessAggregate;
105
- AutoBeFunctionCallingMetricFactory.increment(
106
- local.metric,
107
- value.metric,
108
- );
109
- TokenUsageComputer.increment(local.tokenUsage, value.tokenUsage);
110
- AutoBeFunctionCallingMetricFactory.increment(
111
- result.total.metric,
112
- value.metric,
113
- );
114
- TokenUsageComputer.increment(result.total.tokenUsage, value.tokenUsage);
115
- }
116
- }
117
- result.total ??= createAggregate();
118
- Object.assign(result.total, computeTotal(result));
119
- return result;
120
- };
121
-
122
- export const increment = (
123
- x: AutoBeProcessAggregateCollection,
124
- y: AutoBeProcessAggregateCollection,
125
- ): void => {
126
- for (const [key, value] of Object.entries(y)) {
127
- if (key === "total") continue;
128
- // biome-ignore lint: intended
129
- (x as any)[key] ??= createAggregate();
130
- // biome-ignore lint: intended
131
- const local: AutoBeProcessAggregate = (x as any)[
132
- key
133
- ] as AutoBeProcessAggregate;
134
- AutoBeFunctionCallingMetricFactory.increment(local.metric, value.metric);
135
- }
136
- x.total ??= createAggregate();
137
- Object.assign(x.total, computeTotal(x));
138
- };
139
-
140
- export const minus = (
141
- x: AutoBeProcessAggregateCollection,
142
- y: AutoBeProcessAggregateCollection,
143
- ): AutoBeProcessAggregateCollection => {
144
- const result = JSON.parse(
145
- JSON.stringify(x),
146
- ) as AutoBeProcessAggregateCollection;
147
- for (const [key, value] of Object.entries(y)) {
148
- if (key === "total") continue;
149
- // biome-ignore lint: intended
150
- (result as any)[key] ??= createAggregate();
151
- // biome-ignore lint: intended
152
- const local: AutoBeProcessAggregate = (result as any)[
153
- key
154
- ] as AutoBeProcessAggregate;
155
- AutoBeFunctionCallingMetricFactory.minus(local.metric, value.metric);
156
- }
157
- result.total ??= createAggregate();
158
- Object.assign(result.total, computeTotal(result));
159
- return result;
160
- };
161
- }
1
+ import {
2
+ AutoBeAggregateEventBase,
3
+ AutoBePhase,
4
+ AutoBeProcessAggregate,
5
+ AutoBeProcessAggregateCollection,
6
+ } from "@autobe/interface";
7
+
8
+ import { AutoBeFunctionCallingMetricFactory } from "./AutoBeFunctionCallingMetricFactory";
9
+ import { TokenUsageComputer } from "./TokenUsageComputer";
10
+
11
+ export namespace AutoBeProcessAggregateFactory {
12
+ export const createAggregate = (): AutoBeProcessAggregate => ({
13
+ metric: AutoBeFunctionCallingMetricFactory.create(),
14
+ tokenUsage: {
15
+ total: 0,
16
+ input: {
17
+ total: 0,
18
+ cached: 0,
19
+ },
20
+ output: {
21
+ total: 0,
22
+ reasoning: 0,
23
+ accepted_prediction: 0,
24
+ rejected_prediction: 0,
25
+ },
26
+ },
27
+ });
28
+
29
+ export const createCollection = <
30
+ Phase extends AutoBePhase | "all",
31
+ >(): AutoBeProcessAggregateCollection<Phase> =>
32
+ ({
33
+ total: createAggregate(),
34
+ }) satisfies AutoBeProcessAggregateCollection as AutoBeProcessAggregateCollection<Phase>;
35
+
36
+ export const computeTotal = <Phase extends AutoBePhase | "all">(
37
+ collection: AutoBeProcessAggregateCollection<Phase>,
38
+ ): AutoBeProcessAggregate => {
39
+ const total: AutoBeProcessAggregate = createAggregate();
40
+ for (const [key, value] of Object.entries(collection)) {
41
+ if (key === "total") continue;
42
+ AutoBeFunctionCallingMetricFactory.increment(total.metric, value.metric);
43
+ TokenUsageComputer.increment(total.tokenUsage, value.tokenUsage);
44
+ }
45
+ return total;
46
+ };
47
+
48
+ export const emplaceEvent = <
49
+ Event extends AutoBeAggregateEventBase & {
50
+ type: string;
51
+ },
52
+ >(
53
+ collection: AutoBeProcessAggregateCollection,
54
+ event: Event,
55
+ ): void => {
56
+ // biome-ignore lint: intended
57
+ (collection as any)[event.type] ??= createAggregate();
58
+ collection.total ??= computeTotal(collection);
59
+
60
+ // biome-ignore lint: intended
61
+ const local: AutoBeProcessAggregate = (collection as any)[
62
+ event.type
63
+ ] as AutoBeProcessAggregate;
64
+ const total: AutoBeProcessAggregate = collection.total;
65
+
66
+ AutoBeFunctionCallingMetricFactory.increment(local.metric, event.metric);
67
+ AutoBeFunctionCallingMetricFactory.increment(total.metric, event.metric);
68
+ TokenUsageComputer.increment(local.tokenUsage, event.tokenUsage);
69
+ TokenUsageComputer.increment(total.tokenUsage, event.tokenUsage);
70
+ };
71
+
72
+ export const filterPhase = <Phase extends AutoBePhase>(
73
+ collection: AutoBeProcessAggregateCollection,
74
+ phase: Phase,
75
+ ): AutoBeProcessAggregateCollection<Phase> => {
76
+ const result: AutoBeProcessAggregateCollection<Phase> = createCollection();
77
+ for (const [key, value] of Object.entries(collection)) {
78
+ if (key === "total") continue;
79
+ else if (key.startsWith(phase) === false) continue;
80
+
81
+ // biome-ignore lint: intended
82
+ (result as any)[key] = value;
83
+ AutoBeFunctionCallingMetricFactory.increment(
84
+ result.total.metric,
85
+ value.metric,
86
+ );
87
+ TokenUsageComputer.increment(result.total.tokenUsage, value.tokenUsage);
88
+ }
89
+ return result;
90
+ };
91
+
92
+ export const reduce = (
93
+ collections: AutoBeProcessAggregateCollection[],
94
+ ): AutoBeProcessAggregateCollection => {
95
+ const result: AutoBeProcessAggregateCollection = createCollection();
96
+ for (const collection of collections) {
97
+ for (const [key, value] of Object.entries(collection)) {
98
+ if (key === "total") continue;
99
+ // biome-ignore lint: intended
100
+ (result as any)[key] ??= createAggregate();
101
+ // biome-ignore lint: intended
102
+ const local: AutoBeProcessAggregate = (result as any)[
103
+ key
104
+ ] as AutoBeProcessAggregate;
105
+ AutoBeFunctionCallingMetricFactory.increment(
106
+ local.metric,
107
+ value.metric,
108
+ );
109
+ TokenUsageComputer.increment(local.tokenUsage, value.tokenUsage);
110
+ AutoBeFunctionCallingMetricFactory.increment(
111
+ result.total.metric,
112
+ value.metric,
113
+ );
114
+ TokenUsageComputer.increment(result.total.tokenUsage, value.tokenUsage);
115
+ }
116
+ }
117
+ result.total ??= createAggregate();
118
+ Object.assign(result.total, computeTotal(result));
119
+ return result;
120
+ };
121
+
122
+ export const increment = (
123
+ x: AutoBeProcessAggregateCollection,
124
+ y: AutoBeProcessAggregateCollection,
125
+ ): void => {
126
+ for (const [key, value] of Object.entries(y)) {
127
+ if (key === "total") continue;
128
+ // biome-ignore lint: intended
129
+ (x as any)[key] ??= createAggregate();
130
+ // biome-ignore lint: intended
131
+ const local: AutoBeProcessAggregate = (x as any)[
132
+ key
133
+ ] as AutoBeProcessAggregate;
134
+ AutoBeFunctionCallingMetricFactory.increment(local.metric, value.metric);
135
+ }
136
+ x.total ??= createAggregate();
137
+ Object.assign(x.total, computeTotal(x));
138
+ };
139
+
140
+ export const minus = (
141
+ x: AutoBeProcessAggregateCollection,
142
+ y: AutoBeProcessAggregateCollection,
143
+ ): AutoBeProcessAggregateCollection => {
144
+ const result = JSON.parse(
145
+ JSON.stringify(x),
146
+ ) as AutoBeProcessAggregateCollection;
147
+ for (const [key, value] of Object.entries(y)) {
148
+ if (key === "total") continue;
149
+ // biome-ignore lint: intended
150
+ (result as any)[key] ??= createAggregate();
151
+ // biome-ignore lint: intended
152
+ const local: AutoBeProcessAggregate = (result as any)[
153
+ key
154
+ ] as AutoBeProcessAggregate;
155
+ AutoBeFunctionCallingMetricFactory.minus(local.metric, value.metric);
156
+ }
157
+ result.total ??= createAggregate();
158
+ Object.assign(result.total, computeTotal(result));
159
+ return result;
160
+ };
161
+ }
@@ -1,49 +1,49 @@
1
- import { IAutoBeTokenUsageJson } from "@autobe/interface";
2
-
3
- export namespace TokenUsageComputer {
4
- export const zero = (): IAutoBeTokenUsageJson.IComponent => ({
5
- total: 0,
6
- input: {
7
- total: 0,
8
- cached: 0,
9
- },
10
- output: {
11
- total: 0,
12
- reasoning: 0,
13
- accepted_prediction: 0,
14
- rejected_prediction: 0,
15
- },
16
- });
17
-
18
- export const plus = (
19
- x: IAutoBeTokenUsageJson.IComponent,
20
- y: IAutoBeTokenUsageJson.IComponent,
21
- ): IAutoBeTokenUsageJson.IComponent => ({
22
- total: x.total + y.total,
23
- input: {
24
- total: x.input.total + y.input.total,
25
- cached: x.input.cached + y.input.cached,
26
- },
27
- output: {
28
- total: x.output.total + y.output.total,
29
- reasoning: x.output.reasoning + y.output.reasoning,
30
- accepted_prediction:
31
- x.output.accepted_prediction + y.output.accepted_prediction,
32
- rejected_prediction:
33
- x.output.rejected_prediction + y.output.rejected_prediction,
34
- },
35
- });
36
-
37
- export const increment = (
38
- x: IAutoBeTokenUsageJson.IComponent,
39
- y: IAutoBeTokenUsageJson.IComponent,
40
- ): void => {
41
- x.total += y.total;
42
- x.input.total += y.input.total;
43
- x.input.cached += y.input.cached;
44
- x.output.total += y.output.total;
45
- x.output.reasoning += y.output.reasoning;
46
- x.output.accepted_prediction += y.output.accepted_prediction;
47
- x.output.rejected_prediction += y.output.rejected_prediction;
48
- };
49
- }
1
+ import { IAutoBeTokenUsageJson } from "@autobe/interface";
2
+
3
+ export namespace TokenUsageComputer {
4
+ export const zero = (): IAutoBeTokenUsageJson.IComponent => ({
5
+ total: 0,
6
+ input: {
7
+ total: 0,
8
+ cached: 0,
9
+ },
10
+ output: {
11
+ total: 0,
12
+ reasoning: 0,
13
+ accepted_prediction: 0,
14
+ rejected_prediction: 0,
15
+ },
16
+ });
17
+
18
+ export const plus = (
19
+ x: IAutoBeTokenUsageJson.IComponent,
20
+ y: IAutoBeTokenUsageJson.IComponent,
21
+ ): IAutoBeTokenUsageJson.IComponent => ({
22
+ total: x.total + y.total,
23
+ input: {
24
+ total: x.input.total + y.input.total,
25
+ cached: x.input.cached + y.input.cached,
26
+ },
27
+ output: {
28
+ total: x.output.total + y.output.total,
29
+ reasoning: x.output.reasoning + y.output.reasoning,
30
+ accepted_prediction:
31
+ x.output.accepted_prediction + y.output.accepted_prediction,
32
+ rejected_prediction:
33
+ x.output.rejected_prediction + y.output.rejected_prediction,
34
+ },
35
+ });
36
+
37
+ export const increment = (
38
+ x: IAutoBeTokenUsageJson.IComponent,
39
+ y: IAutoBeTokenUsageJson.IComponent,
40
+ ): void => {
41
+ x.total += y.total;
42
+ x.input.total += y.input.total;
43
+ x.input.cached += y.input.cached;
44
+ x.output.total += y.output.total;
45
+ x.output.reasoning += y.output.reasoning;
46
+ x.output.accepted_prediction += y.output.accepted_prediction;
47
+ x.output.rejected_prediction += y.output.rejected_prediction;
48
+ };
49
+ }
@@ -1,3 +1,3 @@
1
- export * from "./AutoBeFunctionCallingMetricFactory";
2
- export * from "./AutoBeProcessAggregateFactory";
3
- export * from "./TokenUsageComputer";
1
+ export * from "./AutoBeFunctionCallingMetricFactory";
2
+ export * from "./AutoBeProcessAggregateFactory";
3
+ export * from "./TokenUsageComputer";
package/src/index.ts CHANGED
@@ -1,10 +1,10 @@
1
- export * from "./aggregate";
2
-
3
- export * from "./prisma";
4
- export * from "./interface";
5
- export * from "./test";
6
-
7
- export * from "./ArrayUtil";
8
- export * from "./AutoBeEscaper";
9
- export * from "./MapUtil";
10
- export * from "./StringUtil";
1
+ export * from "./aggregate";
2
+
3
+ export * from "./prisma";
4
+ export * from "./interface";
5
+ export * from "./test";
6
+
7
+ export * from "./ArrayUtil";
8
+ export * from "./AutoBeEscaper";
9
+ export * from "./MapUtil";
10
+ export * from "./StringUtil";
@@ -1,27 +1,27 @@
1
- import { AutoBeOpenApi } from "@autobe/interface";
2
- import { hash } from "tstl";
3
-
4
- export namespace AutoBeOpenApiEndpointComparator {
5
- export function compare(
6
- x: AutoBeOpenApi.IEndpoint,
7
- y: AutoBeOpenApi.IEndpoint,
8
- ): number {
9
- if (x.path !== y.path) return x.path.localeCompare(y.path);
10
- return x.method.localeCompare(y.method);
11
- }
12
-
13
- export const equals = (
14
- x: AutoBeOpenApi.IEndpoint,
15
- y: AutoBeOpenApi.IEndpoint,
16
- ): boolean => x.method === y.method && x.path === y.path;
17
-
18
- export const hashCode = (endpoint: AutoBeOpenApi.IEndpoint): number =>
19
- hash(endpoint.path, endpoint.method);
20
-
21
- export const clone = (
22
- endpoint: AutoBeOpenApi.IEndpoint,
23
- ): AutoBeOpenApi.IEndpoint => ({
24
- path: endpoint.path,
25
- method: endpoint.method,
26
- });
27
- }
1
+ import { AutoBeOpenApi } from "@autobe/interface";
2
+ import { hash } from "tstl";
3
+
4
+ export namespace AutoBeOpenApiEndpointComparator {
5
+ export function compare(
6
+ x: AutoBeOpenApi.IEndpoint,
7
+ y: AutoBeOpenApi.IEndpoint,
8
+ ): number {
9
+ if (x.path !== y.path) return x.path.localeCompare(y.path);
10
+ return x.method.localeCompare(y.method);
11
+ }
12
+
13
+ export const equals = (
14
+ x: AutoBeOpenApi.IEndpoint,
15
+ y: AutoBeOpenApi.IEndpoint,
16
+ ): boolean => x.method === y.method && x.path === y.path;
17
+
18
+ export const hashCode = (endpoint: AutoBeOpenApi.IEndpoint): number =>
19
+ hash(endpoint.path, endpoint.method);
20
+
21
+ export const clone = (
22
+ endpoint: AutoBeOpenApi.IEndpoint,
23
+ ): AutoBeOpenApi.IEndpoint => ({
24
+ path: endpoint.path,
25
+ method: endpoint.method,
26
+ });
27
+ }