judgeval 0.2.9 → 0.3.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.
Files changed (408) hide show
  1. package/dist/constants.d.ts +2 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +2 -0
  4. package/dist/constants.js.map +1 -0
  5. package/dist/data/example-params.d.ts +13 -0
  6. package/dist/data/example-params.d.ts.map +1 -0
  7. package/dist/data/example-params.js +12 -0
  8. package/dist/data/example-params.js.map +1 -0
  9. package/dist/data/example.d.ts +4 -0
  10. package/dist/data/example.d.ts.map +1 -0
  11. package/dist/data/example.js +10 -0
  12. package/dist/data/example.js.map +1 -0
  13. package/dist/data/index.d.ts +3 -0
  14. package/dist/data/index.d.ts.map +1 -0
  15. package/dist/data/index.js +3 -0
  16. package/dist/data/index.js.map +1 -0
  17. package/dist/env.d.ts +6 -0
  18. package/dist/env.d.ts.map +1 -0
  19. package/dist/env.js +13 -0
  20. package/dist/env.js.map +1 -0
  21. package/dist/index.d.ts +9 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/index.mjs +2 -0
  26. package/dist/index.mjs.map +1 -0
  27. package/dist/index.umd.js +2 -0
  28. package/dist/index.umd.js.map +1 -0
  29. package/dist/internal/api/index.d.ts +23 -0
  30. package/dist/internal/api/index.d.ts.map +1 -0
  31. package/dist/internal/api/index.js +132 -0
  32. package/dist/internal/api/index.js.map +1 -0
  33. package/dist/internal/api/models/BaseScorer.d.ts +23 -0
  34. package/dist/internal/api/models/BaseScorer.d.ts.map +1 -0
  35. package/dist/internal/api/models/BaseScorer.js +6 -0
  36. package/dist/internal/api/models/BaseScorer.js.map +1 -0
  37. package/dist/internal/api/models/EvalResults.d.ts +12 -0
  38. package/dist/internal/api/models/EvalResults.d.ts.map +1 -0
  39. package/dist/internal/api/models/EvalResults.js +6 -0
  40. package/dist/internal/api/models/EvalResults.js.map +1 -0
  41. package/dist/internal/api/models/EvalResultsFetch.d.ts +9 -0
  42. package/dist/internal/api/models/EvalResultsFetch.d.ts.map +1 -0
  43. package/dist/internal/api/models/EvalResultsFetch.js +6 -0
  44. package/dist/internal/api/models/EvalResultsFetch.js.map +1 -0
  45. package/dist/internal/api/models/Example.d.ts +10 -0
  46. package/dist/internal/api/models/Example.d.ts.map +1 -0
  47. package/dist/internal/api/models/Example.js +6 -0
  48. package/dist/internal/api/models/Example.js.map +1 -0
  49. package/dist/internal/api/models/ExampleEvaluationRun.d.ts +20 -0
  50. package/dist/internal/api/models/ExampleEvaluationRun.d.ts.map +1 -0
  51. package/dist/internal/api/models/ExampleEvaluationRun.js +6 -0
  52. package/dist/internal/api/models/ExampleEvaluationRun.js.map +1 -0
  53. package/dist/internal/api/models/FetchPromptScorersRequest.d.ts +8 -0
  54. package/dist/internal/api/models/FetchPromptScorersRequest.d.ts.map +1 -0
  55. package/dist/internal/api/models/FetchPromptScorersRequest.js +6 -0
  56. package/dist/internal/api/models/FetchPromptScorersRequest.js.map +1 -0
  57. package/dist/internal/api/models/FetchPromptScorersResponse.d.ts +9 -0
  58. package/dist/internal/api/models/FetchPromptScorersResponse.d.ts.map +1 -0
  59. package/dist/internal/api/models/FetchPromptScorersResponse.js +6 -0
  60. package/dist/internal/api/models/FetchPromptScorersResponse.js.map +1 -0
  61. package/dist/internal/api/models/OtelTraceSpan.d.ts +33 -0
  62. package/dist/internal/api/models/OtelTraceSpan.d.ts.map +1 -0
  63. package/dist/internal/api/models/OtelTraceSpan.js +6 -0
  64. package/dist/internal/api/models/OtelTraceSpan.js.map +1 -0
  65. package/dist/internal/api/models/PromptScorer.d.ts +14 -0
  66. package/dist/internal/api/models/PromptScorer.d.ts.map +1 -0
  67. package/dist/internal/api/models/PromptScorer.js +6 -0
  68. package/dist/internal/api/models/PromptScorer.js.map +1 -0
  69. package/dist/internal/api/models/ResolveProjectNameRequest.d.ts +8 -0
  70. package/dist/internal/api/models/ResolveProjectNameRequest.d.ts.map +1 -0
  71. package/dist/internal/api/models/ResolveProjectNameRequest.js +6 -0
  72. package/dist/internal/api/models/ResolveProjectNameRequest.js.map +1 -0
  73. package/dist/internal/api/models/ResolveProjectNameResponse.d.ts +8 -0
  74. package/dist/internal/api/models/ResolveProjectNameResponse.d.ts.map +1 -0
  75. package/dist/internal/api/models/ResolveProjectNameResponse.js +6 -0
  76. package/dist/internal/api/models/ResolveProjectNameResponse.js.map +1 -0
  77. package/dist/internal/api/models/SavePromptScorerRequest.d.ts +12 -0
  78. package/dist/internal/api/models/SavePromptScorerRequest.d.ts.map +1 -0
  79. package/dist/internal/api/models/SavePromptScorerRequest.js +6 -0
  80. package/dist/internal/api/models/SavePromptScorerRequest.js.map +1 -0
  81. package/dist/internal/api/models/SavePromptScorerResponse.d.ts +9 -0
  82. package/dist/internal/api/models/SavePromptScorerResponse.d.ts.map +1 -0
  83. package/dist/internal/api/models/SavePromptScorerResponse.js +6 -0
  84. package/dist/internal/api/models/SavePromptScorerResponse.js.map +1 -0
  85. package/dist/internal/api/models/ScorerConfig.d.ts +13 -0
  86. package/dist/internal/api/models/ScorerConfig.d.ts.map +1 -0
  87. package/dist/internal/api/models/ScorerConfig.js +6 -0
  88. package/dist/internal/api/models/ScorerConfig.js.map +1 -0
  89. package/dist/internal/api/models/ScorerData.d.ts +17 -0
  90. package/dist/internal/api/models/ScorerData.d.ts.map +1 -0
  91. package/dist/internal/api/models/ScorerData.js +6 -0
  92. package/dist/internal/api/models/ScorerData.js.map +1 -0
  93. package/dist/internal/api/models/ScorerExistsRequest.d.ts +8 -0
  94. package/dist/internal/api/models/ScorerExistsRequest.d.ts.map +1 -0
  95. package/dist/internal/api/models/ScorerExistsRequest.js +6 -0
  96. package/dist/internal/api/models/ScorerExistsRequest.js.map +1 -0
  97. package/dist/internal/api/models/ScorerExistsResponse.d.ts +8 -0
  98. package/dist/internal/api/models/ScorerExistsResponse.d.ts.map +1 -0
  99. package/dist/internal/api/models/ScorerExistsResponse.js +6 -0
  100. package/dist/internal/api/models/ScorerExistsResponse.js.map +1 -0
  101. package/dist/internal/api/models/ScoringResult.d.ts +17 -0
  102. package/dist/internal/api/models/ScoringResult.d.ts.map +1 -0
  103. package/dist/internal/api/models/ScoringResult.js +6 -0
  104. package/dist/internal/api/models/ScoringResult.js.map +1 -0
  105. package/dist/internal/api/models/TraceEvaluationRun.d.ts +18 -0
  106. package/dist/internal/api/models/TraceEvaluationRun.d.ts.map +1 -0
  107. package/dist/internal/api/models/TraceEvaluationRun.js +6 -0
  108. package/dist/internal/api/models/TraceEvaluationRun.js.map +1 -0
  109. package/dist/internal/api/models.d.ts +24 -0
  110. package/dist/internal/api/models.d.ts.map +1 -0
  111. package/dist/internal/api/models.js +24 -0
  112. package/dist/internal/api/models.js.map +1 -0
  113. package/dist/scorers/api-scorer.d.ts +23 -0
  114. package/dist/scorers/api-scorer.d.ts.map +1 -0
  115. package/dist/scorers/api-scorer.js +36 -0
  116. package/dist/scorers/api-scorer.js.map +1 -0
  117. package/dist/scorers/api_scorers/answer-correctness-scorer.d.ts +11 -0
  118. package/dist/scorers/api_scorers/answer-correctness-scorer.d.ts.map +1 -0
  119. package/dist/scorers/api_scorers/answer-correctness-scorer.js +20 -0
  120. package/dist/scorers/api_scorers/answer-correctness-scorer.js.map +1 -0
  121. package/dist/scorers/api_scorers/answer-relevancy-scorer.d.ts +11 -0
  122. package/dist/scorers/api_scorers/answer-relevancy-scorer.d.ts.map +1 -0
  123. package/dist/scorers/api_scorers/answer-relevancy-scorer.js +19 -0
  124. package/dist/scorers/api_scorers/answer-relevancy-scorer.js.map +1 -0
  125. package/dist/scorers/api_scorers/faithfulness-scorer.d.ts +11 -0
  126. package/dist/scorers/api_scorers/faithfulness-scorer.d.ts.map +1 -0
  127. package/dist/scorers/api_scorers/faithfulness-scorer.js +20 -0
  128. package/dist/scorers/api_scorers/faithfulness-scorer.js.map +1 -0
  129. package/dist/scorers/api_scorers/index.d.ts +2 -0
  130. package/dist/scorers/api_scorers/index.d.ts.map +1 -0
  131. package/dist/scorers/api_scorers/index.js +2 -0
  132. package/dist/scorers/api_scorers/index.js.map +1 -0
  133. package/dist/scorers/api_scorers/instruction-adherence-scorer.d.ts +11 -0
  134. package/dist/scorers/api_scorers/instruction-adherence-scorer.d.ts.map +1 -0
  135. package/dist/scorers/api_scorers/instruction-adherence-scorer.js +20 -0
  136. package/dist/scorers/api_scorers/instruction-adherence-scorer.js.map +1 -0
  137. package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.d.ts +48 -0
  138. package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.d.ts.map +1 -0
  139. package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.js +133 -0
  140. package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.js.map +1 -0
  141. package/dist/scorers/api_scorers/prompt_scorer/index.d.ts +5 -0
  142. package/dist/scorers/api_scorers/prompt_scorer/index.d.ts.map +1 -0
  143. package/dist/scorers/api_scorers/prompt_scorer/index.js +5 -0
  144. package/dist/scorers/api_scorers/prompt_scorer/index.js.map +1 -0
  145. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.d.ts +14 -0
  146. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.d.ts.map +1 -0
  147. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.js +44 -0
  148. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.js.map +1 -0
  149. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.d.ts +7 -0
  150. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.d.ts.map +1 -0
  151. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.js +9 -0
  152. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.js.map +1 -0
  153. package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.d.ts +6 -0
  154. package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.d.ts.map +1 -0
  155. package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.js +8 -0
  156. package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.js.map +1 -0
  157. package/dist/scorers/base-scorer.d.ts +10 -0
  158. package/dist/scorers/base-scorer.d.ts.map +1 -0
  159. package/dist/scorers/base-scorer.js +41 -0
  160. package/dist/scorers/base-scorer.js.map +1 -0
  161. package/dist/scorers/index.d.ts +4 -0
  162. package/dist/scorers/index.d.ts.map +1 -0
  163. package/dist/scorers/index.js +4 -0
  164. package/dist/scorers/index.js.map +1 -0
  165. package/dist/tracer/OpenTelemetryKeys.d.ts +12 -0
  166. package/dist/tracer/OpenTelemetryKeys.d.ts.map +1 -0
  167. package/dist/tracer/OpenTelemetryKeys.js +12 -0
  168. package/dist/tracer/OpenTelemetryKeys.js.map +1 -0
  169. package/dist/tracer/Tracer.d.ts +47 -0
  170. package/dist/tracer/Tracer.d.ts.map +1 -0
  171. package/dist/tracer/Tracer.js +235 -0
  172. package/dist/tracer/Tracer.js.map +1 -0
  173. package/dist/tracer/TracerConfiguration.d.ts +71 -0
  174. package/dist/tracer/TracerConfiguration.d.ts.map +1 -0
  175. package/dist/tracer/TracerConfiguration.js +111 -0
  176. package/dist/tracer/TracerConfiguration.js.map +1 -0
  177. package/dist/tracer/exporters/JudgmentSpanExporter.d.ts +36 -0
  178. package/dist/tracer/exporters/JudgmentSpanExporter.d.ts.map +1 -0
  179. package/dist/tracer/exporters/JudgmentSpanExporter.js +72 -0
  180. package/dist/tracer/exporters/JudgmentSpanExporter.js.map +1 -0
  181. package/dist/tracer/exporters/NoOpSpanExporter.d.ts +12 -0
  182. package/dist/tracer/exporters/NoOpSpanExporter.d.ts.map +1 -0
  183. package/dist/tracer/exporters/NoOpSpanExporter.js +16 -0
  184. package/dist/tracer/exporters/NoOpSpanExporter.js.map +1 -0
  185. package/dist/tracer/exporters/index.d.ts +3 -0
  186. package/dist/tracer/exporters/index.d.ts.map +1 -0
  187. package/dist/tracer/exporters/index.js +3 -0
  188. package/dist/tracer/exporters/index.js.map +1 -0
  189. package/dist/tracer/index.d.ts +5 -0
  190. package/dist/tracer/index.d.ts.map +1 -0
  191. package/dist/tracer/index.js +5 -0
  192. package/dist/tracer/index.js.map +1 -0
  193. package/dist/umd.d.ts +2 -0
  194. package/dist/umd.d.ts.map +1 -0
  195. package/dist/umd.js +2 -0
  196. package/dist/umd.js.map +1 -0
  197. package/dist/utils/annotate.d.ts +2 -0
  198. package/dist/utils/annotate.d.ts.map +1 -0
  199. package/dist/utils/annotate.js +27 -0
  200. package/dist/utils/annotate.js.map +1 -0
  201. package/dist/utils/index.d.ts +5 -0
  202. package/dist/utils/index.d.ts.map +1 -0
  203. package/dist/utils/index.js +5 -0
  204. package/dist/utils/index.js.map +1 -0
  205. package/dist/utils/logger.d.ts +27 -0
  206. package/dist/utils/logger.d.ts.map +1 -0
  207. package/dist/utils/logger.js +70 -0
  208. package/dist/utils/logger.js.map +1 -0
  209. package/dist/utils/types.d.ts +4 -0
  210. package/dist/utils/types.d.ts.map +1 -0
  211. package/dist/utils/types.js +2 -0
  212. package/dist/utils/types.js.map +1 -0
  213. package/dist/utils/validation.d.ts +11 -0
  214. package/dist/utils/validation.d.ts.map +1 -0
  215. package/dist/utils/validation.js +16 -0
  216. package/dist/utils/validation.js.map +1 -0
  217. package/dist/version.d.ts +2 -0
  218. package/dist/version.d.ts.map +1 -0
  219. package/dist/version.js +2 -0
  220. package/dist/version.js.map +1 -0
  221. package/package.json +57 -108
  222. package/LICENSE.md +0 -202
  223. package/README.md +0 -372
  224. package/dist/cjs/clients.js +0 -78
  225. package/dist/cjs/clients.js.map +0 -1
  226. package/dist/cjs/common/integrations/langgraph.js +0 -471
  227. package/dist/cjs/common/integrations/langgraph.js.map +0 -1
  228. package/dist/cjs/common/logger-instance.js +0 -64
  229. package/dist/cjs/common/logger-instance.js.map +0 -1
  230. package/dist/cjs/common/logger.js +0 -225
  231. package/dist/cjs/common/logger.js.map +0 -1
  232. package/dist/cjs/common/token-costs.js +0 -95
  233. package/dist/cjs/common/token-costs.js.map +0 -1
  234. package/dist/cjs/common/tracer.js +0 -1099
  235. package/dist/cjs/common/tracer.js.map +0 -1
  236. package/dist/cjs/constants.js +0 -347
  237. package/dist/cjs/constants.js.map +0 -1
  238. package/dist/cjs/data/datasets/eval-dataset-client.js +0 -394
  239. package/dist/cjs/data/datasets/eval-dataset-client.js.map +0 -1
  240. package/dist/cjs/data/datasets/eval-dataset.js +0 -405
  241. package/dist/cjs/data/datasets/eval-dataset.js.map +0 -1
  242. package/dist/cjs/data/example.js +0 -159
  243. package/dist/cjs/data/example.js.map +0 -1
  244. package/dist/cjs/data/result.js +0 -83
  245. package/dist/cjs/data/result.js.map +0 -1
  246. package/dist/cjs/e2etests/eval-operations.test.js +0 -282
  247. package/dist/cjs/e2etests/eval-operations.test.js.map +0 -1
  248. package/dist/cjs/e2etests/judgee-traces.test.js +0 -278
  249. package/dist/cjs/e2etests/judgee-traces.test.js.map +0 -1
  250. package/dist/cjs/evaluation-run.js +0 -136
  251. package/dist/cjs/evaluation-run.js.map +0 -1
  252. package/dist/cjs/exporters/otel-exporter.js +0 -352
  253. package/dist/cjs/exporters/otel-exporter.js.map +0 -1
  254. package/dist/cjs/index.js +0 -78
  255. package/dist/cjs/index.js.map +0 -1
  256. package/dist/cjs/judges/index.js +0 -237
  257. package/dist/cjs/judges/index.js.map +0 -1
  258. package/dist/cjs/judgment-client.js +0 -798
  259. package/dist/cjs/judgment-client.js.map +0 -1
  260. package/dist/cjs/rules.js +0 -322
  261. package/dist/cjs/rules.js.map +0 -1
  262. package/dist/cjs/run-evaluation.js +0 -700
  263. package/dist/cjs/run-evaluation.js.map +0 -1
  264. package/dist/cjs/scorers/api-scorer.js +0 -304
  265. package/dist/cjs/scorers/api-scorer.js.map +0 -1
  266. package/dist/cjs/scorers/base-scorer.js +0 -293
  267. package/dist/cjs/scorers/base-scorer.js.map +0 -1
  268. package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js +0 -562
  269. package/dist/cjs/scorers/metrics/answer-correctness/answer-correctness.js.map +0 -1
  270. package/dist/cjs/scorers/metrics/answer-correctness/index.js +0 -19
  271. package/dist/cjs/scorers/metrics/answer-correctness/index.js.map +0 -1
  272. package/dist/cjs/scorers/metrics/answer-correctness/prompts.js +0 -175
  273. package/dist/cjs/scorers/metrics/answer-correctness/prompts.js.map +0 -1
  274. package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js +0 -514
  275. package/dist/cjs/scorers/metrics/answer-relevancy/answer-relevancy.js.map +0 -1
  276. package/dist/cjs/scorers/metrics/answer-relevancy/index.js +0 -19
  277. package/dist/cjs/scorers/metrics/answer-relevancy/index.js.map +0 -1
  278. package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js +0 -179
  279. package/dist/cjs/scorers/metrics/answer-relevancy/prompts.js.map +0 -1
  280. package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js +0 -512
  281. package/dist/cjs/scorers/metrics/faithfulness/faithfulness.js.map +0 -1
  282. package/dist/cjs/scorers/metrics/faithfulness/index.js +0 -19
  283. package/dist/cjs/scorers/metrics/faithfulness/index.js.map +0 -1
  284. package/dist/cjs/scorers/metrics/faithfulness/prompts.js +0 -232
  285. package/dist/cjs/scorers/metrics/faithfulness/prompts.js.map +0 -1
  286. package/dist/cjs/scorers/metrics/hallucination/hallucination.js +0 -386
  287. package/dist/cjs/scorers/metrics/hallucination/hallucination.js.map +0 -1
  288. package/dist/cjs/scorers/metrics/hallucination/index.js +0 -11
  289. package/dist/cjs/scorers/metrics/hallucination/index.js.map +0 -1
  290. package/dist/cjs/scorers/metrics/hallucination/prompts.js +0 -106
  291. package/dist/cjs/scorers/metrics/hallucination/prompts.js.map +0 -1
  292. package/dist/cjs/scorers/metrics/instruction-adherence/index.js +0 -19
  293. package/dist/cjs/scorers/metrics/instruction-adherence/index.js.map +0 -1
  294. package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js +0 -378
  295. package/dist/cjs/scorers/metrics/instruction-adherence/instruction-adherence.js.map +0 -1
  296. package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js +0 -124
  297. package/dist/cjs/scorers/metrics/instruction-adherence/prompts.js.map +0 -1
  298. package/dist/esm/clients.js +0 -47
  299. package/dist/esm/clients.js.map +0 -1
  300. package/dist/esm/common/integrations/langgraph.js +0 -444
  301. package/dist/esm/common/integrations/langgraph.js.map +0 -1
  302. package/dist/esm/common/logger-instance.js +0 -59
  303. package/dist/esm/common/logger-instance.js.map +0 -1
  304. package/dist/esm/common/logger.js +0 -208
  305. package/dist/esm/common/logger.js.map +0 -1
  306. package/dist/esm/common/token-costs.js +0 -91
  307. package/dist/esm/common/token-costs.js.map +0 -1
  308. package/dist/esm/common/tracer.js +0 -1093
  309. package/dist/esm/common/tracer.js.map +0 -1
  310. package/dist/esm/constants.js +0 -341
  311. package/dist/esm/constants.js.map +0 -1
  312. package/dist/esm/data/datasets/eval-dataset-client.js +0 -387
  313. package/dist/esm/data/datasets/eval-dataset-client.js.map +0 -1
  314. package/dist/esm/data/datasets/eval-dataset.js +0 -375
  315. package/dist/esm/data/datasets/eval-dataset.js.map +0 -1
  316. package/dist/esm/data/example.js +0 -154
  317. package/dist/esm/data/example.js.map +0 -1
  318. package/dist/esm/data/result.js +0 -78
  319. package/dist/esm/data/result.js.map +0 -1
  320. package/dist/esm/e2etests/eval-operations.test.js +0 -254
  321. package/dist/esm/e2etests/eval-operations.test.js.map +0 -1
  322. package/dist/esm/e2etests/judgee-traces.test.js +0 -253
  323. package/dist/esm/e2etests/judgee-traces.test.js.map +0 -1
  324. package/dist/esm/evaluation-run.js +0 -132
  325. package/dist/esm/evaluation-run.js.map +0 -1
  326. package/dist/esm/exporters/otel-exporter.js +0 -348
  327. package/dist/esm/exporters/otel-exporter.js.map +0 -1
  328. package/dist/esm/index.js +0 -20
  329. package/dist/esm/index.js.map +0 -1
  330. package/dist/esm/judges/index.js +0 -205
  331. package/dist/esm/judges/index.js.map +0 -1
  332. package/dist/esm/judgment-client.js +0 -768
  333. package/dist/esm/judgment-client.js.map +0 -1
  334. package/dist/esm/rules.js +0 -314
  335. package/dist/esm/rules.js.map +0 -1
  336. package/dist/esm/run-evaluation.js +0 -681
  337. package/dist/esm/run-evaluation.js.map +0 -1
  338. package/dist/esm/scorers/api-scorer.js +0 -286
  339. package/dist/esm/scorers/api-scorer.js.map +0 -1
  340. package/dist/esm/scorers/base-scorer.js +0 -287
  341. package/dist/esm/scorers/base-scorer.js.map +0 -1
  342. package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js +0 -558
  343. package/dist/esm/scorers/metrics/answer-correctness/answer-correctness.js.map +0 -1
  344. package/dist/esm/scorers/metrics/answer-correctness/index.js +0 -3
  345. package/dist/esm/scorers/metrics/answer-correctness/index.js.map +0 -1
  346. package/dist/esm/scorers/metrics/answer-correctness/prompts.js +0 -171
  347. package/dist/esm/scorers/metrics/answer-correctness/prompts.js.map +0 -1
  348. package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js +0 -510
  349. package/dist/esm/scorers/metrics/answer-relevancy/answer-relevancy.js.map +0 -1
  350. package/dist/esm/scorers/metrics/answer-relevancy/index.js +0 -3
  351. package/dist/esm/scorers/metrics/answer-relevancy/index.js.map +0 -1
  352. package/dist/esm/scorers/metrics/answer-relevancy/prompts.js +0 -175
  353. package/dist/esm/scorers/metrics/answer-relevancy/prompts.js.map +0 -1
  354. package/dist/esm/scorers/metrics/faithfulness/faithfulness.js +0 -508
  355. package/dist/esm/scorers/metrics/faithfulness/faithfulness.js.map +0 -1
  356. package/dist/esm/scorers/metrics/faithfulness/index.js +0 -3
  357. package/dist/esm/scorers/metrics/faithfulness/index.js.map +0 -1
  358. package/dist/esm/scorers/metrics/faithfulness/prompts.js +0 -228
  359. package/dist/esm/scorers/metrics/faithfulness/prompts.js.map +0 -1
  360. package/dist/esm/scorers/metrics/hallucination/hallucination.js +0 -382
  361. package/dist/esm/scorers/metrics/hallucination/hallucination.js.map +0 -1
  362. package/dist/esm/scorers/metrics/hallucination/index.js +0 -3
  363. package/dist/esm/scorers/metrics/hallucination/index.js.map +0 -1
  364. package/dist/esm/scorers/metrics/hallucination/prompts.js +0 -102
  365. package/dist/esm/scorers/metrics/hallucination/prompts.js.map +0 -1
  366. package/dist/esm/scorers/metrics/instruction-adherence/index.js +0 -3
  367. package/dist/esm/scorers/metrics/instruction-adherence/index.js.map +0 -1
  368. package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js +0 -374
  369. package/dist/esm/scorers/metrics/instruction-adherence/instruction-adherence.js.map +0 -1
  370. package/dist/esm/scorers/metrics/instruction-adherence/prompts.js +0 -120
  371. package/dist/esm/scorers/metrics/instruction-adherence/prompts.js.map +0 -1
  372. package/dist/types/clients.d.ts +0 -6
  373. package/dist/types/common/integrations/langgraph.d.ts +0 -39
  374. package/dist/types/common/logger-instance.d.ts +0 -3
  375. package/dist/types/common/logger.d.ts +0 -54
  376. package/dist/types/common/token-costs.d.ts +0 -36
  377. package/dist/types/common/tracer.d.ts +0 -249
  378. package/dist/types/constants.d.ts +0 -51
  379. package/dist/types/data/datasets/eval-dataset-client.d.ts +0 -44
  380. package/dist/types/data/datasets/eval-dataset.d.ts +0 -45
  381. package/dist/types/data/example.d.ts +0 -82
  382. package/dist/types/data/result.d.ts +0 -51
  383. package/dist/types/e2etests/eval-operations.test.d.ts +0 -5
  384. package/dist/types/e2etests/judgee-traces.test.d.ts +0 -5
  385. package/dist/types/evaluation-run.d.ts +0 -44
  386. package/dist/types/exporters/otel-exporter.d.ts +0 -16
  387. package/dist/types/index.d.ts +0 -11
  388. package/dist/types/judges/index.d.ts +0 -50
  389. package/dist/types/judgment-client.d.ts +0 -149
  390. package/dist/types/rules.d.ts +0 -120
  391. package/dist/types/run-evaluation.d.ts +0 -78
  392. package/dist/types/scorers/api-scorer.d.ts +0 -84
  393. package/dist/types/scorers/base-scorer.d.ts +0 -162
  394. package/dist/types/scorers/metrics/answer-correctness/answer-correctness.d.ts +0 -80
  395. package/dist/types/scorers/metrics/answer-correctness/index.d.ts +0 -2
  396. package/dist/types/scorers/metrics/answer-correctness/prompts.d.ts +0 -71
  397. package/dist/types/scorers/metrics/answer-relevancy/answer-relevancy.d.ts +0 -74
  398. package/dist/types/scorers/metrics/answer-relevancy/index.d.ts +0 -2
  399. package/dist/types/scorers/metrics/answer-relevancy/prompts.d.ts +0 -71
  400. package/dist/types/scorers/metrics/faithfulness/faithfulness.d.ts +0 -73
  401. package/dist/types/scorers/metrics/faithfulness/index.d.ts +0 -2
  402. package/dist/types/scorers/metrics/faithfulness/prompts.d.ts +0 -94
  403. package/dist/types/scorers/metrics/hallucination/hallucination.d.ts +0 -63
  404. package/dist/types/scorers/metrics/hallucination/index.d.ts +0 -3
  405. package/dist/types/scorers/metrics/hallucination/prompts.d.ts +0 -63
  406. package/dist/types/scorers/metrics/instruction-adherence/index.d.ts +0 -2
  407. package/dist/types/scorers/metrics/instruction-adherence/instruction-adherence.d.ts +0 -63
  408. package/dist/types/scorers/metrics/instruction-adherence/prompts.d.ts +0 -78
