llm-testrunner-components 1.0.6 → 1.0.9

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 (266) hide show
  1. package/README.md +101 -100
  2. package/dist/cjs/app-chips_5.cjs.entry.js +158 -0
  3. package/dist/cjs/app-chips_5.cjs.entry.js.map +1 -0
  4. package/dist/cjs/app-globals-Chb-oJtg.js +34 -0
  5. package/dist/cjs/app-globals-Chb-oJtg.js.map +1 -0
  6. package/dist/cjs/index-By1scwl6.js +25542 -0
  7. package/dist/cjs/index-By1scwl6.js.map +1 -0
  8. package/dist/cjs/index-CgmLNwZO.js +21460 -0
  9. package/dist/cjs/index-CgmLNwZO.js.map +1 -0
  10. package/dist/cjs/index.cjs.js +5 -483
  11. package/dist/cjs/index.cjs.js.map +1 -1
  12. package/dist/cjs/llm-testrunner.cjs.js +6 -4
  13. package/dist/cjs/llm-testrunner.cjs.js.map +1 -1
  14. package/dist/cjs/loader.cjs.js +5 -3
  15. package/dist/collection/collection-manifest.json +8 -3
  16. package/dist/collection/components/error-message/error-message.css +34 -0
  17. package/dist/collection/components/error-message/error-message.js +2 -2
  18. package/dist/collection/components/error-message/error-message.js.map +1 -1
  19. package/dist/collection/components/llm-test-runner/header/llm-test-runner-header.css +60 -0
  20. package/dist/collection/components/llm-test-runner/header/llm-test-runner-header.js +18 -0
  21. package/dist/collection/components/llm-test-runner/header/llm-test-runner-header.js.map +1 -0
  22. package/dist/collection/components/llm-test-runner/llm-test-runner.css +17 -657
  23. package/dist/collection/components/llm-test-runner/llm-test-runner.import-export.test.js +253 -0
  24. package/dist/collection/components/llm-test-runner/llm-test-runner.import-export.test.js.map +1 -0
  25. package/dist/collection/components/llm-test-runner/llm-test-runner.js +191 -200
  26. package/dist/collection/components/llm-test-runner/llm-test-runner.js.map +1 -1
  27. package/dist/collection/components/llm-test-runner/test-cases/actions/row-actions.css +28 -0
  28. package/dist/collection/components/llm-test-runner/test-cases/actions/row-actions.js +6 -0
  29. package/dist/collection/components/llm-test-runner/test-cases/actions/row-actions.js.map +1 -0
  30. package/dist/collection/components/llm-test-runner/test-cases/evaluation/evaluation-summary.css +67 -0
  31. package/dist/collection/components/llm-test-runner/test-cases/evaluation/evaluation-summary.js +5 -0
  32. package/dist/collection/components/llm-test-runner/test-cases/evaluation/evaluation-summary.js.map +1 -0
  33. package/dist/collection/components/llm-test-runner/test-cases/llm-test-case-row.css +42 -0
  34. package/dist/collection/components/llm-test-runner/test-cases/llm-test-case-row.js +39 -0
  35. package/dist/collection/components/llm-test-runner/test-cases/llm-test-case-row.js.map +1 -0
  36. package/dist/collection/components/llm-test-runner/test-cases/llm-test-cases.css +39 -0
  37. package/dist/collection/components/llm-test-runner/test-cases/llm-test-cases.js +7 -0
  38. package/dist/collection/components/llm-test-runner/test-cases/llm-test-cases.js.map +1 -0
  39. package/dist/collection/components/llm-test-runner/test-cases/output/response-output.css +51 -0
  40. package/dist/collection/components/llm-test-runner/test-cases/output/response-output.js +5 -0
  41. package/dist/collection/components/llm-test-runner/test-cases/output/response-output.js.map +1 -0
  42. package/dist/collection/global/env.js +3 -1
  43. package/dist/collection/global/env.js.map +1 -1
  44. package/dist/collection/index.js.map +1 -1
  45. package/dist/collection/lib/evaluation/constants.js +14 -0
  46. package/dist/collection/lib/evaluation/constants.js.map +1 -0
  47. package/dist/collection/lib/evaluation/evaluation-engine.js +45 -45
  48. package/dist/collection/lib/evaluation/evaluation-engine.js.map +1 -1
  49. package/dist/collection/lib/evaluation/evaluation-service.js +33 -0
  50. package/dist/collection/lib/evaluation/evaluation-service.js.map +1 -0
  51. package/dist/collection/lib/evaluation/evaluators/bleu/bleu-evaluator.js +116 -0
  52. package/dist/collection/lib/evaluation/evaluators/bleu/bleu-evaluator.js.map +1 -0
  53. package/dist/collection/lib/evaluation/evaluators/bleu/tests/bleu.test.js +352 -0
  54. package/dist/collection/lib/evaluation/evaluators/bleu/tests/bleu.test.js.map +1 -0
  55. package/dist/collection/lib/evaluation/evaluators/exact/exact.js +44 -0
  56. package/dist/collection/lib/evaluation/evaluators/exact/exact.js.map +1 -0
  57. package/dist/collection/lib/evaluation/evaluators/rouge1-evaluator.js +88 -0
  58. package/dist/collection/lib/evaluation/evaluators/rouge1-evaluator.js.map +1 -0
  59. package/dist/collection/lib/evaluation/evaluators/rougeL-evaluator.js +82 -0
  60. package/dist/collection/lib/evaluation/evaluators/rougeL-evaluator.js.map +1 -0
  61. package/dist/collection/lib/evaluation/evaluators/rougeL-evaluator.test.js +326 -0
  62. package/dist/collection/lib/evaluation/evaluators/rougeL-evaluator.test.js.map +1 -0
  63. package/dist/collection/lib/evaluation/evaluators/semantic/SemanticEvaluator.js +69 -0
  64. package/dist/collection/lib/evaluation/evaluators/semantic/SemanticEvaluator.js.map +1 -0
  65. package/dist/collection/lib/evaluation/evaluators/semantic/evaluate-keywords.js +56 -0
  66. package/dist/collection/lib/evaluation/evaluators/semantic/evaluate-keywords.js.map +1 -0
  67. package/dist/collection/lib/evaluation/evaluators/semantic/index.js +7 -0
  68. package/dist/collection/lib/evaluation/evaluators/semantic/index.js.map +1 -0
  69. package/dist/collection/lib/evaluation/evaluators/semantic/model-loader.js +19 -0
  70. package/dist/collection/lib/evaluation/evaluators/semantic/model-loader.js.map +1 -0
  71. package/dist/collection/lib/evaluation/evaluators/semantic/similarity-utils.js +16 -0
  72. package/dist/collection/lib/evaluation/evaluators/semantic/similarity-utils.js.map +1 -0
  73. package/dist/collection/lib/evaluation/evaluators/semantic/tests/evaluate-keywords.test.js +65 -0
  74. package/dist/collection/lib/evaluation/evaluators/semantic/tests/evaluate-keywords.test.js.map +1 -0
  75. package/dist/collection/lib/evaluation/evaluators/semantic/text-utils.js +5 -0
  76. package/dist/collection/lib/evaluation/evaluators/semantic/text-utils.js.map +1 -0
  77. package/dist/collection/lib/evaluation/index.js.map +1 -1
  78. package/dist/collection/lib/evaluation/rouge1-evaluator.test.js +117 -0
  79. package/dist/collection/lib/evaluation/rouge1-evaluator.test.js.map +1 -0
  80. package/dist/collection/lib/evaluation/types.js.map +1 -1
  81. package/dist/collection/lib/file/file-download.js +18 -0
  82. package/dist/collection/lib/file/file-download.js.map +1 -0
  83. package/dist/collection/lib/file/file-reader.js +14 -0
  84. package/dist/collection/lib/file/file-reader.js.map +1 -0
  85. package/dist/collection/lib/form/components/app-chips.css +97 -0
  86. package/dist/collection/lib/form/components/app-chips.js +155 -0
  87. package/dist/collection/lib/form/components/app-chips.js.map +1 -0
  88. package/dist/collection/lib/form/components/app-select.css +28 -0
  89. package/dist/collection/lib/form/components/app-select.js +101 -0
  90. package/dist/collection/lib/form/components/app-select.js.map +1 -0
  91. package/dist/collection/lib/form/components/app-textarea.css +38 -0
  92. package/dist/collection/lib/form/components/app-textarea.js +126 -0
  93. package/dist/collection/lib/form/components/app-textarea.js.map +1 -0
  94. package/dist/collection/lib/form/form-builder.js +171 -0
  95. package/dist/collection/lib/form/form-builder.js.map +1 -0
  96. package/dist/collection/lib/form/schema/base-input-field-config.js +2 -0
  97. package/dist/collection/lib/form/schema/base-input-field-config.js.map +1 -0
  98. package/dist/collection/lib/form/schema/form-control-config.js +2 -0
  99. package/dist/collection/lib/form/schema/form-control-config.js.map +1 -0
  100. package/dist/collection/lib/form/schema/index.js +8 -0
  101. package/dist/collection/lib/form/schema/index.js.map +1 -0
  102. package/dist/collection/lib/import-export/test-results-csv.js +65 -0
  103. package/dist/collection/lib/import-export/test-results-csv.js.map +1 -0
  104. package/dist/collection/lib/import-export/test-suite-exporter.js +15 -0
  105. package/dist/collection/lib/import-export/test-suite-exporter.js.map +1 -0
  106. package/dist/collection/lib/import-export/test-suite-importer.js +44 -0
  107. package/dist/collection/lib/import-export/test-suite-importer.js.map +1 -0
  108. package/dist/collection/lib/rate-limited-fetcher/rate-limited-fetcher.js +6 -6
  109. package/dist/collection/lib/rate-limited-fetcher/rate-limited-fetcher.js.map +1 -1
  110. package/dist/collection/lib/test-cases/test-case-factory.js +56 -0
  111. package/dist/collection/lib/test-cases/test-case-factory.js.map +1 -0
  112. package/dist/collection/lib/test-cases/test-case-mutations.js +16 -0
  113. package/dist/collection/lib/test-cases/test-case-mutations.js.map +1 -0
  114. package/dist/collection/lib/ui/button/button.css +113 -0
  115. package/dist/collection/lib/ui/button/button.js +21 -0
  116. package/dist/collection/lib/ui/button/button.js.map +1 -0
  117. package/dist/collection/lib/ui/button/index.js +2 -0
  118. package/dist/collection/lib/ui/button/index.js.map +1 -0
  119. package/dist/collection/lib/ui/icon-button/icon-button.css +77 -0
  120. package/dist/collection/lib/ui/icon-button/icon-button.js +19 -0
  121. package/dist/collection/lib/ui/icon-button/icon-button.js.map +1 -0
  122. package/dist/collection/lib/ui/icon-button/index.js +2 -0
  123. package/dist/collection/lib/ui/icon-button/index.js.map +1 -0
  124. package/dist/collection/services/adapters.js +2 -0
  125. package/dist/collection/services/adapters.js.map +1 -0
  126. package/dist/collection/services/models/gemini.js +17 -0
  127. package/dist/collection/services/models/gemini.js.map +1 -0
  128. package/dist/collection/styles/tokens.css +180 -0
  129. package/dist/collection/types/evaluation.js +2 -0
  130. package/dist/collection/types/evaluation.js.map +1 -0
  131. package/dist/collection/types/llm-test-runner.js +2 -0
  132. package/dist/collection/types/llm-test-runner.js.map +1 -0
  133. package/dist/components/app-chips.d.ts +11 -0
  134. package/dist/components/app-chips.js +2 -0
  135. package/dist/components/app-chips.js.map +1 -0
  136. package/dist/components/app-select.d.ts +11 -0
  137. package/dist/components/app-select.js +2 -0
  138. package/dist/components/app-select.js.map +1 -0
  139. package/dist/components/app-textarea.d.ts +11 -0
  140. package/dist/components/app-textarea.js +2 -0
  141. package/dist/components/app-textarea.js.map +1 -0
  142. package/dist/components/form-builder.d.ts +11 -0
  143. package/dist/components/form-builder.js +2 -0
  144. package/dist/components/form-builder.js.map +1 -0
  145. package/dist/components/index.d.ts +2 -0
  146. package/dist/components/index.js +1 -13
  147. package/dist/components/index.js.map +1 -1
  148. package/dist/components/llm-test-runner.js +1 -8
  149. package/dist/components/llm-test-runner.js.map +1 -1
  150. package/dist/components/p--2rdv_J9.js +2 -0
  151. package/dist/components/p--2rdv_J9.js.map +1 -0
  152. package/dist/components/p-B7J48VNq.js +2 -0
  153. package/dist/components/p-B7J48VNq.js.map +1 -0
  154. package/dist/components/p-BCB1rjPS.js +7 -0
  155. package/dist/components/p-BCB1rjPS.js.map +1 -0
  156. package/dist/components/p-BQhb2H_a.js +2 -0
  157. package/dist/components/p-BQhb2H_a.js.map +1 -0
  158. package/dist/components/p-D9BrlHdP.js +297 -0
  159. package/dist/components/p-D9BrlHdP.js.map +1 -0
  160. package/dist/components/p-DtCkZ1g2.js +2 -0
  161. package/dist/components/p-DtCkZ1g2.js.map +1 -0
  162. package/dist/esm/app-chips_5.entry.js +153 -0
  163. package/dist/esm/app-chips_5.entry.js.map +1 -0
  164. package/dist/esm/app-globals-DbR5vV7d.js +32 -0
  165. package/dist/esm/app-globals-DbR5vV7d.js.map +1 -0
  166. package/dist/esm/index-Bvg6mh1M.js +25539 -0
  167. package/dist/esm/index-Bvg6mh1M.js.map +1 -0
  168. package/dist/esm/index-DxzhGhec.js +21450 -0
  169. package/dist/esm/index-DxzhGhec.js.map +1 -0
  170. package/dist/esm/index.js +4 -486
  171. package/dist/esm/index.js.map +1 -1
  172. package/dist/esm/llm-testrunner.js +7 -5
  173. package/dist/esm/llm-testrunner.js.map +1 -1
  174. package/dist/esm/loader.js +6 -4
  175. package/dist/llm-testrunner/index.esm.js +1 -1
  176. package/dist/llm-testrunner/index.esm.js.map +1 -1
  177. package/dist/llm-testrunner/llm-testrunner.esm.js +1 -1
  178. package/dist/llm-testrunner/llm-testrunner.esm.js.map +1 -1
  179. package/dist/llm-testrunner/p-3f04b0fb.entry.js +2 -0
  180. package/dist/llm-testrunner/p-3f04b0fb.entry.js.map +1 -0
  181. package/dist/llm-testrunner/p-DFds8y01.js +7 -0
  182. package/dist/llm-testrunner/p-DFds8y01.js.map +1 -0
  183. package/dist/llm-testrunner/p-DxzhGhec.js +298 -0
  184. package/dist/llm-testrunner/p-DxzhGhec.js.map +1 -0
  185. package/dist/llm-testrunner/p-GQwFOmwJ.js +2 -0
  186. package/dist/llm-testrunner/p-GQwFOmwJ.js.map +1 -0
  187. package/dist/react/components.d.ts +32 -2
  188. package/dist/react/components.d.ts.map +1 -1
  189. package/dist/react/components.js +44 -2
  190. package/dist/types/components/llm-test-runner/header/llm-test-runner-header.d.ts +14 -0
  191. package/dist/types/components/llm-test-runner/llm-test-runner.d.ts +13 -29
  192. package/dist/types/components/llm-test-runner/llm-test-runner.import-export.test.d.ts +1 -0
  193. package/dist/types/components/llm-test-runner/test-cases/actions/row-actions.d.ts +8 -0
  194. package/dist/types/components/llm-test-runner/test-cases/evaluation/evaluation-summary.d.ts +7 -0
  195. package/dist/types/components/llm-test-runner/test-cases/llm-test-case-row.d.ts +25 -0
  196. package/dist/types/components/llm-test-runner/test-cases/llm-test-cases.d.ts +26 -0
  197. package/dist/types/components/llm-test-runner/test-cases/output/response-output.d.ts +6 -0
  198. package/dist/types/components.d.ts +199 -4
  199. package/dist/types/global/env.d.ts +2 -0
  200. package/dist/types/index.d.ts +1 -1
  201. package/dist/types/lib/evaluation/constants.d.ts +11 -0
  202. package/dist/types/lib/evaluation/evaluation-engine.d.ts +0 -4
  203. package/dist/types/lib/evaluation/evaluation-service.d.ts +15 -0
  204. package/dist/types/lib/evaluation/evaluators/bleu/bleu-evaluator.d.ts +18 -0
  205. package/dist/types/lib/evaluation/evaluators/bleu/tests/bleu.test.d.ts +1 -0
  206. package/dist/types/lib/evaluation/evaluators/exact/exact.d.ts +2 -0
  207. package/dist/types/lib/evaluation/evaluators/rouge1-evaluator.d.ts +17 -0
  208. package/dist/types/lib/evaluation/evaluators/rougeL-evaluator.d.ts +2 -0
  209. package/dist/types/lib/evaluation/evaluators/rougeL-evaluator.test.d.ts +1 -0
  210. package/dist/types/lib/evaluation/evaluators/semantic/SemanticEvaluator.d.ts +6 -0
  211. package/dist/types/lib/evaluation/evaluators/semantic/evaluate-keywords.d.ts +7 -0
  212. package/dist/types/lib/evaluation/evaluators/semantic/index.d.ts +2 -0
  213. package/dist/types/lib/evaluation/evaluators/semantic/model-loader.d.ts +1 -0
  214. package/dist/types/lib/evaluation/evaluators/semantic/similarity-utils.d.ts +1 -0
  215. package/dist/types/lib/evaluation/evaluators/semantic/tests/evaluate-keywords.test.d.ts +1 -0
  216. package/dist/types/lib/evaluation/evaluators/semantic/text-utils.d.ts +1 -0
  217. package/dist/types/lib/evaluation/index.d.ts +2 -2
  218. package/dist/types/lib/evaluation/rouge1-evaluator.test.d.ts +1 -0
  219. package/dist/types/lib/evaluation/types.d.ts +19 -7
  220. package/dist/types/lib/file/file-download.d.ts +7 -0
  221. package/dist/types/lib/file/file-reader.d.ts +6 -0
  222. package/dist/types/lib/form/components/app-chips.d.ts +20 -0
  223. package/dist/types/lib/form/components/app-select.d.ts +7 -0
  224. package/dist/types/lib/form/components/app-textarea.d.ts +14 -0
  225. package/dist/types/lib/form/form-builder.d.ts +24 -0
  226. package/dist/types/lib/form/schema/base-input-field-config.d.ts +37 -0
  227. package/dist/types/lib/form/schema/form-control-config.d.ts +13 -0
  228. package/dist/types/lib/form/schema/index.d.ts +9 -0
  229. package/dist/types/lib/import-export/test-results-csv.d.ts +13 -0
  230. package/dist/types/lib/import-export/test-suite-exporter.d.ts +16 -0
  231. package/dist/types/lib/import-export/test-suite-importer.d.ts +12 -0
  232. package/dist/types/lib/rate-limited-fetcher/rate-limited-fetcher.d.ts +1 -1
  233. package/dist/types/lib/test-cases/test-case-factory.d.ts +12 -0
  234. package/dist/types/lib/test-cases/test-case-mutations.d.ts +9 -0
  235. package/dist/types/lib/ui/button/button.d.ts +13 -0
  236. package/dist/types/lib/ui/button/index.d.ts +2 -0
  237. package/dist/types/lib/ui/icon-button/icon-button.d.ts +11 -0
  238. package/dist/types/lib/ui/icon-button/index.d.ts +2 -0
  239. package/dist/types/services/adapters.d.ts +3 -0
  240. package/dist/types/services/models/gemini.d.ts +11 -0
  241. package/dist/types/stencil-public-runtime.d.ts +110 -6
  242. package/dist/types/types/evaluation.d.ts +9 -0
  243. package/dist/types/types/llm-test-runner.d.ts +22 -0
  244. package/package.json +30 -6
  245. package/dist/cjs/app-globals-CbbEbofA.js +0 -14
  246. package/dist/cjs/app-globals-CbbEbofA.js.map +0 -1
  247. package/dist/cjs/index-D-FySkoV.js +0 -1470
  248. package/dist/cjs/index-D-FySkoV.js.map +0 -1
  249. package/dist/cjs/llm-test-runner.cjs.entry.js +0 -9
  250. package/dist/cjs/llm-test-runner.entry.cjs.js.map +0 -1
  251. package/dist/components/p-CYUbsbxt.js +0 -1770
  252. package/dist/components/p-CYUbsbxt.js.map +0 -1
  253. package/dist/esm/app-globals-BOQOUavG.js +0 -12
  254. package/dist/esm/app-globals-BOQOUavG.js.map +0 -1
  255. package/dist/esm/index-cncubhtM.js +0 -1463
  256. package/dist/esm/index-cncubhtM.js.map +0 -1
  257. package/dist/esm/llm-test-runner.entry.js +0 -3
  258. package/dist/esm/llm-test-runner.entry.js.map +0 -1
  259. package/dist/llm-testrunner/llm-test-runner.entry.esm.js.map +0 -1
  260. package/dist/llm-testrunner/loader.esm.js.map +0 -1
  261. package/dist/llm-testrunner/p-BOQOUavG.js +0 -2
  262. package/dist/llm-testrunner/p-BOQOUavG.js.map +0 -1
  263. package/dist/llm-testrunner/p-cncubhtM.js +0 -3
  264. package/dist/llm-testrunner/p-cncubhtM.js.map +0 -1
  265. package/dist/llm-testrunner/p-f68fd660.entry.js +0 -2
  266. package/dist/llm-testrunner/p-f68fd660.entry.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{G as n}from"./p-DxzhGhec.js";class s{sdk;constructor(s){this.sdk=new n({apiKey:s})}async invoke(n){const s=await this.sdk.models.generateContent({model:"gemini-3-flash-preview",contents:n});return s.text}}function o(){window.env={API_KEY:""};window.GeminiAdapter=s}const t=o||(()=>{});const i=t;export{i as g};
