@opensearch-project/agent-health 0.5.2 → 0.7.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 (230) hide show
  1. package/README.md +1 -0
  2. package/cli/dist/index.js +2325 -961
  3. package/dist/assets/index-D-Np_l_T.js +246 -0
  4. package/dist/assets/index-vZt9QZKf.css +1 -0
  5. package/dist/index.html +2 -2
  6. package/docs/CLI.md +183 -3
  7. package/docs/CONFIGURATION.md +1 -1
  8. package/docs/CONNECTORS.md +1 -1
  9. package/docs/INSTRUMENT_WITH_OTEL.md +7 -0
  10. package/docs/SDK.md +178 -5
  11. package/docs/STORAGE_INDEX_FIELD_LIMITS.md +216 -0
  12. package/docs/skills/AGENT_HEALTH.md +55 -1
  13. package/docs/skills/add-connector/SKILL.md +5 -1
  14. package/examples/eval-files/demo.eval.js +1 -1
  15. package/examples/eval-files/ops-rca-classification.eval.js +71 -0
  16. package/examples/eval-files/ops-rca-evaluator.json +15 -0
  17. package/examples/eval-files/sdk-demo.eval.js +72 -0
  18. package/examples/eval-files/sdk-describe-demo.eval.js +50 -0
  19. package/examples/eval-files/sdk-hooks-demo.eval.js +1 -1
  20. package/lib/dist/lib/agentTrends.d.ts +210 -0
  21. package/lib/dist/lib/agentTrends.d.ts.map +1 -0
  22. package/lib/dist/lib/agentTrends.js +360 -0
  23. package/lib/dist/lib/agentTrends.js.map +1 -0
  24. package/lib/dist/lib/bedrockCompat.d.ts +27 -0
  25. package/lib/dist/lib/bedrockCompat.d.ts.map +1 -0
  26. package/lib/dist/lib/bedrockCompat.js +83 -0
  27. package/lib/dist/lib/bedrockCompat.js.map +1 -0
  28. package/lib/dist/lib/benchmarkCaseReview.d.ts +114 -0
  29. package/lib/dist/lib/benchmarkCaseReview.d.ts.map +1 -0
  30. package/lib/dist/lib/benchmarkCaseReview.js +177 -0
  31. package/lib/dist/lib/benchmarkCaseReview.js.map +1 -0
  32. package/lib/dist/lib/benchmarkImage.d.ts +52 -0
  33. package/lib/dist/lib/benchmarkImage.d.ts.map +1 -0
  34. package/lib/dist/lib/benchmarkImage.js +113 -0
  35. package/lib/dist/lib/benchmarkImage.js.map +1 -0
  36. package/lib/dist/lib/benchmarkRunsTable.d.ts +109 -0
  37. package/lib/dist/lib/benchmarkRunsTable.d.ts.map +1 -0
  38. package/lib/dist/lib/benchmarkRunsTable.js +212 -0
  39. package/lib/dist/lib/benchmarkRunsTable.js.map +1 -0
  40. package/lib/dist/lib/benchmarkVersionUtils.d.ts +13 -0
  41. package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -1
  42. package/lib/dist/lib/benchmarkVersionUtils.js +21 -0
  43. package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -1
  44. package/lib/dist/lib/chunkedFetch.d.ts +18 -0
  45. package/lib/dist/lib/chunkedFetch.d.ts.map +1 -0
  46. package/lib/dist/lib/chunkedFetch.js +40 -0
  47. package/lib/dist/lib/chunkedFetch.js.map +1 -0
  48. package/lib/dist/lib/comparisonInsights.d.ts +151 -0
  49. package/lib/dist/lib/comparisonInsights.d.ts.map +1 -0
  50. package/lib/dist/lib/comparisonInsights.js +270 -0
  51. package/lib/dist/lib/comparisonInsights.js.map +1 -0
  52. package/lib/dist/lib/config/loader.d.ts.map +1 -1
  53. package/lib/dist/lib/config/loader.js +16 -1
  54. package/lib/dist/lib/config/loader.js.map +1 -1
  55. package/lib/dist/lib/config/types.d.ts +14 -0
  56. package/lib/dist/lib/config/types.d.ts.map +1 -1
  57. package/lib/dist/lib/constants.d.ts +11 -0
  58. package/lib/dist/lib/constants.d.ts.map +1 -1
  59. package/lib/dist/lib/constants.js +10 -1
  60. package/lib/dist/lib/constants.js.map +1 -1
  61. package/lib/dist/lib/contextFormat.d.ts +26 -0
  62. package/lib/dist/lib/contextFormat.d.ts.map +1 -0
  63. package/lib/dist/lib/contextFormat.js +28 -0
  64. package/lib/dist/lib/contextFormat.js.map +1 -0
  65. package/lib/dist/lib/dashboardMetrics.d.ts +11 -2
  66. package/lib/dist/lib/dashboardMetrics.d.ts.map +1 -1
  67. package/lib/dist/lib/dashboardMetrics.js +38 -3
  68. package/lib/dist/lib/dashboardMetrics.js.map +1 -1
  69. package/lib/dist/lib/envCompat.d.ts.map +1 -1
  70. package/lib/dist/lib/envCompat.js +14 -5
  71. package/lib/dist/lib/envCompat.js.map +1 -1
  72. package/lib/dist/lib/evaluationRerun.d.ts +102 -0
  73. package/lib/dist/lib/evaluationRerun.d.ts.map +1 -0
  74. package/lib/dist/lib/evaluationRerun.js +134 -0
  75. package/lib/dist/lib/evaluationRerun.js.map +1 -0
  76. package/lib/dist/lib/judgeFailureSummary.d.ts +66 -0
  77. package/lib/dist/lib/judgeFailureSummary.d.ts.map +1 -0
  78. package/lib/dist/lib/judgeFailureSummary.js +68 -0
  79. package/lib/dist/lib/judgeFailureSummary.js.map +1 -0
  80. package/lib/dist/lib/judgeStrategies.d.ts +108 -0
  81. package/lib/dist/lib/judgeStrategies.d.ts.map +1 -0
  82. package/lib/dist/lib/judgeStrategies.js +135 -0
  83. package/lib/dist/lib/judgeStrategies.js.map +1 -0
  84. package/lib/dist/lib/matchers/expect.d.ts +21 -1
  85. package/lib/dist/lib/matchers/expect.d.ts.map +1 -1
  86. package/lib/dist/lib/matchers/expect.js +51 -0
  87. package/lib/dist/lib/matchers/expect.js.map +1 -1
  88. package/lib/dist/lib/matchers/judgeAccessor.d.ts +4 -0
  89. package/lib/dist/lib/matchers/judgeAccessor.d.ts.map +1 -1
  90. package/lib/dist/lib/matchers/judgeAccessor.js +13 -2
  91. package/lib/dist/lib/matchers/judgeAccessor.js.map +1 -1
  92. package/lib/dist/lib/matchers/judgeReasoningParse.d.ts +49 -0
  93. package/lib/dist/lib/matchers/judgeReasoningParse.d.ts.map +1 -0
  94. package/lib/dist/lib/matchers/judgeReasoningParse.js +128 -0
  95. package/lib/dist/lib/matchers/judgeReasoningParse.js.map +1 -0
  96. package/lib/dist/lib/matchers/traces.d.ts +17 -2
  97. package/lib/dist/lib/matchers/traces.d.ts.map +1 -1
  98. package/lib/dist/lib/matchers/traces.js +136 -16
  99. package/lib/dist/lib/matchers/traces.js.map +1 -1
  100. package/lib/dist/lib/matchers/tracesPricing.d.ts +38 -0
  101. package/lib/dist/lib/matchers/tracesPricing.d.ts.map +1 -0
  102. package/lib/dist/lib/matchers/tracesPricing.js +64 -0
  103. package/lib/dist/lib/matchers/tracesPricing.js.map +1 -0
  104. package/lib/dist/lib/matchers/types.d.ts +25 -0
  105. package/lib/dist/lib/matchers/types.d.ts.map +1 -1
  106. package/lib/dist/lib/resolveCanonicalRun.d.ts +23 -0
  107. package/lib/dist/lib/resolveCanonicalRun.d.ts.map +1 -0
  108. package/lib/dist/lib/resolveCanonicalRun.js +26 -0
  109. package/lib/dist/lib/resolveCanonicalRun.js.map +1 -0
  110. package/lib/dist/lib/runActions.d.ts +120 -0
  111. package/lib/dist/lib/runActions.d.ts.map +1 -0
  112. package/lib/dist/lib/runActions.js +130 -0
  113. package/lib/dist/lib/runActions.js.map +1 -0
  114. package/lib/dist/lib/runInsights.d.ts +86 -0
  115. package/lib/dist/lib/runInsights.d.ts.map +1 -0
  116. package/lib/dist/lib/runInsights.js +185 -0
  117. package/lib/dist/lib/runInsights.js.map +1 -0
  118. package/lib/dist/lib/runName.d.ts +29 -0
  119. package/lib/dist/lib/runName.d.ts.map +1 -0
  120. package/lib/dist/lib/runName.js +38 -0
  121. package/lib/dist/lib/runName.js.map +1 -0
  122. package/lib/dist/lib/runReportPath.d.ts +16 -0
  123. package/lib/dist/lib/runReportPath.d.ts.map +1 -0
  124. package/lib/dist/lib/runReportPath.js +22 -0
  125. package/lib/dist/lib/runReportPath.js.map +1 -0
  126. package/lib/dist/lib/runSort.d.ts +27 -0
  127. package/lib/dist/lib/runSort.d.ts.map +1 -0
  128. package/lib/dist/lib/runSort.js +31 -0
  129. package/lib/dist/lib/runSort.js.map +1 -0
  130. package/lib/dist/lib/runStats.d.ts +109 -5
  131. package/lib/dist/lib/runStats.d.ts.map +1 -1
  132. package/lib/dist/lib/runStats.js +193 -10
  133. package/lib/dist/lib/runStats.js.map +1 -1
  134. package/lib/dist/lib/testCases/define.d.ts.map +1 -1
  135. package/lib/dist/lib/testCases/define.js +93 -46
  136. package/lib/dist/lib/testCases/define.js.map +1 -1
  137. package/lib/dist/lib/testCases/judge.d.ts.map +1 -1
  138. package/lib/dist/lib/testCases/judge.js +22 -4
  139. package/lib/dist/lib/testCases/judge.js.map +1 -1
  140. package/lib/dist/lib/testCases/loader.d.ts +35 -1
  141. package/lib/dist/lib/testCases/loader.d.ts.map +1 -1
  142. package/lib/dist/lib/testCases/loader.js +278 -31
  143. package/lib/dist/lib/testCases/loader.js.map +1 -1
  144. package/lib/dist/lib/trajectoryStepDisplay.d.ts +25 -0
  145. package/lib/dist/lib/trajectoryStepDisplay.d.ts.map +1 -0
  146. package/lib/dist/lib/trajectoryStepDisplay.js +42 -0
  147. package/lib/dist/lib/trajectoryStepDisplay.js.map +1 -0
  148. package/lib/dist/lib/utils.d.ts +34 -0
  149. package/lib/dist/lib/utils.d.ts.map +1 -1
  150. package/lib/dist/lib/utils.js +49 -0
  151. package/lib/dist/lib/utils.js.map +1 -1
  152. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +68 -22
  153. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -1
  154. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +148 -111
  155. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -1
  156. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts +21 -13
  157. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts.map +1 -1
  158. package/lib/dist/services/connectors/kiro/KiroConnector.js +22 -25
  159. package/lib/dist/services/connectors/kiro/KiroConnector.js.map +1 -1
  160. package/lib/dist/services/connectors/pi/PiConnector.d.ts +49 -10
  161. package/lib/dist/services/connectors/pi/PiConnector.d.ts.map +1 -1
  162. package/lib/dist/services/connectors/pi/PiConnector.js +102 -86
  163. package/lib/dist/services/connectors/pi/PiConnector.js.map +1 -1
  164. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts +59 -14
  165. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -1
  166. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +95 -61
  167. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -1
  168. package/lib/dist/services/evaluation/bedrockJudge.d.ts +18 -0
  169. package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -1
  170. package/lib/dist/services/evaluation/bedrockJudge.js +4 -0
  171. package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -1
  172. package/lib/dist/services/evaluation/index.d.ts +18 -1
  173. package/lib/dist/services/evaluation/index.d.ts.map +1 -1
  174. package/lib/dist/services/evaluation/index.js +156 -19
  175. package/lib/dist/services/evaluation/index.js.map +1 -1
  176. package/lib/dist/services/metrics.d.ts +55 -0
  177. package/lib/dist/services/metrics.d.ts.map +1 -0
  178. package/lib/dist/services/metrics.js +89 -0
  179. package/lib/dist/services/metrics.js.map +1 -0
  180. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +1 -1
  181. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -1
  182. package/lib/dist/services/storage/asyncBenchmarkStorage.js +30 -3
  183. package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -1
  184. package/lib/dist/services/storage/asyncRunStorage.d.ts +20 -1
  185. package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -1
  186. package/lib/dist/services/storage/asyncRunStorage.js +125 -2
  187. package/lib/dist/services/storage/asyncRunStorage.js.map +1 -1
  188. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +18 -4
  189. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -1
  190. package/lib/dist/services/storage/asyncTestCaseStorage.js +21 -4
  191. package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -1
  192. package/lib/dist/services/storage/opensearchClient.d.ts +47 -12
  193. package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -1
  194. package/lib/dist/services/storage/opensearchClient.js +12 -5
  195. package/lib/dist/services/storage/opensearchClient.js.map +1 -1
  196. package/lib/dist/services/traces/browserRecovery.d.ts +12 -1
  197. package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -1
  198. package/lib/dist/services/traces/browserRecovery.js +35 -5
  199. package/lib/dist/services/traces/browserRecovery.js.map +1 -1
  200. package/lib/dist/services/traces/index.d.ts +8 -1
  201. package/lib/dist/services/traces/index.d.ts.map +1 -1
  202. package/lib/dist/services/traces/index.js +33 -12
  203. package/lib/dist/services/traces/index.js.map +1 -1
  204. package/lib/dist/services/traces/judgeAgentsHints.d.ts +98 -3
  205. package/lib/dist/services/traces/judgeAgentsHints.d.ts.map +1 -1
  206. package/lib/dist/services/traces/judgeAgentsHints.js +144 -3
  207. package/lib/dist/services/traces/judgeAgentsHints.js.map +1 -1
  208. package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -1
  209. package/lib/dist/services/traces/messageExtraction.js +95 -33
  210. package/lib/dist/services/traces/messageExtraction.js.map +1 -1
  211. package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -1
  212. package/lib/dist/services/traces/spansToTrajectory.js +51 -13
  213. package/lib/dist/services/traces/spansToTrajectory.js.map +1 -1
  214. package/lib/dist/services/traces/tracePoller.d.ts +27 -3
  215. package/lib/dist/services/traces/tracePoller.d.ts.map +1 -1
  216. package/lib/dist/services/traces/tracePoller.js +196 -33
  217. package/lib/dist/services/traces/tracePoller.js.map +1 -1
  218. package/lib/dist/services/traces/trajectoryMerge.d.ts +79 -0
  219. package/lib/dist/services/traces/trajectoryMerge.d.ts.map +1 -0
  220. package/lib/dist/services/traces/trajectoryMerge.js +109 -0
  221. package/lib/dist/services/traces/trajectoryMerge.js.map +1 -0
  222. package/lib/dist/types/index.d.ts +250 -3
  223. package/lib/dist/types/index.d.ts.map +1 -1
  224. package/lib/dist/types/index.js +24 -0
  225. package/lib/dist/types/index.js.map +1 -1
  226. package/package.json +8 -5
  227. package/server/dist/app.js +5490 -1557
  228. package/server/dist/index.js +5490 -1557
  229. package/dist/assets/index-CCQRDlO0.js +0 -243
  230. package/dist/assets/index-CNHQVbcj.css +0 -1