@@ -1,700 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.hasLoggedUrl = exports.JudgmentAPIError = void 0;
16
- exports.validateApiResponse = validateApiResponse;
17
- exports.sendToRabbitMQ = sendToRabbitMQ;
18
- exports.checkEvaluationStatus = checkEvaluationStatus;
19
- exports.pollEvaluationStatus = pollEvaluationStatus;
20
- exports.executeApiEval = executeApiEval;
21
- exports.checkEvalRunNameExists = checkEvalRunNameExists;
22
- exports.logEvaluationResults = logEvaluationResults;
23
- exports.mergeResults = mergeResults;
24
- exports.checkMissingScorerData = checkMissingScorerData;
25
- exports.checkExamples = checkExamples;
26
- exports.runEval = runEval;
27
- exports.assertTest = assertTest;
28
- const axios_1 = __importDefault(require("axios"));
29
- const result_js_1 = require("./data/result.js");
30
- const base_scorer_js_1 = require("./scorers/base-scorer.js");
31
- const constants_js_1 = require("./constants.js");
32
- const logger_js_1 = require("./common/logger.js");
33
- /**
34
- * Custom error for Judgment API errors
35
- */
36
- class JudgmentAPIError extends Error {
37
- constructor(message) {
38
- super(message);
39
- this.name = 'JudgmentAPIError';
40
- }
41
- }
42
- exports.JudgmentAPIError = JudgmentAPIError;
43
- /**
44
- * Validates an API response to ensure it has the expected format
45
- * Throws a JudgmentAPIError if the response is invalid
46
- */
47
- function validateApiResponse(response) {
48
- if (!response || typeof response !== 'object') {
49
- throw new JudgmentAPIError('Invalid API response format: response is not an object');
50
- }
51
- if (response.error) {
52
- throw new JudgmentAPIError(`API error: ${response.error}`);
53
- }
54
- }
55
- /**
56
- * Sends an evaluation run to the RabbitMQ evaluation queue
57
- */
58
- function sendToRabbitMQ(evaluationRun) {
59
- return __awaiter(this, void 0, void 0, function* () {
60
- const payload = evaluationRun.toJSON();
61
- try {
62
- const response = yield axios_1.default.post(constants_js_1.JUDGMENT_ADD_TO_RUN_EVAL_QUEUE_API_URL, payload, {
63
- headers: {
64
- 'Content-Type': 'application/json',
65
- 'Authorization': `Bearer ${evaluationRun.judgmentApiKey}`,
66
- 'X-Organization-Id': evaluationRun.organizationId
67
- }
68
- });
69
- return response.data;
70
- }
71
- catch (error) {
72
- if (axios_1.default.isAxiosError(error) && error.response) {
73
- throw new JudgmentAPIError(`Error sending to RabbitMQ: ${error.response.data.detail || error.message}`);
74
- }
75
- else {
76
- throw new JudgmentAPIError(`Error sending to RabbitMQ: ${(error === null || error === void 0 ? void 0 : error.message) || String(error)}`);
77
- }
78
- }
79
- });
80
- }
81
- /**
82
- * Checks the status of an async evaluation
83
- * @param evaluationRun The evaluation run to check
84
- * @returns The status of the evaluation
85
- */
86
- function checkEvaluationStatus(evaluationRun) {
87
- return __awaiter(this, void 0, void 0, function* () {
88
- try {
89
- const response = yield axios_1.default.post(`${constants_js_1.ROOT_API}/check-eval-status/`, {
90
- eval_name: evaluationRun.evalName,
91
- project_name: evaluationRun.projectName,
92
- judgment_api_key: evaluationRun.judgmentApiKey,
93
- }, {
94
- headers: {
95
- 'Content-Type': 'application/json',
96
- 'Authorization': `Bearer ${evaluationRun.judgmentApiKey}`,
97
- 'X-Organization-Id': evaluationRun.organizationId
98
- }
99
- });
100
- return response.data;
101
- }
102
- catch (error) {
103
- if (axios_1.default.isAxiosError(error) && error.response) {
104
- throw new JudgmentAPIError(`Error checking evaluation status: ${error.response.data.detail || error.message}`);
105
- }
106
- else {
107
- throw new JudgmentAPIError(`Error checking evaluation status: ${(error === null || error === void 0 ? void 0 : error.message) || String(error)}`);
108
- }
109
- }
110
- });
111
- }
112
- /**
113
- * Polls the status of an async evaluation until it's complete
114
- * @param evaluationRun The evaluation run to poll
115
- * @param intervalMs The interval between polls in milliseconds
116
- * @param maxAttempts The maximum number of polling attempts
117
- * @param onProgress Optional callback for progress updates
118
- * @returns The evaluation results
119
- */
120
- function pollEvaluationStatus(evaluationRun_1) {
121
- return __awaiter(this, arguments, void 0, function* (evaluationRun, intervalMs = 2000, maxAttempts = 300, onProgress) {
122
- let attempts = 0;
123
- while (attempts < maxAttempts) {
124
- try {
125
- const status = yield checkEvaluationStatus(evaluationRun);
126
- // Call progress callback if provided
127
- if (onProgress) {
128
- onProgress(status);
129
- }
130
- // Check if evaluation is complete
131
- if (status.status === 'complete') {
132
- (0, logger_js_1.log)('Async evaluation complete, fetching results');
133
- // Fetch the results
134
- const response = yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_FETCH_API_URL, {
135
- eval_name: evaluationRun.evalName,
136
- project_name: evaluationRun.projectName,
137
- judgment_api_key: evaluationRun.judgmentApiKey,
138
- }, {
139
- headers: {
140
- 'Content-Type': 'application/json',
141
- 'Authorization': `Bearer ${evaluationRun.judgmentApiKey}`,
142
- 'X-Organization-Id': evaluationRun.organizationId
143
- }
144
- });
145
- // Convert API results to ScoringResult objects
146
- const results = response.data.map((result) => {
147
- return new result_js_1.ScoringResult({
148
- dataObject: result.data_object,
149
- scorersData: result.scorers_data || [],
150
- error: result.error
151
- });
152
- });
153
- return results;
154
- }
155
- else if (status.status === 'failed') {
156
- throw new JudgmentAPIError(`Async evaluation failed: ${status.error || 'Unknown error'}`);
157
- }
158
- // Log progress
159
- (0, logger_js_1.log)(`Evaluation status: ${status.status}, progress: ${status.progress || 'unknown'}`);
160
- // Wait before next poll
161
- yield new Promise(resolve => setTimeout(resolve, intervalMs));
162
- attempts++;
163
- }
164
- catch (error) {
165
- (0, logger_js_1.error)(`Error polling evaluation status: ${(error === null || error === void 0 ? void 0 : error.message) || String(error)}`);
166
- throw new JudgmentAPIError(`Error polling evaluation status: ${(error === null || error === void 0 ? void 0 : error.message) || String(error)}`);
167
- }
168
- }
169
- throw new JudgmentAPIError(`Evaluation polling timed out after ${maxAttempts} attempts`);
170
- });
171
- }
172
- /**
173
- * Executes an evaluation of a list of Examples using one or more JudgmentScorers via the Judgment API
174
- * @param evaluationRun The evaluation run object containing the examples, scorers, and metadata
175
- * @returns The results of the evaluation
176
- */
177
- function executeApiEval(evaluationRun) {
178
- return __awaiter(this, void 0, void 0, function* () {
179
- var _a;
180
- try {
181
- // Submit API request to execute evals
182
- const payload = evaluationRun.toJSON();
183
- // Ensure all examples have valid UUIDs and required fields for each scorer type
184
- if (payload.examples && Array.isArray(payload.examples)) {
185
- payload.examples.forEach(example => {
186
- // Ensure example_id is a valid UUID (matching Python's uuid4 format)
187
- if (!example.example_id || !example.example_id.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i)) {
188
- // Generate a UUID v4 format ID
189
- example.example_id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
190
- const r = Math.random() * 16 | 0;
191
- const v = c === 'x' ? r : (r & 0x3 | 0x8);
192
- return v.toString(16);
193
- });
194
- }
195
- // Ensure required fields for all scorers (matching Python SDK)
196
- example.name = example.name || "example";
197
- example.example_index = example.example_index || 0;
198
- example.timestamp = example.timestamp || new Date().toISOString();
199
- example.trace_id = example.trace_id || `trace-${Date.now()}-${Math.floor(Math.random() * 1000)}`;
200
- // Check for required fields for each scorer type
201
- if (payload.scorers && Array.isArray(payload.scorers)) {
202
- payload.scorers.forEach((scorer) => {
203
- // Find the corresponding scorer in the evaluationRun
204
- const scorerObj = evaluationRun.scorers.find(s => s.type === scorer.score_type);
205
- if (scorerObj && scorerObj.requiredFields) {
206
- // Check if the example has all the required fields for this scorer
207
- scorerObj.requiredFields.forEach((field) => {
208
- const snakeCaseField = field.replace(/([A-Z])/g, '_$1').toLowerCase(); // Convert camelCase to snake_case
209
- // If the field is missing, add it with an appropriate default value
210
- if (example[snakeCaseField] === undefined) {
211
- if (snakeCaseField === 'context' || snakeCaseField === 'retrieval_context') {
212
- example[snakeCaseField] = [];
213
- }
214
- else if (snakeCaseField === 'input' || snakeCaseField === 'actual_output' || snakeCaseField === 'expected_output') {
215
- example[snakeCaseField] = example[snakeCaseField] || '';
216
- }
217
- }
218
- else if ((snakeCaseField === 'context' || snakeCaseField === 'retrieval_context') && !Array.isArray(example[snakeCaseField])) {
219
- // Ensure context and retrieval_context are arrays
220
- example[snakeCaseField] = [example[snakeCaseField]];
221
- }
222
- });
223
- }
224
- // Special handling for contextual scorers
225
- if (['contextual_relevancy', 'contextual_precision', 'contextual_recall', 'faithfulness', 'hallucination'].includes(scorer.score_type)) {
226
- // For contextual scorers, ensure context is always an array
227
- if (!example.context) {
228
- example.context = [];
229
- }
230
- else if (!Array.isArray(example.context)) {
231
- // If context is provided but not as an array, convert it to an array
232
- example.context = [example.context];
233
- }
234
- // For contextual relevancy, also ensure retrieval_context is an array
235
- if (scorer.score_type === 'contextual_relevancy') {
236
- if (!example.retrieval_context) {
237
- example.retrieval_context = example.context || [];
238
- }
239
- else if (!Array.isArray(example.retrieval_context)) {
240
- example.retrieval_context = [example.retrieval_context];
241
- }
242
- }
243
- }
244
- });
245
- }
246
- });
247
- }
248
- const response = yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_API_URL, payload, {
249
- headers: {
250
- 'Content-Type': 'application/json',
251
- 'Authorization': `Bearer ${evaluationRun.judgmentApiKey}`,
252
- 'X-Organization-Id': evaluationRun.organizationId
253
- }
254
- });
255
- return response.data;
256
- }
257
- catch (error) {
258
- if (axios_1.default.isAxiosError(error) && error.response) {
259
- const errorMessage = ((_a = error.response.data) === null || _a === void 0 ? void 0 : _a.detail) || JSON.stringify(error.response.data) || 'An unknown error occurred.';
260
- (0, logger_js_1.error)(`Error: ${errorMessage}`);
261
- throw new JudgmentAPIError(errorMessage);
262
- }
263
- else {
264
- (0, logger_js_1.error)(`Error: ${error}`);
265
- throw new JudgmentAPIError(`An error occurred while executing the Judgment API request: ${error}`);
266
- }
267
- }
268
- });
269
- }
270
- /**
271
- * Checks if an evaluation run name already exists for a given project
272
- */
273
- function checkEvalRunNameExists(evalName, projectName, judgmentApiKey, organizationId) {
274
- return __awaiter(this, void 0, void 0, function* () {
275
- try {
276
- const response = yield axios_1.default.post(`${constants_js_1.ROOT_API}/eval-run-name-exists/`, {
277
- eval_name: evalName,
278
- project_name: projectName,
279
- judgment_api_key: judgmentApiKey,
280
- }, {
281
- headers: {
282
- 'Content-Type': 'application/json',
283
- 'Authorization': `Bearer ${judgmentApiKey}`,
284
- 'X-Organization-Id': organizationId
285
- }
286
- });
287
- // Check if the evaluation run name already exists
288
- if (response.status === 409) {
289
- throw new JudgmentAPIError(`Evaluation run name '${evalName}' already exists for project '${projectName}'.`);
290
- }
291
- // Check if the response status code is not 2XX
292
- if (!response.status.toString().startsWith('2')) {
293
- const responseData = response.data;
294
- const errorMessage = responseData.detail || 'An unknown error occurred.';
295
- (0, logger_js_1.error)(`Error checking eval run name: ${errorMessage}`);
296
- throw new JudgmentAPIError(errorMessage);
297
- }
298
- }
299
- catch (error) {
300
- if (axios_1.default.isAxiosError(error) && error.response) {
301
- if (error.response.status === 409) {
302
- throw new JudgmentAPIError(`Evaluation run name '${evalName}' already exists for project '${projectName}'.`);
303
- }
304
- }
305
- // For connection errors or other issues, log but continue
306
- (0, logger_js_1.error)(`Failed to check if eval run name exists: ${(error === null || error === void 0 ? void 0 : error.message) || String(error)}`);
307
- // Don't throw an error here, just log it and continue
308
- }
309
- });
310
- }
311
- // Track whether a URL has been printed
312
- exports.hasLoggedUrl = false;
313
- /**
314
- * Logs evaluation results to the Judgment API database.
315
- * @param results The results to log
316
- * @param projectName The project name
317
- * @param evalName The evaluation run name
318
- * @param apiKey The API key for the Judgment API
319
- * @param organizationId The organization ID
320
- * @returns A URL to view the results in the Judgment UI
321
- */
322
- function logEvaluationResults(results_1, projectName_1, evalName_1) {
323
- return __awaiter(this, arguments, void 0, function* (results, projectName, evalName, apiKey = '', organizationId) {
324
- var _a;
325
- try {
326
- const response = yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_LOG_API_URL, {
327
- results: results.map(result => result.toJSON()),
328
- project_name: projectName,
329
- eval_name: evalName,
330
- run: {
331
- project_name: projectName,
332
- eval_name: evalName,
333
- examples: results.map(result => result.dataObject),
334
- scorers: results.flatMap(result => result.scorersData ? result.scorersData.map(scorer => ({
335
- name: scorer.name,
336
- threshold: scorer.threshold,
337
- score_type: scorer.name.toLowerCase().replace(' ', '_')
338
- })) : []),
339
- model: "gpt-3.5-turbo", // Default model
340
- log_results: true,
341
- judgment_api_key: apiKey,
342
- organization_id: organizationId,
343
- append: false
344
- }
345
- }, {
346
- headers: {
347
- 'Content-Type': 'application/json',
348
- 'Authorization': `Bearer ${apiKey}`,
349
- 'X-Organization-Id': organizationId
350
- }
351
- });
352
- if (response.status < 200 || response.status >= 300) {
353
- const responseData = response.data;
354
- const errorMessage = (responseData === null || responseData === void 0 ? void 0 : responseData.detail) || 'An unknown error occurred.';
355
- (0, logger_js_1.error)(`Error ${response.status}: ${errorMessage}`);
356
- throw new JudgmentAPIError(errorMessage);
357
- }
358
- if (response.data && response.data.ui_results_url) {
359
- const url = response.data.ui_results_url;
360
- const prettyStr = `\n \n🔍 You can view your evaluation results here: ${url}\n`;
361
- console.log(prettyStr);
362
- exports.hasLoggedUrl = true;
363
- return url;
364
- }
365
- return '';
366
- }
367
- catch (error) {
368
- if (axios_1.default.isAxiosError(error) && error.response) {
369
- const errorMessage = ((_a = error.response.data) === null || _a === void 0 ? void 0 : _a.detail) || JSON.stringify(error.response.data) || 'An unknown error occurred.';
370
- (0, logger_js_1.error)(`Error: ${errorMessage}`);
371
- throw new JudgmentAPIError(errorMessage);
372
- }
373
- else {
374
- (0, logger_js_1.error)(`Error: ${error}`);
375
- throw new JudgmentAPIError(`An error occurred while logging evaluation results: ${error}`);
376
- }
377
- }
378
- });
379
- }
380
- /**
381
- * When executing scorers that come from both the Judgment API and local scorers, we're left with
382
- * results for each type of scorer. This function merges the results from the API and local evaluations,
383
- * grouped by example.
384
- */
385
- function mergeResults(apiResults, localResults) {
386
- // No merge required
387
- if (!localResults.length && apiResults.length) {
388
- return apiResults;
389
- }
390
- if (!apiResults.length && localResults.length) {
391
- return localResults;
392
- }
393
- if (apiResults.length !== localResults.length) {
394
- // Results should be of same length because each ScoringResult is a 1-1 mapping to an Example
395
- throw new Error(`The number of API and local results do not match: ${apiResults.length} vs ${localResults.length}`);
396
- }
397
- // Each ScoringResult in api and local have all the same fields besides `scorersData`
398
- for (let i = 0; i < apiResults.length; i++) {
399
- const apiResult = apiResults[i];
400
- const localResult = localResults[i];
401
- if (!apiResult.dataObject || !localResult.dataObject) {
402
- throw new Error('Data object is null in one of the results.');
403
- }
404
- // Verify the results are aligned
405
- if (apiResult.dataObject.input !== localResult.dataObject.input ||
406
- apiResult.dataObject.actualOutput !== localResult.dataObject.actualOutput ||
407
- apiResult.dataObject.expectedOutput !== localResult.dataObject.expectedOutput) {
408
- throw new Error('The API and local results are not aligned.');
409
- }
410
- // Merge ScorerData from the API and local scorers together
411
- const apiScorerData = apiResult.scorersData;
412
- const localScorerData = localResult.scorersData;
413
- if (!apiScorerData && localScorerData) {
414
- apiResult.scorersData = localScorerData;
415
- }
416
- else if (apiScorerData && localScorerData) {
417
- apiResult.scorersData = [...apiScorerData, ...localScorerData];
418
- }
419
- }
420
- return apiResults;
421
- }
422
- /**
423
- * Checks if any ScoringResult objects are missing scorersData
424
- */
425
- function checkMissingScorerData(results) {
426
- var _a;
427
- for (let i = 0; i < results.length; i++) {
428
- if (!results[i].scorersData || ((_a = results[i].scorersData) === null || _a === void 0 ? void 0 : _a.length) === 0) {
429
- (0, logger_js_1.error)(`Scorer data is missing for example ${i}. ` +
430
- 'This is usually caused when the example does not contain ' +
431
- 'the fields required by the scorer. ' +
432
- 'Check that your example contains the fields required by the scorers.');
433
- }
434
- }
435
- return results;
436
- }
437
- /**
438
- * Checks if the example contains the necessary parameters for the scorer
439
- */
440
- function checkExamples(examples, scorers) {
441
- for (const scorer of scorers) {
442
- for (const example of examples) {
443
- // Check for required fields based on scorer type
444
- switch (scorer.scoreType) {
445
- case 'answer_correctness':
446
- case 'answer_relevancy':
447
- if (!example.expectedOutput) {
448
- (0, logger_js_1.warn)(`Scorer ${scorer.scoreType} requires expectedOutput field`);
449
- }
450
- break;
451
- case 'contextual_precision':
452
- case 'contextual_recall':
453
- case 'contextual_relevancy':
454
- if (!example.context || example.context.length === 0) {
455
- (0, logger_js_1.warn)(`Scorer ${scorer.scoreType} requires context field`);
456
- }
457
- break;
458
- case 'execution_order':
459
- if (!example.expectedTools || example.expectedTools.length === 0) {
460
- (0, logger_js_1.warn)(`Scorer ${scorer.scoreType} requires expectedTools field`);
461
- }
462
- break;
463
- // Add more checks for other scorer types as needed
464
- }
465
- }
466
- }
467
- }
468
- /**
469
- * Executes an evaluation of Examples using one or more Scorers
470
- */
471
- function runEval(evaluationRun_1) {
472
- return __awaiter(this, arguments, void 0, function* (evaluationRun, override = false, ignoreErrors = true, asyncExecution = false) {
473
- // Check if the evaluation run name already exists
474
- // This prevents accidentally overwriting existing evaluation results
475
- if (!override && evaluationRun.logResults) {
476
- yield checkEvalRunNameExists(evaluationRun.evalName || '', evaluationRun.projectName || '', evaluationRun.judgmentApiKey || '', evaluationRun.organizationId || '');
477
- }
478
- // --- Set example IDs and timestamps if not already set ---
479
- // This is important for tracking and debugging purposes
480
- (0, logger_js_1.log)("Initializing examples with IDs and timestamps");
481
- evaluationRun.examples.forEach((example, idx) => {
482
- example.exampleIndex = idx; // Set numeric index
483
- example.timestamp = new Date().toISOString().replace(/[-:]/g, '').split('.')[0];
484
- (0, logger_js_1.log)(`Initialized example ${example.exampleId} (index: ${example.exampleIndex})`);
485
- (0, logger_js_1.log)(`Input: ${example.input}`);
486
- (0, logger_js_1.log)(`Actual output: ${example.actualOutput || ''}`);
487
- if (example.expectedOutput) {
488
- (0, logger_js_1.log)(`Expected output: ${example.expectedOutput}`);
489
- }
490
- if (example.context) {
491
- (0, logger_js_1.log)(`Context: ${example.context}`);
492
- }
493
- });
494
- (0, logger_js_1.log)(`Starting evaluation run with ${evaluationRun.examples.length} examples`);
495
- // --- Split scorers into API and local ---
496
- // API scorers run on the Judgment API server
497
- // Local scorers run in this process
498
- (0, logger_js_1.log)("Grouping scorers by type");
499
- const apiScorers = [];
500
- const localScorers = [];
501
- evaluationRun.scorers.forEach(scorer => {
502
- if (scorer instanceof base_scorer_js_1.APIJudgmentScorer) {
503
- apiScorers.push(scorer);
504
- (0, logger_js_1.log)(`Added judgment scorer: ${scorer.constructor.name}`);
505
- }
506
- else {
507
- localScorers.push(scorer);
508
- (0, logger_js_1.log)(`Added local scorer: ${scorer.constructor.name}`);
509
- }
510
- });
511
- (0, logger_js_1.log)(`Found ${apiScorers.length} judgment scorers and ${localScorers.length} local scorers`);
512
- let apiResults = [];
513
- let localResults = [];
514
- // --- Handle async execution ---
515
- // This allows evaluations to run in the background without blocking
516
- // Useful for large-scale evaluations that might take a long time
517
- if (asyncExecution) {
518
- checkExamples(evaluationRun.examples, evaluationRun.scorers);
519
- (0, logger_js_1.log)("Starting async evaluation");
520
- // Add the evaluation to the RabbitMQ queue for async processing
521
- // The server will pick it up and process it in the background
522
- try {
523
- yield axios_1.default.post(constants_js_1.JUDGMENT_ADD_TO_RUN_EVAL_QUEUE_API_URL, evaluationRun.toJSON(), {
524
- headers: {
525
- 'Content-Type': 'application/json',
526
- 'Authorization': `Bearer ${evaluationRun.judgmentApiKey}`,
527
- 'X-Organization-Id': evaluationRun.organizationId
528
- }
529
- });
530
- (0, logger_js_1.info)("Successfully added evaluation to queue");
531
- }
532
- catch (error) {
533
- // Log the error but don't throw it - this matches Python SDK behavior
534
- // Combine error message into the first argument
535
- (0, logger_js_1.error)(`Error adding evaluation to queue: ${error instanceof Error ? error.message : String(error)}`);
536
- // Always print success message to match Python SDK behavior
537
- // This is important because the Python SDK always prints this message
538
- // even when there's an error connecting to RabbitMQ
539
- (0, logger_js_1.info)("Successfully added evaluation to queue (Note: Previous error occurred)");
540
- }
541
- // Return empty results for async execution
542
- // The results will be available later via the UI or API
543
- return [];
544
- }
545
- else {
546
- // --- Execute API scorers ---
547
- // These run on the Judgment API server
548
- if (apiScorers.length > 0) {
549
- try {
550
- (0, logger_js_1.log)('Executing API evaluation...');
551
- const apiResponseData = yield executeApiEval(evaluationRun);
552
- // Create ScoringResult objects from API response
553
- // Check if the response has a results field (matching Python SDK format)
554
- const resultsData = apiResponseData && typeof apiResponseData === 'object' && 'results' in apiResponseData
555
- ? apiResponseData.results
556
- : apiResponseData;
557
- apiResults = resultsData.map((result) => {
558
- // If the result is already a ScoringResult, return it directly
559
- if (result instanceof result_js_1.ScoringResult) {
560
- return result;
561
- }
562
- // Otherwise, create a new ScoringResult from the result data
563
- return new result_js_1.ScoringResult({
564
- dataObject: result.data_object,
565
- scorersData: result.scorers_data,
566
- error: result.error
567
- });
568
- });
569
- (0, logger_js_1.log)(`API evaluation complete with ${apiResults.length} results`);
570
- }
571
- catch (error) {
572
- (0, logger_js_1.error)(`Error executing API evaluation: ${error}`);
573
- if (!ignoreErrors) {
574
- throw error;
575
- }
576
- }
577
- }
578
- // --- Execute local scorers ---
579
- // These run in this process
580
- if (localScorers.length > 0) {
581
- (0, logger_js_1.log)('Starting local evaluation');
582
- try {
583
- // Process each example with each local scorer
584
- localResults = yield Promise.all(evaluationRun.examples.map((example) => __awaiter(this, void 0, void 0, function* () {
585
- const scorersData = [];
586
- // Run each local scorer on the example
587
- for (const scorer of localScorers) {
588
- try {
589
- (0, logger_js_1.log)(`Running local scorer ${scorer.type} on example ${example.exampleId}`);
590
- const scorerData = yield scorer.scoreExample(example);
591
- scorersData.push(scorerData);
592
- (0, logger_js_1.log)(`Scorer ${scorer.type} result: score=${scorerData.score}, success=${scorerData.success}`);
593
- }
594
- catch (scorerError) {
595
- (0, logger_js_1.error)(`Error running scorer ${scorer.type} on example ${example.exampleId}: ${(scorerError === null || scorerError === void 0 ? void 0 : scorerError.message) || String(scorerError)}`);
596
- // Add failed scorer data
597
- scorersData.push({
598
- name: scorer.type,
599
- threshold: scorer.threshold,
600
- success: false,
601
- score: 0,
602
- reason: null,
603
- strict_mode: null,
604
- evaluation_model: null,
605
- error: (scorerError === null || scorerError === void 0 ? void 0 : scorerError.message) || String(scorerError),
606
- evaluation_cost: null,
607
- verbose_logs: null,
608
- additional_metadata: scorer.additional_metadata || {}
609
- });
610
- }
611
- }
612
- // Create a ScoringResult with all scorer data for this example
613
- return new result_js_1.ScoringResult({
614
- dataObject: example,
615
- scorersData: scorersData,
616
- error: undefined
617
- });
618
- })));
619
- (0, logger_js_1.log)(`Local evaluation complete with ${localResults.length} results`);
620
- }
621
- catch (error) {
622
- (0, logger_js_1.error)(`Error executing local evaluation: ${(error === null || error === void 0 ? void 0 : error.message) || String(error)}`);
623
- if (!ignoreErrors) {
624
- throw error;
625
- }
626
- else {
627
- // Create empty results with errors if ignoring errors
628
- localResults = evaluationRun.examples.map(example => {
629
- return new result_js_1.ScoringResult({
630
- dataObject: example,
631
- scorersData: [],
632
- error: error === null || error === void 0 ? void 0 : error.message
633
- });
634
- });
635
- }
636
- }
637
- }
638
- // --- Merge results from API and local scorers ---
639
- // This combines the results from both types of scorers
640
- // Align with Python - only record content and usage base
641
- (0, logger_js_1.log)('Merging API and local results');
642
- const mergedResults = mergeResults(apiResults, localResults);
643
- // Check for missing scorer data
644
- // This helps identify examples that couldn't be evaluated
645
- const checkedResults = checkMissingScorerData(mergedResults);
646
- (0, logger_js_1.log)(`Successfully merged ${checkedResults.length} results`);
647
- // --- Log results to Judgment API if requested ---
648
- // This saves the results to the database for later viewing
649
- if (evaluationRun.logResults) {
650
- try {
651
- const url = yield logEvaluationResults(checkedResults, evaluationRun.projectName || '', evaluationRun.evalName || '', evaluationRun.judgmentApiKey || '', evaluationRun.organizationId || '');
652
- (0, logger_js_1.log)(`Results logged to Judgment API: ${url}`);
653
- }
654
- catch (error) {
655
- (0, logger_js_1.error)(`Error logging evaluation results: ${(error === null || error === void 0 ? void 0 : error.message) || String(error)}`);
656
- if (!ignoreErrors) {
657
- throw error;
658
- }
659
- }
660
- }
661
- // --- Check for examples with no scorer data ---
662
- // This helps identify examples that couldn't be evaluated
663
- for (let i = 0; i < checkedResults.length; i++) {
664
- const result = checkedResults[i];
665
- if (!result.scorersData || result.scorersData.length === 0) {
666
- (0, logger_js_1.log)(`None of the scorers could be executed on example ${i}. This is usually because the Example is missing the fields needed by the scorers. Try checking that the Example has the necessary fields for your scorers.`);
667
- }
668
- }
669
- return checkedResults;
670
- }
671
- });
672
- }
673
- /**
674
- * Collects all failed scorers from the scoring results
675
- * Raises exceptions for any failed test cases
676
- */
677
- function assertTest(scoringResults) {
678
- var _a;
679
- const failedTests = [];
680
- for (const result of scoringResults) {
681
- if (result.error) {
682
- failedTests.push(`Error in result: ${result.error}`);
683
- continue;
684
- }
685
- if (!result.scorersData || ((_a = result.scorersData) === null || _a === void 0 ? void 0 : _a.length) === 0) {
686
- failedTests.push('No scorer data found in result');
687
- continue;
688
- }
689
- for (const scorerData of result.scorersData) {
690
- if (!scorerData.success) {
691
- failedTests.push(`Test failed: ${scorerData.name} with score ${scorerData.score} ` +
692
- `(threshold: ${scorerData.threshold})`);
693
- }
694
- }
695
- }
696
- if (failedTests.length > 0) {
697
- throw new Error(`Test assertion failed:\n${failedTests.join('\n')}`);
698
- }
699
- }
700
- //# sourceMappingURL=run-evaluation.js.map