2
+ //# sourceMappingURL=p-GQwFOmwJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p-GQwFOmwJ.js","sources":["src/services/models/gemini.ts","src/global/env.ts","@stencil/core/internal/app-globals"],"sourcesContent":["import { GoogleGenAI } from '@google/genai';\n\nimport type { LlmAdapter } from '../adapters';\n\nexport const enum GeminiModels {\n Gemini3Pro__Preview = 'gemini-3-pro-preview',\n Gemini3ProImage__Preview = 'gemini-3-pro-image-preview',\n Gemini3Flash__Preview = 'gemini-3-flash-preview',\n}\n\nexport class GeminiAdapter implements LlmAdapter {\n private readonly sdk;\n\n constructor(key: string) {\n this.sdk = new GoogleGenAI({\n apiKey: key,\n });\n }\n\n async invoke(text: string) {\n const response = await this.sdk.models.generateContent({\n model: GeminiModels.Gemini3Flash__Preview,\n contents: text,\n });\n\n return response.text;\n }\n}\n","import { GeminiAdapter } from '../services/models/gemini';\n\ndeclare global {\n interface Window {\n env: {\n API_KEY: string;\n };\n GeminiAdapter: typeof GeminiAdapter;\n }\n}\n\nexport default function () {\n window.env = {\n API_KEY: '__GEMINI_API_KEY__',\n };\n\n window.GeminiAdapter = GeminiAdapter;\n}\n","const appGlobalScript = appGlobalScriptNs.default || (() => {});\nimport * as appGlobalScriptNs from '/home/runner/work/llm-testrunner-lib/llm-testrunner-lib/src/global/env.ts';\nexport const globalScripts = appGlobalScript;\nexport const globalStyles = \"\";\n"],"names":["appGlobalScriptNs.default"],"mappings":";;MAUa,aAAa,CAAA;AACP,IAAA,GAAG;AAEpB,IAAA,WAAA,CAAY,GAAW,EAAA;AACrB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC;AACzB,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA,CAAC;;IAGJ,MAAM,MAAM,CAAC,IAAY,EAAA;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC;YACrD,KAAK,EAAA,wBAAA;AACL,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;QAEF,OAAO,QAAQ,CAAC,IAAI;;AAEvB;;AChBa,YAAA,IAAA;IACZ,MAAM,CAAC,GAAG,GAAG;AACX,QAAA,OAAO,EAAE,EAAoB;KAC9B;AAED,IAAA,MAAM,CAAC,aAAa,GAAG,aAAa;AACtC;;ACjBA,MAAM,eAAe,GAAGA,GAAyB,KAAK,MAAM,EAAE,CAAC;AAEnD,MAAC,aAAa,GAAG;;;;"}
@@ -3,10 +3,40 @@
3
3
  * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
