promptfoo 0.87.1 → 0.89.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 (329) hide show
  1. package/README.md +3 -3
  2. package/dist/package.json +29 -29
  3. package/dist/src/__mocks__/esm.d.ts.map +1 -1
  4. package/dist/src/__mocks__/esm.js +1 -0
  5. package/dist/src/__mocks__/esm.js.map +1 -1
  6. package/dist/src/app/assets/index-DQ5S2Ye6.js +782 -0
  7. package/dist/src/app/assets/index-Dl-FhnW1.css +1 -0
  8. package/dist/src/app/assets/index.es-DR-0y8vm.js +18 -0
  9. package/dist/src/app/assets/purify.es-DGIRlouP.js +3 -0
  10. package/dist/src/app/assets/sync-D_jwcTYY.js +4 -0
  11. package/dist/src/app/favicon.png +0 -0
  12. package/dist/src/app/index.html +16 -0
  13. package/dist/src/assertions/AssertionsResult.d.ts.map +1 -1
  14. package/dist/src/assertions/AssertionsResult.js +7 -0
  15. package/dist/src/assertions/AssertionsResult.js.map +1 -1
  16. package/dist/src/assertions.d.ts.map +1 -1
  17. package/dist/src/assertions.js +19 -4
  18. package/dist/src/assertions.js.map +1 -1
  19. package/dist/src/cache.js +1 -1
  20. package/dist/src/cache.js.map +1 -1
  21. package/dist/src/commands/cache.js +2 -2
  22. package/dist/src/commands/cache.js.map +1 -1
  23. package/dist/src/commands/delete.js +2 -2
  24. package/dist/src/commands/delete.js.map +1 -1
  25. package/dist/src/commands/eval.d.ts +1 -1
  26. package/dist/src/commands/eval.d.ts.map +1 -1
  27. package/dist/src/commands/eval.js +17 -3
  28. package/dist/src/commands/eval.js.map +1 -1
  29. package/dist/src/commands/generate/dataset.js +1 -1
  30. package/dist/src/commands/generate/dataset.js.map +1 -1
  31. package/dist/src/commands/list.js +3 -3
  32. package/dist/src/commands/list.js.map +1 -1
  33. package/dist/src/commands/share.js +2 -2
  34. package/dist/src/commands/share.js.map +1 -1
  35. package/dist/src/commands/show.js +1 -1
  36. package/dist/src/commands/show.js.map +1 -1
  37. package/dist/src/commands/view.js +2 -2
  38. package/dist/src/commands/view.js.map +1 -1
  39. package/dist/src/config.d.ts.map +1 -1
  40. package/dist/src/config.js +47 -57
  41. package/dist/src/config.js.map +1 -1
  42. package/dist/src/csv.d.ts.map +1 -1
  43. package/dist/src/csv.js +40 -15
  44. package/dist/src/csv.js.map +1 -1
  45. package/dist/src/database/tables.d.ts +18 -18
  46. package/dist/src/envars.d.ts +1 -0
  47. package/dist/src/envars.d.ts.map +1 -1
  48. package/dist/src/envars.js.map +1 -1
  49. package/dist/src/evaluator.d.ts.map +1 -1
  50. package/dist/src/evaluator.js +32 -0
  51. package/dist/src/evaluator.js.map +1 -1
  52. package/dist/src/evaluatorHelpers.js +1 -1
  53. package/dist/src/evaluatorHelpers.js.map +1 -1
  54. package/dist/src/globalConfig.js +1 -1
  55. package/dist/src/globalConfig.js.map +1 -1
  56. package/dist/src/golang/wrapper.go +53 -0
  57. package/dist/src/main.d.ts.map +1 -1
  58. package/dist/src/main.js +5 -11
  59. package/dist/src/main.js.map +1 -1
  60. package/dist/src/onboarding.d.ts +1 -1
  61. package/dist/src/onboarding.d.ts.map +1 -1
  62. package/dist/src/onboarding.js +4 -2
  63. package/dist/src/onboarding.js.map +1 -1
  64. package/dist/src/providers/ai21.d.ts.map +1 -1
  65. package/dist/src/providers/ai21.js +3 -12
  66. package/dist/src/providers/ai21.js.map +1 -1
  67. package/dist/src/providers/anthropic.d.ts +3 -3
  68. package/dist/src/providers/anthropic.d.ts.map +1 -1
  69. package/dist/src/providers/anthropic.js +44 -34
  70. package/dist/src/providers/anthropic.js.map +1 -1
  71. package/dist/src/providers/azureopenai.d.ts +3 -2
  72. package/dist/src/providers/azureopenai.d.ts.map +1 -1
  73. package/dist/src/providers/azureopenai.js +129 -3
  74. package/dist/src/providers/azureopenai.js.map +1 -1
  75. package/dist/src/providers/bedrock.js +2 -2
  76. package/dist/src/providers/bedrock.js.map +1 -1
  77. package/dist/src/providers/cloudflare-ai.d.ts +2 -2
  78. package/dist/src/providers/cloudflare-ai.d.ts.map +1 -1
  79. package/dist/src/providers/cloudflare-ai.js.map +1 -1
  80. package/dist/src/providers/cohere.js +1 -1
  81. package/dist/src/providers/cohere.js.map +1 -1
  82. package/dist/src/providers/golangCompletion.d.ts +19 -0
  83. package/dist/src/providers/golangCompletion.d.ts.map +1 -0
  84. package/dist/src/providers/golangCompletion.js +105 -0
  85. package/dist/src/providers/golangCompletion.js.map +1 -0
  86. package/dist/src/providers/http.js +1 -1
  87. package/dist/src/providers/http.js.map +1 -1
  88. package/dist/src/providers/mistral.d.ts.map +1 -1
  89. package/dist/src/providers/mistral.js +8 -18
  90. package/dist/src/providers/mistral.js.map +1 -1
  91. package/dist/src/providers/openai.d.ts +13 -0
  92. package/dist/src/providers/openai.d.ts.map +1 -1
  93. package/dist/src/providers/openai.js +28 -24
  94. package/dist/src/providers/openai.js.map +1 -1
  95. package/dist/src/providers/openaiUtil.d.ts.map +1 -1
  96. package/dist/src/providers/openaiUtil.js +1 -1
  97. package/dist/src/providers/openaiUtil.js.map +1 -1
  98. package/dist/src/providers/shared.d.ts +41 -0
  99. package/dist/src/providers/shared.d.ts.map +1 -1
  100. package/dist/src/providers/shared.js +44 -0
  101. package/dist/src/providers/shared.js.map +1 -1
  102. package/dist/src/providers/vertexUtil.js +2 -2
  103. package/dist/src/providers/vertexUtil.js.map +1 -1
  104. package/dist/src/providers.d.ts.map +1 -1
  105. package/dist/src/providers.js +5 -0
  106. package/dist/src/providers.js.map +1 -1
  107. package/dist/src/python/execAsync.d.ts +10 -0
  108. package/dist/src/python/execAsync.d.ts.map +1 -0
  109. package/dist/src/python/execAsync.js +17 -0
  110. package/dist/src/python/execAsync.js.map +1 -0
  111. package/dist/src/python/pythonUtils.d.ts +29 -0
  112. package/dist/src/python/pythonUtils.d.ts.map +1 -1
  113. package/dist/src/python/pythonUtils.js +85 -6
  114. package/dist/src/python/pythonUtils.js.map +1 -1
  115. package/dist/src/python/wrapper.d.ts.map +1 -1
  116. package/dist/src/python/wrapper.js +8 -5
  117. package/dist/src/python/wrapper.js.map +1 -1
  118. package/dist/src/{commands/redteam → redteam/commands}/generate.d.ts +1 -1
  119. package/dist/src/redteam/commands/generate.d.ts.map +1 -0
  120. package/dist/src/{commands/redteam → redteam/commands}/generate.js +14 -14
  121. package/dist/src/redteam/commands/generate.js.map +1 -0
  122. package/dist/src/redteam/commands/init.d.ts.map +1 -0
  123. package/dist/src/{commands/redteam → redteam/commands}/init.js +23 -15
  124. package/dist/src/redteam/commands/init.js.map +1 -0
  125. package/dist/src/{commands/redteam → redteam/commands}/plugins.d.ts.map +1 -1
  126. package/dist/src/{commands/redteam → redteam/commands}/plugins.js +1 -1
  127. package/dist/src/{commands/redteam → redteam/commands}/plugins.js.map +1 -1
  128. package/dist/src/redteam/constants.d.ts.map +1 -1
  129. package/dist/src/redteam/constants.js +16 -22
  130. package/dist/src/redteam/constants.js.map +1 -1
  131. package/dist/src/redteam/index.d.ts +1 -1
  132. package/dist/src/redteam/index.d.ts.map +1 -1
  133. package/dist/src/redteam/index.js.map +1 -1
  134. package/dist/src/redteam/providers/crescendo/index.js +2 -2
  135. package/dist/src/redteam/providers/crescendo/index.js.map +1 -1
  136. package/dist/src/redteam/providers/prompts.d.ts.map +1 -1
  137. package/dist/src/redteam/providers/prompts.js +23 -0
  138. package/dist/src/redteam/providers/prompts.js.map +1 -1
  139. package/dist/src/{types/redteam.d.ts → redteam/types.d.ts} +1 -1
  140. package/dist/src/redteam/types.d.ts.map +1 -0
  141. package/dist/src/{types/redteam.js → redteam/types.js} +1 -1
  142. package/dist/src/redteam/types.js.map +1 -0
  143. package/dist/src/server/server.d.ts.map +1 -1
  144. package/dist/src/server/server.js +10 -3
  145. package/dist/src/server/server.js.map +1 -1
  146. package/dist/src/share.js +1 -1
  147. package/dist/src/share.js.map +1 -1
  148. package/dist/src/suggestions.js +1 -1
  149. package/dist/src/suggestions.js.map +1 -1
  150. package/dist/src/telemetry.d.ts.map +1 -1
  151. package/dist/src/telemetry.js +3 -1
  152. package/dist/src/telemetry.js.map +1 -1
  153. package/dist/src/testCases.d.ts.map +1 -1
  154. package/dist/src/testCases.js +4 -3
  155. package/dist/src/testCases.js.map +1 -1
  156. package/dist/src/types/index.d.ts +413 -231
  157. package/dist/src/types/index.d.ts.map +1 -1
  158. package/dist/src/types/index.js +12 -2
  159. package/dist/src/types/index.js.map +1 -1
  160. package/dist/src/util/index.d.ts +19 -5
  161. package/dist/src/util/index.d.ts.map +1 -1
  162. package/dist/src/util/index.js +5 -3
  163. package/dist/src/util/index.js.map +1 -1
  164. package/dist/src/util/json.js +2 -2
  165. package/dist/src/util/json.js.map +1 -1
  166. package/dist/src/validators/prompts.d.ts +2 -2
  167. package/dist/src/validators/providers.d.ts +166 -20
  168. package/dist/src/validators/providers.d.ts.map +1 -1
  169. package/dist/src/validators/providers.js +5 -5
  170. package/dist/src/validators/providers.js.map +1 -1
  171. package/dist/src/validators/redteam.d.ts +15 -15
  172. package/dist/test/assertions.test.js +49 -0
  173. package/dist/test/assertions.test.js.map +1 -1
  174. package/dist/test/config.test.js +192 -48
  175. package/dist/test/config.test.js.map +1 -1
  176. package/dist/test/csv.test.js +84 -0
  177. package/dist/test/csv.test.js.map +1 -1
  178. package/dist/test/envars.test.js +103 -0
  179. package/dist/test/envars.test.js.map +1 -1
  180. package/dist/test/matchers.test.js +5 -5
  181. package/dist/test/matchers.test.js.map +1 -1
  182. package/dist/test/providers.anthropic.test.js +93 -23
  183. package/dist/test/providers.anthropic.test.js.map +1 -1
  184. package/dist/test/providers.azure.test.js +42 -0
  185. package/dist/test/providers.azure.test.js.map +1 -1
  186. package/dist/test/providers.bedrock.test.js +2 -1
  187. package/dist/test/providers.bedrock.test.js.map +1 -1
  188. package/dist/test/providers.shared.test.d.ts +2 -0
  189. package/dist/test/providers.shared.test.d.ts.map +1 -0
  190. package/dist/test/providers.shared.test.js +92 -0
  191. package/dist/test/providers.shared.test.js.map +1 -0
  192. package/dist/test/providers.test.js +112 -7
  193. package/dist/test/providers.test.js.map +1 -1
  194. package/dist/test/python/pythonUtils.test.d.ts +2 -0
  195. package/dist/test/python/pythonUtils.test.d.ts.map +1 -0
  196. package/dist/test/python/pythonUtils.test.js +224 -0
  197. package/dist/test/python/pythonUtils.test.js.map +1 -0
  198. package/dist/test/python/wrapper.test.d.ts +2 -0
  199. package/dist/test/python/wrapper.test.d.ts.map +1 -0
  200. package/dist/test/python/wrapper.test.js +71 -0
  201. package/dist/test/python/wrapper.test.js.map +1 -0
  202. package/dist/test/rateLimit.test.js.map +1 -1
  203. package/dist/test/redteam/commands/generate.test.d.ts.map +1 -0
  204. package/dist/test/{commands/redteam → redteam/commands}/generate.test.js +1 -1
  205. package/dist/test/{commands/redteam → redteam/commands}/generate.test.js.map +1 -1
  206. package/dist/test/redteam/validators.test.js +2 -2
  207. package/dist/test/redteam/validators.test.js.map +1 -1
  208. package/dist/test/testCases.test.js +75 -27
  209. package/dist/test/testCases.test.js.map +1 -1
  210. package/dist/test/types.test.js +17 -10
  211. package/dist/test/types.test.js.map +1 -1
  212. package/dist/test/util.test.js +10 -0
  213. package/dist/test/util.test.js.map +1 -1
  214. package/package.json +29 -29
  215. package/dist/src/commands/redteam/generate.d.ts.map +0 -1
  216. package/dist/src/commands/redteam/generate.js.map +0 -1
  217. package/dist/src/commands/redteam/init.d.ts.map +0 -1
  218. package/dist/src/commands/redteam/init.js.map +0 -1
  219. package/dist/src/types/redteam.d.ts.map +0 -1
  220. package/dist/src/types/redteam.js.map +0 -1
  221. package/dist/src/web/nextui/404/index.html +0 -1
  222. package/dist/src/web/nextui/404.html +0 -1
  223. package/dist/src/web/nextui/_next/static/chunks/113-c691bf7d3a37d865.js +0 -1
  224. package/dist/src/web/nextui/_next/static/chunks/132-d6bea93785831786.js +0 -6
  225. package/dist/src/web/nextui/_next/static/chunks/15.306496fdcef5f880.js +0 -52
  226. package/dist/src/web/nextui/_next/static/chunks/167-744b9f585d2d97f7.js +0 -54
  227. package/dist/src/web/nextui/_next/static/chunks/189-f9d565af9a2b91cb.js +0 -1
  228. package/dist/src/web/nextui/_next/static/chunks/1a53ab81-5e1a018996226f61.js +0 -6
  229. package/dist/src/web/nextui/_next/static/chunks/235-2bbcbc3cd37eef0f.js +0 -1
  230. package/dist/src/web/nextui/_next/static/chunks/285-1e2a6158b5f0e918.js +0 -32
  231. package/dist/src/web/nextui/_next/static/chunks/407.42b5daf65ab5dde9.js +0 -1
  232. package/dist/src/web/nextui/_next/static/chunks/417-cbf95fe2bc362650.js +0 -2
  233. package/dist/src/web/nextui/_next/static/chunks/461-77257ab6b1bb209d.js +0 -1
  234. package/dist/src/web/nextui/_next/static/chunks/565431e5-7b9122ac20f7a0ae.js +0 -140
  235. package/dist/src/web/nextui/_next/static/chunks/631-d005608c3710a99c.js +0 -6
  236. package/dist/src/web/nextui/_next/static/chunks/640-0f757e2fe135173d.js +0 -1
  237. package/dist/src/web/nextui/_next/static/chunks/646-62a1d1d5b397d18f.js +0 -28
  238. package/dist/src/web/nextui/_next/static/chunks/730-3eb7255cd813a727.js +0 -25
  239. package/dist/src/web/nextui/_next/static/chunks/782-910eb0e09b818816.js +0 -35
  240. package/dist/src/web/nextui/_next/static/chunks/840.58dde6630f088da4.js +0 -1
  241. package/dist/src/web/nextui/_next/static/chunks/854-c18aaae33bccdc36.js +0 -1
  242. package/dist/src/web/nextui/_next/static/chunks/86-fcb0efd0a19bac7d.js +0 -1
  243. package/dist/src/web/nextui/_next/static/chunks/874-66f90697795eddbc.js +0 -1
  244. package/dist/src/web/nextui/_next/static/chunks/88-f3a7a858d5f4e9a0.js +0 -17
  245. package/dist/src/web/nextui/_next/static/chunks/887.028187fb318c3e59.js +0 -1
  246. package/dist/src/web/nextui/_next/static/chunks/906-70c43cd62b2efac1.js +0 -97
  247. package/dist/src/web/nextui/_next/static/chunks/972-15d1ab608a24eebf.js +0 -1
  248. package/dist/src/web/nextui/_next/static/chunks/975-db84f98b8dd028ab.js +0 -1
  249. package/dist/src/web/nextui/_next/static/chunks/a5c829b0-07a2c92898a6780c.js +0 -14
  250. package/dist/src/web/nextui/_next/static/chunks/app/auth/login/page-c1dbf0abc580796f.js +0 -1
  251. package/dist/src/web/nextui/_next/static/chunks/app/auth/signup/page-93b80ab19bdaf2cc.js +0 -1
  252. package/dist/src/web/nextui/_next/static/chunks/app/datasets/page-17e6d3f57945f88a.js +0 -1
  253. package/dist/src/web/nextui/_next/static/chunks/app/eval/[id]/not-found-dc8b4f57fd363c1b.js +0 -1
  254. package/dist/src/web/nextui/_next/static/chunks/app/eval/[id]/page-1e54704d75f36e25.js +0 -1
  255. package/dist/src/web/nextui/_next/static/chunks/app/eval/page-5295461188ef9b43.js +0 -1
  256. package/dist/src/web/nextui/_next/static/chunks/app/layout-e465aaafbfe88e82.js +0 -1
  257. package/dist/src/web/nextui/_next/static/chunks/app/page-81e3b8fee37eaf67.js +0 -1
  258. package/dist/src/web/nextui/_next/static/chunks/app/progress/page-ac2f99c11e76f5a5.js +0 -1
  259. package/dist/src/web/nextui/_next/static/chunks/app/prompts/page-296c32f480e84a57.js +0 -1
  260. package/dist/src/web/nextui/_next/static/chunks/app/report/page-f7c9e46492061e19.js +0 -1
  261. package/dist/src/web/nextui/_next/static/chunks/app/setup/page-35c95dd67114a045.js +0 -1
  262. package/dist/src/web/nextui/_next/static/chunks/b6261da7-e9d81a4364ddd0c0.js +0 -9
  263. package/dist/src/web/nextui/_next/static/chunks/fd57813c.8f0e3582250c76c5.js +0 -1
  264. package/dist/src/web/nextui/_next/static/chunks/framework-c3d480eb9ad30ba5.js +0 -25
  265. package/dist/src/web/nextui/_next/static/chunks/main-6b1ff2291a752212.js +0 -1
  266. package/dist/src/web/nextui/_next/static/chunks/main-app-0dc90092cd7acaaf.js +0 -1
  267. package/dist/src/web/nextui/_next/static/chunks/pages/_app-998b254a061422d4.js +0 -1
  268. package/dist/src/web/nextui/_next/static/chunks/pages/_error-94f0db477e27e000.js +0 -1
  269. package/dist/src/web/nextui/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -1
  270. package/dist/src/web/nextui/_next/static/chunks/webpack-452ae8c28379ed4c.js +0 -1
  271. package/dist/src/web/nextui/_next/static/css/48d388184a2f4ce3.css +0 -1
  272. package/dist/src/web/nextui/_next/static/css/4d76d7cdd9492e1d.css +0 -1
  273. package/dist/src/web/nextui/_next/static/css/8119d8bd13a8adab.css +0 -1
  274. package/dist/src/web/nextui/_next/static/css/87b5e6e04efd27e5.css +0 -1
  275. package/dist/src/web/nextui/_next/static/css/de0307797e31a3e6.css +0 -1
  276. package/dist/src/web/nextui/_next/static/css/eb523daddb89dfc1.css +0 -1
  277. package/dist/src/web/nextui/_next/static/css/edcd6f0b6c902fde.css +0 -1
  278. package/dist/src/web/nextui/_next/static/gtTJhFvE95U20UjbnSnMr/_buildManifest.js +0 -1
  279. package/dist/src/web/nextui/_next/static/gtTJhFvE95U20UjbnSnMr/_ssgManifest.js +0 -1
  280. package/dist/src/web/nextui/_next/static/media/26a46d62cd723877-s.woff2 +0 -0
  281. package/dist/src/web/nextui/_next/static/media/55c55f0601d81cf3-s.woff2 +0 -0
  282. package/dist/src/web/nextui/_next/static/media/581909926a08bbc8-s.woff2 +0 -0
  283. package/dist/src/web/nextui/_next/static/media/6d93bde91c0c2823-s.woff2 +0 -0
  284. package/dist/src/web/nextui/_next/static/media/97e0cb1ae144a2a9-s.woff2 +0 -0
  285. package/dist/src/web/nextui/_next/static/media/a34f9d1faa5f3315-s.p.woff2 +0 -0
  286. package/dist/src/web/nextui/_next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
  287. package/dist/src/web/nextui/android-chrome-192x192.png +0 -0
  288. package/dist/src/web/nextui/android-chrome-512x512.png +0 -0
  289. package/dist/src/web/nextui/apple-touch-icon.png +0 -0
  290. package/dist/src/web/nextui/auth/callback +0 -1
  291. package/dist/src/web/nextui/auth/login/index.html +0 -1
  292. package/dist/src/web/nextui/auth/login/index.txt +0 -10
  293. package/dist/src/web/nextui/auth/signup/index.html +0 -1
  294. package/dist/src/web/nextui/auth/signup/index.txt +0 -10
  295. package/dist/src/web/nextui/browserconfig.xml +0 -9
  296. package/dist/src/web/nextui/datasets/index.html +0 -1
  297. package/dist/src/web/nextui/datasets/index.txt +0 -10
  298. package/dist/src/web/nextui/eval/index.html +0 -1
  299. package/dist/src/web/nextui/eval/index.txt +0 -12
  300. package/dist/src/web/nextui/index.html +0 -1
  301. package/dist/src/web/nextui/index.txt +0 -11
  302. package/dist/src/web/nextui/logo.svg +0 -30
  303. package/dist/src/web/nextui/mstile-144x144.png +0 -0
  304. package/dist/src/web/nextui/mstile-150x150.png +0 -0
  305. package/dist/src/web/nextui/mstile-310x150.png +0 -0
  306. package/dist/src/web/nextui/mstile-310x310.png +0 -0
  307. package/dist/src/web/nextui/mstile-70x70.png +0 -0
  308. package/dist/src/web/nextui/progress/index.html +0 -1
  309. package/dist/src/web/nextui/progress/index.txt +0 -10
  310. package/dist/src/web/nextui/prompts/index.html +0 -1
  311. package/dist/src/web/nextui/prompts/index.txt +0 -10
  312. package/dist/src/web/nextui/report/index.html +0 -1
  313. package/dist/src/web/nextui/report/index.txt +0 -12
  314. package/dist/src/web/nextui/safari-pinned-tab.svg +0 -68
  315. package/dist/src/web/nextui/setup/index.html +0 -1
  316. package/dist/src/web/nextui/setup/index.txt +0 -12
  317. package/dist/src/web/nextui/site.webmanifest +0 -19
  318. package/dist/test/commands/redteam/generate.test.d.ts.map +0 -1
  319. package/dist/test/pythonWrapper.test.d.ts +0 -2
  320. package/dist/test/pythonWrapper.test.d.ts.map +0 -1
  321. package/dist/test/pythonWrapper.test.js +0 -99
  322. package/dist/test/pythonWrapper.test.js.map +0 -1
  323. /package/dist/src/{web/nextui/logo-panda.svg → app/assets/logo-panda-BuYvzEyb.svg} +0 -0
  324. /package/dist/src/{web/nextui → app}/favicon-16x16.png +0 -0
  325. /package/dist/src/{web/nextui → app}/favicon-32x32.png +0 -0
  326. /package/dist/src/{web/nextui → app}/favicon.ico +0 -0
  327. /package/dist/src/{commands/redteam → redteam/commands}/init.d.ts +0 -0
  328. /package/dist/src/{commands/redteam → redteam/commands}/plugins.d.ts +0 -0
  329. /package/dist/test/{commands/redteam → redteam/commands}/generate.test.d.ts +0 -0
