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,798 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
- var __importDefault = (this && this.__importDefault) || function (mod) {
35
- return (mod && mod.__esModule) ? mod : { "default": mod };
36
- };
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.JudgmentClient = void 0;
39
- const dotenv = __importStar(require("dotenv"));
40
- const axios_1 = __importDefault(require("axios"));
41
- const example_js_1 = require("./data/example.js");
42
- const result_js_1 = require("./data/result.js");
43
- const base_scorer_js_1 = require("./scorers/base-scorer.js");
44
- const evaluation_run_js_1 = require("./evaluation-run.js");
45
- const rules_js_1 = require("./rules.js");
46
- const run_evaluation_js_1 = require("./run-evaluation.js");
47
- const constants_js_1 = require("./constants.js");
48
- const logger_instance_js_1 = __importDefault(require("./common/logger-instance.js"));
49
- // Keep progress bar imports if used elsewhere (e.g., waitForEvaluation)
50
- const cli_progress_1 = __importDefault(require("cli-progress"));
51
- const ansi_colors_1 = __importDefault(require("ansi-colors"));
52
- const eval_dataset_client_js_1 = require("./data/datasets/eval-dataset-client.js");
53
- // Load environment variables
54
- dotenv.config();
55
- /**
56
- * Singleton implementation for JudgmentClient
57
- */
58
- class JudgmentClient {
59
- /**
60
- * Get the singleton instance of JudgmentClient
61
- */
62
- static getInstance(judgmentApiKey, organizationId) {
63
- if (!JudgmentClient.instance) {
64
- JudgmentClient.instance = new JudgmentClient(judgmentApiKey, organizationId);
65
- }
66
- return JudgmentClient.instance;
67
- }
68
- /**
69
- * Constructor for JudgmentClient
70
- * @param judgmentApiKey The Judgment API key
71
- * @param organizationId The organization ID
72
- */
73
- constructor(judgmentApiKey, organizationId) {
74
- this.judgmentApiKey = judgmentApiKey || process.env.JUDGMENT_API_KEY || '';
75
- this.organizationId = organizationId || process.env.JUDGMENT_ORG_ID || '';
76
- // Keep this as direct output
77
- console.log('Successfully initialized JudgmentClient!');
78
- if (!this.judgmentApiKey) {
79
- // Use logger for internal error, but throw for user
80
- logger_instance_js_1.default.error('JUDGMENT_API_KEY is not set.');
81
- throw new Error('Judgment API key is required. Set it in the constructor or as an environment variable JUDGMENT_API_KEY.');
82
- }
83
- if (!this.organizationId) {
84
- throw new Error('Organization ID is required. Set it in the constructor or as an environment variable JUDGMENT_ORG_ID.');
85
- }
86
- }
87
- /**
88
- * Run an evaluation asynchronously
89
- */
90
- aRunEvaluation(examples_1, scorers_1, model_1, aggregator_1, metadata_1) {
91
- return __awaiter(this, arguments, void 0, function* (examples, scorers, model, aggregator, metadata, logResults = true, projectName = 'default_project', evalRunName = 'default_eval_run', override = false, useJudgment = true, ignoreErrors = true, rules) {
92
- // Simply call runEvaluation with asyncExecution=true
93
- return this.runEvaluation(examples, scorers, model, aggregator, metadata, logResults, projectName, evalRunName, override, useJudgment, ignoreErrors, true, // Set asyncExecution to true
94
- rules);
95
- });
96
- }
97
- /**
98
- * Run an evaluation
99
- */
100
- runEvaluation(examples_1, scorers_1, model_1, aggregator_1, metadata_1) {
101
- return __awaiter(this, arguments, void 0, function* (examples, scorers, model, aggregator, metadata, logResults = true, projectName = 'default_project', evalRunName = 'default_eval_run', override = false, useJudgment = true, ignoreErrors = true, asyncExecution = false, rules) {
102
- try {
103
- // Load appropriate implementations for all scorers
104
- const loadedScorers = [];
105
- for (const scorer of scorers) {
106
- try {
107
- if (scorer instanceof base_scorer_js_1.ScorerWrapper) {
108
- loadedScorers.push(scorer.loadImplementation(useJudgment));
109
- }
110
- else {
111
- // Assume scorers passed are already JudgevalScorer or APIJudgmentScorer
112
- loadedScorers.push(scorer);
113
- }
114
- }
115
- catch (error) {
116
- throw new Error(`Failed to load implementation for scorer ${scorer.constructor.name}: ${error instanceof Error ? error.message : String(error)}`);
117
- }
118
- }
119
- // Prevent using JudgevalScorer with rules - only APIJudgmentScorer allowed with rules
120
- if (rules && loadedScorers.some(scorer => scorer instanceof base_scorer_js_1.JudgevalScorer)) {
121
- throw new Error('Cannot use Judgeval scorers (only API scorers) when using rules. Please either remove rules or use only APIJudgmentScorer types.');
122
- }
123
- // Convert ScorerWrapper in rules to their implementations
124
- let loadedRules;
125
- if (rules) {
126
- loadedRules = [];
127
- for (const rule of rules) {
128
- try {
129
- const processedConditions = [];
130
- for (const condition of rule.conditions) {
131
- // Convert metric if it's a ScorerWrapper
132
- if (condition.metric instanceof base_scorer_js_1.ScorerWrapper) {
133
- try {
134
- // Create a new Condition object with the loaded implementation
135
- const loadedMetric = condition.metric.loadImplementation(useJudgment);
136
- const newCondition = new rules_js_1.Condition(loadedMetric);
137
- // Copy other properties from the original condition if necessary
138
- // Example: newCondition.threshold = condition.threshold;
139
- Object.assign(newCondition, Object.assign(Object.assign({}, condition), { metric: loadedMetric })); // Copy all properties, overriding metric
140
- processedConditions.push(newCondition);
141
- }
142
- catch (error) {
143
- throw new Error(`Failed to convert ScorerWrapper to implementation in rule '${rule.name}', condition metric '${condition.metric.constructor.name}': ${error instanceof Error ? error.message : String(error)}`);
144
- }
145
- }
146
- else {
147
- processedConditions.push(condition);
148
- }
149
- }
150
- // Create new rule with processed conditions
151
- const newRule = new rules_js_1.Rule(rule.name, processedConditions, rule.combine_type, rule.description, rule.notification, rule.ruleId);
152
- loadedRules.push(newRule);
153
- }
154
- catch (error) {
155
- throw new Error(`Failed to process rule '${rule.name}': ${error instanceof Error ? error.message : String(error)}`);
156
- }
157
- }
158
- }
159
- const evaluationRun = new evaluation_run_js_1.EvaluationRun({
160
- logResults,
161
- projectName,
162
- evalName: evalRunName,
163
- examples,
164
- scorers: loadedScorers,
165
- model,
166
- aggregator,
167
- metadata,
168
- judgmentApiKey: this.judgmentApiKey,
169
- rules: loadedRules,
170
- organizationId: this.organizationId
171
- });
172
- return (0, run_evaluation_js_1.runEval)(evaluationRun, override, ignoreErrors, asyncExecution);
173
- }
174
- catch (error) {
175
- if (error instanceof Error) {
176
- if (error.message.includes('one or more fields are invalid')) {
177
- throw new Error(`Please check your EvaluationRun object, one or more fields are invalid: \n${error.message}`);
178
- }
179
- else {
180
- throw new Error(`An unexpected error occurred during evaluation: ${error.message}`);
181
- }
182
- }
183
- else {
184
- throw new Error(`An unexpected error occurred during evaluation: ${String(error)}`);
185
- }
186
- }
187
- });
188
- }
189
- /**
190
- * Run an evaluation with a simplified interface (recommended)
191
- * @param config Configuration object for the evaluation
192
- * @returns Promise<ScoringResult[]> The evaluation results
193
- */
194
- evaluate(config) {
195
- return __awaiter(this, void 0, void 0, function* () {
196
- // Set default values
197
- const { examples, scorers, model = 'meta-llama/Meta-Llama-3-8B-Instruct-Turbo', aggregator = undefined, metadata = {}, projectName = 'default_project', evalName = `eval-run-${Date.now()}`, logResults = true, useJudgment = true, ignoreErrors = true, asyncExecution = false, rules = undefined, override = false } = config;
198
- // Call the original runEvaluation method with the extracted parameters
199
- return this.runEvaluation(examples, scorers, model, aggregator, metadata, logResults, projectName, evalName, override, useJudgment, ignoreErrors, asyncExecution, rules);
200
- });
201
- }
202
- /**
203
- * Evaluate a dataset
204
- */
205
- evaluateDataset(dataset_1, scorers_1, model_1, aggregator_1, metadata_1) {
206
- return __awaiter(this, arguments, void 0, function* (dataset, // Keep type loose for stub
207
- scorers, model, aggregator, metadata, projectName = 'default_project', evalRunName = 'default_eval_run', logResults = true, useJudgment = true, rules) {
208
- // Keep type loose for stub
209
- throw new Error('Not implemented in JudgmentClient. Use EvalDatasetClient.');
210
- });
211
- }
212
- /**
213
- * Pull evaluation results from the server
214
- *
215
- * @param projectName Name of the project
216
- * @param evalRunName Name of the evaluation run
217
- * @returns Array of evaluation result objects with the same format as the Python SDK
218
- */
219
- pullEval(projectName, evalRunName) {
220
- return __awaiter(this, void 0, void 0, function* () {
221
- const evalRunRequestBody = {
222
- project_name: projectName,
223
- eval_name: evalRunName,
224
- judgment_api_key: this.judgmentApiKey
225
- };
226
- try {
227
- logger_instance_js_1.default.info(`Pulling evaluation results for project '${projectName}', run '${evalRunName}'`);
228
- const response = yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_FETCH_API_URL, evalRunRequestBody, {
229
- headers: {
230
- "Content-Type": "application/json",
231
- "Authorization": `Bearer ${this.judgmentApiKey}`,
232
- "X-Organization-Id": this.organizationId
233
- }
234
- });
235
- // Ensure we return the data in the exact same format as the Python SDK
236
- return response.data;
237
- }
238
- catch (error) {
239
- if (axios_1.default.isAxiosError(error) && error.response) {
240
- const errorMessage = `Error fetching eval results: ${JSON.stringify(error.response.data)}`;
241
- logger_instance_js_1.default.error(errorMessage);
242
- throw new Error(errorMessage);
243
- }
244
- else {
245
- const errorMessage = `Unknown error during pullEval: ${error}`;
246
- logger_instance_js_1.default.error(errorMessage);
247
- throw error;
248
- }
249
- }
250
- });
251
- }
252
- /**
253
- * Retrieves evaluation results with retry mechanism
254
- * @param projectName Name of the project
255
- * @param evalRunName Name of the evaluation run
256
- * @param options Configuration options for retries
257
- * @returns The evaluation results or null if not available after all retries
258
- */
259
- pullEvalWithRetry(projectName_1, evalRunName_1) {
260
- return __awaiter(this, arguments, void 0, function* (projectName, evalRunName, options = {}) {
261
- // Default options
262
- const maxRetries = options.maxRetries || 3;
263
- const initialDelayMs = options.initialDelayMs || 2000;
264
- const maxDelayMs = options.maxDelayMs || 30000;
265
- const backoffFactor = options.backoffFactor || 2;
266
- let lastError = null;
267
- for (let attempt = 0; attempt < maxRetries; attempt++) {
268
- try {
269
- // Calculate delay with exponential backoff, capped at maxDelayMs
270
- const delayMs = Math.min(initialDelayMs * Math.pow(backoffFactor, attempt), maxDelayMs);
271
- if (attempt > 0) {
272
- logger_instance_js_1.default.info(`Retry attempt ${attempt + 1}/${maxRetries} for pullEval after ${delayMs}ms delay`);
273
- yield new Promise(resolve => setTimeout(resolve, delayMs));
274
- }
275
- const results = yield this.pullEval(projectName, evalRunName);
276
- return results;
277
- }
278
- catch (error) {
279
- lastError = error;
280
- // Check if we should retry based on error type
281
- if (axios_1.default.isAxiosError(error) && error.response) {
282
- const status = error.response.status;
283
- // Don't retry for client errors (except 429 Too Many Requests)
284
- if (status >= 400 && status < 500 && status !== 429) {
285
- logger_instance_js_1.default.error(`Not retrying due to client error: ${status}`);
286
- throw error;
287
- }
288
- }
289
- logger_instance_js_1.default.warn(`Attempt ${attempt + 1} failed, ${attempt < maxRetries - 1 ? 'will retry' : 'giving up'}`);
290
- }
291
- }
292
- // If we get here, all retries failed
293
- logger_instance_js_1.default.error(`All ${maxRetries} retry attempts failed for pullEval`);
294
- throw lastError || new Error('Failed to retrieve evaluation results after all retry attempts');
295
- });
296
- }
297
- /**
298
- * Export evaluation results to a file format
299
- * @param projectName Name of the project
300
- * @param evalRunName Name of the evaluation run
301
- * @param format Export format ('json' or 'csv')
302
- * @returns The exported data as a string
303
- */
304
- exportEvalResults(projectName_1, evalRunName_1) {
305
- return __awaiter(this, arguments, void 0, function* (projectName, evalRunName, format = 'json') {
306
- logger_instance_js_1.default.info(`Exporting eval results for project '${projectName}', run '${evalRunName}' as ${format}`);
307
- try {
308
- const resultsData = yield this.pullEval(projectName, evalRunName);
309
- if (!resultsData || resultsData.length === 0 || !resultsData[0].results) {
310
- logger_instance_js_1.default.warn('No results found to export.');
311
- return '';
312
- }
313
- const results = resultsData[0].results;
314
- if (format === 'json') {
315
- // Pretty print JSON
316
- return JSON.stringify(results.map(r => r.toJSON()), null, 2);
317
- }
318
- else if (format === 'csv') {
319
- if (results.length === 0)
320
- return ''; // No data to export
321
- // Dynamically determine headers from the first result object
322
- // Flatten the structure for CSV
323
- const flatResults = results.map(result => {
324
- var _a, _b, _c;
325
- const flat = {};
326
- const exampleData = (_b = (_a = result.dataObject) === null || _a === void 0 ? void 0 : _a.toJSON()) !== null && _b !== void 0 ? _b : {}; // Use toJSON which gives snake_case
327
- const scorersData = (_c = result.scorersData) !== null && _c !== void 0 ? _c : [];
328
- // Add example data fields (snake_case)
329
- for (const key in exampleData) {
330
- // Prefix example fields to avoid collision, e.g., example_input
331
- flat[`example_${key}`] = exampleData[key];
332
- }
333
- // Add scorers data
334
- scorersData.forEach(scorer => {
335
- flat[`scorer_${scorer.name}_score`] = scorer.score;
336
- flat[`scorer_${scorer.name}_additional_metadata`] = JSON.stringify(scorer.additional_metadata);
337
- flat[`scorer_${scorer.name}_error`] = scorer.error;
338
- });
339
- // Add top-level error if present
340
- flat['top_level_error'] = result.error;
341
- return flat;
342
- });
343
- // Get all unique keys from the flattened results for headers
344
- const headers = Array.from(new Set(flatResults.flatMap(Object.keys)));
345
- // Use papaparse for robust CSV generation
346
- const Papa = require('papaparse'); // Use require here if not imported at top
347
- const csv = Papa.unparse({
348
- fields: headers,
349
- data: flatResults
350
- }, {
351
- header: true,
352
- quotes: true, // Ensure fields with commas/newlines are quoted
353
- quoteChar: '"',
354
- escapeChar: '"',
355
- delimiter: ','
356
- });
357
- return csv;
358
- }
359
- else {
360
- throw new Error(`Unsupported export format: ${format}`);
361
- }
362
- }
363
- catch (error) {
364
- logger_instance_js_1.default.error(`Error exporting eval results: ${error}`);
365
- this.handleApiError(error, 'exportEvalResults');
366
- throw error;
367
- }
368
- });
369
- }
370
- /**
371
- * Delete an evaluation from the server
372
- */
373
- deleteEval(projectName, evalRunNames) {
374
- return __awaiter(this, void 0, void 0, function* () {
375
- logger_instance_js_1.default.info(`Deleting eval runs: ${evalRunNames.join(', ')} from project: ${projectName}`);
376
- const requestBody = {
377
- project_name: projectName,
378
- eval_names: evalRunNames,
379
- judgment_api_key: this.judgmentApiKey,
380
- };
381
- try {
382
- yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_DELETE_API_URL, requestBody, {
383
- headers: this.getAuthHeaders()
384
- });
385
- logger_instance_js_1.default.info('Successfully deleted eval runs.');
386
- return true;
387
- }
388
- catch (error) {
389
- logger_instance_js_1.default.error(`Error deleting eval runs: ${error}`);
390
- this.handleApiError(error, 'deleteEval');
391
- return false;
392
- }
393
- });
394
- }
395
- /**
396
- * Delete all evaluations from the server for a given project
397
- */
398
- deleteProjectEvals(projectName) {
399
- return __awaiter(this, void 0, void 0, function* () {
400
- logger_instance_js_1.default.info(`Deleting ALL eval runs for project: ${projectName}`);
401
- const requestBody = {
402
- project_name: projectName,
403
- judgment_api_key: this.judgmentApiKey,
404
- };
405
- try {
406
- yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_DELETE_PROJECT_API_URL, requestBody, {
407
- headers: this.getAuthHeaders()
408
- });
409
- logger_instance_js_1.default.info(`Successfully deleted all eval runs for project ${projectName}.`);
410
- return true;
411
- }
412
- catch (error) {
413
- logger_instance_js_1.default.error(`Error deleting project evals: ${error}`);
414
- this.handleApiError(error, 'deleteProjectEvals');
415
- return false;
416
- }
417
- });
418
- }
419
- /**
420
- * Create a project on the server
421
- */
422
- createProject(projectName) {
423
- return __awaiter(this, void 0, void 0, function* () {
424
- logger_instance_js_1.default.info(`Creating project: ${projectName}`);
425
- const requestBody = {
426
- project_name: projectName,
427
- judgment_api_key: this.judgmentApiKey,
428
- };
429
- try {
430
- logger_instance_js_1.default.info(`Creating project: ${projectName}`);
431
- const response = yield axios_1.default.post(constants_js_1.JUDGMENT_PROJECT_CREATE_API_URL, requestBody, {
432
- headers: this.getAuthHeaders()
433
- });
434
- // Check for specific success message or status if API provides one
435
- if (response.data && response.data.message === 'Project added successfully') {
436
- logger_instance_js_1.default.info(`Successfully created project: ${projectName}`);
437
- return true;
438
- }
439
- else if (response.data && response.data.message === 'Project already exists') {
440
- logger_instance_js_1.default.warn(`Project '${projectName}' already exists.`);
441
- return true; // Or false, depending on desired behavior for existing projects
442
- }
443
- else {
444
- logger_instance_js_1.default.error(`Failed to create project '${projectName}'. Response: ${JSON.stringify(response.data)}`);
445
- return false;
446
- }
447
- }
448
- catch (error) {
449
- logger_instance_js_1.default.error(`Error creating project: ${error}`);
450
- this.handleApiError(error, 'createProject');
451
- return false;
452
- }
453
- });
454
- }
455
- /**
456
- * Delete a project from the server
457
- */
458
- deleteProject(projectName) {
459
- return __awaiter(this, void 0, void 0, function* () {
460
- logger_instance_js_1.default.info(`Deleting project: ${projectName}`);
461
- const requestBody = {
462
- project_name: projectName,
463
- judgment_api_key: this.judgmentApiKey,
464
- };
465
- try {
466
- const response = yield axios_1.default.post(constants_js_1.JUDGMENT_PROJECT_DELETE_API_URL, requestBody, {
467
- headers: this.getAuthHeaders()
468
- });
469
- if (response.data && response.data.message === 'Project deleted successfully') {
470
- logger_instance_js_1.default.info(`Successfully deleted project: ${projectName}`);
471
- return true;
472
- }
473
- else {
474
- logger_instance_js_1.default.error(`Failed to delete project '${projectName}'. Response: ${JSON.stringify(response.data)}`);
475
- return false;
476
- }
477
- }
478
- catch (error) {
479
- logger_instance_js_1.default.error(`Error deleting project: ${error}`);
480
- this.handleApiError(error, 'deleteProject');
481
- return false;
482
- }
483
- });
484
- }
485
- /**
486
- * Validate that the user API key is valid
487
- */
488
- validateApiKey() {
489
- return __awaiter(this, void 0, void 0, function* () {
490
- var _a, _b, _c, _d;
491
- logger_instance_js_1.default.debug('Validating API Key...');
492
- try {
493
- // Instantiate EvalDatasetClient to perform the validation call
494
- const datasetClient = new eval_dataset_client_js_1.EvalDatasetClient(this.judgmentApiKey, this.organizationId);
495
- // Use the dataset client to make the call
496
- yield datasetClient.pullProjectDatasetStats('__api_key_validation__');
497
- logger_instance_js_1.default.debug('API Key appears valid.');
498
- return [true, 'API Key is valid.'];
499
- }
500
- catch (error) {
501
- let message = 'API Key validation failed.';
502
- if (axios_1.default.isAxiosError(error)) {
503
- if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 || ((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) === 403) {
504
- message = 'API Key is invalid or expired.';
505
- }
506
- else if (((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) === 404) {
507
- // If validation endpoint returns 404, key might be valid but endpoint wrong/project not found
508
- // This depends on the specific validation endpoint behavior
509
- message = 'API Key might be valid, but validation endpoint returned 404.';
510
- }
511
- else {
512
- message = `API Key validation failed with status ${(_d = error.response) === null || _d === void 0 ? void 0 : _d.status}: ${error.message}`;
513
- }
514
- }
515
- else {
516
- message = `API Key validation failed: ${String(error)}`;
517
- }
518
- logger_instance_js_1.default.error(message);
519
- return [false, message];
520
- }
521
- });
522
- }
523
- /**
524
- * Assert a test by running the evaluation and checking the results for success
525
- */
526
- assertTest(examples_1, scorers_1, model_1, aggregator_1, metadata_1) {
527
- return __awaiter(this, arguments, void 0, function* (examples, scorers, // Type matches Python's intent
528
- model, aggregator, metadata, logResults = true, projectName = 'default_project', evalRunName = 'default_eval_run', override = false, rules) {
529
- const results = yield this.runEvaluation(examples, scorers, model, aggregator, metadata, logResults, projectName, evalRunName, override, true, // useJudgment = true (necessary if API scorers or rules are involved)
530
- false, // ignoreErrors = false for assert
531
- false, // asyncExecution = false
532
- rules);
533
- (0, run_evaluation_js_1.assertTest)(results); // Assumes assertTest handles ScoringResult[]
534
- });
535
- }
536
- /**
537
- * Pull the results of an evaluation run. Matches `pullEval` logic but returns only the ScoringResult array.
538
- * @param projectName The name of the project
539
- * @param evalRunName The name of the evaluation run
540
- * @returns Array of ScoringResult objects
541
- */
542
- pullEvalResults(projectName, evalRunName) {
543
- return __awaiter(this, void 0, void 0, function* () {
544
- var _a;
545
- // Get the raw API response
546
- const rawResults = yield this.pullEval(projectName, evalRunName);
547
- // Ensure proper handling of empty results
548
- if (!rawResults || !Array.isArray(rawResults) || rawResults.length === 0) {
549
- return [];
550
- }
551
- // Process the results to match Python SDK format
552
- const scoringResults = [];
553
- for (const item of rawResults) {
554
- if (item.result && item.result.scorers_data && Array.isArray(item.result.scorers_data)) {
555
- // Extract example data if available
556
- const exampleData = item.examples && item.examples.length > 0 ? item.examples[0] : null;
557
- // Create an Example object with the data from the API
558
- const example = new example_js_1.Example({
559
- input: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.input) || '',
560
- actualOutput: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.actual_output) || '',
561
- expectedOutput: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.expected_output) || '',
562
- context: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.context) || null,
563
- retrievalContext: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.retrieval_context) || null,
564
- additionalMetadata: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.additional_metadata) || {},
565
- toolsCalled: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.tools_called) || null,
566
- expectedTools: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.expected_tools) || null,
567
- exampleId: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.example_id) || null,
568
- name: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.name) || 'example',
569
- exampleIndex: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.example_index) || 0,
570
- timestamp: (exampleData === null || exampleData === void 0 ? void 0 : exampleData.created_at) || new Date().toISOString(),
571
- traceId: ((_a = item.result) === null || _a === void 0 ? void 0 : _a.trace_id) || null
572
- });
573
- // Create a ScoringResult using the builder pattern
574
- const scoringResult = result_js_1.ScoringResult.builder()
575
- .dataObject(example)
576
- .scorersData(item.result.scorers_data)
577
- .build();
578
- scoringResults.push(scoringResult);
579
- }
580
- }
581
- return scoringResults;
582
- });
583
- }
584
- /**
585
- * Check the status of an evaluation run using the fetch endpoint.
586
- * This is a heuristic approach as the endpoint might return full results or status info.
587
- * @param projectName The name of the project
588
- * @param evalRunName The name of the evaluation run
589
- * @returns An object representing the status { status: string, progress: number, message: string }
590
- */
591
- checkEvalStatus(projectName, evalRunName) {
592
- return __awaiter(this, void 0, void 0, function* () {
593
- var _a;
594
- const requestBody = {
595
- project_name: projectName,
596
- eval_name: evalRunName,
597
- judgment_api_key: this.judgmentApiKey,
598
- };
599
- try {
600
- const response = yield axios_1.default.post(constants_js_1.JUDGMENT_EVAL_FETCH_API_URL, requestBody, {
601
- headers: this.getAuthHeaders(),
602
- // Add a shorter timeout for status checks?
603
- // timeout: 5000
604
- });
605
- const data = response.data;
606
- // Check if the response looks like a status object
607
- if (data && typeof data.status === 'string') {
608
- return {
609
- status: data.status || 'unknown',
610
- progress: typeof data.progress === 'number' ? data.progress : 0,
611
- message: data.message || '',
612
- error: data.error
613
- };
614
- }
615
- // Check if the response looks like completed results (array format from pullEval)
616
- else if (Array.isArray(data) && data.length > 0 && data[0].results) {
617
- return {
618
- status: 'completed',
619
- progress: 100,
620
- message: 'Evaluation completed.'
621
- };
622
- }
623
- // Check if response looks like completed results (single object format)
624
- else if (data && typeof data.id === 'string' && Array.isArray(data.results)) { // Adjust based on actual API response for single result fetch
625
- return {
626
- status: 'completed',
627
- progress: 100,
628
- message: 'Evaluation completed.'
629
- };
630
- }
631
- // Handle other potential responses or assume pending/unknown
632
- else {
633
- logger_instance_js_1.default.warn(`Unexpected response format when checking status for ${evalRunName}:`, data);
634
- return {
635
- status: 'unknown',
636
- progress: 0,
637
- message: 'Could not determine status from API response.'
638
- };
639
- }
640
- }
641
- catch (error) {
642
- // Don't throw here, return status indicating error
643
- let errorMessage = 'Failed to fetch evaluation status.';
644
- let status = 'error';
645
- if (axios_1.default.isAxiosError(error) && ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
646
- status = 'not_found';
647
- errorMessage = 'Evaluation run not found.';
648
- logger_instance_js_1.default.warn(`Evaluation run ${evalRunName} not found.`);
649
- }
650
- else {
651
- this.handleApiError(error, 'checkEvalStatus');
652
- errorMessage = `Error fetching status: ${String(error)}`;
653
- }
654
- return {
655
- status: status,
656
- progress: 0,
657
- message: errorMessage,
658
- error: String(error) // Include error string
659
- };
660
- }
661
- });
662
- }
663
- /**
664
- * Wait for an async evaluation to complete and return the results
665
- * @param projectName The name of the project
666
- * @param evalRunName The name of the evaluation run
667
- * @param options Optional configuration for polling: intervalMs, maxAttempts, showProgress
668
- * @returns The evaluation results as ScoringResult[] or empty array on timeout/failure.
669
- */
670
- waitForEvaluation(projectName_1, evalRunName_1) {
671
- return __awaiter(this, arguments, void 0, function* (projectName, evalRunName, options = {}) {
672
- const { intervalMs = 5000, maxAttempts = 120, showProgress = true } = options; // Default: check every 5s for 10 mins
673
- let progressBar;
674
- if (showProgress) {
675
- progressBar = new cli_progress_1.default.SingleBar({
676
- format: `Waiting for ${ansi_colors_1.default.magenta(evalRunName)}... | ${ansi_colors_1.default.cyan('{bar}')} | {percentage}% || {status}`,
677
- barCompleteChar: '\u2588',
678
- barIncompleteChar: '\u2591',
679
- hideCursor: true,
680
- clearOnComplete: false,
681
- stopOnComplete: true,
682
- }, cli_progress_1.default.Presets.shades_classic);
683
- progressBar.start(100, 0, { status: 'Initiating...' });
684
- }
685
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
686
- try {
687
- const statusResult = yield this.checkEvalStatus(projectName, evalRunName);
688
- const progress = Math.max(0, Math.min(100, statusResult.progress || 0)); // Clamp progress
689
- const statusText = statusResult.message || statusResult.status;
690
- if (progressBar) {
691
- progressBar.update(progress, { status: statusText });
692
- }
693
- if (statusResult.status === 'completed') {
694
- if (progressBar) {
695
- progressBar.update(100, { status: ansi_colors_1.default.green('Completed! Fetching results...') });
696
- }
697
- // Fetch final results using pullEval
698
- const finalResults = yield this.pullEvalResults(projectName, evalRunName);
699
- logger_instance_js_1.default.info(`Evaluation run ${evalRunName} completed successfully.`);
700
- return finalResults;
701
- }
702
- else if (statusResult.status === 'error' || statusResult.status === 'failed') {
703
- // Concatenate error details into a single message string
704
- const errorMsg = `Evaluation run ${evalRunName} failed or encountered an error: ${statusResult.error ? String(statusResult.error) : statusResult.message}`;
705
- logger_instance_js_1.default.error(errorMsg);
706
- if (progressBar)
707
- progressBar.stop();
708
- // Pass only the combined message to the constructor
709
- throw new run_evaluation_js_1.JudgmentAPIError(errorMsg);
710
- }
711
- else if (statusResult.status === 'not_found') {
712
- const errorMsg = `Evaluation run ${evalRunName} not found.`;
713
- logger_instance_js_1.default.error(errorMsg);
714
- if (progressBar)
715
- progressBar.stop();
716
- // Pass only the message to the constructor
717
- throw new run_evaluation_js_1.JudgmentAPIError(errorMsg);
718
- }
719
- // Wait for the next interval
720
- yield new Promise(resolve => setTimeout(resolve, intervalMs));
721
- }
722
- catch (error) {
723
- // Handle errors during the wait loop (e.g., network issues during checkEvalStatus)
724
- logger_instance_js_1.default.error(`Error during waitForEvaluation loop (attempt ${attempt}): ${error}`);
725
- // Option: Rethrow immediately vs. retry vs. specific handling
726
- if (error instanceof run_evaluation_js_1.JudgmentAPIError) { // If it was already a processed API error, rethrow
727
- if (progressBar)
728
- progressBar.stop();
729
- throw error;
730
- }
731
- // For other errors, wait and retry (up to maxAttempts)
732
- if (attempt === maxAttempts) {
733
- if (progressBar)
734
- progressBar.stop();
735
- throw new Error(`waitForEvaluation failed after ${maxAttempts} attempts: ${error}`);
736
- }
737
- // Still retryable, wait for interval
738
- yield new Promise(resolve => setTimeout(resolve, intervalMs));
739
- }
740
- }
741
- // If loop finishes without completion or error
742
- if (progressBar)
743
- progressBar.stop();
744
- throw new Error(`Evaluation run ${evalRunName} did not complete after ${maxAttempts} attempts.`);
745
- });
746
- }
747
- /**
748
- * Create a simple ASCII progress bar
749
- * @param percent The percentage to display (0-100)
750
- * @returns A string representing the progress bar
751
- */
752
- _createProgressBar(percent) {
753
- const width = 20; // Width of the progress bar
754
- const filled = Math.round(width * (percent / 100));
755
- const empty = width - filled;
756
- return `[${'#'.repeat(filled)}${'.'.repeat(empty)}] ${percent.toFixed(1)}%`;
757
- }
758
- // Keep helper methods private
759
- getAuthHeaders() {
760
- return {
761
- 'Content-Type': 'application/json',
762
- 'Authorization': `Bearer ${this.judgmentApiKey}`,
763
- 'X-Organization-Id': this.organizationId,
764
- };
765
- }
766
- // Ensure this handles errors from Eval/Project API calls correctly
767
- handleApiError(error, context) {
768
- logger_instance_js_1.default.error(`API Error during ${context}:`);
769
- if (axios_1.default.isAxiosError(error)) {
770
- const axiosError = error;
771
- const response = axiosError.response;
772
- if (response) {
773
- logger_instance_js_1.default.error(`Status: ${response.status} ${response.statusText}`);
774
- logger_instance_js_1.default.debug('Response Data:', response.data);
775
- if (response.status === 422) {
776
- logger_instance_js_1.default.error('Validation Error Detail:', response.data);
777
- }
778
- else if (context === 'pullEval' && response.status === 404) { // Keep eval-specific handling
779
- logger_instance_js_1.default.error(`Evaluation run not found.`);
780
- }
781
- else if (context.startsWith('delete') && response.status === 404) { // Keep generic delete handling
782
- logger_instance_js_1.default.warn(`${context}: Resource not found, may have already been deleted.`);
783
- }
784
- }
785
- else if (axiosError.request) {
786
- logger_instance_js_1.default.error('No response received from server.');
787
- }
788
- else {
789
- logger_instance_js_1.default.error(`Error setting up API request for ${context}`);
790
- }
791
- }
792
- else {
793
- logger_instance_js_1.default.error(`Unexpected error during ${context}`);
794
- }
795
- }
796
- }
797
- exports.JudgmentClient = JudgmentClient;
798
- //# sourceMappingURL=judgment-client.js.map