4
  */
5
5
  import type { EventName, StencilReactComponent } from '@stencil/react-output-target/runtime';
6
- import { type LLMRequestPayload, type LlmTestRunnerCustomEvent } from "../..";
7
- import { LlmTestRunner as LlmTestRunnerElement } from "../.././dist/components/llm-test-runner.js";
6
+ import { type AppChipsCustomEvent, type AppTextareaCustomEvent, type LLMRequestPayload, type LlmTestRunnerCustomEvent, type SavePayload } from "llm-testrunner-components";
7
+ import { AppChips as AppChipsElement } from "llm-testrunner-components/./dist/components/app-chips.js";
8
+ import { AppSelect as AppSelectElement } from "llm-testrunner-components/./dist/components/app-select.js";
9
+ import { AppTextarea as AppTextareaElement } from "llm-testrunner-components/./dist/components/app-textarea.js";
10
+ import { FormBuilder as FormBuilderElement } from "llm-testrunner-components/./dist/components/form-builder.js";
11
+ import { LlmTestRunner as LlmTestRunnerElement } from "llm-testrunner-components/./dist/components/llm-test-runner.js";
12
+ export type AppChipsEvents = {
13
+ onAddChip: EventName<AppChipsCustomEvent<{
14
+ key: string;
15
+ value: string;
16
+ testCaseId: string;
17
+ }>>;
18
+ onRemoveChip: EventName<AppChipsCustomEvent<{
19
+ key: string;
20
+ index: number;
21
+ testCaseId: string;
22
+ }>>;
23
+ };
24
+ export declare const AppChips: StencilReactComponent<AppChipsElement, AppChipsEvents>;
25
+ export type AppSelectEvents = NonNullable<unknown>;
26
+ export declare const AppSelect: StencilReactComponent<AppSelectElement, AppSelectEvents>;
27
+ export type AppTextareaEvents = {
28
+ onValueChange: EventName<AppTextareaCustomEvent<{
29
+ key: string;
30
+ value: string;
31
+ testCaseId: string;
32
+ }>>;
33
+ };
34
+ export declare const AppTextarea: StencilReactComponent<AppTextareaElement, AppTextareaEvents>;
35
+ export type FormBuilderEvents = NonNullable<unknown>;
36
+ export declare const FormBuilder: StencilReactComponent<FormBuilderElement, FormBuilderEvents>;
8
37
  export type LlmTestRunnerEvents = {
9
38
  onLlmRequest: EventName<LlmTestRunnerCustomEvent<LLMRequestPayload>>;
39
+ onSave: EventName<LlmTestRunnerCustomEvent<SavePayload>>;
10
40
  };
