@elizaos/plugin-training 2.0.3-beta.5 → 2.0.3-beta.7

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 (363) hide show
  1. package/dist/backends/native.d.ts +96 -0
  2. package/dist/backends/native.d.ts.map +1 -0
  3. package/dist/backends/native.js +308 -0
  4. package/dist/backends/native.js.map +1 -0
  5. package/dist/cli/train.d.ts +22 -0
  6. package/dist/cli/train.d.ts.map +1 -0
  7. package/dist/cli/train.js +219 -0
  8. package/dist/cli/train.js.map +1 -0
  9. package/dist/core/action-benchmark-runner.d.ts +55 -0
  10. package/dist/core/action-benchmark-runner.d.ts.map +1 -0
  11. package/dist/core/action-benchmark-runner.js +341 -0
  12. package/dist/core/action-benchmark-runner.js.map +1 -0
  13. package/dist/core/artifact-store.d.ts +72 -0
  14. package/dist/core/artifact-store.d.ts.map +1 -0
  15. package/dist/core/artifact-store.js +50 -0
  16. package/dist/core/artifact-store.js.map +1 -0
  17. package/dist/core/benchmark-matrix-artifact.d.ts +102 -0
  18. package/dist/core/benchmark-matrix-artifact.d.ts.map +1 -0
  19. package/dist/core/benchmark-matrix-artifact.js +381 -0
  20. package/dist/core/benchmark-matrix-artifact.js.map +1 -0
  21. package/dist/core/benchmark-vs-cerebras-runner.d.ts +37 -0
  22. package/dist/core/benchmark-vs-cerebras-runner.d.ts.map +1 -0
  23. package/dist/core/benchmark-vs-cerebras-runner.js +151 -0
  24. package/dist/core/benchmark-vs-cerebras-runner.js.map +1 -0
  25. package/dist/core/cerebras-eval-model.d.ts +54 -0
  26. package/dist/core/cerebras-eval-model.d.ts.map +1 -0
  27. package/dist/core/cerebras-eval-model.js +249 -0
  28. package/dist/core/cerebras-eval-model.js.map +1 -0
  29. package/dist/core/cli.d.ts +15 -0
  30. package/dist/core/cli.d.ts.map +1 -0
  31. package/dist/core/cli.js +1003 -0
  32. package/dist/core/cli.js.map +1 -0
  33. package/dist/core/context-audit.d.ts +51 -0
  34. package/dist/core/context-audit.d.ts.map +1 -0
  35. package/dist/core/context-audit.js +166 -0
  36. package/dist/core/context-audit.js.map +1 -0
  37. package/dist/core/context-catalog.d.ts +47 -0
  38. package/dist/core/context-catalog.d.ts.map +1 -0
  39. package/dist/core/context-catalog.js +269 -0
  40. package/dist/core/context-catalog.js.map +1 -0
  41. package/dist/core/context-types.d.ts +3 -0
  42. package/dist/core/context-types.d.ts.map +1 -0
  43. package/dist/core/context-types.js +18 -0
  44. package/dist/core/context-types.js.map +1 -0
  45. package/dist/core/dataset-generator.d.ts +135 -0
  46. package/dist/core/dataset-generator.d.ts.map +1 -0
  47. package/dist/core/dataset-generator.js +895 -0
  48. package/dist/core/dataset-generator.js.map +1 -0
  49. package/dist/core/eliza1-benchmark-recipe.d.ts +18 -0
  50. package/dist/core/eliza1-benchmark-recipe.d.ts.map +1 -0
  51. package/dist/core/eliza1-benchmark-recipe.js +64 -0
  52. package/dist/core/eliza1-benchmark-recipe.js.map +1 -0
  53. package/dist/core/eliza1-bundle-stager.d.ts +57 -0
  54. package/dist/core/eliza1-bundle-stager.d.ts.map +1 -0
  55. package/dist/core/eliza1-bundle-stager.js +149 -0
  56. package/dist/core/eliza1-bundle-stager.js.map +1 -0
  57. package/dist/core/ensure-cron-job.d.ts +53 -0
  58. package/dist/core/ensure-cron-job.d.ts.map +1 -0
  59. package/dist/core/ensure-cron-job.js +51 -0
  60. package/dist/core/ensure-cron-job.js.map +1 -0
  61. package/dist/core/eval-comparison-artifact.d.ts +72 -0
  62. package/dist/core/eval-comparison-artifact.d.ts.map +1 -0
  63. package/dist/core/eval-comparison-artifact.js +281 -0
  64. package/dist/core/eval-comparison-artifact.js.map +1 -0
  65. package/dist/core/feed-generation-runner.d.ts +37 -0
  66. package/dist/core/feed-generation-runner.d.ts.map +1 -0
  67. package/dist/core/feed-generation-runner.js +232 -0
  68. package/dist/core/feed-generation-runner.js.map +1 -0
  69. package/dist/core/html-escape.d.ts +5 -0
  70. package/dist/core/html-escape.d.ts.map +1 -0
  71. package/dist/core/html-escape.js +11 -0
  72. package/dist/core/html-escape.js.map +1 -0
  73. package/dist/core/huggingface-dataset-ingest.d.ts +52 -0
  74. package/dist/core/huggingface-dataset-ingest.d.ts.map +1 -0
  75. package/dist/core/huggingface-dataset-ingest.js +134 -0
  76. package/dist/core/huggingface-dataset-ingest.js.map +1 -0
  77. package/dist/core/index.d.ts +29 -0
  78. package/dist/core/index.d.ts.map +1 -0
  79. package/dist/core/index.js +204 -0
  80. package/dist/core/index.js.map +1 -0
  81. package/dist/core/privacy-filter.d.ts +95 -0
  82. package/dist/core/privacy-filter.d.ts.map +1 -0
  83. package/dist/core/privacy-filter.js +324 -0
  84. package/dist/core/privacy-filter.js.map +1 -0
  85. package/dist/core/promotion-gate.d.ts +117 -0
  86. package/dist/core/promotion-gate.d.ts.map +1 -0
  87. package/dist/core/promotion-gate.js +85 -0
  88. package/dist/core/promotion-gate.js.map +1 -0
  89. package/dist/core/promotion-persist.d.ts +116 -0
  90. package/dist/core/promotion-persist.d.ts.map +1 -0
  91. package/dist/core/promotion-persist.js +93 -0
  92. package/dist/core/promotion-persist.js.map +1 -0
  93. package/dist/core/prompt-compare.d.ts +99 -0
  94. package/dist/core/prompt-compare.d.ts.map +1 -0
  95. package/dist/core/prompt-compare.js +210 -0
  96. package/dist/core/prompt-compare.js.map +1 -0
  97. package/dist/core/replay-validator.d.ts +136 -0
  98. package/dist/core/replay-validator.d.ts.map +1 -0
  99. package/dist/core/replay-validator.js +312 -0
  100. package/dist/core/replay-validator.js.map +1 -0
  101. package/dist/core/roleplay-executor.d.ts +123 -0
  102. package/dist/core/roleplay-executor.d.ts.map +1 -0
  103. package/dist/core/roleplay-executor.js +675 -0
  104. package/dist/core/roleplay-executor.js.map +1 -0
  105. package/dist/core/roleplay-trajectories.d.ts +54 -0
  106. package/dist/core/roleplay-trajectories.d.ts.map +1 -0
  107. package/dist/core/roleplay-trajectories.js +88 -0
  108. package/dist/core/roleplay-trajectories.js.map +1 -0
  109. package/dist/core/scenario-blueprints.d.ts +62 -0
  110. package/dist/core/scenario-blueprints.d.ts.map +1 -0
  111. package/dist/core/scenario-blueprints.js +850 -0
  112. package/dist/core/scenario-blueprints.js.map +1 -0
  113. package/dist/core/scenario-runner.d.ts +36 -0
  114. package/dist/core/scenario-runner.d.ts.map +1 -0
  115. package/dist/core/scenario-runner.js +216 -0
  116. package/dist/core/scenario-runner.js.map +1 -0
  117. package/dist/core/skill-scoring-cron.d.ts +57 -0
  118. package/dist/core/skill-scoring-cron.d.ts.map +1 -0
  119. package/dist/core/skill-scoring-cron.js +180 -0
  120. package/dist/core/skill-scoring-cron.js.map +1 -0
  121. package/dist/core/test-trajectory-collector.d.ts +37 -0
  122. package/dist/core/test-trajectory-collector.d.ts.map +1 -0
  123. package/dist/core/test-trajectory-collector.js +225 -0
  124. package/dist/core/test-trajectory-collector.js.map +1 -0
  125. package/dist/core/track-c-queue-task.d.ts +37 -0
  126. package/dist/core/track-c-queue-task.d.ts.map +1 -0
  127. package/dist/core/track-c-queue-task.js +104 -0
  128. package/dist/core/track-c-queue-task.js.map +1 -0
  129. package/dist/core/training-analysis-index.d.ts +104 -0
  130. package/dist/core/training-analysis-index.d.ts.map +1 -0
  131. package/dist/core/training-analysis-index.js +3297 -0
  132. package/dist/core/training-analysis-index.js.map +1 -0
  133. package/dist/core/training-collection-runner.d.ts +508 -0
  134. package/dist/core/training-collection-runner.d.ts.map +1 -0
  135. package/dist/core/training-collection-runner.js +2299 -0
  136. package/dist/core/training-collection-runner.js.map +1 -0
  137. package/dist/core/training-config.d.ts +52 -0
  138. package/dist/core/training-config.d.ts.map +1 -0
  139. package/dist/core/training-config.js +117 -0
  140. package/dist/core/training-config.js.map +1 -0
  141. package/dist/core/training-orchestrator.d.ts +112 -0
  142. package/dist/core/training-orchestrator.d.ts.map +1 -0
  143. package/dist/core/training-orchestrator.js +729 -0
  144. package/dist/core/training-orchestrator.js.map +1 -0
  145. package/dist/core/training-readiness-report.d.ts +52 -0
  146. package/dist/core/training-readiness-report.d.ts.map +1 -0
  147. package/dist/core/training-readiness-report.js +765 -0
  148. package/dist/core/training-readiness-report.js.map +1 -0
  149. package/dist/core/trajectory-consumer.d.ts +15 -0
  150. package/dist/core/trajectory-consumer.d.ts.map +1 -0
  151. package/dist/core/trajectory-consumer.js +61 -0
  152. package/dist/core/trajectory-consumer.js.map +1 -0
  153. package/dist/core/trajectory-export-bundle.d.ts +95 -0
  154. package/dist/core/trajectory-export-bundle.d.ts.map +1 -0
  155. package/dist/core/trajectory-export-bundle.js +561 -0
  156. package/dist/core/trajectory-export-bundle.js.map +1 -0
  157. package/dist/core/trajectory-export-cron.d.ts +57 -0
  158. package/dist/core/trajectory-export-cron.d.ts.map +1 -0
  159. package/dist/core/trajectory-export-cron.js +170 -0
  160. package/dist/core/trajectory-export-cron.js.map +1 -0
  161. package/dist/core/trajectory-hf-upload.d.ts +50 -0
  162. package/dist/core/trajectory-hf-upload.d.ts.map +1 -0
  163. package/dist/core/trajectory-hf-upload.js +111 -0
  164. package/dist/core/trajectory-hf-upload.js.map +1 -0
  165. package/dist/core/trajectory-task-datasets.d.ts +62 -0
  166. package/dist/core/trajectory-task-datasets.d.ts.map +1 -0
  167. package/dist/core/trajectory-task-datasets.js +427 -0
  168. package/dist/core/trajectory-task-datasets.js.map +1 -0
  169. package/dist/core/wait-for-service.d.ts +25 -0
  170. package/dist/core/wait-for-service.d.ts.map +1 -0
  171. package/dist/core/wait-for-service.js +19 -0
  172. package/dist/core/wait-for-service.js.map +1 -0
  173. package/dist/core/workspace-runtime.d.ts +4 -0
  174. package/dist/core/workspace-runtime.d.ts.map +1 -0
  175. package/dist/core/workspace-runtime.js +25 -0
  176. package/dist/core/workspace-runtime.js.map +1 -0
  177. package/dist/dspy/artifact.d.ts +54 -0
  178. package/dist/dspy/artifact.d.ts.map +1 -0
  179. package/dist/dspy/artifact.js +61 -0
  180. package/dist/dspy/artifact.js.map +1 -0
  181. package/dist/dspy/chain-of-thought.d.ts +27 -0
  182. package/dist/dspy/chain-of-thought.d.ts.map +1 -0
  183. package/dist/dspy/chain-of-thought.js +43 -0
  184. package/dist/dspy/chain-of-thought.js.map +1 -0
  185. package/dist/dspy/examples.d.ts +72 -0
  186. package/dist/dspy/examples.d.ts.map +1 -0
  187. package/dist/dspy/examples.js +105 -0
  188. package/dist/dspy/examples.js.map +1 -0
  189. package/dist/dspy/index.d.ts +15 -0
  190. package/dist/dspy/index.d.ts.map +1 -0
  191. package/dist/dspy/index.js +40 -0
  192. package/dist/dspy/index.js.map +1 -0
  193. package/dist/dspy/lm-adapter.d.ts +100 -0
  194. package/dist/dspy/lm-adapter.d.ts.map +1 -0
  195. package/dist/dspy/lm-adapter.js +81 -0
  196. package/dist/dspy/lm-adapter.js.map +1 -0
  197. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.d.ts +23 -0
  198. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.d.ts.map +1 -0
  199. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.js +85 -0
  200. package/dist/dspy/optimizers/dspy-bootstrap-fewshot.js.map +1 -0
  201. package/dist/dspy/optimizers/dspy-copro.d.ts +29 -0
  202. package/dist/dspy/optimizers/dspy-copro.d.ts.map +1 -0
  203. package/dist/dspy/optimizers/dspy-copro.js +141 -0
  204. package/dist/dspy/optimizers/dspy-copro.js.map +1 -0
  205. package/dist/dspy/optimizers/dspy-mipro.d.ts +37 -0
  206. package/dist/dspy/optimizers/dspy-mipro.d.ts.map +1 -0
  207. package/dist/dspy/optimizers/dspy-mipro.js +194 -0
  208. package/dist/dspy/optimizers/dspy-mipro.js.map +1 -0
  209. package/dist/dspy/optimizers/index.d.ts +5 -0
  210. package/dist/dspy/optimizers/index.d.ts.map +1 -0
  211. package/dist/dspy/optimizers/index.js +11 -0
  212. package/dist/dspy/optimizers/index.js.map +1 -0
  213. package/dist/dspy/optimizers/types.d.ts +39 -0
  214. package/dist/dspy/optimizers/types.d.ts.map +1 -0
  215. package/dist/dspy/optimizers/types.js +1 -0
  216. package/dist/dspy/optimizers/types.js.map +1 -0
  217. package/dist/dspy/predict.d.ts +49 -0
  218. package/dist/dspy/predict.d.ts.map +1 -0
  219. package/dist/dspy/predict.js +73 -0
  220. package/dist/dspy/predict.js.map +1 -0
  221. package/dist/dspy/signature.d.ts +88 -0
  222. package/dist/dspy/signature.d.ts.map +1 -0
  223. package/dist/dspy/signature.js +205 -0
  224. package/dist/dspy/signature.js.map +1 -0
  225. package/dist/index.d.ts +15 -0
  226. package/dist/index.d.ts.map +1 -0
  227. package/dist/index.js +15 -0
  228. package/dist/index.js.map +1 -0
  229. package/dist/optimizers/bootstrap-fewshot.d.ts +42 -0
  230. package/dist/optimizers/bootstrap-fewshot.d.ts.map +1 -0
  231. package/dist/optimizers/bootstrap-fewshot.js +92 -0
  232. package/dist/optimizers/bootstrap-fewshot.js.map +1 -0
  233. package/dist/optimizers/gepa.d.ts +63 -0
  234. package/dist/optimizers/gepa.d.ts.map +1 -0
  235. package/dist/optimizers/gepa.js +232 -0
  236. package/dist/optimizers/gepa.js.map +1 -0
  237. package/dist/optimizers/index.d.ts +7 -0
  238. package/dist/optimizers/index.d.ts.map +1 -0
  239. package/dist/optimizers/index.js +51 -0
  240. package/dist/optimizers/index.js.map +1 -0
  241. package/dist/optimizers/instruction-search.d.ts +39 -0
  242. package/dist/optimizers/instruction-search.d.ts.map +1 -0
  243. package/dist/optimizers/instruction-search.js +108 -0
  244. package/dist/optimizers/instruction-search.js.map +1 -0
  245. package/dist/optimizers/prompt-evolution.d.ts +39 -0
  246. package/dist/optimizers/prompt-evolution.d.ts.map +1 -0
  247. package/dist/optimizers/prompt-evolution.js +101 -0
  248. package/dist/optimizers/prompt-evolution.js.map +1 -0
  249. package/dist/optimizers/scoring.d.ts +139 -0
  250. package/dist/optimizers/scoring.d.ts.map +1 -0
  251. package/dist/optimizers/scoring.js +299 -0
  252. package/dist/optimizers/scoring.js.map +1 -0
  253. package/dist/optimizers/types.d.ts +105 -0
  254. package/dist/optimizers/types.d.ts.map +1 -0
  255. package/dist/optimizers/types.js +1 -0
  256. package/dist/optimizers/types.js.map +1 -0
  257. package/dist/register-runtime.d.ts +3 -0
  258. package/dist/register-runtime.d.ts.map +1 -0
  259. package/dist/register-runtime.js +60 -0
  260. package/dist/register-runtime.js.map +1 -0
  261. package/dist/register-terminal-view.d.ts +15 -0
  262. package/dist/register-terminal-view.d.ts.map +1 -0
  263. package/dist/register-terminal-view.js +31 -0
  264. package/dist/register-terminal-view.js.map +1 -0
  265. package/dist/routes/experience-routes.d.ts +21 -0
  266. package/dist/routes/experience-routes.d.ts.map +1 -0
  267. package/dist/routes/experience-routes.js +513 -0
  268. package/dist/routes/experience-routes.js.map +1 -0
  269. package/dist/routes/index.d.ts +5 -0
  270. package/dist/routes/index.d.ts.map +1 -0
  271. package/dist/routes/index.js +17 -0
  272. package/dist/routes/index.js.map +1 -0
  273. package/dist/routes/training-routes.d.ts +10 -0
  274. package/dist/routes/training-routes.d.ts.map +1 -0
  275. package/dist/routes/training-routes.js +1239 -0
  276. package/dist/routes/training-routes.js.map +1 -0
  277. package/dist/routes/training-vast-routes.d.ts +35 -0
  278. package/dist/routes/training-vast-routes.d.ts.map +1 -0
  279. package/dist/routes/training-vast-routes.js +249 -0
  280. package/dist/routes/training-vast-routes.js.map +1 -0
  281. package/dist/routes/trajectory-routes.d.ts +19 -0
  282. package/dist/routes/trajectory-routes.d.ts.map +1 -0
  283. package/dist/routes/trajectory-routes.js +1122 -0
  284. package/dist/routes/trajectory-routes.js.map +1 -0
  285. package/dist/services/index.d.ts +9 -0
  286. package/dist/services/index.d.ts.map +1 -0
  287. package/dist/services/index.js +63 -0
  288. package/dist/services/index.js.map +1 -0
  289. package/dist/services/training-backend-check.d.ts +8 -0
  290. package/dist/services/training-backend-check.d.ts.map +1 -0
  291. package/dist/services/training-backend-check.js +31 -0
  292. package/dist/services/training-backend-check.js.map +1 -0
  293. package/dist/services/training-service-like.d.ts +40 -0
  294. package/dist/services/training-service-like.d.ts.map +1 -0
  295. package/dist/services/training-service-like.js +1 -0
  296. package/dist/services/training-service-like.js.map +1 -0
  297. package/dist/services/training-service-registry.d.ts +4 -0
  298. package/dist/services/training-service-registry.d.ts.map +1 -0
  299. package/dist/services/training-service-registry.js +12 -0
  300. package/dist/services/training-service-registry.js.map +1 -0
  301. package/dist/services/training-service.d.ts +59 -0
  302. package/dist/services/training-service.d.ts.map +1 -0
  303. package/dist/services/training-service.js +154 -0
  304. package/dist/services/training-service.js.map +1 -0
  305. package/dist/services/training-trigger.d.ts +177 -0
  306. package/dist/services/training-trigger.d.ts.map +1 -0
  307. package/dist/services/training-trigger.js +300 -0
  308. package/dist/services/training-trigger.js.map +1 -0
  309. package/dist/services/training-vast-service.d.ts +149 -0
  310. package/dist/services/training-vast-service.d.ts.map +1 -0
  311. package/dist/services/training-vast-service.js +648 -0
  312. package/dist/services/training-vast-service.js.map +1 -0
  313. package/dist/services/vast-inference-stats.d.ts +37 -0
  314. package/dist/services/vast-inference-stats.d.ts.map +1 -0
  315. package/dist/services/vast-inference-stats.js +81 -0
  316. package/dist/services/vast-inference-stats.js.map +1 -0
  317. package/dist/services/vast-job-store.d.ts +74 -0
  318. package/dist/services/vast-job-store.d.ts.map +1 -0
  319. package/dist/services/vast-job-store.js +194 -0
  320. package/dist/services/vast-job-store.js.map +1 -0
  321. package/dist/services/vast-subprocess.d.ts +27 -0
  322. package/dist/services/vast-subprocess.d.ts.map +1 -0
  323. package/dist/services/vast-subprocess.js +78 -0
  324. package/dist/services/vast-subprocess.js.map +1 -0
  325. package/dist/setup-routes.d.ts +17 -0
  326. package/dist/setup-routes.d.ts.map +1 -0
  327. package/dist/setup-routes.js +319 -0
  328. package/dist/setup-routes.js.map +1 -0
  329. package/dist/ui/FineTuningSpatialView.d.ts +49 -0
  330. package/dist/ui/FineTuningSpatialView.d.ts.map +1 -0
  331. package/dist/ui/FineTuningSpatialView.js +154 -0
  332. package/dist/ui/FineTuningSpatialView.js.map +1 -0
  333. package/dist/ui/FineTuningView.d.ts +7 -0
  334. package/dist/ui/FineTuningView.d.ts.map +1 -0
  335. package/dist/ui/FineTuningView.helpers.d.ts +17 -0
  336. package/dist/ui/FineTuningView.helpers.d.ts.map +1 -0
  337. package/dist/ui/FineTuningView.helpers.js +30 -0
  338. package/dist/ui/FineTuningView.helpers.js.map +1 -0
  339. package/dist/ui/FineTuningView.interact.d.ts +2 -0
  340. package/dist/ui/FineTuningView.interact.d.ts.map +1 -0
  341. package/dist/ui/FineTuningView.interact.js +300 -0
  342. package/dist/ui/FineTuningView.interact.js.map +1 -0
  343. package/dist/ui/FineTuningView.js +4653 -0
  344. package/dist/ui/FineTuningView.js.map +1 -0
  345. package/dist/ui/fine-tuning-panels.d.ts +100 -0
  346. package/dist/ui/fine-tuning-panels.d.ts.map +1 -0
  347. package/dist/ui/fine-tuning-panels.helpers.d.ts +19 -0
  348. package/dist/ui/fine-tuning-panels.helpers.d.ts.map +1 -0
  349. package/dist/ui/fine-tuning-panels.helpers.js +77 -0
  350. package/dist/ui/fine-tuning-panels.helpers.js.map +1 -0
  351. package/dist/ui/fine-tuning-panels.js +928 -0
  352. package/dist/ui/fine-tuning-panels.js.map +1 -0
  353. package/dist/ui/index.d.ts +5 -0
  354. package/dist/ui/index.d.ts.map +1 -0
  355. package/dist/ui/index.js +5 -0
  356. package/dist/ui/index.js.map +1 -0
  357. package/dist/ui/training-view-bundle.d.ts +3 -0
  358. package/dist/ui/training-view-bundle.d.ts.map +1 -0
  359. package/dist/ui/training-view-bundle.js +7 -0
  360. package/dist/ui/training-view-bundle.js.map +1 -0
  361. package/dist/views/bundle.js +5312 -0
  362. package/dist/views/bundle.js.map +1 -0
  363. package/package.json +7 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/dspy/optimizers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GACzB,wBAAwB,GACxB,YAAY,GACZ,YAAY,CAAC;AAEjB;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,CACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,MAAM,CAAC;AAEZ,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,EAAE,EAAE,oBAAoB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * DSPy-style Predict module (native TS).
