judgeval 0.2.4 → 0.2.5
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/cjs/common/logger.js +28 -24
- package/dist/cjs/common/logger.js.map +1 -1
- package/dist/cjs/common/tracer.js +80 -130
- package/dist/cjs/common/tracer.js.map +1 -1
- package/dist/cjs/constants.js +2 -1
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/data/datasets/eval-dataset-client.js +45 -0
- package/dist/cjs/data/datasets/eval-dataset-client.js.map +1 -1
- package/dist/cjs/e2etests/eval-operations.test.js +3 -3
- package/dist/cjs/exporters/otel-exporter.js +352 -0
- package/dist/cjs/exporters/otel-exporter.js.map +1 -0
- package/dist/cjs/judges/index.js +217 -0
- package/dist/cjs/judges/index.js.map +1 -0
- package/dist/cjs/run-evaluation.js +13 -13
- package/dist/cjs/run-evaluation.js.map +1 -1
- package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js +610 -0
- package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js.map +1 -0
- package/dist/cjs/scorers/metrics/answer-correctness/index.js +19 -0
- package/dist/cjs/scorers/metrics/answer-correctness/index.js.map +1 -0
- package/dist/cjs/scorers/metrics/answer-correctness/prompts.js +175 -0
- package/dist/cjs/scorers/metrics/answer-correctness/prompts.js.map +1 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js +525 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js.map +1 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/index.js +19 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/index.js.map +1 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js +179 -0
- package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js.map +1 -0
- package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js +524 -0
- package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js.map +1 -0
- package/dist/cjs/scorers/metrics/faithfulness/index.js +19 -0
- package/dist/cjs/scorers/metrics/faithfulness/index.js.map +1 -0
- package/dist/cjs/scorers/metrics/faithfulness/prompts.js +232 -0
- package/dist/cjs/scorers/metrics/faithfulness/prompts.js.map +1 -0
- package/dist/cjs/scorers/metrics/hallucination/hallucination.js +390 -0
- package/dist/cjs/scorers/metrics/hallucination/hallucination.js.map +1 -0
- package/dist/cjs/scorers/metrics/hallucination/index.js +11 -0
- package/dist/cjs/scorers/metrics/hallucination/index.js.map +1 -0
- package/dist/cjs/scorers/metrics/hallucination/prompts.js +106 -0
- package/dist/cjs/scorers/metrics/hallucination/prompts.js.map +1 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/index.js +19 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/index.js.map +1 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js +382 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js.map +1 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js +124 -0
- package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js.map +1 -0
- package/dist/esm/common/logger.js +16 -11
- package/dist/esm/common/logger.js.map +1 -1
- package/dist/esm/common/tracer.js +78 -128
- package/dist/esm/common/tracer.js.map +1 -1
- package/dist/esm/constants.js +1 -0
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/data/datasets/eval-dataset-client.js +46 -1
- package/dist/esm/data/datasets/eval-dataset-client.js.map +1 -1
- package/dist/esm/e2etests/eval-operations.test.js +3 -3
- package/dist/esm/exporters/otel-exporter.js +348 -0
- package/dist/esm/exporters/otel-exporter.js.map +1 -0
- package/dist/esm/judges/index.js +185 -0
- package/dist/esm/judges/index.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js +601 -0
- package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-correctness/index.js +3 -0
- package/dist/esm/scorers/metrics/answer-correctness/index.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-correctness/prompts.js +171 -0
- package/dist/esm/scorers/metrics/answer-correctness/prompts.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js +521 -0
- package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-relevancy/index.js +3 -0
- package/dist/esm/scorers/metrics/answer-relevancy/index.js.map +1 -0
- package/dist/esm/scorers/metrics/answer-relevancy/prompts.js +175 -0
- package/dist/esm/scorers/metrics/answer-relevancy/prompts.js.map +1 -0
- package/dist/esm/scorers/metrics/faithfulness/faithfulness.js +520 -0
- package/dist/esm/scorers/metrics/faithfulness/faithfulness.js.map +1 -0
- package/dist/esm/scorers/metrics/faithfulness/index.js +3 -0
- package/dist/esm/scorers/metrics/faithfulness/index.js.map +1 -0
- package/dist/esm/scorers/metrics/faithfulness/prompts.js +228 -0
- package/dist/esm/scorers/metrics/faithfulness/prompts.js.map +1 -0
- package/dist/esm/scorers/metrics/hallucination/hallucination.js +386 -0
- package/dist/esm/scorers/metrics/hallucination/hallucination.js.map +1 -0
- package/dist/esm/scorers/metrics/hallucination/index.js +3 -0
- package/dist/esm/scorers/metrics/hallucination/index.js.map +1 -0
- package/dist/esm/scorers/metrics/hallucination/prompts.js +102 -0
- package/dist/esm/scorers/metrics/hallucination/prompts.js.map +1 -0
- package/dist/esm/scorers/metrics/instruction-adherence/index.js +3 -0
- package/dist/esm/scorers/metrics/instruction-adherence/index.js.map +1 -0
- package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js +378 -0
- package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js.map +1 -0
- package/dist/esm/scorers/metrics/instruction-adherence/prompts.js +120 -0
- package/dist/esm/scorers/metrics/instruction-adherence/prompts.js.map +1 -0
- package/dist/types/common/logger.d.ts +1 -1
- package/dist/types/constants.d.ts +1 -0
- package/dist/types/data/datasets/eval-dataset-client.d.ts +5 -0
- package/dist/types/exporters/otel-exporter.d.ts +16 -0
- package/dist/types/judges/index.d.ts +50 -0
- package/dist/types/scorers/metrics/answer-correctness/answer-correctness.d.ts +99 -0
- package/dist/types/scorers/metrics/answer-correctness/index.d.ts +2 -0
- package/dist/types/scorers/metrics/answer-correctness/prompts.d.ts +71 -0
- package/dist/types/scorers/metrics/answer-relevancy/answer-relevancy.d.ts +78 -0
- package/dist/types/scorers/metrics/answer-relevancy/index.d.ts +2 -0
- package/dist/types/scorers/metrics/answer-relevancy/prompts.d.ts +71 -0
- package/dist/types/scorers/metrics/faithfulness/faithfulness.d.ts +77 -0
- package/dist/types/scorers/metrics/faithfulness/index.d.ts +2 -0
- package/dist/types/scorers/metrics/faithfulness/prompts.d.ts +94 -0
- package/dist/types/scorers/metrics/hallucination/hallucination.d.ts +67 -0
- package/dist/types/scorers/metrics/hallucination/index.d.ts +3 -0
- package/dist/types/scorers/metrics/hallucination/prompts.d.ts +63 -0
- package/dist/types/scorers/metrics/instruction-adherence/index.d.ts +2 -0
- package/dist/types/scorers/metrics/instruction-adherence/instruction-adherence.d.ts +67 -0
- package/dist/types/scorers/metrics/instruction-adherence/prompts.d.ts +78 -0
- package/package.json +32 -14
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import axios from 'axios';
|
|
11
|
+
import { warn, error } from '../common/logger.js';
|
|
12
|
+
import * as fs from 'fs';
|
|
13
|
+
import * as os from 'os';
|
|
14
|
+
import * as path from 'path';
|
|
15
|
+
import { execSync } from 'child_process';
|
|
16
|
+
/**
|
|
17
|
+
* Default judge implementation using OpenAI API
|
|
18
|
+
*/
|
|
19
|
+
export class DefaultJudge {
|
|
20
|
+
constructor(modelName = 'gpt-3.5-turbo', apiKey, user) {
|
|
21
|
+
this.modelName = modelName;
|
|
22
|
+
this.apiKey = apiKey || process.env.OPENAI_API_KEY;
|
|
23
|
+
this.user = user;
|
|
24
|
+
if (!this.apiKey) {
|
|
25
|
+
warn('No API key provided for DefaultJudge. Set OPENAI_API_KEY environment variable or pass apiKey to constructor.');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
generate(prompt) {
|
|
29
|
+
// For synchronous generation, we need to block until we get a response
|
|
30
|
+
// This is similar to how the Python SDK's fetch_litellm_api_response works
|
|
31
|
+
if (!this.apiKey) {
|
|
32
|
+
throw new Error('No API key provided for DefaultJudge');
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
// In Node.js, we can use a synchronous HTTP request via child_process
|
|
36
|
+
// Create a temporary file for the request and response
|
|
37
|
+
const tempDir = os.tmpdir();
|
|
38
|
+
const requestFile = path.join(tempDir, `openai-request-${Date.now()}.json`);
|
|
39
|
+
const responseFile = path.join(tempDir, `openai-response-${Date.now()}.json`);
|
|
40
|
+
// Write request data to file
|
|
41
|
+
fs.writeFileSync(requestFile, JSON.stringify(Object.assign({ model: this.modelName, messages: [{ role: 'user', content: prompt }], temperature: 0.0 }, (this.user ? { user: this.user } : {}))));
|
|
42
|
+
// Make the request using curl
|
|
43
|
+
const curlCommand = `curl -s -X POST https://api.openai.com/v1/chat/completions \
|
|
44
|
+
-H "Content-Type: application/json" \
|
|
45
|
+
-H "Authorization: Bearer ${this.apiKey}" \
|
|
46
|
+
-d @${requestFile} > ${responseFile}`;
|
|
47
|
+
execSync(curlCommand);
|
|
48
|
+
// Read the response
|
|
49
|
+
const responseData = JSON.parse(fs.readFileSync(responseFile, 'utf8'));
|
|
50
|
+
// Clean up temporary files
|
|
51
|
+
fs.unlinkSync(requestFile);
|
|
52
|
+
fs.unlinkSync(responseFile);
|
|
53
|
+
// Return the content
|
|
54
|
+
return responseData.choices[0].message.content;
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
error(`Error in synchronous generate: ${e.message}`);
|
|
58
|
+
throw new Error(`Failed to generate text: ${e.message}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
aGenerate(prompt) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
if (!this.apiKey) {
|
|
64
|
+
throw new Error('No API key provided for DefaultJudge');
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const response = yield axios.post('https://api.openai.com/v1/chat/completions', Object.assign({ model: this.modelName, messages: [{ role: 'user', content: prompt }], temperature: 0.0 }, (this.user ? { user: this.user } : {})), {
|
|
68
|
+
headers: {
|
|
69
|
+
'Content-Type': 'application/json',
|
|
70
|
+
'Authorization': `Bearer ${this.apiKey}`
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
return response.data.choices[0].message.content;
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
error(`Error generating text with OpenAI API: ${e.message}`);
|
|
77
|
+
throw new Error(`Failed to generate text: ${e.message}`);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
getModelName() {
|
|
82
|
+
return this.modelName;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Together AI judge implementation
|
|
87
|
+
*/
|
|
88
|
+
export class TogetherJudge {
|
|
89
|
+
constructor(modelName = 'meta-llama/Meta-Llama-3-8B-Instruct-Turbo', apiKey) {
|
|
90
|
+
this.modelName = modelName;
|
|
91
|
+
this.apiKey = apiKey || process.env.TOGETHER_API_KEY;
|
|
92
|
+
if (!this.apiKey) {
|
|
93
|
+
warn('No API key provided for TogetherJudge. Set TOGETHER_API_KEY environment variable or pass apiKey to constructor.');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
generate(prompt) {
|
|
97
|
+
// For synchronous generation, we need to block until we get a response
|
|
98
|
+
if (!this.apiKey) {
|
|
99
|
+
throw new Error('No API key provided for TogetherJudge');
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
// In Node.js, we can use a synchronous HTTP request via child_process
|
|
103
|
+
const tempDir = os.tmpdir();
|
|
104
|
+
const requestFile = path.join(tempDir, `together-request-${Date.now()}.json`);
|
|
105
|
+
const responseFile = path.join(tempDir, `together-response-${Date.now()}.json`);
|
|
106
|
+
// Write request data to file
|
|
107
|
+
fs.writeFileSync(requestFile, JSON.stringify({
|
|
108
|
+
model: this.modelName,
|
|
109
|
+
prompt: prompt,
|
|
110
|
+
temperature: 0.0,
|
|
111
|
+
max_tokens: 1024
|
|
112
|
+
}));
|
|
113
|
+
// Make the request using curl
|
|
114
|
+
const curlCommand = `curl -s -X POST https://api.together.xyz/v1/completions \
|
|
115
|
+
-H "Content-Type: application/json" \
|
|
116
|
+
-H "Authorization: Bearer ${this.apiKey}" \
|
|
117
|
+
-d @${requestFile} > ${responseFile}`;
|
|
118
|
+
execSync(curlCommand);
|
|
119
|
+
// Read the response
|
|
120
|
+
const responseData = JSON.parse(fs.readFileSync(responseFile, 'utf8'));
|
|
121
|
+
// Clean up temporary files
|
|
122
|
+
fs.unlinkSync(requestFile);
|
|
123
|
+
fs.unlinkSync(responseFile);
|
|
124
|
+
// Return the content
|
|
125
|
+
return responseData.choices[0].text;
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
error(`Error in synchronous generate: ${e.message}`);
|
|
129
|
+
throw new Error(`Failed to generate text: ${e.message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
aGenerate(prompt) {
|
|
133
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
if (!this.apiKey) {
|
|
135
|
+
throw new Error('No API key provided for TogetherJudge');
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
const response = yield axios.post('https://api.together.xyz/v1/completions', {
|
|
139
|
+
model: this.modelName,
|
|
140
|
+
prompt: prompt,
|
|
141
|
+
temperature: 0.0,
|
|
142
|
+
max_tokens: 1024
|
|
143
|
+
}, {
|
|
144
|
+
headers: {
|
|
145
|
+
'Content-Type': 'application/json',
|
|
146
|
+
'Authorization': `Bearer ${this.apiKey}`
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
return response.data.choices[0].text;
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
error(`Error generating text with Together API: ${e.message}`);
|
|
153
|
+
throw new Error(`Failed to generate text: ${e.message}`);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
getModelName() {
|
|
158
|
+
return this.modelName;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Create a judge instance
|
|
163
|
+
* @param model Model name or Judge instance
|
|
164
|
+
* @param user Optional user identifier
|
|
165
|
+
* @returns Judge instance and whether it's a native model
|
|
166
|
+
*/
|
|
167
|
+
export function createJudge(model, user) {
|
|
168
|
+
if (!model) {
|
|
169
|
+
return { judge: new DefaultJudge(undefined, undefined, user), usingNativeModel: true };
|
|
170
|
+
}
|
|
171
|
+
if (typeof model === 'string') {
|
|
172
|
+
// Check if it's a Together AI model
|
|
173
|
+
if (model.startsWith('together/') ||
|
|
174
|
+
model.startsWith('meta-llama/') ||
|
|
175
|
+
model.startsWith('mistralai/') ||
|
|
176
|
+
model.includes('llama')) {
|
|
177
|
+
return { judge: new TogetherJudge(model), usingNativeModel: true };
|
|
178
|
+
}
|
|
179
|
+
// Default to OpenAI
|
|
180
|
+
return { judge: new DefaultJudge(model, undefined, user), usingNativeModel: true };
|
|
181
|
+
}
|
|
182
|
+
// It's already a Judge instance
|
|
183
|
+
return { judge: model, usingNativeModel: false };
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/judges/index.ts"],"names":[],"mappings":"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"}
|