@@ -228,15 +228,50 @@ export function getUniqueAgents(benchmarks) {
228
228
  }));
229
229
  }
230
230
  /**
231
- * Color palette for agents (matches existing chart patterns)
231
+ * Color palette for agents (matches existing chart patterns).
232
+ * Explicit overrides win; everything else resolves via a deterministic
233
+ * hash below so every chart that colors dots/lines/badges by agent (the
234
+ * Agent Trends dot plot included) shares ONE consistent, app-wide mapping.
232
235
  */
233
236
  export const AGENT_COLORS = {
234
237
  'demo': '#6b7280', // gray-500
235
238
  };
236
239
  /**
237
- * Get color for an agent key
240
+ * Distinct, readable hues for agents with no explicit override above.
241
+ * Kept modest (10 colors) — with many agents in view some hues repeat,
242
+ * but callers that need N agents to stay unambiguous (e.g. an all-agents
243
+ * overlay chart) should disambiguate by label/position, not by adding
244
+ * more hues; past ~10 simultaneous colors most people can't reliably
245
+ * tell them apart anyway.
246
+ */
247
+ const AGENT_COLOR_PALETTE = [
248
+ '#3b82f6', // blue-500
249
+ '#10b981', // emerald-500
250
+ '#f59e0b', // amber-500
251
+ '#ef4444', // red-500
252
+ '#8b5cf6', // violet-500
253
+ '#06b6d4', // cyan-500
254
+ '#ec4899', // pink-500
255
+ '#84cc16', // lime-500
256
+ '#f97316', // orange-500
257
+ '#6366f1', // indigo-500
258
+ ];
259
+ /**
260
+ * Get color for an agent key. Deterministic per key via a simple string
261
+ * hash into `AGENT_COLOR_PALETTE` — NOT a sorted-index assignment, on
262
+ * purpose: an index-based scheme reassigns colors as the visible agent
263
+ * set changes (e.g. narrowing a benchmark filter from 14 agents to 3
264
+ * shifts everyone's index), so the SAME agent could render a different
265
+ * color depending on what else happens to be in scope. A hash of the key
266
+ * itself is stable everywhere, independent of any other agent's presence.
238
267
  */