@@ -1,12 +0,0 @@
1
- 1:HL["/_next/static/media/a34f9d1faa5f3315-s.p.woff2",{"as":"font","type":"font/woff2"}]
2
- 2:HL["/_next/static/css/de0307797e31a3e6.css",{"as":"style"}]
3
- 0:["gtTJhFvE95U20UjbnSnMr",[[["",{"children":["report",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de0307797e31a3e6.css","precedence":"next"}]],"$L4"]]]]
4
- 5:HL["/_next/static/css/4d76d7cdd9492e1d.css",{"as":"style"}]
5
- 6:I{"id":72403,"chunks":["906:static/chunks/906-70c43cd62b2efac1.js","640:static/chunks/640-0f757e2fe135173d.js","461:static/chunks/461-77257ab6b1bb209d.js","88:static/chunks/88-f3a7a858d5f4e9a0.js","113:static/chunks/113-c691bf7d3a37d865.js","975:static/chunks/975-db84f98b8dd028ab.js","132:static/chunks/132-d6bea93785831786.js","189:static/chunks/189-f9d565af9a2b91cb.js","185:static/chunks/app/layout-e465aaafbfe88e82.js"],"name":"PageShell","async":false}
6
- 7:I{"id":27883,"chunks":["272:static/chunks/webpack-452ae8c28379ed4c.js","470:static/chunks/b6261da7-e9d81a4364ddd0c0.js","730:static/chunks/730-3eb7255cd813a727.js"],"name":"default","async":false}
7
- 8:I{"id":46785,"chunks":["272:static/chunks/webpack-452ae8c28379ed4c.js","470:static/chunks/b6261da7-e9d81a4364ddd0c0.js","730:static/chunks/730-3eb7255cd813a727.js"],"name":"default","async":false}
8
- 3:[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_85e967","children":["$","$L6",null,{"children":["$","$L7",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","loading":"$undefined","loadingStyles":"$undefined","hasLoading":false,"template":["$","$L8",null,{}],"templateStyles":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":"$undefined","childProp":{"current":["$","$L7",null,{"parallelRouterKey":"children","segmentPath":["children","report","children"],"error":"$undefined","errorStyles":"$undefined","loading":"$undefined","loadingStyles":"$undefined","hasLoading":false,"template":["$","$L8",null,{}],"templateStyles":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","childProp":{"current":["$L9","$La",null],"segment":"__PAGE__"},"styles":[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/4d76d7cdd9492e1d.css","precedence":"next"}]]}],"segment":"report"},"styles":[]}]}]}]}],null]
9
- 4:[["$","meta","0",{"charSet":"utf-8"}],["$","title","1",{"children":"promptfoo"}],["$","meta","2",{"name":"description","content":"LLM testing and evaluation"}],["$","meta","3",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","4",{"property":"og:image","content":"https://www.promptfoo.dev/img/thumbnail.png"}],["$","meta","5",{"name":"twitter:card","content":"summary"}],["$","meta","6",{"name":"twitter:image","content":"https://www.promptfoo.dev/img/thumbnail.png"}],["$","meta","7",{"name":"next-size-adjust"}]]
10
- b:I{"id":56129,"chunks":["949:static/chunks/565431e5-7b9122ac20f7a0ae.js","799:static/chunks/a5c829b0-07a2c92898a6780c.js","906:static/chunks/906-70c43cd62b2efac1.js","461:static/chunks/461-77257ab6b1bb209d.js","88:static/chunks/88-f3a7a858d5f4e9a0.js","113:static/chunks/113-c691bf7d3a37d865.js","417:static/chunks/417-cbf95fe2bc362650.js","874:static/chunks/874-66f90697795eddbc.js","646:static/chunks/646-62a1d1d5b397d18f.js","167:static/chunks/167-744b9f585d2d97f7.js","420:static/chunks/app/report/page-f7c9e46492061e19.js"],"name":"","async":false}
11
- a:["$","$Lb",null,{}]
12
- 9:null
@@ -1,68 +0,0 @@
1
- <?xml version="1.0" standalone="no"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
3
- "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
- <svg version="1.0" xmlns="http://www.w3.org/2000/svg"
5
- width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000"
6
- preserveAspectRatio="xMidYMid meet">
7
- <metadata>
8
- Created by potrace 1.14, written by Peter Selinger 2001-2017
9
- </metadata>
10
- <g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)"
11
- fill="#000000" stroke="none">
12
- <path d="M3005 6365 l-390 -163 -117 -247 c-64 -135 -118 -249 -121 -251 -3
13
- -3 -40 11 -84 32 -165 77 -359 140 -558 178 -216 42 -523 65 -698 51 l-97 -7
14
- 0 -331 c0 -349 12 -638 30 -753 34 -218 108 -472 192 -662 45 -101 49 -115 35
15
- -130 -155 -179 -407 -477 -407 -482 0 -15 286 -303 384 -385 79 -68 107 -97
16
- 112 -120 3 -16 29 -145 57 -286 l52 -257 1005 -1026 c553 -564 1007 -1026
17
- 1010 -1026 3 0 352 353 774 785 423 432 772 785 777 785 4 0 142 -157 305
18
- -350 333 -393 327 -387 447 -378 117 10 244 94 292 193 28 59 32 143 8 189
19
- -10 20 -135 178 -277 351 l-258 315 -33 -20 -33 -20 -31 39 -32 40 40 60 c49
20
- 77 85 166 105 264 17 82 20 225 7 295 l-8 42 86 67 c83 64 451 425 451 442 0
21
- 4 -89 111 -197 238 -109 126 -204 237 -212 246 -11 14 -6 32 37 129 84 190
22
- 158 444 192 662 18 115 30 403 30 752 l0 331 -67 6 c-225 22 -618 -16 -885
23
- -84 -121 -30 -266 -82 -377 -134 -55 -27 -104 -45 -107 -42 -3 3 -58 117 -123
24
- 253 l-116 246 -390 164 c-214 90 -397 163 -405 163 -8 0 -190 -74 -405 -164z
25
- m-1620 -555 c322 -28 596 -95 823 -201 56 -26 102 -50 102 -52 0 -13 -161
26
- -332 -168 -332 -4 0 -47 20 -97 44 -107 51 -288 113 -400 136 -87 18 -215 31
27
- -215 23 0 -3 5 -52 10 -109 15 -145 36 -258 72 -368 36 -112 48 -93 -119 -182
28
- -62 -33 -115 -64 -118 -68 -7 -12 107 -56 238 -92 61 -16 113 -31 114 -33 2
29
- -2 -264 -374 -282 -394 -10 -11 -119 267 -160 409 -74 254 -94 463 -95 972 l0
30
- 257 88 0 c48 0 141 -5 207 -10z m4345 -257 c-1 -498 -21 -706 -94 -960 -41
31
- -140 -150 -423 -160 -412 -15 17 -285 393 -283 395 1 1 59 18 130 38 128 36
32
- 227 73 227 85 0 3 -54 35 -120 70 -171 91 -157 71 -122 182 36 110 57 223 72
33
- 368 5 57 10 105 10 107 0 9 -83 3 -161 -11 -166 -31 -336 -88 -483 -161 -38
34
- -19 -70 -33 -71 -32 -5 6 -165 328 -165 333 0 9 135 72 233 109 248 93 579
35
- 151 880 155 l107 1 0 -267z m-1515 -1254 c122 -17 128 -22 54 -49 -98 -35
36
- -226 -102 -335 -175 -77 -51 -110 -68 -147 -72 l-48 -6 20 51 c44 111 102 178
37
- 189 219 85 40 153 48 267 32z m-1344 -32 c85 -41 155 -127 200 -244 l9 -25
38
- -51 7 c-39 5 -67 18 -112 51 -82 60 -219 137 -324 180 -48 20 -90 38 -91 39
39
- -12 11 101 24 198 22 103 -2 121 -5 171 -30z m-536 -169 c-164 -180 -273 -393
40
- -310 -606 -29 -165 -15 -415 30 -543 9 -23 14 -44 12 -46 -7 -6 -310 118 -417
41
- 172 -97 49 -282 164 -294 184 -8 13 42 157 84 246 154 320 408 508 850 630 47
42
- 13 89 24 93 24 5 1 -17 -27 -48 -61z m2270 16 c447 -133 706 -368 836 -756 30
43
- -90 30 -91 11 -110 -19 -19 -19 -19 -42 24 -114 221 -337 377 -585 410 l-82
44
- 11 -43 86 c-55 112 -113 199 -200 299 -69 81 -70 81 -37 75 17 -3 82 -21 142
45
- -39z m-1015 -284 c164 -54 342 -193 468 -364 l50 -70 -30 -44 c-42 -62 -93
46
- -175 -114 -257 -25 -100 -23 -274 5 -379 12 -44 19 -81 17 -83 -6 -6 -270 -84
47
- -376 -111 -204 -51 -324 -34 -742 101 l-193 63 -33 54 c-45 76 -62 140 -62
48
- 235 0 207 111 435 306 629 125 124 271 211 405 241 84 19 214 13 299 -15z
49
- m1294 -297 c221 -55 403 -242 462 -473 24 -96 16 -261 -19 -358 -95 -269 -358
50
- -445 -643 -429 -163 9 -298 71 -420 193 -247 246 -245 653 5 899 165 163 391
51
- 224 615 168z m436 -1306 c0 -4 -12 -12 -27 -18 -16 -5 -37 -21 -49 -35 l-21
52
- -26 -46 49 -47 48 23 15 c12 8 35 27 52 42 l30 27 42 -47 c23 -26 42 -50 43
53
- -55z m359 -317 c222 -270 226 -279 175 -340 -38 -44 -116 -82 -164 -78 -36 3
54
- -47 14 -258 262 l-220 259 116 87 c108 81 118 86 134 71 9 -9 107 -126 217
55
- -261z"/>
56
- <path d="M3254 3461 c-89 -15 -124 -47 -124 -116 1 -77 56 -159 151 -222 l39
57
- -26 0 -78 0 -79 -54 0 c-81 0 -105 -34 -71 -100 l16 -30 198 0 c154 0 201 3
58
- 210 13 18 22 24 73 12 96 -10 18 -21 21 -71 21 l-60 0 0 78 0 77 65 48 c76 56
59
- 116 118 123 188 6 60 -14 94 -66 116 -43 18 -286 27 -368 14z"/>
60
- <path d="M4579 3391 c-175 -56 -311 -204 -348 -379 -57 -276 136 -550 419
61
- -593 295 -45 569 192 570 491 0 229 -150 424 -375 486 -70 19 -198 17 -266 -5z
62
- m101 -139 c35 -28 21 -66 -37 -100 -68 -40 -114 -84 -148 -141 -24 -41 -34
63
- -50 -50 -46 -11 2 -30 5 -42 5 -28 0 -30 26 -6 96 29 87 164 200 244 203 9 1
64
- 27 -7 39 -17z m252 -13 c77 -49 166 -166 143 -188 -12 -10 -257 -92 -262 -87
65
- -2 1 4 23 12 47 14 38 45 209 45 247 0 18 8 15 62 -19z m-460 -326 c42 -37 -3
66
- -123 -56 -107 -53 16 -70 59 -40 102 18 27 69 30 96 5z"/>
67
- </g>
68
- </svg>
@@ -1 +0,0 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><link rel="preload" as="font" href="/_next/static/media/a34f9d1faa5f3315-s.p.woff2" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/de0307797e31a3e6.css" data-precedence="next"/><link rel="preload" as="style" href="/_next/static/css/edcd6f0b6c902fde.css"/><link rel="preload" href="/_next/static/chunks/webpack-452ae8c28379ed4c.js" as="script"/><link rel="preload" href="/_next/static/chunks/b6261da7-e9d81a4364ddd0c0.js" as="script"/><link rel="preload" href="/_next/static/chunks/730-3eb7255cd813a727.js" as="script"/><link rel="preload" href="/_next/static/chunks/main-app-0dc90092cd7acaaf.js" as="script"/><title>promptfoo</title><meta name="description" content="LLM testing and evaluation"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta property="og:image" content="https://www.promptfoo.dev/img/thumbnail.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://www.promptfoo.dev/img/thumbnail.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js" noModule=""></script></head><body class="__className_85e967"><script src="/_next/static/chunks/webpack-452ae8c28379ed4c.js" async=""></script><script src="/_next/static/chunks/b6261da7-e9d81a4364ddd0c0.js" async=""></script><script src="/_next/static/chunks/730-3eb7255cd813a727.js" async=""></script><script src="/_next/static/chunks/main-app-0dc90092cd7acaaf.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/a34f9d1faa5f3315-s.p.woff2\",{\"as\":\"font\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/de0307797e31a3e6.css\",{\"as\":\"style\"}]\n0:\"$L3\"\n"])</script><script>self.__next_f.push([1,"4:HL[\"/_next/static/css/edcd6f0b6c902fde.css\",{\"as\":\"style\"}]\n"])</script><script>self.__next_f.push([1,"5:I{\"id\":83507,\"chunks\":[\"272:static/chunks/webpack-452ae8c28379ed4c.js\",\"470:static/chunks/b6261da7-e9d81a4364ddd0c0.js\",\"730:static/chunks/730-3eb7255cd813a727.js\"],\"name\":\"default\",\"async\":false}\n7:I{\"id\":6020,\"chunks\":[\"272:static/chunks/webpack-452ae8c28379ed4c.js\",\"470:static/chunks/b6261da7-e9d81a4364ddd0c0.js\",\"730:static/chunks/730-3eb7255cd813a727.js\"],\"name\":\"\",\"async\":false}\n8:I{\"id\":72403,\"chunks\":[\"906:static/chunks/906-70c43cd62b2efac1.js\",\"640:static/chunks/640-0f757e2fe135173d.js\",\"461:stat"])</script><script>self.__next_f.push([1,"ic/chunks/461-77257ab6b1bb209d.js\",\"88:static/chunks/88-f3a7a858d5f4e9a0.js\",\"113:static/chunks/113-c691bf7d3a37d865.js\",\"975:static/chunks/975-db84f98b8dd028ab.js\",\"132:static/chunks/132-d6bea93785831786.js\",\"189:static/chunks/189-f9d565af9a2b91cb.js\",\"185:static/chunks/app/layout-e465aaafbfe88e82.js\"],\"name\":\"PageShell\",\"async\":false}\n9:I{\"id\":27883,\"chunks\":[\"272:static/chunks/webpack-452ae8c28379ed4c.js\",\"470:static/chunks/b6261da7-e9d81a4364ddd0c0.js\",\"730:static/chunks/730-3eb7255cd813a727.js\"],\"name\""])</script><script>self.__next_f.push([1,":\"default\",\"async\":false}\na:I{\"id\":46785,\"chunks\":[\"272:static/chunks/webpack-452ae8c28379ed4c.js\",\"470:static/chunks/b6261da7-e9d81a4364ddd0c0.js\",\"730:static/chunks/730-3eb7255cd813a727.js\"],\"name\":\"default\",\"async\":false}\nc:I{\"id\":27382,\"chunks\":[\"272:static/chunks/webpack-452ae8c28379ed4c.js\",\"470:static/chunks/b6261da7-e9d81a4364ddd0c0.js\",\"730:static/chunks/730-3eb7255cd813a727.js\"],\"name\":\"default\",\"async\":false}\n"])</script><script>self.__next_f.push([1,"d:I{\"id\":83013,\"chunks\":[\"906:static/chunks/906-70c43cd62b2efac1.js\",\"640:static/chunks/640-0f757e2fe135173d.js\",\"461:static/chunks/461-77257ab6b1bb209d.js\",\"88:static/chunks/88-f3a7a858d5f4e9a0.js\",\"113:static/chunks/113-c691bf7d3a37d865.js\",\"975:static/chunks/975-db84f98b8dd028ab.js\",\"417:static/chunks/417-cbf95fe2bc362650.js\",\"874:static/chunks/874-66f90697795eddbc.js\",\"235:static/chunks/235-2bbcbc3cd37eef0f.js\",\"972:static/chunks/972-15d1ab608a24eebf.js\",\"782:static/chunks/782-910eb0e09b818816.js\",\"413:static/chunks/app/setup/page-35c95dd67114a045.js\"],\"name\":\"\",\"async\":false}\n"])</script><script>self.__next_f.push([1,"3:[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/de0307797e31a3e6.css\",\"precedence\":\"next\"}]],[\"$\",\"$L5\",null,{\"buildId\":\"gtTJhFvE95U20UjbnSnMr\",\"assetPrefix\":\"\",\"initialCanonicalUrl\":\"/setup/\",\"initialTree\":[\"\",{\"children\":[\"setup\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialHead\":\"$L6\",\"globalErrorComponent\":\"$7\",\"children\":[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"__className_85e967\",\"children\":[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"loading\":\"$undefined\",\"loadingStyles\":\"$undefined\",\"hasLoading\":false,\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":\"$undefined\",\"childProp\":{\"current\":[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"setup\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"loading\":\"$undefined\",\"loadingStyles\":\"$undefined\",\"hasLoading\":false,\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"childProp\":{\"current\":[\"$Lb\",[\"$\",\"$Lc\",null,{\"propsForComponent\":{\"params\":{}},\"Component\":\"$d\"}],null],\"segment\":\"__PAGE__\"},\"styles\":[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/edcd6f0b6c902fde.css\",\"precedence\":\"next\"}]]}],\"segment\":\"setup\"},\"styles\":[]}]}]}]}],null]}]]\n"])</script><script>self.__next_f.push([1,"6:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"1\",{\"children\":\"promptfoo\"}],[\"$\",\"meta\",\"2\",{\"name\":\"description\",\"content\":\"LLM testing and evaluation\"}],[\"$\",\"meta\",\"3\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:image\",\"content\":\"https://www.promptfoo.dev/img/thumbnail.png\"}],[\"$\",\"meta\",\"5\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"6\",{\"name\":\"twitter:image\",\"content\":\"https://www.promptfoo.dev/img/thumbnail.png\"}],[\"$\",\"meta\",\"7\",{\"name\":\"next-size-adjust\"}]]\n"])</script><script>self.__next_f.push([1,"b:null\n"])</script></body></html>
@@ -1,12 +0,0 @@
1
- 1:HL["/_next/static/media/a34f9d1faa5f3315-s.p.woff2",{"as":"font","type":"font/woff2"}]
2
- 2:HL["/_next/static/css/de0307797e31a3e6.css",{"as":"style"}]
3
- 0:["gtTJhFvE95U20UjbnSnMr",[[["",{"children":["setup",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],"$L3",[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/de0307797e31a3e6.css","precedence":"next"}]],"$L4"]]]]
4
- 5:HL["/_next/static/css/edcd6f0b6c902fde.css",{"as":"style"}]
5
- 6:I{"id":72403,"chunks":["906:static/chunks/906-70c43cd62b2efac1.js","640:static/chunks/640-0f757e2fe135173d.js","461:static/chunks/461-77257ab6b1bb209d.js","88:static/chunks/88-f3a7a858d5f4e9a0.js","113:static/chunks/113-c691bf7d3a37d865.js","975:static/chunks/975-db84f98b8dd028ab.js","132:static/chunks/132-d6bea93785831786.js","189:static/chunks/189-f9d565af9a2b91cb.js","185:static/chunks/app/layout-e465aaafbfe88e82.js"],"name":"PageShell","async":false}
6
- 7:I{"id":27883,"chunks":["272:static/chunks/webpack-452ae8c28379ed4c.js","470:static/chunks/b6261da7-e9d81a4364ddd0c0.js","730:static/chunks/730-3eb7255cd813a727.js"],"name":"default","async":false}
7
- 8:I{"id":46785,"chunks":["272:static/chunks/webpack-452ae8c28379ed4c.js","470:static/chunks/b6261da7-e9d81a4364ddd0c0.js","730:static/chunks/730-3eb7255cd813a727.js"],"name":"default","async":false}
8
- a:I{"id":27382,"chunks":["272:static/chunks/webpack-452ae8c28379ed4c.js","470:static/chunks/b6261da7-e9d81a4364ddd0c0.js","730:static/chunks/730-3eb7255cd813a727.js"],"name":"default","async":false}
9
- b:I{"id":83013,"chunks":["906:static/chunks/906-70c43cd62b2efac1.js","640:static/chunks/640-0f757e2fe135173d.js","461:static/chunks/461-77257ab6b1bb209d.js","88:static/chunks/88-f3a7a858d5f4e9a0.js","113:static/chunks/113-c691bf7d3a37d865.js","975:static/chunks/975-db84f98b8dd028ab.js","417:static/chunks/417-cbf95fe2bc362650.js","874:static/chunks/874-66f90697795eddbc.js","235:static/chunks/235-2bbcbc3cd37eef0f.js","972:static/chunks/972-15d1ab608a24eebf.js","782:static/chunks/782-910eb0e09b818816.js","413:static/chunks/app/setup/page-35c95dd67114a045.js"],"name":"","async":false}
10
- 3:[null,["$","html",null,{"lang":"en","children":["$","body",null,{"className":"__className_85e967","children":["$","$L6",null,{"children":["$","$L7",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","loading":"$undefined","loadingStyles":"$undefined","hasLoading":false,"template":["$","$L8",null,{}],"templateStyles":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":"$undefined","childProp":{"current":["$","$L7",null,{"parallelRouterKey":"children","segmentPath":["children","setup","children"],"error":"$undefined","errorStyles":"$undefined","loading":"$undefined","loadingStyles":"$undefined","hasLoading":false,"template":["$","$L8",null,{}],"templateStyles":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","childProp":{"current":["$L9",["$","$La",null,{"propsForComponent":{"params":{}},"Component":"$b"}],null],"segment":"__PAGE__"},"styles":[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/edcd6f0b6c902fde.css","precedence":"next"}]]}],"segment":"setup"},"styles":[]}]}]}]}],null]
11
- 4:[["$","meta","0",{"charSet":"utf-8"}],["$","title","1",{"children":"promptfoo"}],["$","meta","2",{"name":"description","content":"LLM testing and evaluation"}],["$","meta","3",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","4",{"property":"og:image","content":"https://www.promptfoo.dev/img/thumbnail.png"}],["$","meta","5",{"name":"twitter:card","content":"summary"}],["$","meta","6",{"name":"twitter:image","content":"https://www.promptfoo.dev/img/thumbnail.png"}],["$","meta","7",{"name":"next-size-adjust"}]]
12
- 9:null
@@ -1,19 +0,0 @@
1
- {
2
- "name": "",
3
- "short_name": "",
4
- "icons": [
5
- {
6
- "src": "/android-chrome-192x192.png",
7
- "sizes": "192x192",
8
- "type": "image/png"
9
- },
10
- {
11
- "src": "/android-chrome-512x512.png",
12
- "sizes": "512x512",
13
- "type": "image/png"
14
- }
15
- ],
16
- "theme_color": "#ffffff",
17
- "background_color": "#ffffff",
18
- "display": "standalone"
19
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate.test.d.ts","sourceRoot":"","sources":["../../../../test/commands/redteam/generate.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=pythonWrapper.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pythonWrapper.test.d.ts","sourceRoot":"","sources":["../../test/pythonWrapper.test.ts"],"names":[],"mappings":""}
@@ -1,99 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const fs_1 = require("fs");
4
- const python_shell_1 = require("python-shell");
5
- const pythonUtils_1 = require("../src/python/pythonUtils");
6
- const wrapper_1 = require("../src/python/wrapper");
7
- jest.mock('../src/esm');
8
- jest.mock('../src/logger');
9
- jest.mock('python-shell');
10
- jest.mock('fs', () => ({
11
- promises: {
12
- writeFile: jest.fn(),
13
- readFile: jest.fn(),
14
- unlink: jest.fn(),
15
- },
16
- }));
17
- describe('Python Wrapper', () => {
18
- beforeEach(() => {
19
- jest.clearAllMocks();
20
- });
21
- describe('runPython', () => {
22
- it('should correctly run a Python script with provided arguments and read the output file', async () => {
23
- const mockOutput = JSON.stringify({ type: 'final_result', data: 'test result' });
24
- jest.spyOn(fs_1.promises, 'writeFile').mockResolvedValue();
25
- jest.spyOn(fs_1.promises, 'readFile').mockResolvedValue(mockOutput);
26
- jest.spyOn(fs_1.promises, 'unlink').mockResolvedValue();
27
- const mockPythonShellRun = jest.mocked(python_shell_1.PythonShell.run);
28
- mockPythonShellRun.mockResolvedValue([]);
29
- const result = await (0, pythonUtils_1.runPython)('testScript.py', 'testMethod', ['arg1', { key: 'value' }]);
30
- expect(result).toBe('test result');
31
- expect(mockPythonShellRun).toHaveBeenCalledWith('wrapper.py', expect.objectContaining({
32
- args: expect.arrayContaining([
33
- expect.stringContaining('testScript.py'),
34
- 'testMethod',
35
- expect.stringContaining('promptfoo-python-input-json'),
36
- expect.stringContaining('promptfoo-python-output-json'),
37
- ]),
38
- }));
39
- expect(fs_1.promises.writeFile).toHaveBeenCalledWith(expect.stringContaining('promptfoo-python-input-json'), expect.any(String), 'utf-8');
40
- expect(fs_1.promises.readFile).toHaveBeenCalledWith(expect.stringContaining('promptfoo-python-output-json'), 'utf-8');
41
- expect(fs_1.promises.unlink).toHaveBeenCalledTimes(2); // Once for input JSON, once for output JSON
42
- });
43
- it('should throw an error if the Python script execution fails', async () => {
44
- const mockPythonShellRun = jest.mocked(python_shell_1.PythonShell.run);
45
- mockPythonShellRun.mockRejectedValue(new Error('Test Error'));
46
- await expect((0, pythonUtils_1.runPython)('testScript.py', 'testMethod', ['arg1'])).rejects.toThrow('Error running Python script: Test Error');
47
- });
48
- it('should handle Python script returning incorrect result type', async () => {
49
- const mockOutput = JSON.stringify({ type: 'unexpected_result', data: 'test result' });
50
- jest.spyOn(fs_1.promises, 'writeFile').mockResolvedValue();
51
- jest.spyOn(fs_1.promises, 'readFile').mockResolvedValue(mockOutput);
52
- jest.spyOn(fs_1.promises, 'unlink').mockResolvedValue();
53
- const mockPythonShellRun = jest.mocked(python_shell_1.PythonShell.run);
54
- mockPythonShellRun.mockResolvedValue([]);
55
- await expect((0, pythonUtils_1.runPython)('testScript.py', 'testMethod', ['arg1'])).rejects.toThrow('The Python script `call_api` function must return a dict with an `output`');
56
- });
57
- it('should handle invalid JSON in the output file', async () => {
58
- jest.spyOn(fs_1.promises, 'writeFile').mockResolvedValue();
59
- jest.spyOn(fs_1.promises, 'readFile').mockResolvedValue('Invalid JSON');
60
- jest.spyOn(fs_1.promises, 'unlink').mockResolvedValue();
61
- const mockPythonShellRun = jest.mocked(python_shell_1.PythonShell.run);
62
- mockPythonShellRun.mockResolvedValue([]);
63
- await expect((0, pythonUtils_1.runPython)('testScript.py', 'testMethod', ['arg1'])).rejects.toThrow('Invalid JSON:');
64
- });
65
- });
66
- describe('runPythonCode', () => {
67
- it('should execute Python code from a string and read the output file', async () => {
68
- const mockOutput = JSON.stringify({ type: 'final_result', data: 'execution result' });
69
- jest.spyOn(fs_1.promises, 'writeFile').mockResolvedValue();
70
- jest.spyOn(fs_1.promises, 'readFile').mockResolvedValue(mockOutput);
71
- jest.spyOn(fs_1.promises, 'unlink').mockResolvedValue();
72
- const mockPythonShellRun = jest.mocked(python_shell_1.PythonShell.run);
73
- mockPythonShellRun.mockResolvedValue([]);
74
- const code = 'print("Hello, world!")';
75
- const result = await (0, wrapper_1.runPythonCode)(code, 'main', []);
76
- expect(result).toBe('execution result');
77
- expect(mockPythonShellRun).toHaveBeenCalledWith('wrapper.py', expect.objectContaining({
78
- args: expect.arrayContaining([
79
- expect.stringContaining('.py'),
80
- 'main',
81
- expect.stringContaining('promptfoo-python-input-json'),
82
- expect.stringContaining('promptfoo-python-output-json'),
83
- ]),
84
- }));
85
- expect(fs_1.promises.writeFile).toHaveBeenCalledWith(expect.stringContaining('.py'), code);
86
- expect(fs_1.promises.readFile).toHaveBeenCalledWith(expect.stringContaining('promptfoo-python-output-json'), 'utf-8');
87
- });
88
- it('should clean up the temporary files after execution', async () => {
89
- jest.spyOn(fs_1.promises, 'writeFile').mockResolvedValue();
90
- jest
91
- .spyOn(fs_1.promises, 'readFile')
92
- .mockResolvedValue('{"type": "final_result", "data": "cleanup test"}');
93
- jest.spyOn(fs_1.promises, 'unlink').mockResolvedValue();
94
- await (0, wrapper_1.runPythonCode)('print("cleanup test")', 'main', []);
95
- expect(fs_1.promises.unlink).toHaveBeenCalledTimes(3); // Once for the temporary Python file, once for input JSON, once for output JSON
96
- });
97
- });
98
- });
99
- //# sourceMappingURL=pythonWrapper.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pythonWrapper.test.js","sourceRoot":"","sources":["../../test/pythonWrapper.test.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes