@chanl/scenarios-core 0.4.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 (298) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/e2e/test-helpers.d.ts +79 -0
  3. package/dist/__tests__/e2e/test-helpers.d.ts.map +1 -0
  4. package/dist/__tests__/e2e/test-helpers.js +162 -0
  5. package/dist/__tests__/e2e/test-helpers.js.map +1 -0
  6. package/dist/adapters/adapter-registry.d.ts +14 -0
  7. package/dist/adapters/adapter-registry.d.ts.map +1 -0
  8. package/dist/adapters/adapter-registry.js +53 -0
  9. package/dist/adapters/adapter-registry.js.map +1 -0
  10. package/dist/adapters/agent-adapter.interface.d.ts +70 -0
  11. package/dist/adapters/agent-adapter.interface.d.ts.map +1 -0
  12. package/dist/adapters/agent-adapter.interface.js +3 -0
  13. package/dist/adapters/agent-adapter.interface.js.map +1 -0
  14. package/dist/adapters/anthropic.adapter.d.ts +17 -0
  15. package/dist/adapters/anthropic.adapter.d.ts.map +1 -0
  16. package/dist/adapters/anthropic.adapter.js +145 -0
  17. package/dist/adapters/anthropic.adapter.js.map +1 -0
  18. package/dist/adapters/http.adapter.d.ts +17 -0
  19. package/dist/adapters/http.adapter.d.ts.map +1 -0
  20. package/dist/adapters/http.adapter.js +95 -0
  21. package/dist/adapters/http.adapter.js.map +1 -0
  22. package/dist/adapters/index.d.ts +6 -0
  23. package/dist/adapters/index.d.ts.map +1 -0
  24. package/dist/adapters/index.js +22 -0
  25. package/dist/adapters/index.js.map +1 -0
  26. package/dist/adapters/openai.adapter.d.ts +17 -0
  27. package/dist/adapters/openai.adapter.d.ts.map +1 -0
  28. package/dist/adapters/openai.adapter.js +133 -0
  29. package/dist/adapters/openai.adapter.js.map +1 -0
  30. package/dist/dataset/convert.d.ts +28 -0
  31. package/dist/dataset/convert.d.ts.map +1 -0
  32. package/dist/dataset/convert.js +94 -0
  33. package/dist/dataset/convert.js.map +1 -0
  34. package/dist/dataset/formats/dpo.d.ts +41 -0
  35. package/dist/dataset/formats/dpo.d.ts.map +1 -0
  36. package/dist/dataset/formats/dpo.js +79 -0
  37. package/dist/dataset/formats/dpo.js.map +1 -0
  38. package/dist/dataset/formats/index.d.ts +4 -0
  39. package/dist/dataset/formats/index.d.ts.map +1 -0
  40. package/dist/dataset/formats/index.js +13 -0
  41. package/dist/dataset/formats/index.js.map +1 -0
  42. package/dist/dataset/formats/openai.d.ts +29 -0
  43. package/dist/dataset/formats/openai.d.ts.map +1 -0
  44. package/dist/dataset/formats/openai.js +98 -0
  45. package/dist/dataset/formats/openai.js.map +1 -0
  46. package/dist/dataset/formats/sharegpt.d.ts +31 -0
  47. package/dist/dataset/formats/sharegpt.d.ts.map +1 -0
  48. package/dist/dataset/formats/sharegpt.js +76 -0
  49. package/dist/dataset/formats/sharegpt.js.map +1 -0
  50. package/dist/dataset/index.d.ts +4 -0
  51. package/dist/dataset/index.d.ts.map +1 -0
  52. package/dist/dataset/index.js +20 -0
  53. package/dist/dataset/index.js.map +1 -0
  54. package/dist/dataset/types.d.ts +108 -0
  55. package/dist/dataset/types.d.ts.map +1 -0
  56. package/dist/dataset/types.js +7 -0
  57. package/dist/dataset/types.js.map +1 -0
  58. package/dist/execution/agent-config-resolver.d.ts +44 -0
  59. package/dist/execution/agent-config-resolver.d.ts.map +1 -0
  60. package/dist/execution/agent-config-resolver.js +76 -0
  61. package/dist/execution/agent-config-resolver.js.map +1 -0
  62. package/dist/execution/execution-processor.d.ts +75 -0
  63. package/dist/execution/execution-processor.d.ts.map +1 -0
  64. package/dist/execution/execution-processor.js +569 -0
  65. package/dist/execution/execution-processor.js.map +1 -0
  66. package/dist/execution/execution.module.d.ts +3 -0
  67. package/dist/execution/execution.module.d.ts.map +1 -0
  68. package/dist/execution/execution.module.js +56 -0
  69. package/dist/execution/execution.module.js.map +1 -0
  70. package/dist/execution/execution.service.d.ts +52 -0
  71. package/dist/execution/execution.service.d.ts.map +1 -0
  72. package/dist/execution/execution.service.js +182 -0
  73. package/dist/execution/execution.service.js.map +1 -0
  74. package/dist/execution/index.d.ts +11 -0
  75. package/dist/execution/index.d.ts.map +1 -0
  76. package/dist/execution/index.js +30 -0
  77. package/dist/execution/index.js.map +1 -0
  78. package/dist/execution/interfaces/job-data.interface.d.ts +38 -0
  79. package/dist/execution/interfaces/job-data.interface.d.ts.map +1 -0
  80. package/dist/execution/interfaces/job-data.interface.js +3 -0
  81. package/dist/execution/interfaces/job-data.interface.js.map +1 -0
  82. package/dist/execution/judge-llm.d.ts +35 -0
  83. package/dist/execution/judge-llm.d.ts.map +1 -0
  84. package/dist/execution/judge-llm.js +129 -0
  85. package/dist/execution/judge-llm.js.map +1 -0
  86. package/dist/execution/llm-config-resolver.d.ts +26 -0
  87. package/dist/execution/llm-config-resolver.d.ts.map +1 -0
  88. package/dist/execution/llm-config-resolver.js +99 -0
  89. package/dist/execution/llm-config-resolver.js.map +1 -0
  90. package/dist/execution/persona-llm.d.ts +29 -0
  91. package/dist/execution/persona-llm.d.ts.map +1 -0
  92. package/dist/execution/persona-llm.js +98 -0
  93. package/dist/execution/persona-llm.js.map +1 -0
  94. package/dist/execution/persona-strategy-registry.d.ts +14 -0
  95. package/dist/execution/persona-strategy-registry.d.ts.map +1 -0
  96. package/dist/execution/persona-strategy-registry.js +51 -0
  97. package/dist/execution/persona-strategy-registry.js.map +1 -0
  98. package/dist/execution/persona-strategy.interface.d.ts +88 -0
  99. package/dist/execution/persona-strategy.interface.d.ts.map +1 -0
  100. package/dist/execution/persona-strategy.interface.js +3 -0
  101. package/dist/execution/persona-strategy.interface.js.map +1 -0
  102. package/dist/execution/queue-producer.service.d.ts +21 -0
  103. package/dist/execution/queue-producer.service.d.ts.map +1 -0
  104. package/dist/execution/queue-producer.service.js +60 -0
  105. package/dist/execution/queue-producer.service.js.map +1 -0
  106. package/dist/execution/queues.config.d.ts +39 -0
  107. package/dist/execution/queues.config.d.ts.map +1 -0
  108. package/dist/execution/queues.config.js +43 -0
  109. package/dist/execution/queues.config.js.map +1 -0
  110. package/dist/execution/strategies/default.strategy.d.ts +11 -0
  111. package/dist/execution/strategies/default.strategy.d.ts.map +1 -0
  112. package/dist/execution/strategies/default.strategy.js +31 -0
  113. package/dist/execution/strategies/default.strategy.js.map +1 -0
  114. package/dist/execution/strategies/reactive.strategy.d.ts +28 -0
  115. package/dist/execution/strategies/reactive.strategy.d.ts.map +1 -0
  116. package/dist/execution/strategies/reactive.strategy.js +220 -0
  117. package/dist/execution/strategies/reactive.strategy.js.map +1 -0
  118. package/dist/execution/template-renderer.d.ts +52 -0
  119. package/dist/execution/template-renderer.d.ts.map +1 -0
  120. package/dist/execution/template-renderer.js +90 -0
  121. package/dist/execution/template-renderer.js.map +1 -0
  122. package/dist/generation/index.d.ts +2 -0
  123. package/dist/generation/index.d.ts.map +1 -0
  124. package/dist/generation/index.js +6 -0
  125. package/dist/generation/index.js.map +1 -0
  126. package/dist/generation/scenario-generator.service.d.ts +77 -0
  127. package/dist/generation/scenario-generator.service.d.ts.map +1 -0
  128. package/dist/generation/scenario-generator.service.js +272 -0
  129. package/dist/generation/scenario-generator.service.js.map +1 -0
  130. package/dist/index.d.ts +10 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +27 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/personas/dto/create-persona.dto.d.ts +61 -0
  135. package/dist/personas/dto/create-persona.dto.d.ts.map +1 -0
  136. package/dist/personas/dto/create-persona.dto.js +146 -0
  137. package/dist/personas/dto/create-persona.dto.js.map +1 -0
  138. package/dist/personas/dto/index.d.ts +3 -0
  139. package/dist/personas/dto/index.d.ts.map +1 -0
  140. package/dist/personas/dto/index.js +19 -0
  141. package/dist/personas/dto/index.js.map +1 -0
  142. package/dist/personas/dto/update-persona.dto.d.ts +8 -0
  143. package/dist/personas/dto/update-persona.dto.d.ts.map +1 -0
  144. package/dist/personas/dto/update-persona.dto.js +29 -0
  145. package/dist/personas/dto/update-persona.dto.js.map +1 -0
  146. package/dist/personas/index.d.ts +6 -0
  147. package/dist/personas/index.d.ts.map +1 -0
  148. package/dist/personas/index.js +22 -0
  149. package/dist/personas/index.js.map +1 -0
  150. package/dist/personas/persona.controller.d.ts +69 -0
  151. package/dist/personas/persona.controller.d.ts.map +1 -0
  152. package/dist/personas/persona.controller.js +282 -0
  153. package/dist/personas/persona.controller.js.map +1 -0
  154. package/dist/personas/persona.module.d.ts +3 -0
  155. package/dist/personas/persona.module.d.ts.map +1 -0
  156. package/dist/personas/persona.module.js +28 -0
  157. package/dist/personas/persona.module.js.map +1 -0
  158. package/dist/personas/persona.service.d.ts +85 -0
  159. package/dist/personas/persona.service.d.ts.map +1 -0
  160. package/dist/personas/persona.service.js +382 -0
  161. package/dist/personas/persona.service.js.map +1 -0
  162. package/dist/personas/schemas/persona.schema.d.ts +90 -0
  163. package/dist/personas/schemas/persona.schema.d.ts.map +1 -0
  164. package/dist/personas/schemas/persona.schema.js +321 -0
  165. package/dist/personas/schemas/persona.schema.js.map +1 -0
  166. package/dist/scenarios/controllers/scenario-execution.controller.d.ts +48 -0
  167. package/dist/scenarios/controllers/scenario-execution.controller.d.ts.map +1 -0
  168. package/dist/scenarios/controllers/scenario-execution.controller.js +260 -0
  169. package/dist/scenarios/controllers/scenario-execution.controller.js.map +1 -0
  170. package/dist/scenarios/controllers/scenario.controller.d.ts +81 -0
  171. package/dist/scenarios/controllers/scenario.controller.d.ts.map +1 -0
  172. package/dist/scenarios/controllers/scenario.controller.js +345 -0
  173. package/dist/scenarios/controllers/scenario.controller.js.map +1 -0
  174. package/dist/scenarios/dto/create-scenario.dto.d.ts +31 -0
  175. package/dist/scenarios/dto/create-scenario.dto.d.ts.map +1 -0
  176. package/dist/scenarios/dto/create-scenario.dto.js +102 -0
  177. package/dist/scenarios/dto/create-scenario.dto.js.map +1 -0
  178. package/dist/scenarios/dto/execute-scenario.dto.d.ts +34 -0
  179. package/dist/scenarios/dto/execute-scenario.dto.d.ts.map +1 -0
  180. package/dist/scenarios/dto/execute-scenario.dto.js +150 -0
  181. package/dist/scenarios/dto/execute-scenario.dto.js.map +1 -0
  182. package/dist/scenarios/dto/index.d.ts +4 -0
  183. package/dist/scenarios/dto/index.d.ts.map +1 -0
  184. package/dist/scenarios/dto/index.js +20 -0
  185. package/dist/scenarios/dto/index.js.map +1 -0
  186. package/dist/scenarios/dto/update-scenario.dto.d.ts +6 -0
  187. package/dist/scenarios/dto/update-scenario.dto.d.ts.map +1 -0
  188. package/dist/scenarios/dto/update-scenario.dto.js +9 -0
  189. package/dist/scenarios/dto/update-scenario.dto.js.map +1 -0
  190. package/dist/scenarios/index.d.ts +9 -0
  191. package/dist/scenarios/index.d.ts.map +1 -0
  192. package/dist/scenarios/index.js +25 -0
  193. package/dist/scenarios/index.js.map +1 -0
  194. package/dist/scenarios/scenario.module.d.ts +3 -0
  195. package/dist/scenarios/scenario.module.d.ts.map +1 -0
  196. package/dist/scenarios/scenario.module.js +42 -0
  197. package/dist/scenarios/scenario.module.js.map +1 -0
  198. package/dist/scenarios/schemas/scenario-execution.schema.d.ts +133 -0
  199. package/dist/scenarios/schemas/scenario-execution.schema.d.ts.map +1 -0
  200. package/dist/scenarios/schemas/scenario-execution.schema.js +292 -0
  201. package/dist/scenarios/schemas/scenario-execution.schema.js.map +1 -0
  202. package/dist/scenarios/schemas/scenario.schema.d.ts +106 -0
  203. package/dist/scenarios/schemas/scenario.schema.d.ts.map +1 -0
  204. package/dist/scenarios/schemas/scenario.schema.js +205 -0
  205. package/dist/scenarios/schemas/scenario.schema.js.map +1 -0
  206. package/dist/scenarios/services/scenario-execution.service.d.ts +73 -0
  207. package/dist/scenarios/services/scenario-execution.service.d.ts.map +1 -0
  208. package/dist/scenarios/services/scenario-execution.service.js +505 -0
  209. package/dist/scenarios/services/scenario-execution.service.js.map +1 -0
  210. package/dist/scenarios/services/scenario.service.d.ts +110 -0
  211. package/dist/scenarios/services/scenario.service.d.ts.map +1 -0
  212. package/dist/scenarios/services/scenario.service.js +608 -0
  213. package/dist/scenarios/services/scenario.service.js.map +1 -0
  214. package/dist/simulator/index.d.ts +2 -0
  215. package/dist/simulator/index.d.ts.map +1 -0
  216. package/dist/simulator/index.js +18 -0
  217. package/dist/simulator/index.js.map +1 -0
  218. package/dist/simulator/persona-simulator.service.d.ts +81 -0
  219. package/dist/simulator/persona-simulator.service.d.ts.map +1 -0
  220. package/dist/simulator/persona-simulator.service.js +358 -0
  221. package/dist/simulator/persona-simulator.service.js.map +1 -0
  222. package/dist/templates/dto/create-template.dto.d.ts +16 -0
  223. package/dist/templates/dto/create-template.dto.d.ts.map +1 -0
  224. package/dist/templates/dto/create-template.dto.js +75 -0
  225. package/dist/templates/dto/create-template.dto.js.map +1 -0
  226. package/dist/templates/dto/index.d.ts +4 -0
  227. package/dist/templates/dto/index.d.ts.map +1 -0
  228. package/dist/templates/dto/index.js +10 -0
  229. package/dist/templates/dto/index.js.map +1 -0
  230. package/dist/templates/dto/instantiate-template.dto.d.ts +7 -0
  231. package/dist/templates/dto/instantiate-template.dto.d.ts.map +1 -0
  232. package/dist/templates/dto/instantiate-template.dto.js +38 -0
  233. package/dist/templates/dto/instantiate-template.dto.js.map +1 -0
  234. package/dist/templates/dto/update-template.dto.d.ts +6 -0
  235. package/dist/templates/dto/update-template.dto.d.ts.map +1 -0
  236. package/dist/templates/dto/update-template.dto.js +9 -0
  237. package/dist/templates/dto/update-template.dto.js.map +1 -0
  238. package/dist/templates/index.d.ts +6 -0
  239. package/dist/templates/index.d.ts.map +1 -0
  240. package/dist/templates/index.js +22 -0
  241. package/dist/templates/index.js.map +1 -0
  242. package/dist/templates/scenario-template.controller.d.ts +42 -0
  243. package/dist/templates/scenario-template.controller.d.ts.map +1 -0
  244. package/dist/templates/scenario-template.controller.js +148 -0
  245. package/dist/templates/scenario-template.controller.js.map +1 -0
  246. package/dist/templates/scenario-template.module.d.ts +3 -0
  247. package/dist/templates/scenario-template.module.d.ts.map +1 -0
  248. package/dist/templates/scenario-template.module.js +30 -0
  249. package/dist/templates/scenario-template.module.js.map +1 -0
  250. package/dist/templates/scenario-template.service.d.ts +50 -0
  251. package/dist/templates/scenario-template.service.d.ts.map +1 -0
  252. package/dist/templates/scenario-template.service.js +497 -0
  253. package/dist/templates/scenario-template.service.js.map +1 -0
  254. package/dist/templates/schemas/scenario-template.schema.d.ts +59 -0
  255. package/dist/templates/schemas/scenario-template.schema.d.ts.map +1 -0
  256. package/dist/templates/schemas/scenario-template.schema.js +132 -0
  257. package/dist/templates/schemas/scenario-template.schema.js.map +1 -0
  258. package/dist/tool-fixtures/dto/create-tool-fixture.dto.d.ts +18 -0
  259. package/dist/tool-fixtures/dto/create-tool-fixture.dto.d.ts.map +1 -0
  260. package/dist/tool-fixtures/dto/create-tool-fixture.dto.js +46 -0
  261. package/dist/tool-fixtures/dto/create-tool-fixture.dto.js.map +1 -0
  262. package/dist/tool-fixtures/dto/index.d.ts +4 -0
  263. package/dist/tool-fixtures/dto/index.d.ts.map +1 -0
  264. package/dist/tool-fixtures/dto/index.js +20 -0
  265. package/dist/tool-fixtures/dto/index.js.map +1 -0
  266. package/dist/tool-fixtures/dto/tool-fixture-filter.dto.d.ts +6 -0
  267. package/dist/tool-fixtures/dto/tool-fixture-filter.dto.d.ts.map +1 -0
  268. package/dist/tool-fixtures/dto/tool-fixture-filter.dto.js +33 -0
  269. package/dist/tool-fixtures/dto/tool-fixture-filter.dto.js.map +1 -0
  270. package/dist/tool-fixtures/dto/update-tool-fixture.dto.d.ts +6 -0
  271. package/dist/tool-fixtures/dto/update-tool-fixture.dto.d.ts.map +1 -0
  272. package/dist/tool-fixtures/dto/update-tool-fixture.dto.js +9 -0
  273. package/dist/tool-fixtures/dto/update-tool-fixture.dto.js.map +1 -0
  274. package/dist/tool-fixtures/index.d.ts +7 -0
  275. package/dist/tool-fixtures/index.d.ts.map +1 -0
  276. package/dist/tool-fixtures/index.js +23 -0
  277. package/dist/tool-fixtures/index.js.map +1 -0
  278. package/dist/tool-fixtures/mock-resolver.service.d.ts +48 -0
  279. package/dist/tool-fixtures/mock-resolver.service.d.ts.map +1 -0
  280. package/dist/tool-fixtures/mock-resolver.service.js +99 -0
  281. package/dist/tool-fixtures/mock-resolver.service.js.map +1 -0
  282. package/dist/tool-fixtures/schemas/tool-fixture.schema.d.ts +35 -0
  283. package/dist/tool-fixtures/schemas/tool-fixture.schema.d.ts.map +1 -0
  284. package/dist/tool-fixtures/schemas/tool-fixture.schema.js +87 -0
  285. package/dist/tool-fixtures/schemas/tool-fixture.schema.js.map +1 -0
  286. package/dist/tool-fixtures/tool-fixture.controller.d.ts +45 -0
  287. package/dist/tool-fixtures/tool-fixture.controller.d.ts.map +1 -0
  288. package/dist/tool-fixtures/tool-fixture.controller.js +223 -0
  289. package/dist/tool-fixtures/tool-fixture.controller.js.map +1 -0
  290. package/dist/tool-fixtures/tool-fixture.module.d.ts +3 -0
  291. package/dist/tool-fixtures/tool-fixture.module.d.ts.map +1 -0
  292. package/dist/tool-fixtures/tool-fixture.module.js +31 -0
  293. package/dist/tool-fixtures/tool-fixture.module.js.map +1 -0
  294. package/dist/tool-fixtures/tool-fixture.service.d.ts +59 -0
  295. package/dist/tool-fixtures/tool-fixture.service.d.ts.map +1 -0
  296. package/dist/tool-fixtures/tool-fixture.service.js +198 -0
  297. package/dist/tool-fixtures/tool-fixture.service.js.map +1 -0
  298. package/package.json +47 -0
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ExecutionModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const bull_1 = require("@nestjs/bull");
12
+ const mongoose_1 = require("@nestjs/mongoose");
13
+ const scorecards_core_1 = require("@chanl/scorecards-core");
14
+ const scenario_schema_1 = require("../scenarios/schemas/scenario.schema");
15
+ const scenario_execution_schema_1 = require("../scenarios/schemas/scenario-execution.schema");
16
+ const persona_schema_1 = require("../personas/schemas/persona.schema");
17
+ const tool_fixture_module_1 = require("../tool-fixtures/tool-fixture.module");
18
+ const adapter_registry_1 = require("../adapters/adapter-registry");
19
+ const persona_simulator_service_1 = require("../simulator/persona-simulator.service");
20
+ const persona_strategy_registry_1 = require("./persona-strategy-registry");
21
+ const queue_producer_service_1 = require("./queue-producer.service");
22
+ const execution_processor_1 = require("./execution-processor");
23
+ const execution_service_1 = require("./execution.service");
24
+ const agent_config_resolver_1 = require("./agent-config-resolver");
25
+ const queues_config_1 = require("./queues.config");
26
+ let ExecutionModule = class ExecutionModule {
27
+ };
28
+ exports.ExecutionModule = ExecutionModule;
29
+ exports.ExecutionModule = ExecutionModule = __decorate([
30
+ (0, common_1.Module)({
31
+ imports: [
32
+ scorecards_core_1.ScorecardsModule,
33
+ tool_fixture_module_1.ToolFixtureModule,
34
+ mongoose_1.MongooseModule.forFeature([
35
+ { name: scenario_schema_1.Scenario.name, schema: scenario_schema_1.ScenarioSchema },
36
+ { name: scenario_execution_schema_1.ScenarioExecution.name, schema: scenario_execution_schema_1.ScenarioExecutionSchema },
37
+ { name: persona_schema_1.Persona.name, schema: persona_schema_1.PersonaSchema },
38
+ ]),
39
+ bull_1.BullModule.registerQueue({
40
+ name: queues_config_1.QUEUE_NAMES.SCENARIO_EXECUTION,
41
+ defaultJobOptions: queues_config_1.defaultJobOptions,
42
+ }),
43
+ ],
44
+ providers: [
45
+ adapter_registry_1.AdapterRegistry,
46
+ agent_config_resolver_1.AgentConfigResolver,
47
+ persona_simulator_service_1.PersonaSimulatorService,
48
+ persona_strategy_registry_1.PersonaStrategyRegistry,
49
+ queue_producer_service_1.QueueProducerService,
50
+ execution_processor_1.ExecutionProcessor,
51
+ execution_service_1.ExecutionService,
52
+ ],
53
+ exports: [execution_service_1.ExecutionService, queue_producer_service_1.QueueProducerService, adapter_registry_1.AdapterRegistry, agent_config_resolver_1.AgentConfigResolver, persona_strategy_registry_1.PersonaStrategyRegistry],
54
+ })
55
+ ], ExecutionModule);
56
+ //# sourceMappingURL=execution.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.module.js","sourceRoot":"","sources":["../../src/execution/execution.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uCAA0C;AAC1C,+CAAkD;AAClD,4DAA0D;AAC1D,0EAG8C;AAC9C,8FAGwD;AACxD,uEAG4C;AAC5C,8EAAyE;AACzE,mEAA+D;AAC/D,sFAAiF;AACjF,2EAAsE;AACtE,qEAAgE;AAChE,+DAA2D;AAC3D,2DAAuD;AACvD,mEAA8D;AAC9D,mDAAiE;AA2B1D,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAzB3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,kCAAgB;YAChB,uCAAiB;YACjB,yBAAc,CAAC,UAAU,CAAC;gBACxB,EAAE,IAAI,EAAE,0BAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,gCAAc,EAAE;gBAC/C,EAAE,IAAI,EAAE,6CAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,mDAAuB,EAAE;gBACjE,EAAE,IAAI,EAAE,wBAAO,CAAC,IAAI,EAAE,MAAM,EAAE,8BAAa,EAAE;aAC9C,CAAC;YACF,iBAAU,CAAC,aAAa,CAAC;gBACvB,IAAI,EAAE,2BAAW,CAAC,kBAAkB;gBACpC,iBAAiB,EAAjB,iCAAiB;aAClB,CAAC;SACH;QACD,SAAS,EAAE;YACT,kCAAe;YACf,2CAAmB;YACnB,mDAAuB;YACvB,mDAAuB;YACvB,6CAAoB;YACpB,wCAAkB;YAClB,oCAAgB;SACjB;QACD,OAAO,EAAE,CAAC,oCAAgB,EAAE,6CAAoB,EAAE,kCAAe,EAAE,2CAAmB,EAAE,mDAAuB,CAAC;KACjH,CAAC;GACW,eAAe,CAAG"}
@@ -0,0 +1,52 @@
1
+ import { Model } from 'mongoose';
2
+ import { ScenarioExecution, ScenarioExecutionDocument } from '../scenarios/schemas/scenario-execution.schema';
3
+ import { ScenarioDocument } from '../scenarios/schemas/scenario.schema';
4
+ import { QueueProducerService } from './queue-producer.service';
5
+ export interface ExecuteOptions {
6
+ promptId: string;
7
+ personaId?: string;
8
+ maxTurns?: number;
9
+ parameters?: Record<string, any>;
10
+ environment?: string;
11
+ triggeredBy?: string;
12
+ }
13
+ export interface ListExecutionsFilters {
14
+ status?: string;
15
+ scenarioId?: string;
16
+ agentId?: string;
17
+ personaId?: string;
18
+ }
19
+ export interface ListExecutionsPagination {
20
+ limit?: number;
21
+ offset?: number;
22
+ }
23
+ export declare class ExecutionService {
24
+ private executionModel;
25
+ private scenarioModel;
26
+ private readonly queueProducer;
27
+ private readonly logger;
28
+ constructor(executionModel: Model<ScenarioExecutionDocument>, scenarioModel: Model<ScenarioDocument>, queueProducer: QueueProducerService);
29
+ /**
30
+ * Create an execution document (status: queued) and enqueue a BullMQ job.
31
+ *
32
+ * @returns The executionId string
33
+ */
34
+ execute(scenarioId: string, options: ExecuteOptions): Promise<string>;
35
+ /**
36
+ * Get a single execution by executionId.
37
+ */
38
+ getExecution(executionId: string): Promise<ScenarioExecution>;
39
+ /**
40
+ * List executions with filters and pagination.
41
+ */
42
+ listExecutions(filters?: ListExecutionsFilters, pagination?: ListExecutionsPagination): Promise<{
43
+ executions: ScenarioExecution[];
44
+ total: number;
45
+ }>;
46
+ /**
47
+ * Cancel a running or queued execution.
48
+ * Transitions status from running/queued to cancelled.
49
+ */
50
+ cancelExecution(executionId: string): Promise<void>;
51
+ }
52
+ //# sourceMappingURL=execution.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.service.d.ts","sourceRoot":"","sources":["../../src/execution/execution.service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAS,MAAM,UAAU,CAAC;AAExC,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAY,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBACa,gBAAgB;IAKzB,OAAO,CAAC,cAAc;IAEtB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAPhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAIlD,cAAc,EAAE,KAAK,CAAC,yBAAyB,CAAC,EAEhD,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,EAC7B,aAAa,EAAE,oBAAoB;IAGtD;;;;OAIG;IACG,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC;IA+DlB;;OAEG;IACG,YAAY,CAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC;IAuB7B;;OAEG;IACG,cAAc,CAClB,OAAO,CAAC,EAAE,qBAAqB,EAC/B,UAAU,CAAC,EAAE,wBAAwB,GACpC,OAAO,CAAC;QAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA8C9D;;;OAGG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;CAwCjB"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var ExecutionService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ExecutionService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const mongoose_1 = require("@nestjs/mongoose");
19
+ const mongoose_2 = require("mongoose");
20
+ const crypto_1 = require("crypto");
21
+ const scenario_execution_schema_1 = require("../scenarios/schemas/scenario-execution.schema");
22
+ const scenario_schema_1 = require("../scenarios/schemas/scenario.schema");
23
+ const queue_producer_service_1 = require("./queue-producer.service");
24
+ let ExecutionService = ExecutionService_1 = class ExecutionService {
25
+ constructor(executionModel, scenarioModel, queueProducer) {
26
+ this.executionModel = executionModel;
27
+ this.scenarioModel = scenarioModel;
28
+ this.queueProducer = queueProducer;
29
+ this.logger = new common_1.Logger(ExecutionService_1.name);
30
+ }
31
+ /**
32
+ * Create an execution document (status: queued) and enqueue a BullMQ job.
33
+ *
34
+ * @returns The executionId string
35
+ */
36
+ async execute(scenarioId, options) {
37
+ try {
38
+ // Verify scenario exists and is active
39
+ const scenario = await this.scenarioModel.findById(scenarioId);
40
+ if (!scenario) {
41
+ throw new common_1.NotFoundException(`Scenario with ID ${scenarioId} not found`);
42
+ }
43
+ if (scenario.status !== 'active') {
44
+ throw new common_1.BadRequestException(`Cannot execute scenario with status "${scenario.status}". Scenario must be active.`);
45
+ }
46
+ // Create execution record
47
+ const executionId = `exec_${(0, crypto_1.randomUUID)()}`;
48
+ const executionData = {
49
+ executionId,
50
+ scenarioId: new mongoose_2.Types.ObjectId(scenarioId),
51
+ promptId: options?.promptId
52
+ ? new mongoose_2.Types.ObjectId(options.promptId)
53
+ : undefined,
54
+ personaId: options?.personaId
55
+ ? new mongoose_2.Types.ObjectId(options.personaId)
56
+ : scenario.personaIds?.[0],
57
+ status: 'queued',
58
+ startTime: new Date(),
59
+ triggeredBy: options?.triggeredBy || 'system',
60
+ parameters: options?.parameters || {},
61
+ environment: {
62
+ version: '1.0.0',
63
+ environment: options?.environment || 'development',
64
+ },
65
+ };
66
+ const execution = new this.executionModel(executionData);
67
+ await execution.save();
68
+ // Enqueue the BullMQ job
69
+ await this.queueProducer.enqueueExecution(executionId, scenarioId, {
70
+ promptId: options.promptId,
71
+ personaId: options?.personaId || scenario.personaIds?.[0]?.toString(),
72
+ maxTurns: options?.maxTurns,
73
+ parameters: options?.parameters,
74
+ });
75
+ this.logger.log(`Created and enqueued execution ${executionId} for scenario ${scenarioId}`);
76
+ return executionId;
77
+ }
78
+ catch (error) {
79
+ this.logger.error(`Failed to execute scenario: ${error.message}`, error.stack);
80
+ throw error;
81
+ }
82
+ }
83
+ /**
84
+ * Get a single execution by executionId.
85
+ */
86
+ async getExecution(executionId) {
87
+ try {
88
+ const execution = await this.executionModel.findOne({ executionId });
89
+ if (!execution) {
90
+ throw new common_1.NotFoundException(`Execution with ID ${executionId} not found`);
91
+ }
92
+ return execution.toJSON();
93
+ }
94
+ catch (error) {
95
+ if (error instanceof common_1.NotFoundException) {
96
+ throw error;
97
+ }
98
+ this.logger.error(`Failed to get execution: ${error.message}`, error.stack);
99
+ throw error;
100
+ }
101
+ }
102
+ /**
103
+ * List executions with filters and pagination.
104
+ */
105
+ async listExecutions(filters, pagination) {
106
+ try {
107
+ const query = {};
108
+ if (filters) {
109
+ if (filters.status) {
110
+ query.status = filters.status;
111
+ }
112
+ if (filters.scenarioId) {
113
+ query.scenarioId = new mongoose_2.Types.ObjectId(filters.scenarioId);
114
+ }
115
+ if (filters.agentId) {
116
+ query.agentId = new mongoose_2.Types.ObjectId(filters.agentId);
117
+ }
118
+ if (filters.personaId) {
119
+ query.personaId = new mongoose_2.Types.ObjectId(filters.personaId);
120
+ }
121
+ }
122
+ let queryBuilder = this.executionModel
123
+ .find(query)
124
+ .sort({ startTime: -1 });
125
+ if (pagination?.offset) {
126
+ queryBuilder = queryBuilder.skip(pagination.offset);
127
+ }
128
+ if (pagination?.limit) {
129
+ queryBuilder = queryBuilder.limit(pagination.limit);
130
+ }
131
+ const executions = await queryBuilder.exec();
132
+ const total = await this.executionModel.countDocuments(query);
133
+ return {
134
+ executions: executions.map((e) => e.toJSON()),
135
+ total,
136
+ };
137
+ }
138
+ catch (error) {
139
+ this.logger.error(`Failed to list executions: ${error.message}`, error.stack);
140
+ throw error;
141
+ }
142
+ }
143
+ /**
144
+ * Cancel a running or queued execution.
145
+ * Transitions status from running/queued to cancelled.
146
+ */
147
+ async cancelExecution(executionId) {
148
+ try {
149
+ const execution = await this.executionModel.findOne({ executionId });
150
+ if (!execution) {
151
+ throw new common_1.NotFoundException(`Execution with ID ${executionId} not found`);
152
+ }
153
+ if (!['queued', 'running'].includes(execution.status)) {
154
+ throw new common_1.BadRequestException(`Cannot cancel execution with status "${execution.status}"`);
155
+ }
156
+ await this.executionModel.findOneAndUpdate({ executionId }, {
157
+ status: 'cancelled',
158
+ endTime: new Date(),
159
+ updatedAt: new Date(),
160
+ });
161
+ this.logger.log(`Cancelled execution ${executionId}`);
162
+ }
163
+ catch (error) {
164
+ if (error instanceof common_1.NotFoundException ||
165
+ error instanceof common_1.BadRequestException) {
166
+ throw error;
167
+ }
168
+ this.logger.error(`Failed to cancel execution: ${error.message}`, error.stack);
169
+ throw error;
170
+ }
171
+ }
172
+ };
173
+ exports.ExecutionService = ExecutionService;
174
+ exports.ExecutionService = ExecutionService = ExecutionService_1 = __decorate([
175
+ (0, common_1.Injectable)(),
176
+ __param(0, (0, mongoose_1.InjectModel)(scenario_execution_schema_1.ScenarioExecution.name)),
177
+ __param(1, (0, mongoose_1.InjectModel)(scenario_schema_1.Scenario.name)),
178
+ __metadata("design:paramtypes", [mongoose_2.Model,
179
+ mongoose_2.Model,
180
+ queue_producer_service_1.QueueProducerService])
181
+ ], ExecutionService);
182
+ //# sourceMappingURL=execution.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.service.js","sourceRoot":"","sources":["../../src/execution/execution.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export * from './execution.module';
2
+ export * from './execution.service';
3
+ export * from './queue-producer.service';
4
+ export * from './execution-processor';
5
+ export * from './queues.config';
6
+ export * from './interfaces/job-data.interface';
7
+ export * from './template-renderer';
8
+ export * from './llm-config-resolver';
9
+ export * from './agent-config-resolver';
10
+ export { buildLlmJudge, buildOpenAiJudge } from './judge-llm';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.buildOpenAiJudge = exports.buildLlmJudge = void 0;
18
+ __exportStar(require("./execution.module"), exports);
19
+ __exportStar(require("./execution.service"), exports);
20
+ __exportStar(require("./queue-producer.service"), exports);
21
+ __exportStar(require("./execution-processor"), exports);
22
+ __exportStar(require("./queues.config"), exports);
23
+ __exportStar(require("./interfaces/job-data.interface"), exports);
24
+ __exportStar(require("./template-renderer"), exports);
25
+ __exportStar(require("./llm-config-resolver"), exports);
26
+ __exportStar(require("./agent-config-resolver"), exports);
27
+ var judge_llm_1 = require("./judge-llm");
28
+ Object.defineProperty(exports, "buildLlmJudge", { enumerable: true, get: function () { return judge_llm_1.buildLlmJudge; } });
29
+ Object.defineProperty(exports, "buildOpenAiJudge", { enumerable: true, get: function () { return judge_llm_1.buildOpenAiJudge; } });
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,sDAAoC;AACpC,2DAAyC;AACzC,wDAAsC;AACtC,kDAAgC;AAChC,kEAAgD;AAChD,sDAAoC;AACpC,wDAAsC;AACtC,0DAAwC;AACxC,yCAA8D;AAArD,0GAAA,aAAa,OAAA;AAAE,6GAAA,gBAAgB,OAAA"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Data structure for scenario execution jobs enqueued to BullMQ.
3
+ */
4
+ export interface ScenarioExecutionJobData {
5
+ executionId: string;
6
+ scenarioId: string;
7
+ promptId: string;
8
+ personaId?: string;
9
+ maxTurns?: number;
10
+ parameters?: Record<string, any>;
11
+ toolFixtureIds?: string[];
12
+ }
13
+ /**
14
+ * Result produced by the execution processor after a scenario run.
15
+ */
16
+ export interface ScenarioExecutionResult {
17
+ passed: boolean;
18
+ score: number;
19
+ duration: number;
20
+ transcript: TranscriptEntry[];
21
+ metrics?: Record<string, number>;
22
+ errors?: string[];
23
+ }
24
+ /**
25
+ * Single entry in a conversation transcript.
26
+ */
27
+ export interface TranscriptEntry {
28
+ role: 'persona' | 'agent' | 'tool';
29
+ content: string;
30
+ timestamp: Date;
31
+ latencyMs?: number;
32
+ toolCalls?: Array<{
33
+ name: string;
34
+ arguments: Record<string, any>;
35
+ result: any;
36
+ }>;
37
+ }
38
+ //# sourceMappingURL=job-data.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-data.interface.d.ts","sourceRoot":"","sources":["../../../src/execution/interfaces/job-data.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC;KACb,CAAC,CAAC;CACJ"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=job-data.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-data.interface.js","sourceRoot":"","sources":["../../../src/execution/interfaces/job-data.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import type { ResolvedLlmConfig } from './llm-config-resolver';
2
+ /** Params passed to the judge evaluation function */
3
+ interface JudgeParams {
4
+ criterionName: string;
5
+ description: string;
6
+ evaluationType: 'boolean' | 'score';
7
+ transcript: string;
8
+ threshold?: {
9
+ type: 'boolean' | 'numerical';
10
+ expectedValue?: boolean;
11
+ min?: number;
12
+ max?: number;
13
+ };
14
+ }
15
+ /** Result from the judge evaluation function */
16
+ interface JudgeResult {
17
+ result: boolean | number;
18
+ passed: boolean;
19
+ reasoning: string;
20
+ evidence: string[];
21
+ confidence?: number;
22
+ }
23
+ type JudgeFn = (params: JudgeParams) => Promise<JudgeResult>;
24
+ /**
25
+ * Build an LLM judge function that supports both OpenAI and Anthropic.
26
+ * Returns undefined if config is not provided.
27
+ */
28
+ export declare function buildLlmJudge(config: ResolvedLlmConfig | undefined): JudgeFn | undefined;
29
+ /**
30
+ * @deprecated Use `buildLlmJudge` with a `ResolvedLlmConfig` instead.
31
+ * Kept for backwards compatibility.
32
+ */
33
+ export declare function buildOpenAiJudge(apiKey: string | undefined, model?: string): JudgeFn | undefined;
34
+ export {};
35
+ //# sourceMappingURL=judge-llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-llm.d.ts","sourceRoot":"","sources":["../../src/execution/judge-llm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,qDAAqD;AACrD,UAAU,WAAW;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,SAAS,GAAG,OAAO,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC;QAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,gDAAgD;AAChD,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,OAAO,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAwD7D;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,OAAO,GAAG,SAAS,CAOrB;AAiED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,SAAgB,GACpB,OAAO,GAAG,SAAS,CAGrB"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildLlmJudge = buildLlmJudge;
4
+ exports.buildOpenAiJudge = buildOpenAiJudge;
5
+ const SYSTEM_PROMPT = `You are a strict but fair evaluator for AI agent quality.
6
+
7
+ Rules:
8
+ - Evaluate SUBSTANCE, not rigid formulas.
9
+ - Be STRICT about template placeholders — if the agent outputs "[insert X here]", "etc.]", or similar unfilled templates, that is a FAILURE for clarity/resolution.
10
+ - Reasoning: 1-2 sentences max. State the verdict and the key reason. No filler.
11
+ - Evidence: max 2 short quotes (under 15 words each). Pick the most relevant.
12
+ - For scores: 7+ = good, 5-6 = mediocre, below 5 = bad.
13
+
14
+ Respond with JSON only: {"result": boolean|number, "passed": boolean, "reasoning": string, "evidence": string[]}`;
15
+ function buildUserPrompt(params) {
16
+ const thresholdHint = params.threshold?.type === 'boolean'
17
+ ? `Expected boolean outcome: ${params.threshold.expectedValue}`
18
+ : params.threshold?.type === 'numerical'
19
+ ? `Score should be between ${params.threshold.min ?? '?'} and ${params.threshold.max ?? '?'}`
20
+ : '';
21
+ return `Criterion: ${params.criterionName}
22
+ Description: ${params.description}
23
+ Evaluation type: ${params.evaluationType}
24
+ ${thresholdHint}
25
+
26
+ Transcript:
27
+ ${params.transcript}`;
28
+ }
29
+ function parseJudgeResponse(raw, evaluationType) {
30
+ try {
31
+ const parsed = JSON.parse(raw);
32
+ const result = parsed.result ?? (evaluationType === 'boolean' ? false : 5);
33
+ const passed = parsed.passed ??
34
+ (typeof result === 'boolean' ? result : Number(result) >= 7);
35
+ return {
36
+ result: result,
37
+ passed,
38
+ reasoning: parsed.reasoning || 'LLM evaluation completed.',
39
+ evidence: parsed.evidence || [],
40
+ };
41
+ }
42
+ catch {
43
+ // Malformed JSON — return safe defaults
44
+ const result = evaluationType === 'boolean' ? false : 5;
45
+ return {
46
+ result,
47
+ passed: false,
48
+ reasoning: 'LLM evaluation completed (response parsing failed).',
49
+ evidence: [],
50
+ };
51
+ }
52
+ }
53
+ /**
54
+ * Build an LLM judge function that supports both OpenAI and Anthropic.
55
+ * Returns undefined if config is not provided.
56
+ */
57
+ function buildLlmJudge(config) {
58
+ if (!config)
59
+ return undefined;
60
+ if (config.kind === 'anthropic') {
61
+ return buildAnthropicJudge(config);
62
+ }
63
+ return buildOpenAiJudgeInternal(config);
64
+ }
65
+ function buildOpenAiJudgeInternal(config) {
66
+ const model = config.model || 'gpt-4o-mini';
67
+ return async (params) => {
68
+ const res = await fetch('https://api.openai.com/v1/chat/completions', {
69
+ method: 'POST',
70
+ headers: {
71
+ 'Content-Type': 'application/json',
72
+ Authorization: `Bearer ${config.apiKey}`,
73
+ },
74
+ body: JSON.stringify({
75
+ model,
76
+ temperature: 0.2,
77
+ messages: [
78
+ { role: 'system', content: SYSTEM_PROMPT },
79
+ { role: 'user', content: buildUserPrompt(params) },
80
+ ],
81
+ response_format: { type: 'json_object' },
82
+ }),
83
+ });
84
+ if (!res.ok) {
85
+ throw new Error(`OpenAI judge error: ${await res.text()}`);
86
+ }
87
+ const data = await res.json();
88
+ const raw = data.choices?.[0]?.message?.content || '{}';
89
+ return parseJudgeResponse(raw, params.evaluationType);
90
+ };
91
+ }
92
+ function buildAnthropicJudge(config) {
93
+ const model = config.model || 'claude-3-5-haiku-20241022';
94
+ return async (params) => {
95
+ const res = await fetch('https://api.anthropic.com/v1/messages', {
96
+ method: 'POST',
97
+ headers: {
98
+ 'Content-Type': 'application/json',
99
+ 'x-api-key': config.apiKey,
100
+ 'anthropic-version': '2023-06-01',
101
+ },
102
+ body: JSON.stringify({
103
+ model,
104
+ max_tokens: 1024,
105
+ temperature: 0.2,
106
+ system: SYSTEM_PROMPT,
107
+ messages: [
108
+ { role: 'user', content: buildUserPrompt(params) },
109
+ ],
110
+ }),
111
+ });
112
+ if (!res.ok) {
113
+ throw new Error(`Anthropic judge error: ${await res.text()}`);
114
+ }
115
+ const data = await res.json();
116
+ const raw = data.content?.[0]?.text || '{}';
117
+ return parseJudgeResponse(raw, params.evaluationType);
118
+ };
119
+ }
120
+ /**
121
+ * @deprecated Use `buildLlmJudge` with a `ResolvedLlmConfig` instead.
122
+ * Kept for backwards compatibility.
123
+ */
124
+ function buildOpenAiJudge(apiKey, model = 'gpt-4o-mini') {
125
+ if (!apiKey)
126
+ return undefined;
127
+ return buildLlmJudge({ kind: 'openai', apiKey, model });
128
+ }
129
+ //# sourceMappingURL=judge-llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-llm.js","sourceRoot":"","sources":["../../src/execution/judge-llm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Central LLM configuration resolver for chanl-eval.
3
+ *
4
+ * Replaces 6 scattered resolution paths with a single 4-tier chain:
5
+ * 1. Explicit config (adapterConfig.apiKey)
6
+ * 2. Simulation-specific keys (adapterConfig.simulationApiKey, legacy fields)
7
+ * 3. Environment variables (CHANL_OPENAI_API_KEY, CHANL_ANTHROPIC_API_KEY)
8
+ * 4. Settings DB (async callback)
9
+ */
10
+ export interface ResolvedLlmConfig {
11
+ kind: 'openai' | 'anthropic';
12
+ apiKey: string;
13
+ model?: string;
14
+ }
15
+ export type SettingsLookup = (provider: string) => Promise<string | undefined>;
16
+ /**
17
+ * Synchronous resolver — tiers 1-3 (no DB access).
18
+ * Used by persona-llm.ts and persona strategies where async isn't needed.
19
+ */
20
+ export declare function resolveLlmConfigSync(adapterType: string | undefined, adapterConfig: Record<string, any> | undefined): ResolvedLlmConfig | null;
21
+ /**
22
+ * Async resolver — all 4 tiers including settings DB lookup.
23
+ * Used by ExecutionProcessor and ChatService where DB access is available.
24
+ */
25
+ export declare function resolveLlmConfig(adapterType: string | undefined, adapterConfig: Record<string, any> | undefined, settingsLookup?: SettingsLookup): Promise<ResolvedLlmConfig | null>;
26
+ //# sourceMappingURL=llm-config-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-config-resolver.d.ts","sourceRoot":"","sources":["../../src/execution/llm-config-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAM/E;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAC7C,iBAAiB,GAAG,IAAI,CA4C1B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EAC9C,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAkCnC"}