239
268
  export function getAgentColor(agentKey) {
240
- return AGENT_COLORS[agentKey] || '#3b82f6';
269
+ if (AGENT_COLORS[agentKey])
270
+ return AGENT_COLORS[agentKey];
271
+ let hash = 0;
272
+ for (let i = 0; i < agentKey.length; i++) {
273
+ hash = (hash * 31 + agentKey.charCodeAt(i)) | 0;
274
+ }
275
+ return AGENT_COLOR_PALETTE[Math.abs(hash) % AGENT_COLOR_PALETTE.length];
241
276
  }
242
277
  //# sourceMappingURL=dashboardMetrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboardMetrics.js","sourceRoot":"","sources":["../../dashboardMetrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboardMetrics.js","sourceRoot":"","sources":["../../dashboardMetrics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"envCompat.d.ts","sourceRoot":"","sources":["../../envCompat.ts"],"names":[],"mappings":"AAuBA;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW5E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAiBrE;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,IAAI,IAAI,CAErD"}
1
+ {"version":3,"file":"envCompat.d.ts","sourceRoot":"","sources":["../../envCompat.ts"],"names":[],"mappings":"AAuBA;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkB5E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAkBrE;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,IAAI,IAAI,CAErD"}
@@ -26,10 +26,17 @@ const warned = new Set();
26
26
  * deprecation warning to stderr.
27
27
  */
28
28
  export function readEnv(newName, oldName) {
29
- const newVal = process.env[newName];
29
+ // Browser-like environments (and tests simulating them) may have no
30
+ // process.env at all; env reads must degrade to "unset", never throw,
31
+ // because this helper sits on module-load paths (lib/config,
32
+ // lib/portConfig) that browser bundles also import.
33
+ const env = typeof process !== 'undefined' ? process.env : undefined;
34
+ if (!env)
35
+ return undefined;
36
+ const newVal = env[newName];
30
37
  if (newVal !== undefined)
31
38
  return newVal;
32
- const oldVal = process.env[oldName];
39
+ const oldVal = env[oldName];
33
40
  if (oldVal !== undefined) {
34
41
  warnDeprecated(oldName, newName);
35
42
  return oldVal;
@@ -41,7 +48,8 @@ export function readEnv(newName, oldName) {
41
48
  * Useful for tests that exercise deprecation paths without triggering reads.
42
49
  */
43
50
  export function isLegacyEnvSet(oldName) {
44
- return process.env[oldName] !== undefined;
51
+ const env = typeof process !== 'undefined' ? process.env : undefined;
52
+ return env ? env[oldName] !== undefined : false;
45
53
  }
46
54
  /**
47
55
  * Emit a one-time deprecation warning for an old env var name.
@@ -54,8 +62,9 @@ export function warnDeprecated(oldName, newName) {
54
62
  if (warned.has(oldName))
55
63
  return;
56
64
  warned.add(oldName);
57
- if (process.env.AH_QUIET_DEPRECATIONS === '1' ||
58
- process.env.AGENT_HEALTH_QUIET_DEPRECATIONS === '1') {
65
+ const env = typeof process !== 'undefined' ? process.env : undefined;
66
+ if (env?.AH_QUIET_DEPRECATIONS === '1' ||
67
+ env?.AGENT_HEALTH_QUIET_DEPRECATIONS === '1') {
59
68
  return;
60
69
  }
61
70
  // Use console.warn so this surfaces in normal stderr but doesn't crash
@@ -1 +1 @@
1
- {"version":3,"file":"envCompat.js","sourceRoot":"","sources":["../../envCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,OAAe;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,OAAe;IAC7D,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO;IAChC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEpB,IACE,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG;QACzC,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG,EACnD,CAAC;QACD,OAAO;IACT,CAAC;IAED,uEAAuE;IACvE,yEAAyE;IACzE,OAAO,CAAC,IAAI,CACV,qCAAqC,OAAO,gCAAgC,OAAO,IAAI;QACvF,mDAAmD,CACpD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B;IAC5C,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"envCompat.js","sourceRoot":"","sources":["../../envCompat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,OAAe;IACtD,oEAAoE;IACpE,sEAAsE;IACtE,6DAA6D;IAC7D,oDAAoD;IACpD,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAE3B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,OAAe;IAC7D,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO;IAChC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEpB,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,IACE,GAAG,EAAE,qBAAqB,KAAK,GAAG;QAClC,GAAG,EAAE,+BAA+B,KAAK,GAAG,EAC5C,CAAC;QACD,OAAO;IACT,CAAC;IAED,uEAAuE;IACvE,yEAAyE;IACzE,OAAO,CAAC,IAAI,CACV,qCAAqC,OAAO,gCAAgC,OAAO,IAAI;QACvF,mDAAmD,CACpD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B;IAC5C,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Pure, isomorphic helpers for "re-run an evaluation run" (duplicate the
3
+ * source run's config into a brand-new run, linked back via `rerunOf`).
4
+ *
5
+ * Split out from the route/service layer so both the server (which owns the
6
+ * real duplication + creation) and the UI (which renders a name preview in
7
+ * the confirm dialog before the user commits) can share the exact same
8
+ * naming logic without an extra network round-trip. No storage/IO here.
9
+ */
10
+ import type { EvaluationRun, TestCaseSource } from '../types/index.js';
11
+ /**
12
+ * Compute the name for a new run being created as a re-run of `sourceName`.
13
+ *
14
+ * - "My Run" -> "My Run (re-run)"
15
+ * - "My Run (re-run)" -> "My Run (re-run 2)"
16
+ * - "My Run (re-run 2)" -> "My Run (re-run 3)"
17
+ * - undefined/empty -> "Evaluation Run (re-run)"
18
+ */
19
+ export declare function computeRerunName(sourceName: string | undefined | null): string;
20
+ /**
21
+ * Fields duplicated onto the new run when re-running a source run. Mirrors
22
+ * the subset of {@link EvaluationRun} that `POST /api/storage/evaluation-runs`
23
+ * accepts as input (see server/routes/storage/evaluationRuns.ts) — i.e. the
24
+ * "config" as opposed to results/stats/timestamps, which are always fresh.
25
+ */
26
+ export interface RerunConfig {
27
+ sources: TestCaseSource[];
28
+ agentKey: string;
29
+ /** Fallback modelId if the agent's own config can't resolve one (legacy). */
30
+ modelId: string;
31
+ judgeModelId?: string;
32
+ evaluatorId?: string;
33
+ headers?: Record<string, string>;
34
+ concurrency?: number;
35
+ agentEndpoint?: string;
36
+ description?: string;
37
+ benchmarkId?: string;
38
+ benchmarkVersion?: number;
39
+ }
40
+ export interface BuildRerunConfigResult {
41
+ config: RerunConfig;
42
+ /**
43
+ * Human-readable notes on which fields were missing on the source run and
44
+ * what explicit default was substituted (empty when the source run's
45
+ * config was fully populated). Surfaced back to the caller (API response
46
+ * -> UI) so a legacy run's best-effort re-run isn't a silent guess.
47
+ */
48
+ defaultsApplied: string[];
49
+ }
50
+ export interface BuildRerunConfigError {
51
+ error: string;
52
+ }
53
+ /**
54
+ * User-supplied tweaks to a rerun's config, applied on top of the source
55
+ * run's duplicated config (see {@link applyRerunOverrides}). Every field is
56
+ * optional — an omitted field keeps the source run's value untouched.
57
+ * `null` explicitly clears an optional field back to "use default"
58
+ * (distinct from `undefined`, which means "no change").
59
+ */
60
+ export interface RerunOverrides {
61
+ agentKey?: string;
62
+ judgeModelId?: string | null;
63
+ evaluatorId?: string | null;
64
+ concurrency?: number;
65
+ /**
66
+ * Swap the test-case source to a different benchmark's current test case
67
+ * list. `null` clears the benchmark association (falls back to the
68
+ * source run's original `sources`). Setting this REPLACES `sources` with
69
+ * a single `{type:'benchmark'}` source — the rerun dialog's "tweak test
70
+ * cases" affordance is scoped to swapping benchmarks, not the full
71
+ * multi-source composer (see NewRunPage for that).
72
+ */
73
+ benchmarkId?: string | null;
74
+ }
75
+ export interface ApplyRerunOverridesResult {
76
+ config: RerunConfig;
77
+ /** True when at least one override changed the effective config. */
78
+ modified: boolean;
79
+ }
80
+ /**
81
+ * Apply user-supplied overrides on top of a duplicated rerun config. Pure
82
+ * function — returns a new config object plus whether anything actually
83
+ * changed (used to decide whether the new run should be flagged
84
+ * `modified: true` in addition to recording `rerunOf`).
85
+ *
86
+ * Only compares fields that are actually present in `overrides` (`in`
87
+ * check, not just truthiness) so "no overrides object at all" and "an
88
+ * overrides object whose fields happen to equal the source" both correctly
89
+ * report `modified: false`.
90
+ */
91
+ export declare function applyRerunOverrides(config: RerunConfig, overrides?: RerunOverrides | null): ApplyRerunOverridesResult;
92
+ /**
93
+ * Duplicate a source run's execution config for a re-run, applying explicit,
94
+ * reported defaults for fields missing on legacy run documents. Pure
95
+ * function — no storage access (benchmark-existence checks live in
96
+ * services/evaluationRerun.ts, which needs the storage module).
97
+ *
98
+ * Returns `{ error }` only when the source run is missing a field with no
99
+ * safe default (nothing to run, or no agent to run it against).
100
+ */
101
+ export declare function buildRerunConfig(sourceRun: EvaluationRun): BuildRerunConfigResult | BuildRerunConfigError;
102
+ //# sourceMappingURL=evaluationRerun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluationRerun.d.ts","sourceRoot":"","sources":["../../evaluationRerun.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAU7D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAgB9E;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,WAAW,CAAC;IACpB,oEAAoE;IACpE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,GAChC,yBAAyB,CA2C3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,aAAa,GACvB,sBAAsB,GAAG,qBAAqB,CAiDhD"}
@@ -0,0 +1,134 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ const DEFAULT_RUN_NAME = 'Evaluation Run';
6
+ /**
7
+ * Matches a trailing "(re-run)" or "(re-run N)" suffix, case-insensitively,
8
+ * capturing the base name and the optional numeric suffix.
9
+ */
10
+ const RERUN_SUFFIX_RE = /^(.*?)\s*\(re-run(?:\s+(\d+))?\)$/i;
11
+ /**
12
+ * Compute the name for a new run being created as a re-run of `sourceName`.
13
+ *
14
+ * - "My Run" -> "My Run (re-run)"
15
+ * - "My Run (re-run)" -> "My Run (re-run 2)"
16
+ * - "My Run (re-run 2)" -> "My Run (re-run 3)"
17
+ * - undefined/empty -> "Evaluation Run (re-run)"
18
+ */
19
+ export function computeRerunName(sourceName) {
20
+ const trimmed = (sourceName || '').trim();
21
+ const base = trimmed || DEFAULT_RUN_NAME;
22
+ const match = base.match(RERUN_SUFFIX_RE);
23
+ if (!match) {
24
+ return `${base} (re-run)`;
25
+ }
26
+ const [, rawBaseName, suffixNumber] = match;
27
+ // A source named literally "(re-run)" / "(re-run 2)" (no prefix) captures
28
+ // an empty baseName — fall back to the default rather than emitting a
29
+ // leading-space name like " (re-run 2)".
30
+ const baseName = rawBaseName.trim() || DEFAULT_RUN_NAME;
31
+ const nextNumber = suffixNumber ? parseInt(suffixNumber, 10) + 1 : 2;
32
+ return `${baseName} (re-run ${nextNumber})`;
33
+ }
34
+ /**
35
+ * Apply user-supplied overrides on top of a duplicated rerun config. Pure
36
+ * function — returns a new config object plus whether anything actually
37
+ * changed (used to decide whether the new run should be flagged
38
+ * `modified: true` in addition to recording `rerunOf`).
39
+ *
40
+ * Only compares fields that are actually present in `overrides` (`in`
41
+ * check, not just truthiness) so "no overrides object at all" and "an
42
+ * overrides object whose fields happen to equal the source" both correctly
43
+ * report `modified: false`.
44
+ */
45
+ export function applyRerunOverrides(config, overrides) {
46
+ if (!overrides)
47
+ return { config, modified: false };
48
+ let modified = false;
49
+ const next = { ...config };
50
+ if (overrides.agentKey !== undefined && overrides.agentKey !== config.agentKey) {
51
+ next.agentKey = overrides.agentKey;
52
+ modified = true;
53
+ }
54
+ if ('judgeModelId' in overrides) {
55
+ const val = overrides.judgeModelId === null ? undefined : overrides.judgeModelId;
56
+ if (val !== config.judgeModelId) {
57
+ next.judgeModelId = val;
58
+ modified = true;
59
+ }
60
+ }
61
+ if ('evaluatorId' in overrides) {
62
+ const val = overrides.evaluatorId === null ? undefined : overrides.evaluatorId;
63
+ if (val !== config.evaluatorId) {
64
+ next.evaluatorId = val;
65
+ modified = true;
66
+ }
67
+ }
68
+ if (overrides.concurrency !== undefined && overrides.concurrency !== config.concurrency) {
69
+ next.concurrency = overrides.concurrency;
70
+ modified = true;
71
+ }
72
+ if ('benchmarkId' in overrides) {
73
+ const val = overrides.benchmarkId === null ? undefined : overrides.benchmarkId;
74
+ if (val !== config.benchmarkId) {
75
+ next.benchmarkId = val;
76
+ next.benchmarkVersion = undefined; // pinned version no longer applies once the benchmark itself changes
77
+ next.sources = val ? [{ type: 'benchmark', benchmarkId: val }] : config.sources;
78
+ modified = true;
79
+ }
80
+ }
81
+ return { config: next, modified };
82
+ }
83
+ /**
84
+ * Duplicate a source run's execution config for a re-run, applying explicit,
85
+ * reported defaults for fields missing on legacy run documents. Pure
86
+ * function — no storage access (benchmark-existence checks live in
87
+ * services/evaluationRerun.ts, which needs the storage module).
88
+ *
89
+ * Returns `{ error }` only when the source run is missing a field with no
90
+ * safe default (nothing to run, or no agent to run it against).
91
+ */
92
+ export function buildRerunConfig(sourceRun) {
93
+ const defaultsApplied = [];
94
+ if (!sourceRun.agentKey) {
95
+ return { error: 'Source run is missing agentKey; cannot determine which agent to re-run.' };
96
+ }
97
+ let sources = sourceRun.sources;
98
+ if (!sources || sources.length === 0) {
99
+ const snapshotIds = (sourceRun.testCaseSnapshots || []).map(s => s.id);
100
+ if (snapshotIds.length === 0) {
101
+ return {
102
+ error: 'Source run has no test cases to re-run (missing both sources and testCaseSnapshots).',
103
+ };
104
+ }
105
+ sources = [{ type: 'test-case-ids', ids: snapshotIds }];
106
+ defaultsApplied.push(`sources -> derived from testCaseSnapshots (${snapshotIds.length} test case id(s); legacy run had no sources recorded)`);
107
+ }
108
+ let concurrency = sourceRun.concurrency;
109
+ if (concurrency == null) {
110
+ concurrency = 1;
111
+ defaultsApplied.push('concurrency -> 1 (default; not set on source run)');
112
+ }
113
+ const config = {
114
+ sources,
115
+ agentKey: sourceRun.agentKey,
116
+ modelId: sourceRun.modelId || '',
117
+ judgeModelId: sourceRun.judgeModelId,
118
+ evaluatorId: sourceRun.evaluatorId,
119
+ headers: sourceRun.headers,
120
+ concurrency,
121
+ agentEndpoint: sourceRun.agentEndpoint,
122
+ description: sourceRun.description,
123
+ benchmarkId: sourceRun.benchmarkId,
124
+ benchmarkVersion: sourceRun.benchmarkVersion,
125
+ };
126
+ // NOTE: evaluatorId/judgeModelId/agentEndpoint/headers/description are
127
+ // legitimately optional on ANY run (not just legacy ones), so leaving them
128
+ // `undefined` is normal behavior, not a legacy-config gap — they are NOT
129
+ // reported in `defaultsApplied` (that list is reserved for cases where we
130
+ // had to fabricate a value because the source run's config was
131
+ // incomplete).
132
+ return { config, defaultsApplied };
133
+ }
134
+ //# sourceMappingURL=evaluationRerun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluationRerun.js","sourceRoot":"","sources":["../../evaluationRerun.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAE1C;;;GAGG;AACH,MAAM,eAAe,GAAG,oCAAoC,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAqC;IACpE,MAAM,OAAO,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,IAAI,gBAAgB,CAAC;IAEzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,GAAG,IAAI,WAAW,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC;IAC5C,0EAA0E;IAC1E,sEAAsE;IACtE,yCAAyC;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,gBAAgB,CAAC;IACxD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,GAAG,QAAQ,YAAY,UAAU,GAAG,CAAC;AAC9C,CAAC;AAmED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAmB,EACnB,SAAiC;IAEjC,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAEnD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,IAAI,GAAgB,EAAE,GAAG,MAAM,EAAE,CAAC;IAExC,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC/E,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACnC,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,IAAI,cAAc,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC;QACjF,IAAI,GAAG,KAAK,MAAM,CAAC,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;YACxB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;QAC/E,IAAI,GAAG,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACvB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;QACxF,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QACzC,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;QAC/E,IAAI,GAAG,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC,qEAAqE;YACxG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAChF,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAwB;IAExB,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,yEAAyE,EAAE,CAAC;IAC9F,CAAC;IAED,IAAI,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,KAAK,EAAE,sFAAsF;aAC9F,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;QACxD,eAAe,CAAC,IAAI,CAClB,8CAA8C,WAAW,CAAC,MAAM,uDAAuD,CACxH,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;IACxC,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;QACxB,WAAW,GAAG,CAAC,CAAC;QAChB,eAAe,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,MAAM,GAAgB;QAC1B,OAAO;QACP,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE;QAChC,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,WAAW;QACX,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;KAC7C,CAAC;IAEF,uEAAuE;IACvE,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,+DAA+D;IAC/D,eAAe;IAEf,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Run-level judge-failure surfacing.
3
+ *
4
+ * Background: an individual case whose evaluator (judge) could not produce
5
+ * a verdict is already visible per-case as the amber "errored" badge (see
6
+ * `lib/runStats.ts` / `components/evals3/ResultStatus.tsx`) -- but nothing
7
+ * aggregates WHY across a run. A run whose judge call fails on every case
8
+ * (e.g. the original incident: the agent-trace-judge provider hard-failing
9
+ * with "needs a runId or trace correlation hint" for every case of a
10
+ * non-instrumented REST agent's 62-case run, before it was fixed to degrade
11
+ * to trajectory-only judging instead) looks IDENTICAL in the runs list to
12
+ * "the agent did badly" -- the errored/failed count is a bare number with no
13
+ * text explaining the cause.
14
+ *
15
+ * `computeJudgeFailureSummary` aggregates the dominant per-case reason into
16
+ * one line, persisted on `run.judgeFailureSummary` (BenchmarkRun /
17
+ * EvaluationRun) and rendered in the runs list + inspector.
18
+ *
19
+ * Two report shapes are recognized (see {@link extractJudgeFailureReason}):
20
+ * - The canonical shape written by `buildEvaluatorErrorPatch('judge_failed',
21
+ * ...)` (services/evaluation/evaluatorError.ts): `metricsStatus: 'error'`
22
+ * with a `traceError` tagged `kind=judge_failed`.
23
+ * - The legacy/back-compat shape some pre-fix and outer-catch code paths
24
+ * still produce: `status: 'failed'` with `llmJudgeReasoning` explicitly
25
+ * naming the judge as the failure point (e.g. "Evaluation failed:
26
+ * Bedrock Judge validation error ..."). Scoped to messages that mention
27
+ * "judge" so a plain agent/network failure sharing the same generic
28
+ * `status: 'failed'` shape isn't mislabeled as a judge problem.
29
+ */
30
+ export interface CaseFailureLike {
31
+ /** EvaluationReport.status */
32
+ status?: string;
33
+ /** EvaluationReport.metricsStatus */
34
+ metricsStatus?: string;
35
+ /** Set by buildEvaluatorErrorPatch(). */
36
+ traceError?: string;
37
+ /** Option-B BC field; also the legacy shape's error carrier. */
38
+ llmJudgeReasoning?: string;
39
+ }
40
+ /**
41
+ * Extract the human-readable reason a single case's report represents a
42
+ * JUDGE (not agent) failure, or `undefined` if it doesn't represent one at
43
+ * all (case passed/failed normally, or failed for a non-judge reason such as
44
+ * the agent itself crashing).
45
+ */
46
+ export declare function extractJudgeFailureReason(report: CaseFailureLike | null | undefined): string | undefined;
47
+ /**
48
+ * Aggregate per-case judge-failure reasons (as returned by
49
+ * {@link extractJudgeFailureReason}, one entry per case in the run,
50
+ * `undefined` for cases that weren't a judge failure) into one run-level
51
+ * summary line.
52
+ *
53
+ * Only fires when judge failures are the DOMINANT outcome (a strict majority,
54
+ * > 50% of total
55
+ * cases) -- a couple of incidental judge failures amid an otherwise-healthy
56
+ * run don't need a run-level banner; the per-case badge already covers
57
+ * that. Ties on the most-frequent distinct message break in first-seen
58
+ * order.
59
+ *
60
+ * @param reasons per-case reasons (or undefined), one entry per case that
61
+ * actually ran (NOT necessarily equal to `total` -- a run in progress may
62
+ * have fewer entries than its planned total).
63
+ * @param total the run's total planned case count (denominator).
64
+ */
65
+ export declare function computeJudgeFailureSummary(reasons: Array<string | undefined>, total: number): string | undefined;
66
+ //# sourceMappingURL=judgeFailureSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgeFailureSummary.d.ts","sourceRoot":"","sources":["../../judgeFailureSummary.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAKD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAgBxG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,EAClC,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,SAAS,CAmBpB"}
@@ -0,0 +1,68 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ const PATCH_JUDGE_FAILURE_RE = /kind=judge_failed/;
6
+ const LEGACY_JUDGE_FAILURE_RE = /^Evaluation failed:.*\bjudge\b/i;
7
+ /**
8
+ * Extract the human-readable reason a single case's report represents a
9
+ * JUDGE (not agent) failure, or `undefined` if it doesn't represent one at
10
+ * all (case passed/failed normally, or failed for a non-judge reason such as
11
+ * the agent itself crashing).
12
+ */
13
+ export function extractJudgeFailureReason(report) {
14
+ if (!report)
15
+ return undefined;
16
+ if (report.metricsStatus === 'error' && PATCH_JUDGE_FAILURE_RE.test(report.traceError || '')) {
17
+ // traceError format: "<Label> (kind=judge_failed): <message>" -- the
18
+ // part after the tag is already the human-readable message.
19
+ const traceError = report.traceError;
20
+ const idx = traceError.indexOf('): ');
21
+ return idx >= 0 ? traceError.slice(idx + 3) : traceError;
22
+ }
23
+ if (report.status === 'failed' && LEGACY_JUDGE_FAILURE_RE.test(report.llmJudgeReasoning || '')) {
24
+ return (report.llmJudgeReasoning || '').replace(/^Evaluation failed:\s*/, '');
25
+ }
26
+ return undefined;
27
+ }
28
+ /**
29
+ * Aggregate per-case judge-failure reasons (as returned by
30
+ * {@link extractJudgeFailureReason}, one entry per case in the run,
31
+ * `undefined` for cases that weren't a judge failure) into one run-level
32
+ * summary line.
33
+ *
34
+ * Only fires when judge failures are the DOMINANT outcome (a strict majority,
35
+ * > 50% of total
36
+ * cases) -- a couple of incidental judge failures amid an otherwise-healthy
37
+ * run don't need a run-level banner; the per-case badge already covers
38
+ * that. Ties on the most-frequent distinct message break in first-seen
39
+ * order.
40
+ *
41
+ * @param reasons per-case reasons (or undefined), one entry per case that
42
+ * actually ran (NOT necessarily equal to `total` -- a run in progress may
43
+ * have fewer entries than its planned total).
44
+ * @param total the run's total planned case count (denominator).
45
+ */
46
+ export function computeJudgeFailureSummary(reasons, total) {
47
+ if (total <= 0)
48
+ return undefined;
49
+ const judgeFailed = reasons.filter((r) => !!r);
50
+ if (judgeFailed.length === 0)
51
+ return undefined;
52
+ if (judgeFailed.length * 2 <= total)
53
+ return undefined;
54
+ const counts = new Map();
55
+ for (const r of judgeFailed)
56
+ counts.set(r, (counts.get(r) ?? 0) + 1);
57
+ let dominant = judgeFailed[0];
58
+ let dominantCount = 0;
59
+ for (const [reason, count] of counts) {
60
+ if (count > dominantCount) {
61
+ dominant = reason;
62
+ dominantCount = count;
63
+ }
64
+ }
65
+ const n = judgeFailed.length;
66
+ return `${n}/${total} case${n === 1 ? '' : 's'} failed at the judge step: ${dominant}`;
67
+ }
68
+ //# sourceMappingURL=judgeFailureSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgeFailureSummary.js","sourceRoot":"","sources":["../../judgeFailureSummary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2CH,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AACnD,MAAM,uBAAuB,GAAG,iCAAiC,CAAC;AAElE;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAA0C;IAClF,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,IAAI,MAAM,CAAC,aAAa,KAAK,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7F,qEAAqE;QACrE,4DAA4D;QAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,UAAW,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC3D,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/F,OAAO,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAkC,EAClC,KAAa;IAEb,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK;QAAE,OAAO,SAAS,CAAC;IAEtD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,WAAW;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,IAAI,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACrC,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;YAC1B,QAAQ,GAAG,MAAM,CAAC;YAClB,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;IAC7B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,8BAA8B,QAAQ,EAAE,CAAC;AACzF,CAAC"}