11
41
  export declare const LlmTestRunner: StencilReactComponent<LlmTestRunnerElement, LlmTestRunnerEvents>;
12
42
  //# sourceMappingURL=components.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../generated/react/components.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAG7F,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAC9E,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAA8C,MAAM,4CAA4C,CAAC;AAE/I,MAAM,MAAM,mBAAmB,GAAG;IAAE,YAAY,EAAE,SAAS,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,CAAC,CAAA;CAAE,CAAC;AAE3G,eAAO,MAAM,aAAa,EAAE,qBAAqB,CAAC,oBAAoB,EAAE,mBAAmB,CAOzF,CAAC"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../generated/react/components.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7F,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC3K,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAyC,MAAM,0DAA0D,CAAC;AAC9I,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAA0C,MAAM,2DAA2D,CAAC;AAClJ,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAA4C,MAAM,6DAA6D,CAAC;AAC1J,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAA4C,MAAM,6DAA6D,CAAC;AAC1J,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAA8C,MAAM,gEAAgE,CAAC;AAGnK,MAAM,MAAM,cAAc,GAAG;IACzB,SAAS,EAAE,SAAS,CAAC,mBAAmB,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;KAAE,CAAC,CAAC,CAAC;IAC/F,YAAY,EAAE,SAAS,CAAC,mBAAmB,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;KAAE,CAAC,CAAC,CAAA;CACpG,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,qBAAqB,CAAC,eAAe,EAAE,cAAc,CAU1E,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAEnD,eAAO,MAAM,SAAS,EAAE,qBAAqB,CAAC,gBAAgB,EAAE,eAAe,CAO7E,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAAE,aAAa,EAAE,SAAS,CAAC,sBAAsB,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;KAAE,CAAC,CAAC,CAAA;CAAE,CAAC;AAE1I,eAAO,MAAM,WAAW,EAAE,qBAAqB,CAAC,kBAAkB,EAAE,iBAAiB,CAOnF,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAErD,eAAO,MAAM,WAAW,EAAE,qBAAqB,CAAC,kBAAkB,EAAE,iBAAiB,CAOnF,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG;IAC9B,YAAY,EAAE,SAAS,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACrE,MAAM,EAAE,SAAS,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAA;CAC3D,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,qBAAqB,CAAC,oBAAoB,EAAE,mBAAmB,CAUzF,CAAC"}
