@arizeai/phoenix-evals 0.5.0 → 0.6.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/README.md +42 -0
- package/dist/esm/core/EvaluatorBase.d.ts +19 -0
- package/dist/esm/core/EvaluatorBase.d.ts.map +1 -0
- package/dist/esm/core/EvaluatorBase.js +18 -0
- package/dist/esm/core/EvaluatorBase.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/llm/ClassificationEvaluator.d.ts +20 -3
- package/dist/esm/llm/ClassificationEvaluator.d.ts.map +1 -1
- package/dist/esm/llm/ClassificationEvaluator.js +29 -2
- package/dist/esm/llm/ClassificationEvaluator.js.map +1 -1
- package/dist/esm/llm/LLMEvaluator.d.ts +4 -7
- package/dist/esm/llm/LLMEvaluator.d.ts.map +1 -1
- package/dist/esm/llm/LLMEvaluator.js +4 -7
- package/dist/esm/llm/LLMEvaluator.js.map +1 -1
- package/dist/esm/llm/createClassificationEvaluator.d.ts +1 -1
- package/dist/esm/llm/createClassificationEvaluator.d.ts.map +1 -1
- package/dist/esm/llm/createClassificationEvaluator.js.map +1 -1
- package/dist/esm/llm/createDocumentRelevancyEvaluator.d.ts +8 -7
- package/dist/esm/llm/createDocumentRelevancyEvaluator.d.ts.map +1 -1
- package/dist/esm/llm/createDocumentRelevancyEvaluator.js +1 -2
- package/dist/esm/llm/createDocumentRelevancyEvaluator.js.map +1 -1
- package/dist/esm/llm/createHallucinationEvaluator.d.ts +6 -6
- package/dist/esm/llm/createHallucinationEvaluator.d.ts.map +1 -1
- package/dist/esm/llm/createHallucinationEvaluator.js +1 -2
- package/dist/esm/llm/createHallucinationEvaluator.js.map +1 -1
- package/dist/esm/template/applyTemplate.d.ts +3 -3
- package/dist/esm/template/applyTemplate.d.ts.map +1 -1
- package/dist/esm/template/applyTemplate.js +15 -1
- package/dist/esm/template/applyTemplate.js.map +1 -1
- package/dist/esm/template/createTemplateVariablesProxy.d.ts +1 -1
- package/dist/esm/template/createTemplateVariablesProxy.d.ts.map +1 -1
- package/dist/esm/template/createTemplateVariablesProxy.js.map +1 -1
- package/dist/esm/template/getTemplateVariables.d.ts +2 -2
- package/dist/esm/template/getTemplateVariables.d.ts.map +1 -1
- package/dist/esm/template/getTemplateVariables.js +16 -0
- package/dist/esm/template/getTemplateVariables.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types/data.d.ts +194 -0
- package/dist/esm/types/data.d.ts.map +1 -0
- package/dist/esm/types/data.js +2 -0
- package/dist/esm/types/data.js.map +1 -0
- package/dist/esm/types/evals.d.ts +19 -5
- package/dist/esm/types/evals.d.ts.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.d.ts.map +1 -1
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/otel.d.ts +14 -13
- package/dist/esm/types/otel.d.ts.map +1 -1
- package/dist/esm/types/templating.d.ts +8 -6
- package/dist/esm/types/templating.d.ts.map +1 -1
- package/dist/esm/utils/bindEvaluator.d.ts +219 -0
- package/dist/esm/utils/bindEvaluator.d.ts.map +1 -0
- package/dist/esm/utils/bindEvaluator.js +163 -0
- package/dist/esm/utils/bindEvaluator.js.map +1 -0
- package/dist/esm/utils/index.d.ts +2 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +2 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/objectMappingUtils.d.ts +166 -0
- package/dist/esm/utils/objectMappingUtils.d.ts.map +1 -0
- package/dist/esm/utils/objectMappingUtils.js +191 -0
- package/dist/esm/utils/objectMappingUtils.js.map +1 -0
- package/dist/src/core/EvaluatorBase.d.ts +19 -0
- package/dist/src/core/EvaluatorBase.d.ts.map +1 -0
- package/dist/src/core/EvaluatorBase.js +17 -0
- package/dist/src/core/EvaluatorBase.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/llm/ClassificationEvaluator.d.ts +20 -3
- package/dist/src/llm/ClassificationEvaluator.d.ts.map +1 -1
- package/dist/src/llm/ClassificationEvaluator.js +13 -2
- package/dist/src/llm/ClassificationEvaluator.js.map +1 -1
- package/dist/src/llm/LLMEvaluator.d.ts +4 -7
- package/dist/src/llm/LLMEvaluator.d.ts.map +1 -1
- package/dist/src/llm/LLMEvaluator.js +16 -5
- package/dist/src/llm/LLMEvaluator.js.map +1 -1
- package/dist/src/llm/createClassificationEvaluator.d.ts +1 -1
- package/dist/src/llm/createClassificationEvaluator.d.ts.map +1 -1
- package/dist/src/llm/createClassificationEvaluator.js.map +1 -1
- package/dist/src/llm/createDocumentRelevancyEvaluator.d.ts +8 -7
- package/dist/src/llm/createDocumentRelevancyEvaluator.d.ts.map +1 -1
- package/dist/src/llm/createDocumentRelevancyEvaluator.js +2 -2
- package/dist/src/llm/createDocumentRelevancyEvaluator.js.map +1 -1
- package/dist/src/llm/createHallucinationEvaluator.d.ts +6 -6
- package/dist/src/llm/createHallucinationEvaluator.d.ts.map +1 -1
- package/dist/src/llm/createHallucinationEvaluator.js +2 -2
- package/dist/src/llm/createHallucinationEvaluator.js.map +1 -1
- package/dist/src/template/applyTemplate.d.ts +3 -3
- package/dist/src/template/applyTemplate.d.ts.map +1 -1
- package/dist/src/template/applyTemplate.js +12 -1
- package/dist/src/template/applyTemplate.js.map +1 -1
- package/dist/src/template/createTemplateVariablesProxy.d.ts +1 -1
- package/dist/src/template/createTemplateVariablesProxy.d.ts.map +1 -1
- package/dist/src/template/createTemplateVariablesProxy.js.map +1 -1
- package/dist/src/template/getTemplateVariables.d.ts +2 -2
- package/dist/src/template/getTemplateVariables.d.ts.map +1 -1
- package/dist/src/template/getTemplateVariables.js +16 -0
- package/dist/src/template/getTemplateVariables.js.map +1 -1
- package/dist/src/types/data.d.ts +194 -0
- package/dist/src/types/data.d.ts.map +1 -0
- package/dist/src/types/data.js +3 -0
- package/dist/src/types/data.js.map +1 -0
- package/dist/src/types/evals.d.ts +19 -5
- package/dist/src/types/evals.d.ts.map +1 -1
- package/dist/src/types/index.d.ts +1 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +1 -0
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/otel.d.ts +14 -13
- package/dist/src/types/otel.d.ts.map +1 -1
- package/dist/src/types/templating.d.ts +8 -6
- package/dist/src/types/templating.d.ts.map +1 -1
- package/dist/src/utils/bindEvaluator.d.ts +219 -0
- package/dist/src/utils/bindEvaluator.d.ts.map +1 -0
- package/dist/src/utils/bindEvaluator.js +166 -0
- package/dist/src/utils/bindEvaluator.js.map +1 -0
- package/dist/src/utils/index.d.ts +2 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +18 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/objectMappingUtils.d.ts +166 -0
- package/dist/src/utils/objectMappingUtils.d.ts.map +1 -0
- package/dist/src/utils/objectMappingUtils.js +191 -0
- package/dist/src/utils/objectMappingUtils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/src/core/EvaluatorBase.ts +43 -0
- package/src/index.ts +1 -0
- package/src/llm/ClassificationEvaluator.ts +41 -5
- package/src/llm/LLMEvaluator.ts +7 -16
- package/src/llm/createClassificationEvaluator.ts +1 -1
- package/src/llm/createDocumentRelevancyEvaluator.ts +17 -12
- package/src/llm/createHallucinationEvaluator.ts +12 -10
- package/src/template/applyTemplate.ts +22 -9
- package/src/template/createTemplateVariablesProxy.ts +3 -3
- package/src/template/getTemplateVariables.ts +18 -2
- package/src/types/data.ts +200 -0
- package/src/types/evals.ts +27 -7
- package/src/types/index.ts +1 -0
- package/src/types/otel.ts +15 -13
- package/src/types/templating.ts +9 -6
- package/src/utils/bindEvaluator.ts +229 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/objectMappingUtils.ts +202 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { ObjectMapping } from "../types/data";
|
|
2
|
+
/**
|
|
3
|
+
* Remaps an object by applying field mappings while preserving original data.
|
|
4
|
+
*
|
|
5
|
+
* This function takes your original data object and a mapping configuration,
|
|
6
|
+
* then returns a new object that contains:
|
|
7
|
+
* - All original fields from the input data
|
|
8
|
+
* - Additional/overridden fields based on the mapping
|
|
9
|
+
*
|
|
10
|
+
* The mapping allows you to extract values using:
|
|
11
|
+
* - Simple property names: `"fieldName"`
|
|
12
|
+
* - Dot notation: `"user.profile.name"`
|
|
13
|
+
* - Array access: `"items[0].id"`
|
|
14
|
+
* - JSONPath expressions: `"$.items[*].id"`
|
|
15
|
+
* - Function extractors: `(data) => data.customField`
|
|
16
|
+
*
|
|
17
|
+
* @param data - The input data object to remap
|
|
18
|
+
* @param mapping - The mapping configuration defining how to extract/transform values
|
|
19
|
+
* @returns A new object with original fields plus mapped fields
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* **Basic remapping:**
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const data = {
|
|
25
|
+
* name: "John",
|
|
26
|
+
* age: 30,
|
|
27
|
+
* email: "john@example.com",
|
|
28
|
+
* };
|
|
29
|
+
*
|
|
30
|
+
* const mapping: ObjectMapping<typeof data> = {
|
|
31
|
+
* userName: "name",
|
|
32
|
+
* userAge: "age",
|
|
33
|
+
* };
|
|
34
|
+
*
|
|
35
|
+
* const result = remapObject(data, mapping);
|
|
36
|
+
* // Result: {
|
|
37
|
+
* // name: "John",
|
|
38
|
+
* // age: 30,
|
|
39
|
+
* // email: "john@example.com",
|
|
40
|
+
* // userName: "John", // Added from mapping
|
|
41
|
+
* // userAge: 30, // Added from mapping
|
|
42
|
+
* // }
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* **Nested property extraction:**
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const data = {
|
|
49
|
+
* user: {
|
|
50
|
+
* profile: {
|
|
51
|
+
* firstName: "John",
|
|
52
|
+
* lastName: "Doe",
|
|
53
|
+
* },
|
|
54
|
+
* email: "john@example.com",
|
|
55
|
+
* },
|
|
56
|
+
* };
|
|
57
|
+
*
|
|
58
|
+
* const mapping: ObjectMapping<typeof data> = {
|
|
59
|
+
* firstName: "user.profile.firstName",
|
|
60
|
+
* lastName: "user.profile.lastName",
|
|
61
|
+
* email: "user.email",
|
|
62
|
+
* };
|
|
63
|
+
*
|
|
64
|
+
* const result = remapObject(data, mapping);
|
|
65
|
+
* // Result includes original data plus:
|
|
66
|
+
* // {
|
|
67
|
+
* // firstName: "John",
|
|
68
|
+
* // lastName: "Doe",
|
|
69
|
+
* // email: "john@example.com",
|
|
70
|
+
* // }
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* **Array element access:**
|
|
75
|
+
* ```typescript
|
|
76
|
+
* const data = {
|
|
77
|
+
* items: [
|
|
78
|
+
* { id: 1, name: "Apple" },
|
|
79
|
+
* { id: 2, name: "Banana" },
|
|
80
|
+
* ],
|
|
81
|
+
* };
|
|
82
|
+
*
|
|
83
|
+
* const mapping: ObjectMapping<typeof data> = {
|
|
84
|
+
* firstItemId: "items[0].id",
|
|
85
|
+
* firstItemName: "items[0].name",
|
|
86
|
+
* };
|
|
87
|
+
*
|
|
88
|
+
* const result = remapObject(data, mapping);
|
|
89
|
+
* // Result includes:
|
|
90
|
+
* // {
|
|
91
|
+
* // firstItemId: 1,
|
|
92
|
+
* // firstItemName: "Apple",
|
|
93
|
+
* // }
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* **Function-based transformation:**
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const data = {
|
|
100
|
+
* firstName: "John",
|
|
101
|
+
* lastName: "Doe",
|
|
102
|
+
* scores: [85, 92, 78],
|
|
103
|
+
* };
|
|
104
|
+
*
|
|
105
|
+
* const mapping: ObjectMapping<typeof data> = {
|
|
106
|
+
* fullName: (data) => `${data.firstName} ${data.lastName}`,
|
|
107
|
+
* averageScore: (data) =>
|
|
108
|
+
* data.scores.reduce((a, b) => a + b, 0) / data.scores.length,
|
|
109
|
+
* };
|
|
110
|
+
*
|
|
111
|
+
* const result = remapObject(data, mapping);
|
|
112
|
+
* // Result includes:
|
|
113
|
+
* // {
|
|
114
|
+
* // fullName: "John Doe",
|
|
115
|
+
* // averageScore: 85,
|
|
116
|
+
* // }
|
|
117
|
+
* ```
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* **Field override:**
|
|
121
|
+
* ```typescript
|
|
122
|
+
* const data = {
|
|
123
|
+
* name: "John",
|
|
124
|
+
* status: "inactive",
|
|
125
|
+
* };
|
|
126
|
+
*
|
|
127
|
+
* const mapping: ObjectMapping<typeof data> = {
|
|
128
|
+
* // Override existing field
|
|
129
|
+
* status: (data) => data.name === "John" ? "active" : "inactive",
|
|
130
|
+
* // Add new field
|
|
131
|
+
* displayName: (data) => `User: ${data.name}`,
|
|
132
|
+
* };
|
|
133
|
+
*
|
|
134
|
+
* const result = remapObject(data, mapping);
|
|
135
|
+
* // Result:
|
|
136
|
+
* // {
|
|
137
|
+
* // name: "John",
|
|
138
|
+
* // status: "active", // Overridden
|
|
139
|
+
* // displayName: "User: John", // Added
|
|
140
|
+
* // }
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* **Real-world evaluator usage:**
|
|
145
|
+
* ```typescript
|
|
146
|
+
* // Your data structure
|
|
147
|
+
* const example = {
|
|
148
|
+
* question: "What is AI?",
|
|
149
|
+
* context: "AI is artificial intelligence...",
|
|
150
|
+
* answer: "AI stands for artificial intelligence",
|
|
151
|
+
* };
|
|
152
|
+
*
|
|
153
|
+
* // Evaluator expects: { input, reference, output }
|
|
154
|
+
* const mapping: ObjectMapping<typeof example> = {
|
|
155
|
+
* input: "question",
|
|
156
|
+
* reference: "context",
|
|
157
|
+
* output: "answer",
|
|
158
|
+
* };
|
|
159
|
+
*
|
|
160
|
+
* const remapped = remapObject(example, mapping);
|
|
161
|
+
* // Now remapped has: { question, context, answer, input, reference, output }
|
|
162
|
+
* // The evaluator can access input, reference, and output fields
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export declare function remapObject<DataType extends Record<string, unknown>>(data: DataType, mapping: ObjectMapping<DataType>): DataType;
|
|
166
|
+
//# sourceMappingURL=objectMappingUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectMappingUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/objectMappingUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,eAAe,CAAC;AAI3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,GAC/B,QAAQ,CAUV"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.remapObject = remapObject;
|
|
4
|
+
const jsonpath_plus_1 = require("jsonpath-plus");
|
|
5
|
+
/**
|
|
6
|
+
* Remaps an object by applying field mappings while preserving original data.
|
|
7
|
+
*
|
|
8
|
+
* This function takes your original data object and a mapping configuration,
|
|
9
|
+
* then returns a new object that contains:
|
|
10
|
+
* - All original fields from the input data
|
|
11
|
+
* - Additional/overridden fields based on the mapping
|
|
12
|
+
*
|
|
13
|
+
* The mapping allows you to extract values using:
|
|
14
|
+
* - Simple property names: `"fieldName"`
|
|
15
|
+
* - Dot notation: `"user.profile.name"`
|
|
16
|
+
* - Array access: `"items[0].id"`
|
|
17
|
+
* - JSONPath expressions: `"$.items[*].id"`
|
|
18
|
+
* - Function extractors: `(data) => data.customField`
|
|
19
|
+
*
|
|
20
|
+
* @param data - The input data object to remap
|
|
21
|
+
* @param mapping - The mapping configuration defining how to extract/transform values
|
|
22
|
+
* @returns A new object with original fields plus mapped fields
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* **Basic remapping:**
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const data = {
|
|
28
|
+
* name: "John",
|
|
29
|
+
* age: 30,
|
|
30
|
+
* email: "john@example.com",
|
|
31
|
+
* };
|
|
32
|
+
*
|
|
33
|
+
* const mapping: ObjectMapping<typeof data> = {
|
|
34
|
+
* userName: "name",
|
|
35
|
+
* userAge: "age",
|
|
36
|
+
* };
|
|
37
|
+
*
|
|
38
|
+
* const result = remapObject(data, mapping);
|
|
39
|
+
* // Result: {
|
|
40
|
+
* // name: "John",
|
|
41
|
+
* // age: 30,
|
|
42
|
+
* // email: "john@example.com",
|
|
43
|
+
* // userName: "John", // Added from mapping
|
|
44
|
+
* // userAge: 30, // Added from mapping
|
|
45
|
+
* // }
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* **Nested property extraction:**
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const data = {
|
|
52
|
+
* user: {
|
|
53
|
+
* profile: {
|
|
54
|
+
* firstName: "John",
|
|
55
|
+
* lastName: "Doe",
|
|
56
|
+
* },
|
|
57
|
+
* email: "john@example.com",
|
|
58
|
+
* },
|
|
59
|
+
* };
|
|
60
|
+
*
|
|
61
|
+
* const mapping: ObjectMapping<typeof data> = {
|
|
62
|
+
* firstName: "user.profile.firstName",
|
|
63
|
+
* lastName: "user.profile.lastName",
|
|
64
|
+
* email: "user.email",
|
|
65
|
+
* };
|
|
66
|
+
*
|
|
67
|
+
* const result = remapObject(data, mapping);
|
|
68
|
+
* // Result includes original data plus:
|
|
69
|
+
* // {
|
|
70
|
+
* // firstName: "John",
|
|
71
|
+
* // lastName: "Doe",
|
|
72
|
+
* // email: "john@example.com",
|
|
73
|
+
* // }
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* **Array element access:**
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const data = {
|
|
80
|
+
* items: [
|
|
81
|
+
* { id: 1, name: "Apple" },
|
|
82
|
+
* { id: 2, name: "Banana" },
|
|
83
|
+
* ],
|
|
84
|
+
* };
|
|
85
|
+
*
|
|
86
|
+
* const mapping: ObjectMapping<typeof data> = {
|
|
87
|
+
* firstItemId: "items[0].id",
|
|
88
|
+
* firstItemName: "items[0].name",
|
|
89
|
+
* };
|
|
90
|
+
*
|
|
91
|
+
* const result = remapObject(data, mapping);
|
|
92
|
+
* // Result includes:
|
|
93
|
+
* // {
|
|
94
|
+
* // firstItemId: 1,
|
|
95
|
+
* // firstItemName: "Apple",
|
|
96
|
+
* // }
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* **Function-based transformation:**
|
|
101
|
+
* ```typescript
|
|
102
|
+
* const data = {
|
|
103
|
+
* firstName: "John",
|
|
104
|
+
* lastName: "Doe",
|
|
105
|
+
* scores: [85, 92, 78],
|
|
106
|
+
* };
|
|
107
|
+
*
|
|
108
|
+
* const mapping: ObjectMapping<typeof data> = {
|
|
109
|
+
* fullName: (data) => `${data.firstName} ${data.lastName}`,
|
|
110
|
+
* averageScore: (data) =>
|
|
111
|
+
* data.scores.reduce((a, b) => a + b, 0) / data.scores.length,
|
|
112
|
+
* };
|
|
113
|
+
*
|
|
114
|
+
* const result = remapObject(data, mapping);
|
|
115
|
+
* // Result includes:
|
|
116
|
+
* // {
|
|
117
|
+
* // fullName: "John Doe",
|
|
118
|
+
* // averageScore: 85,
|
|
119
|
+
* // }
|
|
120
|
+
* ```
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* **Field override:**
|
|
124
|
+
* ```typescript
|
|
125
|
+
* const data = {
|
|
126
|
+
* name: "John",
|
|
127
|
+
* status: "inactive",
|
|
128
|
+
* };
|
|
129
|
+
*
|
|
130
|
+
* const mapping: ObjectMapping<typeof data> = {
|
|
131
|
+
* // Override existing field
|
|
132
|
+
* status: (data) => data.name === "John" ? "active" : "inactive",
|
|
133
|
+
* // Add new field
|
|
134
|
+
* displayName: (data) => `User: ${data.name}`,
|
|
135
|
+
* };
|
|
136
|
+
*
|
|
137
|
+
* const result = remapObject(data, mapping);
|
|
138
|
+
* // Result:
|
|
139
|
+
* // {
|
|
140
|
+
* // name: "John",
|
|
141
|
+
* // status: "active", // Overridden
|
|
142
|
+
* // displayName: "User: John", // Added
|
|
143
|
+
* // }
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* **Real-world evaluator usage:**
|
|
148
|
+
* ```typescript
|
|
149
|
+
* // Your data structure
|
|
150
|
+
* const example = {
|
|
151
|
+
* question: "What is AI?",
|
|
152
|
+
* context: "AI is artificial intelligence...",
|
|
153
|
+
* answer: "AI stands for artificial intelligence",
|
|
154
|
+
* };
|
|
155
|
+
*
|
|
156
|
+
* // Evaluator expects: { input, reference, output }
|
|
157
|
+
* const mapping: ObjectMapping<typeof example> = {
|
|
158
|
+
* input: "question",
|
|
159
|
+
* reference: "context",
|
|
160
|
+
* output: "answer",
|
|
161
|
+
* };
|
|
162
|
+
*
|
|
163
|
+
* const remapped = remapObject(example, mapping);
|
|
164
|
+
* // Now remapped has: { question, context, answer, input, reference, output }
|
|
165
|
+
* // The evaluator can access input, reference, and output fields
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
function remapObject(data, mapping) {
|
|
169
|
+
return Object.assign(Object.assign({}, data), Object.fromEntries(Object.entries(mapping).map(([key, value]) => [
|
|
170
|
+
key,
|
|
171
|
+
getMappedObjectValue(data, value),
|
|
172
|
+
])));
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Extracts a value from a data object using a value getter.
|
|
176
|
+
*
|
|
177
|
+
* This internal function handles the actual extraction logic, supporting both
|
|
178
|
+
* string-based paths (including JSONPath) and function-based extractors.
|
|
179
|
+
*
|
|
180
|
+
* @param data - The data object to extract from
|
|
181
|
+
* @param valueGetter - The value getter (string path or function)
|
|
182
|
+
* @returns The extracted value
|
|
183
|
+
*
|
|
184
|
+
* @internal
|
|
185
|
+
*/
|
|
186
|
+
function getMappedObjectValue(data, valueGetter) {
|
|
187
|
+
return typeof valueGetter === "function"
|
|
188
|
+
? valueGetter(data)
|
|
189
|
+
: (0, jsonpath_plus_1.JSONPath)({ path: valueGetter, json: data, wrap: false });
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=objectMappingUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectMappingUtils.js","sourceRoot":"","sources":["../../../src/utils/objectMappingUtils.ts"],"names":[],"mappings":";;AAuKA,kCAaC;AAlLD,iDAAyC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkKG;AACH,SAAgB,WAAW,CACzB,IAAc,EACd,OAAgC;IAEhC,uCACK,IAAI,GACJ,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC5C,GAAG;QACH,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;KAClC,CAAC,CACH,EACD;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,oBAAoB,CAC3B,IAAc,EACd,WAAkC;IAElC,OAAO,OAAO,WAAW,KAAK,UAAU;QACtC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;QACnB,CAAC,CAAC,IAAA,wBAAQ,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/D,CAAC"}
|