3
+ *
4
+ * Predict is the smallest composable LM module:
5
+ * 1. Render a Signature into a system + user prompt.
6
+ * 2. Prepend few-shot demonstrations (if any).
7
+ * 3. Call the LM adapter.
8
+ * 4. Parse the LM's response into typed output fields.
9
+ *
10
+ * `Predict.forward()` returns `{output, usage, trace}` so optimizer code can
11
+ * inspect what was sent + what came back without re-running the LM.
12
+ */
13
+ import type { Example } from "./examples.js";
14
+ import type { LanguageModelAdapter, UsageInfo } from "./lm-adapter.js";
15
+ import type { Signature, SignatureSpec } from "./signature.js";
16
+ export interface PredictOpts<I extends Record<string, unknown> = Record<string, unknown>, O extends Record<string, unknown> = Record<string, unknown>> {
17
+ signature: Signature<I, O>;
18
+ lm: LanguageModelAdapter;
19
+ demonstrations?: Example[];
20
+ temperature?: number;
21
+ maxTokens?: number;
22
+ /** Override instructions without rebuilding the signature (used by COPRO). */
23
+ instructionsOverride?: string;
24
+ }
25
+ export interface PredictTrace {
26
+ system: string;
27
+ user: string;
28
+ rawResponse: string;
29
+ demonstrationCount: number;
30
+ }
31
+ export interface PredictResult<O extends Record<string, unknown> = Record<string, unknown>> {
32
+ output: O;
33
+ usage: UsageInfo;
34
+ trace: PredictTrace;
35
+ }
36
+ export declare class Predict<I extends Record<string, unknown> = Record<string, unknown>, O extends Record<string, unknown> = Record<string, unknown>> {
37
+ private readonly opts;
38
+ constructor(opts: PredictOpts<I, O>);
39
+ get signature(): Signature<I, O>;
40
+ get demonstrations(): Example[];
41
+ forward(input: I): Promise<PredictResult<O>>;
42
+ }
43
+ /**
44
+ * Render a `Demonstrations:` block in the same shape the signature uses for
45
+ * a real turn. Used by both Predict and the bootstrap-fewshot optimizer so
46
+ * the few-shot format is one canonical thing.
47
+ */
48
+ export declare function renderDemonstrationsBlock(spec: SignatureSpec, demos: Example[]): string;
49
+ //# sourceMappingURL=predict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predict.d.ts","sourceRoot":"","sources":["../../src/dspy/predict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAEV,oBAAoB,EACpB,SAAS,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,WAAW,WAAW,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE3D,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,EAAE,EAAE,oBAAoB,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa,CAC5B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE3D,MAAM,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,qBAAa,OAAO,CAClB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE/C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAEpD,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAE/B;IAED,IAAI,cAAc,IAAI,OAAO,EAAE,CAE9B;IAEK,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAiCnD;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,OAAO,EAAE,GACf,MAAM,CAoBR"}
@@ -0,0 +1,73 @@
1
+ class Predict {
2
+ constructor(opts) {
3
+ this.opts = opts;
4
+ }
5
+ opts;
6
+ get signature() {
7
+ return this.opts.signature;
8
+ }
9
+ get demonstrations() {
10
+ return this.opts.demonstrations ?? [];
11
+ }
12
+ async forward(input) {
13
+ const rendered = this.opts.signature.render(input, {
14
+ instructionsOverride: this.opts.instructionsOverride
15
+ });
16
+ const demoBlock = renderDemonstrationsBlock(
17
+ this.opts.signature.spec,
18
+ this.opts.demonstrations ?? []
19
+ );
20
+ const system = demoBlock ? `${rendered.system}
21
+
22
+ ${demoBlock}` : rendered.system;
23
+ const result = await this.opts.lm.generate({
24
+ system,
25
+ messages: [{ role: "user", content: rendered.user }],
26
+ temperature: this.opts.temperature ?? 0,
27
+ maxTokens: this.opts.maxTokens
28
+ });
29
+ const output = this.opts.signature.parse(result.text);
30
+ return {
31
+ output,
32
+ usage: result.usage,
33
+ trace: {
34
+ system,
35
+ user: rendered.user,
36
+ rawResponse: result.text,
37
+ demonstrationCount: this.opts.demonstrations?.length ?? 0
38
+ }
39
+ };
40
+ }
41
+ }
42
+ function renderDemonstrationsBlock(spec, demos) {
43
+ if (demos.length === 0) return "";
44
+ const lines = ["Demonstrations:", ""];
45
+ for (let i = 0; i < demos.length; i += 1) {
46
+ const demo = demos[i];
47
+ if (!demo) continue;
48
+ lines.push(`Example ${i + 1}:`);
49
+ for (const field of spec.inputs) {
50
+ const value = demo.inputs[field.name];
51
+ if (value === void 0 || value === null) continue;
52
+ lines.push(`${field.name}: ${renderForDemo(value)}`);
53
+ }
54
+ for (const field of spec.outputs) {
55
+ const value = demo.outputs[field.name];
56
+ if (value === void 0 || value === null) continue;
57
+ lines.push(`${field.name}: ${renderForDemo(value)}`);
58
+ }
59
+ lines.push("");
60
+ }
61
+ return lines.join("\n").trimEnd();
62
+ }
63
+ function renderForDemo(value) {
64
+ if (typeof value === "string") return value;
65
+ if (typeof value === "number" || typeof value === "boolean")
66
+ return String(value);
67
+ return JSON.stringify(value);
68
+ }
69
+ export {
70
+ Predict,
71
+ renderDemonstrationsBlock
72
+ };
73
+ //# sourceMappingURL=predict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dspy/predict.ts"],"sourcesContent":["/**\n * DSPy-style Predict module (native TS).\n *\n * Predict is the smallest composable LM module:\n * 1. Render a Signature into a system + user prompt.\n * 2. Prepend few-shot demonstrations (if any).\n * 3. Call the LM adapter.\n * 4. Parse the LM's response into typed output fields.\n *\n * `Predict.forward()` returns `{output, usage, trace}` so optimizer code can\n * inspect what was sent + what came back without re-running the LM.\n */\n\nimport type { Example } from \"./examples.js\";\nimport type {\n GenerateResult,\n LanguageModelAdapter,\n UsageInfo,\n} from \"./lm-adapter.js\";\nimport type { Signature, SignatureSpec } from \"./signature.js\";\n\nexport interface PredictOpts<\n I extends Record<string, unknown> = Record<string, unknown>,\n O extends Record<string, unknown> = Record<string, unknown>,\n> {\n signature: Signature<I, O>;\n lm: LanguageModelAdapter;\n demonstrations?: Example[];\n temperature?: number;\n maxTokens?: number;\n /** Override instructions without rebuilding the signature (used by COPRO). */\n instructionsOverride?: string;\n}\n\nexport interface PredictTrace {\n system: string;\n user: string;\n rawResponse: string;\n demonstrationCount: number;\n}\n\nexport interface PredictResult<\n O extends Record<string, unknown> = Record<string, unknown>,\n> {\n output: O;\n usage: UsageInfo;\n trace: PredictTrace;\n}\n\nexport class Predict<\n I extends Record<string, unknown> = Record<string, unknown>,\n O extends Record<string, unknown> = Record<string, unknown>,\n> {\n constructor(private readonly opts: PredictOpts<I, O>) {}\n\n get signature(): Signature<I, O> {\n return this.opts.signature;\n }\n\n get demonstrations(): Example[] {\n return this.opts.demonstrations ?? [];\n }\n\n async forward(input: I): Promise<PredictResult<O>> {\n const rendered = this.opts.signature.render(input, {\n instructionsOverride: this.opts.instructionsOverride,\n });\n const demoBlock = renderDemonstrationsBlock(\n this.opts.signature.spec,\n this.opts.demonstrations ?? [],\n );\n const system = demoBlock\n ? `${rendered.system}\\n\\n${demoBlock}`\n : rendered.system;\n const result: GenerateResult = await this.opts.lm.generate({\n system,\n messages: [{ role: \"user\", content: rendered.user }],\n temperature: this.opts.temperature ?? 0,\n maxTokens: this.opts.maxTokens,\n });\n // `signature.parse` is the LM-response boundary: it throws\n // `SignatureParseError` on malformed output. No silent fallback — the\n // optimizer scoring loop catches the throw and scores 0 (documented\n // behavior in `dspy-bootstrap-fewshot.ts` / `dspy-copro.ts` / `dspy-mipro.ts`).\n const output = this.opts.signature.parse(result.text);\n return {\n output,\n usage: result.usage,\n trace: {\n system,\n user: rendered.user,\n rawResponse: result.text,\n demonstrationCount: this.opts.demonstrations?.length ?? 0,\n },\n };\n }\n}\n\n/**\n * Render a `Demonstrations:` block in the same shape the signature uses for\n * a real turn. Used by both Predict and the bootstrap-fewshot optimizer so\n * the few-shot format is one canonical thing.\n */\nexport function renderDemonstrationsBlock(\n spec: SignatureSpec,\n demos: Example[],\n): string {\n if (demos.length === 0) return \"\";\n const lines: string[] = [\"Demonstrations:\", \"\"];\n for (let i = 0; i < demos.length; i += 1) {\n const demo = demos[i];\n if (!demo) continue;\n lines.push(`Example ${i + 1}:`);\n for (const field of spec.inputs) {\n const value = demo.inputs[field.name];\n if (value === undefined || value === null) continue;\n lines.push(`${field.name}: ${renderForDemo(value)}`);\n }\n for (const field of spec.outputs) {\n const value = demo.outputs[field.name];\n if (value === undefined || value === null) continue;\n lines.push(`${field.name}: ${renderForDemo(value)}`);\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\").trimEnd();\n}\n\nfunction renderForDemo(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\")\n return String(value);\n return JSON.stringify(value);\n}\n"],"mappings":"AAiDO,MAAM,QAGX;AAAA,EACA,YAA6B,MAAyB;AAAzB;AAAA,EAA0B;AAAA,EAA1B;AAAA,EAE7B,IAAI,YAA6B;AAC/B,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,iBAA4B;AAC9B,WAAO,KAAK,KAAK,kBAAkB,CAAC;AAAA,EACtC;AAAA,EAEA,MAAM,QAAQ,OAAqC;AACjD,UAAM,WAAW,KAAK,KAAK,UAAU,OAAO,OAAO;AAAA,MACjD,sBAAsB,KAAK,KAAK;AAAA,IAClC,CAAC;AACD,UAAM,YAAY;AAAA,MAChB,KAAK,KAAK,UAAU;AAAA,MACpB,KAAK,KAAK,kBAAkB,CAAC;AAAA,IAC/B;AACA,UAAM,SAAS,YACX,GAAG,SAAS,MAAM;AAAA;AAAA,EAAO,SAAS,KAClC,SAAS;AACb,UAAM,SAAyB,MAAM,KAAK,KAAK,GAAG,SAAS;AAAA,MACzD;AAAA,MACA,UAAU,CAAC,EAAE,MAAM,QAAQ,SAAS,SAAS,KAAK,CAAC;AAAA,MACnD,aAAa,KAAK,KAAK,eAAe;AAAA,MACtC,WAAW,KAAK,KAAK;AAAA,IACvB,CAAC;AAKD,UAAM,SAAS,KAAK,KAAK,UAAU,MAAM,OAAO,IAAI;AACpD,WAAO;AAAA,MACL;AAAA,MACA,OAAO,OAAO;AAAA,MACd,OAAO;AAAA,QACL;AAAA,QACA,MAAM,SAAS;AAAA,QACf,aAAa,OAAO;AAAA,QACpB,oBAAoB,KAAK,KAAK,gBAAgB,UAAU;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AACF;AAOO,SAAS,0BACd,MACA,OACQ;AACR,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,QAAkB,CAAC,mBAAmB,EAAE;AAC9C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,CAAC,KAAM;AACX,UAAM,KAAK,WAAW,IAAI,CAAC,GAAG;AAC9B,eAAW,SAAS,KAAK,QAAQ;AAC/B,YAAM,QAAQ,KAAK,OAAO,MAAM,IAAI;AACpC,UAAI,UAAU,UAAa,UAAU,KAAM;AAC3C,YAAM,KAAK,GAAG,MAAM,IAAI,KAAK,cAAc,KAAK,CAAC,EAAE;AAAA,IACrD;AACA,eAAW,SAAS,KAAK,SAAS;AAChC,YAAM,QAAQ,KAAK,QAAQ,MAAM,IAAI;AACrC,UAAI,UAAU,UAAa,UAAU,KAAM;AAC3C,YAAM,KAAK,GAAG,MAAM,IAAI,KAAK,cAAc,KAAK,CAAC,EAAE;AAAA,IACrD;AACA,UAAM,KAAK,EAAE;AAAA,EACf;AACA,SAAO,MAAM,KAAK,IAAI,EAAE,QAAQ;AAClC;AAEA,SAAS,cAAc,OAAwB;AAC7C,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU;AAChD,WAAO,OAAO,KAAK;AACrB,SAAO,KAAK,UAAU,KAAK;AAC7B;","names":[]}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * DSPy-style Signature primitive (native TS).
3
+ *
4
+ * A `Signature` is a declarative I/O contract between a Predict module and an
5
+ * LM: typed input fields + typed output fields + natural-language instructions.
6
+ * The runtime renders a Signature into a system + user prompt and parses the
7
+ * LM's response back into a typed output record.
8
+ *
9
+ * This is our own implementation — no ax, no dspy, no @ax-llm/ax imports.
10
+ *
11
+ * Render protocol (deterministic so optimizer scoring is reproducible):
12
+ *
13
+ * System prompt:
14
+ * <instructions>
15
+ *
16
+ * Input fields:
17
+ * - <name> (<type>): <description>
18
+ * ...
19
+ *
20
+ * Output fields:
21
+ * - <name> (<type>): <description>
22
+ * ...
23
+ *
24
+ * Respond with each output field on its own line, formatted as:
25
+ * <field_name>: <value>
26
+ *
27
+ * User prompt:
28
+ * <input_name>: <value>
29
+ * ...
30
+ *
31
+ * Parse protocol: read `^<field_name>:\s*(.*)$` per line. Multiline trailing
32
+ * content is captured up to the next field-name header so output fields with
33
+ * multi-line `reasoning` strings round-trip correctly.
34
+ */
35
+ export type FieldType = "string" | "number" | "boolean" | "enum";
36
+ export interface FieldSpec {
37
+ name: string;
38
+ description: string;
39
+ type: FieldType;
40
+ enumValues?: readonly string[];
41
+ optional?: boolean;
42
+ }
43
+ export interface SignatureSpec {
44
+ name: string;
45
+ instructions: string;
46
+ inputs: ReadonlyArray<FieldSpec>;
47
+ outputs: ReadonlyArray<FieldSpec>;
48
+ }
49
+ export interface RenderedPrompt {
50
+ system: string;
51
+ user: string;
52
+ }
53
+ export declare class SignatureParseError extends Error {
54
+ readonly fieldName?: string | undefined;
55
+ constructor(message: string, fieldName?: string | undefined);
56
+ }
57
+ /**
58
+ * Strongly-typed Signature handle.
59
+ *
60
+ * The generic parameters carry the field-name keys so callers get
61
+ * autocomplete on `forward()` inputs and on the parsed `output` record.
62
+ */
63
+ export declare class Signature<I extends Record<string, unknown> = Record<string, unknown>, O extends Record<string, unknown> = Record<string, unknown>> {
64
+ readonly spec: SignatureSpec;
65
+ constructor(spec: SignatureSpec);
66
+ get name(): string;
67
+ get inputs(): ReadonlyArray<FieldSpec>;
68
+ get outputs(): ReadonlyArray<FieldSpec>;
69
+ /**
70
+ * Render the signature to a system + user prompt. The `instructionsOverride`
71
+ * lets COPRO/MIPRO swap in a candidate instruction string without rebuilding
72
+ * the whole signature.
73
+ */
74
+ render(input: I, options?: {
75
+ instructionsOverride?: string;
76
+ }): RenderedPrompt;
77
+ /**
78
+ * Parse an LM response into a typed output record. Multi-line field values
79
+ * are supported — content after `<field>:` extends until the next known
80
+ * field header or end of string.
81
+ */
82
+ parse(raw: string): O;
83
+ }
84
+ /**
85
+ * Convenience constructor for signatures defined as a literal block.
86
+ */
87
+ export declare function defineSignature<I extends Record<string, unknown> = Record<string, unknown>, O extends Record<string, unknown> = Record<string, unknown>>(spec: SignatureSpec): Signature<I, O>;
88
+ //# sourceMappingURL=signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../src/dspy/signature.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACjC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAG1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM;gBAD3B,OAAO,EAAE,MAAM,EACN,SAAS,CAAC,EAAE,MAAM,YAAA;CAK9B;AAED;;;;;GAKG;AACH,qBAAa,SAAS,CACpB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;aAE/B,IAAI,EAAE,aAAa;gBAAnB,IAAI,EAAE,aAAa;IAwB/C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,CAErC;IAED,IAAI,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAEtC;IAED;;;;OAIG;IACH,MAAM,CACJ,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1C,cAAc;IA+CjB;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC;CAyBtB;AA2GD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAEtC"}
@@ -0,0 +1,205 @@
1
+ class SignatureParseError extends Error {
2
+ constructor(message, fieldName) {
3
+ super(message);
4
+ this.fieldName = fieldName;
5
+ this.name = "SignatureParseError";
6
+ }
7
+ fieldName;
8
+ }
9
+ class Signature {
10
+ constructor(spec) {
11
+ this.spec = spec;
12
+ if (spec.inputs.length === 0) {
13
+ throw new Error(
14
+ `[Signature] '${spec.name}' must declare at least one input field`
15
+ );
16
+ }
17
+ if (spec.outputs.length === 0) {
18
+ throw new Error(
19
+ `[Signature] '${spec.name}' must declare at least one output field`
20
+ );
21
+ }
22
+ const names = /* @__PURE__ */ new Set();
23
+ for (const field of [...spec.inputs, ...spec.outputs]) {
24
+ if (names.has(field.name)) {
25
+ throw new Error(
26
+ `[Signature] '${spec.name}' has duplicate field name '${field.name}'`
27
+ );
28
+ }
29
+ names.add(field.name);
30
+ }
31
+ }
32
+ spec;
33
+ get name() {
34
+ return this.spec.name;
35
+ }
36
+ get inputs() {
37
+ return this.spec.inputs;
38
+ }
39
+ get outputs() {
40
+ return this.spec.outputs;
41
+ }
42
+ /**
43
+ * Render the signature to a system + user prompt. The `instructionsOverride`
44
+ * lets COPRO/MIPRO swap in a candidate instruction string without rebuilding
45
+ * the whole signature.
46
+ */
47
+ render(input, options) {
48
+ const instructions = options?.instructionsOverride ?? this.spec.instructions;
49
+ const systemLines = [];
50
+ if (instructions.trim().length > 0) {
51
+ systemLines.push(instructions.trim());
52
+ systemLines.push("");
53
+ }
54
+ systemLines.push("Input fields:");
55
+ for (const field of this.spec.inputs) {
56
+ systemLines.push(
57
+ `- ${field.name} (${renderFieldType(field)}): ${field.description}`
58
+ );
59
+ }
60
+ systemLines.push("");
61
+ systemLines.push("Output fields:");
62
+ for (const field of this.spec.outputs) {
63
+ systemLines.push(
64
+ `- ${field.name} (${renderFieldType(field)}): ${field.description}`
65
+ );
66
+ }
67
+ systemLines.push("");
68
+ systemLines.push(
69
+ "Respond with each output field on its own line, formatted as:"
70
+ );
71
+ systemLines.push("<field_name>: <value>");
72
+ const userLines = [];
73
+ for (const field of this.spec.inputs) {
74
+ const raw = input[field.name];
75
+ if (raw === void 0 || raw === null) {
76
+ if (!field.optional) {
77
+ throw new Error(
78
+ `[Signature:${this.spec.name}] missing required input '${field.name}'`
79
+ );
80
+ }
81
+ continue;
82
+ }
83
+ userLines.push(`${field.name}: ${renderValue(raw)}`);
84
+ }
85
+ return {
86
+ system: systemLines.join("\n"),
87
+ user: userLines.join("\n")
88
+ };
89
+ }
90
+ /**
91
+ * Parse an LM response into a typed output record. Multi-line field values
92
+ * are supported — content after `<field>:` extends until the next known
93
+ * field header or end of string.
94
+ */
95
+ parse(raw) {
96
+ const text = stripFences(raw);
97
+ const orderedFields = [...this.spec.outputs];
98
+ const fieldNames = orderedFields.map((f) => f.name);
99
+ const result = {};
100
+ const fieldPositions = locateFieldHeaders(text, fieldNames);
101
+ for (let i = 0; i < orderedFields.length; i += 1) {
102
+ const field = orderedFields[i];
103
+ if (!field) continue;
104
+ const span = fieldPositions[field.name];
105
+ if (!span) {
106
+ if (field.optional) continue;
107
+ throw new SignatureParseError(
108
+ `missing required output field '${field.name}' in LM response`,
109
+ field.name
110
+ );
111
+ }
112
+ const valueText = span.value;
113
+ result[field.name] = coerceValue(field, valueText);
114
+ }
115
+ return result;
116
+ }
117
+ }
118
+ function renderFieldType(field) {
119
+ if (field.type === "enum") {
120
+ const values = field.enumValues ?? [];
121
+ return `enum: ${values.join(" | ")}`;
122
+ }
123
+ return field.type;
124
+ }
125
+ function renderValue(value) {
126
+ if (typeof value === "string") return value;
127
+ if (typeof value === "number" || typeof value === "boolean") {
128
+ return String(value);
129
+ }
130
+ return JSON.stringify(value);
131
+ }
132
+ function stripFences(text) {
133
+ return text.trim().replace(/^```[a-z0-9_-]*\s*/i, "").replace(/\s*```$/i, "").trim();
134
+ }
135
+ function locateFieldHeaders(text, fieldNames) {
136
+ const positions = [];
137
+ for (const name of fieldNames) {
138
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
139
+ const pattern = new RegExp(`(^|\\n)\\s*${escaped}\\s*:\\s*`, "i");
140
+ const match = pattern.exec(text);
141
+ if (!match) continue;
142
+ const start = match.index + (match[1] === "" ? 0 : match[1].length);
143
+ const valueStart = start + (match[0].length - (match[1] ?? "").length);
144
+ positions.push({ name, start, valueStart });
145
+ }
146
+ positions.sort((a, b) => a.start - b.start);
147
+ const out = {};
148
+ for (let i = 0; i < positions.length; i += 1) {
149
+ const here = positions[i];
150
+ if (!here) continue;
151
+ const next = positions[i + 1];
152
+ const end = next ? next.start : text.length;
153
+ const value = text.slice(here.valueStart, end).trimEnd();
154
+ out[here.name] = { value };
155
+ }
156
+ return out;
157
+ }
158
+ function coerceValue(field, raw) {
159
+ const trimmed = raw.trim();
160
+ switch (field.type) {
161
+ case "string":
162
+ return trimmed;
163
+ case "number": {
164
+ const num = Number(trimmed);
165
+ if (!Number.isFinite(num)) {
166
+ throw new SignatureParseError(
167
+ `field '${field.name}' expected number, got '${trimmed}'`,
168
+ field.name
169
+ );
170
+ }
171
+ return num;
172
+ }
173
+ case "boolean": {
174
+ const lower = trimmed.toLowerCase();
175
+ if (lower === "true" || lower === "yes" || lower === "1") return true;
176
+ if (lower === "false" || lower === "no" || lower === "0") return false;
177
+ throw new SignatureParseError(
178
+ `field '${field.name}' expected boolean, got '${trimmed}'`,
179
+ field.name
180
+ );
181
+ }
182
+ case "enum": {
183
+ const values = field.enumValues ?? [];
184
+ const match = values.find(
185
+ (v) => v.toLowerCase() === trimmed.toLowerCase()
186
+ );
187
+ if (!match) {
188
+ throw new SignatureParseError(
189
+ `field '${field.name}' expected one of [${values.join(", ")}], got '${trimmed}'`,
190
+ field.name
191
+ );
192
+ }
193
+ return match;
194
+ }
195
+ }
196
+ }
197
+ function defineSignature(spec) {
198
+ return new Signature(spec);
199
+ }
200
+ export {
201
+ Signature,
202
+ SignatureParseError,
203
+ defineSignature
204
+ };
205
+ //# sourceMappingURL=signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dspy/signature.ts"],"sourcesContent":["/**\n * DSPy-style Signature primitive (native TS).\n *\n * A `Signature` is a declarative I/O contract between a Predict module and an\n * LM: typed input fields + typed output fields + natural-language instructions.\n * The runtime renders a Signature into a system + user prompt and parses the\n * LM's response back into a typed output record.\n *\n * This is our own implementation — no ax, no dspy, no @ax-llm/ax imports.\n *\n * Render protocol (deterministic so optimizer scoring is reproducible):\n *\n * System prompt:\n * <instructions>\n *\n * Input fields:\n * - <name> (<type>): <description>\n * ...\n *\n * Output fields:\n * - <name> (<type>): <description>\n * ...\n *\n * Respond with each output field on its own line, formatted as:\n * <field_name>: <value>\n *\n * User prompt:\n * <input_name>: <value>\n * ...\n *\n * Parse protocol: read `^<field_name>:\\s*(.*)$` per line. Multiline trailing\n * content is captured up to the next field-name header so output fields with\n * multi-line `reasoning` strings round-trip correctly.\n */\n\nexport type FieldType = \"string\" | \"number\" | \"boolean\" | \"enum\";\n\nexport interface FieldSpec {\n name: string;\n description: string;\n type: FieldType;\n enumValues?: readonly string[];\n optional?: boolean;\n}\n\nexport interface SignatureSpec {\n name: string;\n instructions: string;\n inputs: ReadonlyArray<FieldSpec>;\n outputs: ReadonlyArray<FieldSpec>;\n}\n\nexport interface RenderedPrompt {\n system: string;\n user: string;\n}\n\nexport class SignatureParseError extends Error {\n constructor(\n message: string,\n readonly fieldName?: string,\n ) {\n super(message);\n this.name = \"SignatureParseError\";\n }\n}\n\n/**\n * Strongly-typed Signature handle.\n *\n * The generic parameters carry the field-name keys so callers get\n * autocomplete on `forward()` inputs and on the parsed `output` record.\n */\nexport class Signature<\n I extends Record<string, unknown> = Record<string, unknown>,\n O extends Record<string, unknown> = Record<string, unknown>,\n> {\n constructor(public readonly spec: SignatureSpec) {\n if (spec.inputs.length === 0) {\n throw new Error(\n `[Signature] '${spec.name}' must declare at least one input field`,\n );\n }\n if (spec.outputs.length === 0) {\n throw new Error(\n `[Signature] '${spec.name}' must declare at least one output field`,\n );\n }\n // Reject duplicate names within or across input/output sets — they would\n // confuse the parser (output field would shadow input field).\n const names = new Set<string>();\n for (const field of [...spec.inputs, ...spec.outputs]) {\n if (names.has(field.name)) {\n throw new Error(\n `[Signature] '${spec.name}' has duplicate field name '${field.name}'`,\n );\n }\n names.add(field.name);\n }\n }\n\n get name(): string {\n return this.spec.name;\n }\n\n get inputs(): ReadonlyArray<FieldSpec> {\n return this.spec.inputs;\n }\n\n get outputs(): ReadonlyArray<FieldSpec> {\n return this.spec.outputs;\n }\n\n /**\n * Render the signature to a system + user prompt. The `instructionsOverride`\n * lets COPRO/MIPRO swap in a candidate instruction string without rebuilding\n * the whole signature.\n */\n render(\n input: I,\n options?: { instructionsOverride?: string },\n ): RenderedPrompt {\n const instructions =\n options?.instructionsOverride ?? this.spec.instructions;\n const systemLines: string[] = [];\n if (instructions.trim().length > 0) {\n systemLines.push(instructions.trim());\n systemLines.push(\"\");\n }\n systemLines.push(\"Input fields:\");\n for (const field of this.spec.inputs) {\n systemLines.push(\n `- ${field.name} (${renderFieldType(field)}): ${field.description}`,\n );\n }\n systemLines.push(\"\");\n systemLines.push(\"Output fields:\");\n for (const field of this.spec.outputs) {\n systemLines.push(\n `- ${field.name} (${renderFieldType(field)}): ${field.description}`,\n );\n }\n systemLines.push(\"\");\n systemLines.push(\n \"Respond with each output field on its own line, formatted as:\",\n );\n systemLines.push(\"<field_name>: <value>\");\n\n const userLines: string[] = [];\n for (const field of this.spec.inputs) {\n const raw = input[field.name];\n if (raw === undefined || raw === null) {\n if (!field.optional) {\n throw new Error(\n `[Signature:${this.spec.name}] missing required input '${field.name}'`,\n );\n }\n continue;\n }\n userLines.push(`${field.name}: ${renderValue(raw)}`);\n }\n\n return {\n system: systemLines.join(\"\\n\"),\n user: userLines.join(\"\\n\"),\n };\n }\n\n /**\n * Parse an LM response into a typed output record. Multi-line field values\n * are supported — content after `<field>:` extends until the next known\n * field header or end of string.\n */\n parse(raw: string): O {\n const text = stripFences(raw);\n // Sort fields by name length descending so a field named `reasoning_full`\n // is matched before `reasoning` when both exist.\n const orderedFields = [...this.spec.outputs];\n const fieldNames = orderedFields.map((f) => f.name);\n const result: Record<string, unknown> = {};\n const fieldPositions = locateFieldHeaders(text, fieldNames);\n\n for (let i = 0; i < orderedFields.length; i += 1) {\n const field = orderedFields[i];\n if (!field) continue;\n const span = fieldPositions[field.name];\n if (!span) {\n if (field.optional) continue;\n throw new SignatureParseError(\n `missing required output field '${field.name}' in LM response`,\n field.name,\n );\n }\n const valueText = span.value;\n result[field.name] = coerceValue(field, valueText);\n }\n return result as O;\n }\n}\n\nfunction renderFieldType(field: FieldSpec): string {\n if (field.type === \"enum\") {\n const values = field.enumValues ?? [];\n return `enum: ${values.join(\" | \")}`;\n }\n return field.type;\n}\n\nfunction renderValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\nfunction stripFences(text: string): string {\n return text\n .trim()\n .replace(/^```[a-z0-9_-]*\\s*/i, \"\")\n .replace(/\\s*```$/i, \"\")\n .trim();\n}\n\ninterface FieldSpan {\n value: string;\n}\n\n/**\n * Find each declared field header in the response text and return the\n * substring between this header and the next. Headers must appear at the\n * start of a line (anchored on `^` or `\\n`). Unknown lines before the first\n * known header are ignored — some models emit prose preamble even when told\n * not to.\n */\nfunction locateFieldHeaders(\n text: string,\n fieldNames: string[],\n): Record<string, FieldSpan> {\n const positions: Array<{ name: string; start: number; valueStart: number }> =\n [];\n for (const name of fieldNames) {\n // Use a fresh RegExp per field — the field header anchors on a line start.\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const pattern = new RegExp(`(^|\\\\n)\\\\s*${escaped}\\\\s*:\\\\s*`, \"i\");\n const match = pattern.exec(text);\n if (!match) continue;\n const start = match.index + (match[1] === \"\" ? 0 : match[1].length);\n const valueStart = start + (match[0].length - (match[1] ?? \"\").length);\n positions.push({ name, start, valueStart });\n }\n positions.sort((a, b) => a.start - b.start);\n\n const out: Record<string, FieldSpan> = {};\n for (let i = 0; i < positions.length; i += 1) {\n const here = positions[i];\n if (!here) continue;\n const next = positions[i + 1];\n const end = next ? next.start : text.length;\n const value = text.slice(here.valueStart, end).trimEnd();\n out[here.name] = { value };\n }\n return out;\n}\n\nfunction coerceValue(field: FieldSpec, raw: string): unknown {\n const trimmed = raw.trim();\n switch (field.type) {\n case \"string\":\n return trimmed;\n case \"number\": {\n const num = Number(trimmed);\n if (!Number.isFinite(num)) {\n throw new SignatureParseError(\n `field '${field.name}' expected number, got '${trimmed}'`,\n field.name,\n );\n }\n return num;\n }\n case \"boolean\": {\n const lower = trimmed.toLowerCase();\n if (lower === \"true\" || lower === \"yes\" || lower === \"1\") return true;\n if (lower === \"false\" || lower === \"no\" || lower === \"0\") return false;\n throw new SignatureParseError(\n `field '${field.name}' expected boolean, got '${trimmed}'`,\n field.name,\n );\n }\n case \"enum\": {\n const values = field.enumValues ?? [];\n const match = values.find(\n (v) => v.toLowerCase() === trimmed.toLowerCase(),\n );\n if (!match) {\n throw new SignatureParseError(\n `field '${field.name}' expected one of [${values.join(\", \")}], got '${trimmed}'`,\n field.name,\n );\n }\n return match;\n }\n }\n}\n\n/**\n * Convenience constructor for signatures defined as a literal block.\n */\nexport function defineSignature<\n I extends Record<string, unknown> = Record<string, unknown>,\n O extends Record<string, unknown> = Record<string, unknown>,\n>(spec: SignatureSpec): Signature<I, O> {\n return new Signature<I, O>(spec);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,15 @@
1
+ export * from "./backends/native.js";
2
+ export * from "./cli/train.js";
3
+ export * from "./core/cli.js";
4
+ export * from "./core/index.js";
5
+ export * from "./core/privacy-filter.js";
6
+ export * from "./core/skill-scoring-cron.js";
7
+ export * from "./optimizers/index.js";
8
+ export * from "./register-runtime.js";
9
+ export * from "./routes/index.js";
10
+ export * from "./services/index.js";
11
+ export * from "./setup-routes.js";
12
+ export * from "./ui/FineTuningView.helpers.ts";
13
+ export * from "./ui/FineTuningView.js";
14
+ export * from "./ui/index.js";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ export * from "./backends/native.js";
2
+ export * from "./cli/train.js";
3
+ export * from "./core/cli.js";
4
+ export * from "./core/index.js";
5
+ export * from "./core/privacy-filter.js";
6
+ export * from "./core/skill-scoring-cron.js";
7
+ export * from "./optimizers/index.js";
8
+ export * from "./register-runtime.js";
9
+ export * from "./routes/index.js";
10
+ export * from "./services/index.js";
11
+ export * from "./setup-routes.js";
12
+ export * from "./ui/FineTuningView.helpers.js";
13
+ export * from "./ui/FineTuningView.js";
14
+ export * from "./ui/index.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./backends/native.js\";\nexport * from \"./cli/train.js\";\nexport * from \"./core/cli.js\";\nexport * from \"./core/index.js\";\nexport * from \"./core/privacy-filter.js\";\nexport * from \"./core/skill-scoring-cron.js\";\nexport * from \"./optimizers/index.js\";\nexport * from \"./register-runtime.js\";\nexport * from \"./routes/index.js\";\nexport * from \"./services/index.js\";\nexport * from \"./setup-routes.js\";\nexport * from \"./ui/FineTuningView.helpers.js\";\nexport * from \"./ui/FineTuningView.js\";\nexport * from \"./ui/index.js\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Bootstrap-fewshot optimizer.
3
+ *
4
+ * Picks the top-K examples from the dataset (ranked by reward, then by
5
+ * agreement against the baseline) and injects them as in-context
6
+ * demonstrations into the prompt. The output prompt is the baseline plus a
7
+ * `Demonstrations:` block that the runtime threads through unchanged.
8
+ *
9
+ * This is the cheapest optimizer — it does not propose new instructions, only
10
+ * conditions the existing prompt on a curated few-shot set. It is the fallback
11
+ * used when threshold-fired bootstrap runs need fast turnaround.
12
+ */
13
+ import type { LlmAdapter, OptimizationExample, OptimizerResult, PromptScorer } from "./types.js";
14
+ export interface BootstrapFewshotOptions {
15
+ /** Number of demonstrations to inject. Defaults to 5. */
16
+ k?: number;
17
+ /**
18
+ * Optional scorer override. When supplied, examples are ranked by score
19
+ * against the baseline prompt instead of by `example.reward`.
20
+ */
21
+ rankByScorer?: boolean;
22
+ }
23
+ export interface BootstrapFewshotInput {
24
+ baselinePrompt: string;
25
+ dataset: OptimizationExample[];
26
+ scorer: PromptScorer;
27
+ llm: LlmAdapter;
28
+ options?: BootstrapFewshotOptions;
29
+ }
30
+ /**
31
+ * Render a demonstration block exactly the way the runtime wires it back into
32
+ * the system prompt. Public so `OptimizedPromptService` can rebuild the
33
+ * combined prompt at load time.
34
+ */
35
+ export declare function renderDemonstrations(examples: OptimizationExample[]): string;
36
+ /**
37
+ * Combine a baseline prompt with a rendered demonstration block. Idempotent
38
+ * when `examples` is empty.
39
+ */
40
+ export declare function withDemonstrations(baseline: string, examples: OptimizationExample[]): string;
41
+ export declare function runBootstrapFewshot(input: BootstrapFewshotInput): Promise<OptimizerResult>;
42
+ //# sourceMappingURL=bootstrap-fewshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-fewshot.d.ts","sourceRoot":"","sources":["../../src/optimizers/bootstrap-fewshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EAEnB,eAAe,EACf,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,uBAAuB;IACtC,yDAAyD;IACzD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,CAAC,EAAE,uBAAuB,CAAC;CACnC;AAuCD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAY5E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,mBAAmB,EAAE,GAC9B,MAAM,CAIR;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,eAAe,CAAC,CA8B1B"}