@@ -1,12 +1,54 @@
1
1
  'use client';
2
2
  import { createComponent } from '@stencil/react-output-target/runtime';
3
+ import { AppChips as AppChipsElement, defineCustomElement as defineAppChips } from "llm-testrunner-components/./dist/components/app-chips.js";
4
+ import { AppSelect as AppSelectElement, defineCustomElement as defineAppSelect } from "llm-testrunner-components/./dist/components/app-select.js";
5
+ import { AppTextarea as AppTextareaElement, defineCustomElement as defineAppTextarea } from "llm-testrunner-components/./dist/components/app-textarea.js";
6
+ import { FormBuilder as FormBuilderElement, defineCustomElement as defineFormBuilder } from "llm-testrunner-components/./dist/components/form-builder.js";
7
+ import { LlmTestRunner as LlmTestRunnerElement, defineCustomElement as defineLlmTestRunner } from "llm-testrunner-components/./dist/components/llm-test-runner.js";
3
8
  import React from 'react';
4
- import { LlmTestRunner as LlmTestRunnerElement, defineCustomElement as defineLlmTestRunner } from "../.././dist/components/llm-test-runner.js";
9
+ export const AppChips = /*@__PURE__*/ createComponent({
10
+ tagName: 'app-chips',
11
+ elementClass: AppChipsElement,
12
+ // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
13
+ react: React,
14
+ events: {
15
+ onAddChip: 'addChip',
16
+ onRemoveChip: 'removeChip'
17
+ },
18
+ defineCustomElement: defineAppChips
19
+ });
20
+ export const AppSelect = /*@__PURE__*/ createComponent({
21
+ tagName: 'app-select',
22
+ elementClass: AppSelectElement,
23
+ // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
24
+ react: React,
25
+ events: {},
26
+ defineCustomElement: defineAppSelect
27
+ });
28
+ export const AppTextarea = /*@__PURE__*/ createComponent({
29
+ tagName: 'app-textarea',
30
+ elementClass: AppTextareaElement,
31
+ // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
32
+ react: React,
33
+ events: { onValueChange: 'valueChange' },
34
+ defineCustomElement: defineAppTextarea
35
+ });
36
+ export const FormBuilder = /*@__PURE__*/ createComponent({
37
+ tagName: 'form-builder',
38
+ elementClass: FormBuilderElement,
39
+ // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
40
+ react: React,
41
+ events: {},
42
+ defineCustomElement: defineFormBuilder
43
+ });
5
44
  export const LlmTestRunner = /*@__PURE__*/ createComponent({
6
45
  tagName: 'llm-test-runner',
7
46
  elementClass: LlmTestRunnerElement,
8
47
  // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
9
48
  react: React,
10
- events: { onLlmRequest: 'llmRequest' },
49
+ events: {
50
+ onLlmRequest: 'llmRequest',
51
+ onSave: 'save'
52
+ },
11
53
  defineCustomElement: defineLlmTestRunner
12
54
  });
@@ -0,0 +1,14 @@
1
+ import { FunctionalComponent } from '../../../stencil-public-runtime';
2
+ export interface LLMTestRunnerHeaderProps {
3
+ isExportingTestSuite: boolean;
4
+ isExportingTestResults: boolean;
5
+ isRunningAll: boolean;
6
+ useSave?: boolean;
7
+ isSaving?: boolean;
8
+ onImport: (file: File) => void;
9
+ onExportSuite: () => void;
10
+ onExportResults: () => void;
11
+ onRunAll: () => void;
12
+ onSave?: () => void;
13
+ }
14
+ export declare const LLMTestRunnerHeader: FunctionalComponent<LLMTestRunnerHeaderProps>;
@@ -1,51 +1,35 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
- import { EvaluationResult } from '../../lib/evaluation/types';
3
- export interface TestCase {
4
- id: string;
5
- question: string;
6
- expectedKeywords: string[];
7
- expectedSourceLinks: string[];
8
- output?: string;
9
- isRunning?: boolean;
10
- error?: string;
11
- evaluationResult?: EvaluationResult;
12
- responseTime?: number;
13
- }
14
- export interface LLMRequestPayload {
15
- prompt: string;
16
- resolve: (result: string) => void;
17
- reject: (err: any) => void;
18
- }
2
+ import { TestCase, LLMRequestPayload, SavePayload } from '../../types/llm-test-runner';
19
3
  export declare class LLMTestRunner {
20
4
  llmRequest: EventEmitter<LLMRequestPayload>;
5
+ save: EventEmitter<SavePayload>;
21
6
  delayMs?: number;
7
+ useSave?: boolean;
8
+ initialTestCases?: TestCase[];
22
9
  testCases: TestCase[];
23
10
  isRunningAll: boolean;
24
11
  error: string;
25
- private fileInput;
26
12
  isExportingTestSuite: boolean;
27
13
  isExportingTestResults: boolean;
28
- private evaluationEngine;
14
+ isSaving: boolean;
15
+ private evaluationService;
29
16
  componentWillLoad(): void;
30
17
  componentDidLoad(): void;
31
18
  disconnectedCallback(): void;
19
+ resetSavingState(): Promise<void>;
20
+ private handleTestCaseChange;
32
21
  private addNewTestCase;
33
22
  private updateTestCase;
34
23
  private runSingleTest;
35
24
  private deleteTestCase;
36
- private addKeyword;
37
- private removeKeyword;
38
- private addSourceLink;
39
- private removeSourceLink;
25
+ private updateApproach;
26
+ private addChip;
27
+ private removeChip;
40
28
  private evaluateResponse;
41
29
  private runAllTests;
42
- private generateId;
43
- private handleFileSelect;
44
- private handleFileChange;
45
- private readFileAsync;
46
- private downloadFile;
30
+ private handleImport;
47
31
  private handleExportTestSuite;
48
32
  private handleExportTestResults;
49
- private escapeCsvField;
33
+ private handleSave;
50
34
  render(): any;
51
35
  }
