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