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.
Files changed (109) hide show
  1. package/dist/cjs/common/logger.js +28 -24
  2. package/dist/cjs/common/logger.js.map +1 -1
  3. package/dist/cjs/common/tracer.js +80 -130
  4. package/dist/cjs/common/tracer.js.map +1 -1
  5. package/dist/cjs/constants.js +2 -1
  6. package/dist/cjs/constants.js.map +1 -1
  7. package/dist/cjs/data/datasets/eval-dataset-client.js +45 -0
  8. package/dist/cjs/data/datasets/eval-dataset-client.js.map +1 -1
  9. package/dist/cjs/e2etests/eval-operations.test.js +3 -3
  10. package/dist/cjs/exporters/otel-exporter.js +352 -0
  11. package/dist/cjs/exporters/otel-exporter.js.map +1 -0
  12. package/dist/cjs/judges/index.js +217 -0
  13. package/dist/cjs/judges/index.js.map +1 -0
  14. package/dist/cjs/run-evaluation.js +13 -13
  15. package/dist/cjs/run-evaluation.js.map +1 -1
  16. package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js +610 -0
  17. package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js.map +1 -0
  18. package/dist/cjs/scorers/metrics/answer-correctness/index.js +19 -0
  19. package/dist/cjs/scorers/metrics/answer-correctness/index.js.map +1 -0
  20. package/dist/cjs/scorers/metrics/answer-correctness/prompts.js +175 -0
  21. package/dist/cjs/scorers/metrics/answer-correctness/prompts.js.map +1 -0
  22. package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js +525 -0
  23. package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js.map +1 -0
  24. package/dist/cjs/scorers/metrics/answer-relevancy/index.js +19 -0
  25. package/dist/cjs/scorers/metrics/answer-relevancy/index.js.map +1 -0
  26. package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js +179 -0
  27. package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js.map +1 -0
  28. package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js +524 -0
  29. package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js.map +1 -0
  30. package/dist/cjs/scorers/metrics/faithfulness/index.js +19 -0
  31. package/dist/cjs/scorers/metrics/faithfulness/index.js.map +1 -0
  32. package/dist/cjs/scorers/metrics/faithfulness/prompts.js +232 -0
  33. package/dist/cjs/scorers/metrics/faithfulness/prompts.js.map +1 -0
  34. package/dist/cjs/scorers/metrics/hallucination/hallucination.js +390 -0
  35. package/dist/cjs/scorers/metrics/hallucination/hallucination.js.map +1 -0
  36. package/dist/cjs/scorers/metrics/hallucination/index.js +11 -0
  37. package/dist/cjs/scorers/metrics/hallucination/index.js.map +1 -0
  38. package/dist/cjs/scorers/metrics/hallucination/prompts.js +106 -0
  39. package/dist/cjs/scorers/metrics/hallucination/prompts.js.map +1 -0
  40. package/dist/cjs/scorers/metrics/instruction-adherence/index.js +19 -0
  41. package/dist/cjs/scorers/metrics/instruction-adherence/index.js.map +1 -0
  42. package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js +382 -0
  43. package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js.map +1 -0
  44. package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js +124 -0
  45. package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js.map +1 -0
  46. package/dist/esm/common/logger.js +16 -11
  47. package/dist/esm/common/logger.js.map +1 -1
  48. package/dist/esm/common/tracer.js +78 -128
  49. package/dist/esm/common/tracer.js.map +1 -1
  50. package/dist/esm/constants.js +1 -0
  51. package/dist/esm/constants.js.map +1 -1
  52. package/dist/esm/data/datasets/eval-dataset-client.js +46 -1
  53. package/dist/esm/data/datasets/eval-dataset-client.js.map +1 -1
  54. package/dist/esm/e2etests/eval-operations.test.js +3 -3
  55. package/dist/esm/exporters/otel-exporter.js +348 -0
  56. package/dist/esm/exporters/otel-exporter.js.map +1 -0
  57. package/dist/esm/judges/index.js +185 -0
  58. package/dist/esm/judges/index.js.map +1 -0
  59. package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js +601 -0
  60. package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js.map +1 -0
  61. package/dist/esm/scorers/metrics/answer-correctness/index.js +3 -0
  62. package/dist/esm/scorers/metrics/answer-correctness/index.js.map +1 -0
  63. package/dist/esm/scorers/metrics/answer-correctness/prompts.js +171 -0
  64. package/dist/esm/scorers/metrics/answer-correctness/prompts.js.map +1 -0
  65. package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js +521 -0
  66. package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js.map +1 -0
  67. package/dist/esm/scorers/metrics/answer-relevancy/index.js +3 -0
  68. package/dist/esm/scorers/metrics/answer-relevancy/index.js.map +1 -0
  69. package/dist/esm/scorers/metrics/answer-relevancy/prompts.js +175 -0
  70. package/dist/esm/scorers/metrics/answer-relevancy/prompts.js.map +1 -0
  71. package/dist/esm/scorers/metrics/faithfulness/faithfulness.js +520 -0
  72. package/dist/esm/scorers/metrics/faithfulness/faithfulness.js.map +1 -0
  73. package/dist/esm/scorers/metrics/faithfulness/index.js +3 -0
  74. package/dist/esm/scorers/metrics/faithfulness/index.js.map +1 -0
  75. package/dist/esm/scorers/metrics/faithfulness/prompts.js +228 -0
  76. package/dist/esm/scorers/metrics/faithfulness/prompts.js.map +1 -0
  77. package/dist/esm/scorers/metrics/hallucination/hallucination.js +386 -0
  78. package/dist/esm/scorers/metrics/hallucination/hallucination.js.map +1 -0
  79. package/dist/esm/scorers/metrics/hallucination/index.js +3 -0
  80. package/dist/esm/scorers/metrics/hallucination/index.js.map +1 -0
  81. package/dist/esm/scorers/metrics/hallucination/prompts.js +102 -0
  82. package/dist/esm/scorers/metrics/hallucination/prompts.js.map +1 -0
  83. package/dist/esm/scorers/metrics/instruction-adherence/index.js +3 -0
  84. package/dist/esm/scorers/metrics/instruction-adherence/index.js.map +1 -0
  85. package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js +378 -0
  86. package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js.map +1 -0
  87. package/dist/esm/scorers/metrics/instruction-adherence/prompts.js +120 -0
  88. package/dist/esm/scorers/metrics/instruction-adherence/prompts.js.map +1 -0
  89. package/dist/types/common/logger.d.ts +1 -1
  90. package/dist/types/constants.d.ts +1 -0
  91. package/dist/types/data/datasets/eval-dataset-client.d.ts +5 -0
  92. package/dist/types/exporters/otel-exporter.d.ts +16 -0
  93. package/dist/types/judges/index.d.ts +50 -0
  94. package/dist/types/scorers/metrics/answer-correctness/answer-correctness.d.ts +99 -0
  95. package/dist/types/scorers/metrics/answer-correctness/index.d.ts +2 -0
  96. package/dist/types/scorers/metrics/answer-correctness/prompts.d.ts +71 -0
  97. package/dist/types/scorers/metrics/answer-relevancy/answer-relevancy.d.ts +78 -0
  98. package/dist/types/scorers/metrics/answer-relevancy/index.d.ts +2 -0
  99. package/dist/types/scorers/metrics/answer-relevancy/prompts.d.ts +71 -0
  100. package/dist/types/scorers/metrics/faithfulness/faithfulness.d.ts +77 -0
  101. package/dist/types/scorers/metrics/faithfulness/index.d.ts +2 -0
  102. package/dist/types/scorers/metrics/faithfulness/prompts.d.ts +94 -0
  103. package/dist/types/scorers/metrics/hallucination/hallucination.d.ts +67 -0
  104. package/dist/types/scorers/metrics/hallucination/index.d.ts +3 -0
  105. package/dist/types/scorers/metrics/hallucination/prompts.d.ts +63 -0
  106. package/dist/types/scorers/metrics/instruction-adherence/index.d.ts +2 -0
  107. package/dist/types/scorers/metrics/instruction-adherence/instruction-adherence.d.ts +67 -0
  108. package/dist/types/scorers/metrics/instruction-adherence/prompts.d.ts +78 -0
  109. 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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"}