@@ -0,0 +1,8 @@
1
+ import { FunctionalComponent } from '../../../../stencil-public-runtime';
2
+ export interface RowActionsProps {
3
+ isRunning: boolean;
4
+ canRun: boolean;
5
+ onRun: () => void;
6
+ onDelete: () => void;
7
+ }
8
+ export declare const RowActions: FunctionalComponent<RowActionsProps>;
@@ -0,0 +1,7 @@
1
+ import { FunctionalComponent } from '../../../../stencil-public-runtime';
2
+ import { EvaluationResult } from '../../../../lib/evaluation/types';
3
+ export interface EvaluationSummaryProps {
4
+ result?: EvaluationResult;
5
+ isRunning: boolean;
6
+ }
7
+ export declare const EvaluationSummary: FunctionalComponent<EvaluationSummaryProps>;
@@ -0,0 +1,25 @@
1
+ import { FunctionalComponent } from '../../../stencil-public-runtime';
2
+ import { TestCase } from '../../../types/llm-test-runner';
3
+ import { EvaluationApproach } from '../../../lib/evaluation/constants';
4
+ export interface LLMTestCaseRowProps {
5
+ testCase: TestCase;
6
+ onRun: (testCase: TestCase) => void;
7
+ onDelete: (id: string) => void;
8
+ onUpdateApproach: (testCase: TestCase, approach: EvaluationApproach) => void;
9
+ handleTestCaseChange: (e: CustomEvent<{
10
+ testCaseId: string;
11
+ key: string;
12
+ value: string;
13
+ }>) => void;
14
+ addChip: (e: CustomEvent<{
15
+ testCaseId: string;
16
+ key: string;
17
+ value: string;
18
+ }>) => void;
19
+ removeChip: (e: CustomEvent<{
20
+ testCaseId: string;
21
+ key: string;
22
+ index: number;
23
+ }>) => void;
24
+ }
25
+ export declare const LLMTestCaseRow: FunctionalComponent<LLMTestCaseRowProps>;
@@ -0,0 +1,26 @@
1
+ import { FunctionalComponent } from '../../../stencil-public-runtime';
2
+ import { TestCase } from '../../../types/llm-test-runner';
3
+ import { EvaluationApproach } from '../../../lib/evaluation/constants';
4
+ export interface LLMTestCasesProps {
5
+ testCases: TestCase[];
6
+ onRun: (testCase: TestCase) => void;
7
+ onDelete: (id: string) => void;
8
+ onUpdateApproach: (testCase: TestCase, approach: EvaluationApproach) => void;
9
+ onAddTestCase: () => void;
10
+ handleTestCaseChange: (e: CustomEvent<{
11
+ testCaseId: string;
12
+ key: string;
13
+ value: string;
14
+ }>) => void;
15
+ addChip: (e: CustomEvent<{
16
+ testCaseId: string;
17
+ key: string;
18
+ value: string;
19
+ }>) => void;
20
+ removeChip: (e: CustomEvent<{
21
+ testCaseId: string;
22
+ key: string;
23
+ index: number;
24
+ }>) => void;
25
+ }
26
+ export declare const LLMTestCases: FunctionalComponent<LLMTestCasesProps>;
@@ -0,0 +1,6 @@
1
+ import { FunctionalComponent } from '../../../../stencil-public-runtime';
2
+ export interface ResponseOutputProps {
3
+ output?: string;
4
+ isRunning: boolean;
5
+ }
6
+ export declare const ResponseOutput: FunctionalComponent<ResponseOutputProps>;
@@ -5,23 +5,134 @@
5
5
  * It contains typing information for all components that exist in this project.
6
6
  */
7
7
  import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
8
- import { LLMRequestPayload } from "./components/llm-test-runner/llm-test-runner";
9
- export { LLMRequestPayload } from "./components/llm-test-runner/llm-test-runner";
8
+ import { ChipsConfig, FieldConfig, SelectConfig, TextAreaConfig } from "./lib/form/schema";
9
+ import { LLMRequestPayload, SavePayload, TestCase } from "./types/llm-test-runner";
10
+ export { ChipsConfig, FieldConfig, SelectConfig, TextAreaConfig } from "./lib/form/schema";
11
+ export { LLMRequestPayload, SavePayload, TestCase } from "./types/llm-test-runner";
10
12
  export namespace Components {
13
+ interface AppChips {
14
+ "config": ChipsConfig;
15
+ "testCaseId": string;
16
+ /**
17
+ * @default []
18
+ */
19
+ "value": string[];
20
+ }
21
+ interface AppSelect {
22
+ "config": SelectConfig;
23
+ "onChange": (value: any) => void;
24
+ "value": any;
25
+ }
26
+ interface AppTextarea {
27
+ "config": TextAreaConfig;
28
+ "testCaseId": string;
29
+ "value": string;
30
+ }
31
+ interface FormBuilder {
32
+ "addChip": (
33
+ e: CustomEvent<{ testCaseId: string; key: string; value: string }>,
34
+ ) => void;
35
+ /**
36
+ * @default []
37
+ */
38
+ "fields": FieldConfig[];
39
+ "handleTestCaseChange": (
40
+ e: CustomEvent<{ testCaseId: string; key: string; value: string }>,
41
+ ) => void;
42
+ "onUpdateApproach": (testCase: TestCase, approach: any) => void;
43
+ "removeChip": (
44
+ e: CustomEvent<{ testCaseId: string; key: string; index: number }>,
45
+ ) => void;
46
+ "testCase": TestCase;
47
+ }
11
48
  interface LlmTestRunner {
12
49
  /**
13
50
  * @default 500
14
51
  */
15
52
  "delayMs"?: number;
53
+ "initialTestCases"?: TestCase[];
54
+ "resetSavingState": () => Promise<void>;
55
+ /**
56
+ * @default false
57
+ */
58
+ "useSave"?: boolean;
16
59
  }
17
60
  }
61
+ export interface AppChipsCustomEvent<T> extends CustomEvent<T> {
62
+ detail: T;
63
+ target: HTMLAppChipsElement;
64
+ }
65
+ export interface AppTextareaCustomEvent<T> extends CustomEvent<T> {
66
+ detail: T;
67
+ target: HTMLAppTextareaElement;
68
+ }
18
69
  export interface LlmTestRunnerCustomEvent<T> extends CustomEvent<T> {
19
70
  detail: T;
20
71
  target: HTMLLlmTestRunnerElement;
21
72
  }
