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