22
73
  declare global {
74
+ interface HTMLAppChipsElementEventMap {
75
+ "addChip": {
76
+ key: string;
77
+ value: string;
78
+ testCaseId: string;
79
+ };
80
+ "removeChip": {
81
+ key: string;
82
+ index: number;
83
+ testCaseId: string;
84
+ };
85
+ }
86
+ interface HTMLAppChipsElement extends Components.AppChips, HTMLStencilElement {
87
+ addEventListener<K extends keyof HTMLAppChipsElementEventMap>(type: K, listener: (this: HTMLAppChipsElement, ev: AppChipsCustomEvent<HTMLAppChipsElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
88
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
89
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
90
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
91
+ removeEventListener<K extends keyof HTMLAppChipsElementEventMap>(type: K, listener: (this: HTMLAppChipsElement, ev: AppChipsCustomEvent<HTMLAppChipsElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
92
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
93
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
94
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
95
+ }
96
+ var HTMLAppChipsElement: {
97
+ prototype: HTMLAppChipsElement;
98
+ new (): HTMLAppChipsElement;
99
+ };
100
+ interface HTMLAppSelectElement extends Components.AppSelect, HTMLStencilElement {
101
+ }
102
+ var HTMLAppSelectElement: {
103
+ prototype: HTMLAppSelectElement;
104
+ new (): HTMLAppSelectElement;
105
+ };
106
+ interface HTMLAppTextareaElementEventMap {
107
+ "valueChange": {
108
+ key: string;
109
+ value: string;
110
+ testCaseId: string;
111
+ };
112
+ }
113
+ interface HTMLAppTextareaElement extends Components.AppTextarea, HTMLStencilElement {
114
+ addEventListener<K extends keyof HTMLAppTextareaElementEventMap>(type: K, listener: (this: HTMLAppTextareaElement, ev: AppTextareaCustomEvent<HTMLAppTextareaElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
115
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
116
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
117
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
118
+ removeEventListener<K extends keyof HTMLAppTextareaElementEventMap>(type: K, listener: (this: HTMLAppTextareaElement, ev: AppTextareaCustomEvent<HTMLAppTextareaElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
119
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
120
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
121
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
122
+ }
123
+ var HTMLAppTextareaElement: {
124
+ prototype: HTMLAppTextareaElement;
125
+ new (): HTMLAppTextareaElement;
126
+ };
127
+ interface HTMLFormBuilderElement extends Components.FormBuilder, HTMLStencilElement {
128
+ }
129
+ var HTMLFormBuilderElement: {
130
+ prototype: HTMLFormBuilderElement;
131
+ new (): HTMLFormBuilderElement;
132
+ };
23
133
  interface HTMLLlmTestRunnerElementEventMap {
24
134
  "llmRequest": LLMRequestPayload;
135
+ "save": SavePayload;
25
136
  }
26
137
  interface HTMLLlmTestRunnerElement extends Components.LlmTestRunner, HTMLStencilElement {
27
138
  addEventListener<K extends keyof HTMLLlmTestRunnerElementEventMap>(type: K, listener: (this: HTMLLlmTestRunnerElement, ev: LlmTestRunnerCustomEvent<HTMLLlmTestRunnerElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -38,26 +149,110 @@ declare global {
38
149
  new (): HTMLLlmTestRunnerElement;
39
150
  };
40
151
  interface HTMLElementTagNameMap {
152
+ "app-chips": HTMLAppChipsElement;
153
+ "app-select": HTMLAppSelectElement;
154
+ "app-textarea": HTMLAppTextareaElement;
155
+ "form-builder": HTMLFormBuilderElement;
41
156
  "llm-test-runner": HTMLLlmTestRunnerElement;
42
157
  }
43
158
  }
44
159
  declare namespace LocalJSX {
160
+ interface AppChips {
161
+ "config"?: ChipsConfig;
162
+ "onAddChip"?: (event: AppChipsCustomEvent<{
163
+ key: string;
164
+ value: string;
165
+ testCaseId: string;
166
+ }>) => void;
167
+ "onRemoveChip"?: (event: AppChipsCustomEvent<{
168
+ key: string;
169
+ index: number;
170
+ testCaseId: string;
171
+ }>) => void;
172
+ "testCaseId"?: string;
173
+ /**
174
+ * @default []
175
+ */
176
+ "value"?: string[];
177
+ }
178
+ interface AppSelect {
179
+ "config"?: SelectConfig;
180
+ "onChange"?: (value: any) => void;
181
+ "value"?: any;
182
+ }
183
+ interface AppTextarea {
184
+ "config"?: TextAreaConfig;
185
+ "onValueChange"?: (event: AppTextareaCustomEvent<{
186
+ key: string;
187
+ value: string;
188
+ testCaseId: string;
189
+ }>) => void;
190
+ "testCaseId"?: string;
191
+ "value"?: string;
192
+ }
193
+ interface FormBuilder {
194
+ "addChip"?: (
195
+ e: CustomEvent<{ testCaseId: string; key: string; value: string }>,
196
+ ) => void;
197
+ /**
198
+ * @default []
199
+ */
200
+ "fields"?: FieldConfig[];
201
+ "handleTestCaseChange"?: (
202
+ e: CustomEvent<{ testCaseId: string; key: string; value: string }>,
203
+ ) => void;
204
+ "onUpdateApproach"?: (testCase: TestCase, approach: any) => void;
205
+ "removeChip"?: (
206
+ e: CustomEvent<{ testCaseId: string; key: string; index: number }>,
207
+ ) => void;
208
+ "testCase"?: TestCase;
209
+ }
45
210
  interface LlmTestRunner {
46
211
  /**
47
212
  * @default 500
48
213
  */
49
214
  "delayMs"?: number;
215
+ "initialTestCases"?: TestCase[];
50
216
  "onLlmRequest"?: (event: LlmTestRunnerCustomEvent<LLMRequestPayload>) => void;
217
+ "onSave"?: (event: LlmTestRunnerCustomEvent<SavePayload>) => void;
218
+ /**
219
+ * @default false
220
+ */
221
+ "useSave"?: boolean;
222
+ }
223
+
224
+ interface AppChipsAttributes {
225
+ "testCaseId": string;
226
+ }
227
+ interface AppSelectAttributes {
228
+ "value": string;
229
+ }
230
+ interface AppTextareaAttributes {
231
+ "testCaseId": string;
232
+ "value": string;
233
+ }
234
+ interface LlmTestRunnerAttributes {
235
+ "delayMs": number;
236
+ "useSave": boolean;
51
237
  }
238
+
52
239
  interface IntrinsicElements {
53
- "llm-test-runner": LlmTestRunner;
240
+ "app-chips": Omit<AppChips, keyof AppChipsAttributes> & { [K in keyof AppChips & keyof AppChipsAttributes]?: AppChips[K] } & { [K in keyof AppChips & keyof AppChipsAttributes as `attr:${K}`]?: AppChipsAttributes[K] } & { [K in keyof AppChips & keyof AppChipsAttributes as `prop:${K}`]?: AppChips[K] };
241
+ "app-select": Omit<AppSelect, keyof AppSelectAttributes> & { [K in keyof AppSelect & keyof AppSelectAttributes]?: AppSelect[K] } & { [K in keyof AppSelect & keyof AppSelectAttributes as `attr:${K}`]?: AppSelectAttributes[K] } & { [K in keyof AppSelect & keyof AppSelectAttributes as `prop:${K}`]?: AppSelect[K] };
242
+ "app-textarea": Omit<AppTextarea, keyof AppTextareaAttributes> & { [K in keyof AppTextarea & keyof AppTextareaAttributes]?: AppTextarea[K] } & { [K in keyof AppTextarea & keyof AppTextareaAttributes as `attr:${K}`]?: AppTextareaAttributes[K] } & { [K in keyof AppTextarea & keyof AppTextareaAttributes as `prop:${K}`]?: AppTextarea[K] };
243
+ "form-builder": FormBuilder;
244
+ "llm-test-runner": Omit<LlmTestRunner, keyof LlmTestRunnerAttributes> & { [K in keyof LlmTestRunner & keyof LlmTestRunnerAttributes]?: LlmTestRunner[K] } & { [K in keyof LlmTestRunner & keyof LlmTestRunnerAttributes as `attr:${K}`]?: LlmTestRunnerAttributes[K] } & { [K in keyof LlmTestRunner & keyof LlmTestRunnerAttributes as `prop:${K}`]?: LlmTestRunner[K] };
54
245
  }
55
246
  }
56
247
  export { LocalJSX as JSX };
57
248
  declare module "@stencil/core" {
58
249
  export namespace JSX {
59
250
  interface IntrinsicElements {
60
- "llm-test-runner": LocalJSX.LlmTestRunner & JSXBase.HTMLAttributes<HTMLLlmTestRunnerElement>;
251
+ "app-chips": LocalJSX.IntrinsicElements["app-chips"] & JSXBase.HTMLAttributes<HTMLAppChipsElement>;
252
+ "app-select": LocalJSX.IntrinsicElements["app-select"] & JSXBase.HTMLAttributes<HTMLAppSelectElement>;
253
+ "app-textarea": LocalJSX.IntrinsicElements["app-textarea"] & JSXBase.HTMLAttributes<HTMLAppTextareaElement>;
254
+ "form-builder": LocalJSX.IntrinsicElements["form-builder"] & JSXBase.HTMLAttributes<HTMLFormBuilderElement>;
255
+ "llm-test-runner": LocalJSX.IntrinsicElements["llm-test-runner"] & JSXBase.HTMLAttributes<HTMLLlmTestRunnerElement>;
61
256
  }
62
257
  }
63
258
  }
@@ -1,8 +1,10 @@
1
+ import { GeminiAdapter } from '../services/models/gemini';
1
2
  declare global {
2
3
  interface Window {
3
4
  env: {
4
5
  API_KEY: string;
5
6
  };
7
+ GeminiAdapter: typeof GeminiAdapter;
6
8
  }
7
9
  }
8
10
  export default function (): void;
@@ -1,3 +1,3 @@
1
1
  export { LLMTestRunner } from './components/llm-test-runner/llm-test-runner';
2
- export type { TestCase } from './components/llm-test-runner/llm-test-runner';
2
+ export type { TestCase, LLMRequestPayload } from './types/llm-test-runner';
3
3
  export type * from './components.d.ts';
@@ -0,0 +1,11 @@
1
+ export declare enum EvaluationApproach {
2
+ EXACT = "exact",
3
+ SEMANTIC = "semantic",
4
+ ROUGE_1 = "rouge-1",
5
+ ROUGE_L = "rouge-L",
6
+ BLEU = "bleu"
7
+ }
8
+ export declare const EvaluationApproachValues: EvaluationApproach[];
9
+ export declare const DEFAULT_ROUGE_PASS_SCORE = 0.7;
10
+ export declare const DEFAULT_SEMANTIC_PASS_SCORE = 0.7;
11
+ export declare const DEFAULT_BLEU_PASS_SCORE = 0.7;
@@ -1,8 +1,4 @@
1
1
  import { EvaluationRequest, EvaluationCallback } from './types';
2
2
  export declare class LLMEvaluationEngine {
3
- constructor();
4
3
  evaluateResponse(request: EvaluationRequest, callback: EvaluationCallback): Promise<void>;
5
- private performEvaluation;
6
- private evaluateKeywords;
7
- private evaluateSourceLinks;
8
4
  }
@@ -0,0 +1,15 @@
1
+ import { EvaluationResult } from './types';
2
+ import { TestCase } from '../../types/llm-test-runner';
3
+ /**
4
+ * Service for evaluating test case responses
5
+ */
6
+ export declare class EvaluationService {
7
+ private engine;
8
+ constructor();
9
+ /**
10
+ * Evaluates a test case response
11
+ * @param testCase - The test case to evaluate
12
+ * @param onResult - Callback to handle the evaluation result
13
+ */
14
+ evaluateTestCase(testCase: TestCase, onResult: (result: EvaluationResult) => void): Promise<void>;
15
+ }
@@ -0,0 +1,18 @@
1
+ import { EvaluationRequest, EvaluationResult } from '../../types';
2
+ /**
3
+ * Computes the BLEU score for keywords against the candidate text.
4
+ *
5
+ * BLEU measures the precision of n-grams (typically 1-4 grams) between the candidate
6
+ * and reference text. A score of 1.0 indicates perfect match.
7
+ *
8
+ * @example
9
+ * const match = performBleuEvaluation({
10
+ * testCaseId: 'test-1',
11
+ * question: 'What is the capital?',
12
+ * expectedKeywords: ['Paris'],
13
+ * actualResponse: 'The capital is Paris.',
14
+ * evaluationParameters: { approach: 'bleu', threshold: 0.7 }
15
+ * });
16
+ * // Returns evaluation result with BLEU scores for each keyword
17
+ */
18
+ export declare function performBleuEvaluation(request: EvaluationRequest): EvaluationResult;
@@ -0,0 +1,2 @@
1
+ import { EvaluationRequest, EvaluationResult } from '../../types';
2
+ export declare function performEvaluation(request: EvaluationRequest): Promise<EvaluationResult>;
@@ -0,0 +1,17 @@
1
+ import { EvaluationRequest, EvaluationResult } from '../types';
2
+ /**
3
+ * Computes the ROUGE-1 score for a single keyword against the candidate text.
4
+ *
5
+ * ROUGE-1 measures the overlap of unigrams (single words) between the candidate
6
+ * and reference text. A score of 1.0 indicates perfect overlap.
7
+ *
8
+ * @example
9
+ * const match = evaluateSingleKeyword(
10
+ * "The quick brown fox",
11
+ * "quick fox",
12
+ * 0.5
13
+ * );
14
+ * // Returns: { keyword: "quick fox", found: true, score: 0.67, ... }
15
+ * //general idea , here we are doing it. by word to word comparison
16
+ */
17
+ export declare function performRouge1Evaluation(request: EvaluationRequest): Promise<EvaluationResult>;
@@ -0,0 +1,2 @@
1
+ import { EvaluationRequest, EvaluationResult } from '../types';
2
+ export declare function performRougeLEvaluation(request: EvaluationRequest): EvaluationResult;