orizu 0.5.19 → 0.5.21

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 (378) hide show
  1. package/README.md +23 -0
  2. package/dist/archive-artifacts-cli.d.ts +50 -0
  3. package/dist/archive-artifacts-cli.d.ts.map +1 -0
  4. package/dist/artifact-archive.d.ts +48 -0
  5. package/dist/artifact-archive.d.ts.map +1 -0
  6. package/dist/artifact-pull.d.ts +22 -0
  7. package/dist/artifact-pull.d.ts.map +1 -0
  8. package/dist/banner.d.ts +3 -0
  9. package/dist/banner.d.ts.map +1 -0
  10. package/dist/connectors-cli.d.ts +31 -0
  11. package/dist/connectors-cli.d.ts.map +1 -0
  12. package/dist/credentials.d.ts +46 -0
  13. package/dist/credentials.d.ts.map +1 -0
  14. package/dist/csv.d.ts +49 -0
  15. package/dist/csv.d.ts.map +1 -0
  16. package/dist/dataset-download.d.ts +6 -0
  17. package/dist/dataset-download.d.ts.map +1 -0
  18. package/dist/dataset-edit-rows.d.ts +10 -0
  19. package/dist/dataset-edit-rows.d.ts.map +1 -0
  20. package/dist/dataset-upload-snapshot.d.ts +13 -0
  21. package/dist/dataset-upload-snapshot.d.ts.map +1 -0
  22. package/dist/daytona-slice-rehearsal.d.ts +89 -0
  23. package/dist/daytona-slice-rehearsal.d.ts.map +1 -0
  24. package/dist/daytona-slice.d.ts +106 -0
  25. package/dist/daytona-slice.d.ts.map +1 -0
  26. package/dist/deploy-key-merge-core.d.ts +121 -0
  27. package/dist/deploy-key-merge-core.d.ts.map +1 -0
  28. package/dist/diff-comments-cli.d.ts +12 -0
  29. package/dist/diff-comments-cli.d.ts.map +1 -0
  30. package/dist/diff-comments-cli.js +21 -2
  31. package/dist/egress-allowlist-cli.d.ts +23 -0
  32. package/dist/egress-allowlist-cli.d.ts.map +1 -0
  33. package/dist/egress-policy.d.ts +108 -0
  34. package/dist/egress-policy.d.ts.map +1 -0
  35. package/dist/error-response.d.ts +9 -0
  36. package/dist/error-response.d.ts.map +1 -0
  37. package/dist/file-parser.d.ts +5 -0
  38. package/dist/file-parser.d.ts.map +1 -0
  39. package/dist/gepa-engine-dispatch.d.ts +9 -0
  40. package/dist/gepa-engine-dispatch.d.ts.map +1 -0
  41. package/dist/gepa-engine-dispatch.js +307 -0
  42. package/dist/gepa-python-command.d.ts +6 -0
  43. package/dist/gepa-python-command.d.ts.map +1 -0
  44. package/dist/gepa-python-command.js +26 -0
  45. package/dist/gepa-python-paths.d.ts +6 -0
  46. package/dist/gepa-python-paths.d.ts.map +1 -0
  47. package/dist/gepa-python-paths.js +42 -0
  48. package/dist/git-credential.d.ts +69 -0
  49. package/dist/git-credential.d.ts.map +1 -0
  50. package/dist/git-recovery-environment.d.ts +31 -0
  51. package/dist/git-recovery-environment.d.ts.map +1 -0
  52. package/dist/github-setup.d.ts +122 -0
  53. package/dist/github-setup.d.ts.map +1 -0
  54. package/dist/global-flags.d.ts +12 -0
  55. package/dist/global-flags.d.ts.map +1 -0
  56. package/dist/help.d.ts +46 -0
  57. package/dist/help.d.ts.map +1 -0
  58. package/dist/help.js +93 -25
  59. package/dist/hosted-boot.d.ts +273 -0
  60. package/dist/hosted-boot.d.ts.map +1 -0
  61. package/dist/hosted-bootstrap-rehearsal.d.ts +86 -0
  62. package/dist/hosted-bootstrap-rehearsal.d.ts.map +1 -0
  63. package/dist/hosted-bootstrap.d.ts +188 -0
  64. package/dist/hosted-bootstrap.d.ts.map +1 -0
  65. package/dist/hosted-broker-server.d.ts +50 -0
  66. package/dist/hosted-broker-server.d.ts.map +1 -0
  67. package/dist/hosted-git-http-server.d.ts +36 -0
  68. package/dist/hosted-git-http-server.d.ts.map +1 -0
  69. package/dist/hosted-harness-claude.d.ts +195 -0
  70. package/dist/hosted-harness-claude.d.ts.map +1 -0
  71. package/dist/hosted-harness-opencode.d.ts +227 -0
  72. package/dist/hosted-harness-opencode.d.ts.map +1 -0
  73. package/dist/hosted-harness.d.ts +118 -0
  74. package/dist/hosted-harness.d.ts.map +1 -0
  75. package/dist/hosted-harvest.d.ts +68 -0
  76. package/dist/hosted-harvest.d.ts.map +1 -0
  77. package/dist/hosted-headless.d.ts +72 -0
  78. package/dist/hosted-headless.d.ts.map +1 -0
  79. package/dist/hosted-loop-lifecycle.d.ts +206 -0
  80. package/dist/hosted-loop-lifecycle.d.ts.map +1 -0
  81. package/dist/hosted-loop.d.ts +170 -0
  82. package/dist/hosted-loop.d.ts.map +1 -0
  83. package/dist/hosted-run-event-sink.d.ts +222 -0
  84. package/dist/hosted-run-event-sink.d.ts.map +1 -0
  85. package/dist/hosted-runtime-assets.d.ts +186 -0
  86. package/dist/hosted-runtime-assets.d.ts.map +1 -0
  87. package/dist/hosted-session-cli.d.ts +258 -0
  88. package/dist/hosted-session-cli.d.ts.map +1 -0
  89. package/dist/hosted-skill-staging.d.ts +73 -0
  90. package/dist/hosted-skill-staging.d.ts.map +1 -0
  91. package/dist/http.d.ts +8 -0
  92. package/dist/http.d.ts.map +1 -0
  93. package/dist/index.d.ts +22 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +119 -129
  96. package/dist/instruction-set-gepa-launch.d.ts +3 -0
  97. package/dist/instruction-set-gepa-launch.d.ts.map +1 -0
  98. package/dist/instruction-set-gepa-launch.js +15 -0
  99. package/dist/instruction-set-loader.d.ts +6 -0
  100. package/dist/instruction-set-loader.d.ts.map +1 -0
  101. package/dist/instruction-set-loader.js +59 -0
  102. package/dist/instruction-set-manifest.d.ts +14 -0
  103. package/dist/instruction-set-manifest.d.ts.map +1 -0
  104. package/dist/instruction-set-manifest.js +162 -0
  105. package/dist/instruction-sets-cli.d.ts +40 -0
  106. package/dist/instruction-sets-cli.d.ts.map +1 -0
  107. package/dist/instruction-sets-cli.js +361 -0
  108. package/dist/json-response.d.ts +4 -0
  109. package/dist/json-response.d.ts.map +1 -0
  110. package/dist/jsonl-stream.d.ts +8 -0
  111. package/dist/jsonl-stream.d.ts.map +1 -0
  112. package/dist/kill-switch-cli.d.ts +30 -0
  113. package/dist/kill-switch-cli.d.ts.map +1 -0
  114. package/dist/loopback-serve.d.ts +25 -0
  115. package/dist/loopback-serve.d.ts.map +1 -0
  116. package/dist/manifests-cli.d.ts +22 -0
  117. package/dist/manifests-cli.d.ts.map +1 -0
  118. package/dist/markdown-report-input.d.ts +7 -0
  119. package/dist/markdown-report-input.d.ts.map +1 -0
  120. package/dist/markdown-report-input.js +15 -1
  121. package/dist/merge-job.d.ts +155 -0
  122. package/dist/merge-job.d.ts.map +1 -0
  123. package/dist/model-configs-cli.d.ts +19 -0
  124. package/dist/model-configs-cli.d.ts.map +1 -0
  125. package/dist/model-configs-cli.js +104 -0
  126. package/dist/optimization-export-cli.d.ts +19 -0
  127. package/dist/optimization-export-cli.d.ts.map +1 -0
  128. package/dist/optimizations-list-cli.d.ts +20 -0
  129. package/dist/optimizations-list-cli.d.ts.map +1 -0
  130. package/dist/optimizations-promote-cli.d.ts +8 -0
  131. package/dist/optimizations-promote-cli.d.ts.map +1 -0
  132. package/dist/optimizations-promote-cli.js +34 -0
  133. package/dist/option-validation.d.ts +15 -0
  134. package/dist/option-validation.d.ts.map +1 -0
  135. package/dist/preview-runtime.d.ts +63 -0
  136. package/dist/preview-runtime.d.ts.map +1 -0
  137. package/dist/prompt-draft-push.d.ts +60 -0
  138. package/dist/prompt-draft-push.d.ts.map +1 -0
  139. package/dist/prompt-label-cli.d.ts +11 -0
  140. package/dist/prompt-label-cli.d.ts.map +1 -0
  141. package/dist/prompt-label-cli.js +29 -0
  142. package/dist/prompt-length-wire.d.ts +28 -0
  143. package/dist/prompt-length-wire.d.ts.map +1 -0
  144. package/dist/prompt-length-wire.js +2 -2
  145. package/dist/prompt-report-cli.d.ts +10 -0
  146. package/dist/prompt-report-cli.d.ts.map +1 -0
  147. package/dist/prompt-report-cli.js +2 -2
  148. package/dist/prompt-summary-table.d.ts +15 -0
  149. package/dist/prompt-summary-table.d.ts.map +1 -0
  150. package/dist/prompt-summary-table.js +6 -0
  151. package/dist/registration-tag-warning.d.ts +32 -0
  152. package/dist/registration-tag-warning.d.ts.map +1 -0
  153. package/dist/report-comments-cli.d.ts +16 -0
  154. package/dist/report-comments-cli.d.ts.map +1 -0
  155. package/dist/report-markdown-blankness.d.ts +2 -0
  156. package/dist/report-markdown-blankness.d.ts.map +1 -0
  157. package/dist/report-markdown-blankness.js +6 -0
  158. package/dist/report-replacement-warning.d.ts +17 -0
  159. package/dist/report-replacement-warning.d.ts.map +1 -0
  160. package/dist/report-replacement-warning.js +31 -0
  161. package/dist/repository-backup-core.d.ts +225 -0
  162. package/dist/repository-backup-core.d.ts.map +1 -0
  163. package/dist/repository-recovery-manifest.d.ts +83 -0
  164. package/dist/repository-recovery-manifest.d.ts.map +1 -0
  165. package/dist/run-event-digest.d.ts +74 -0
  166. package/dist/run-event-digest.d.ts.map +1 -0
  167. package/dist/runner-dir-verify.d.ts +66 -0
  168. package/dist/runner-dir-verify.d.ts.map +1 -0
  169. package/dist/runner-instruction-set-contract.d.ts +24 -0
  170. package/dist/runner-instruction-set-contract.d.ts.map +1 -0
  171. package/dist/runner-instruction-set-contract.js +50 -0
  172. package/dist/sandbox-hygiene.d.ts +45 -0
  173. package/dist/sandbox-hygiene.d.ts.map +1 -0
  174. package/dist/sandbox-provider.d.ts +193 -0
  175. package/dist/sandbox-provider.d.ts.map +1 -0
  176. package/dist/scorer-draft-push.d.ts +50 -0
  177. package/dist/scorer-draft-push.d.ts.map +1 -0
  178. package/dist/scorers-cli.d.ts +20 -0
  179. package/dist/scorers-cli.d.ts.map +1 -0
  180. package/dist/scorers-cli.js +22 -0
  181. package/dist/scorers-verify-parity-bridge.d.ts +16 -0
  182. package/dist/scorers-verify-parity-bridge.d.ts.map +1 -0
  183. package/dist/scorers-verify-parity-bridge.js +90 -0
  184. package/dist/scorers-verify-parity.d.ts +81 -0
  185. package/dist/scorers-verify-parity.d.ts.map +1 -0
  186. package/dist/scorers-verify-parity.js +502 -0
  187. package/dist/scores-accept-cli.d.ts +21 -0
  188. package/dist/scores-accept-cli.d.ts.map +1 -0
  189. package/dist/secret-redaction.d.ts +47 -0
  190. package/dist/secret-redaction.d.ts.map +1 -0
  191. package/dist/session-timeline.d.ts +54 -0
  192. package/dist/session-timeline.d.ts.map +1 -0
  193. package/dist/setup-prompt.d.ts +5 -0
  194. package/dist/setup-prompt.d.ts.map +1 -0
  195. package/dist/skill-installer.d.ts +68 -0
  196. package/dist/skill-installer.d.ts.map +1 -0
  197. package/dist/skilled-proposer-launch.d.ts +7 -0
  198. package/dist/skilled-proposer-launch.d.ts.map +1 -0
  199. package/dist/skilled-proposer-launch.js +60 -0
  200. package/dist/smoke.d.ts +102 -0
  201. package/dist/smoke.d.ts.map +1 -0
  202. package/dist/start-intent.d.ts +12 -0
  203. package/dist/start-intent.d.ts.map +1 -0
  204. package/dist/task-assignment-manifest.d.ts +15 -0
  205. package/dist/task-assignment-manifest.d.ts.map +1 -0
  206. package/dist/task-create-error.d.ts +18 -0
  207. package/dist/task-create-error.d.ts.map +1 -0
  208. package/dist/team-connectors-cli.d.ts +29 -0
  209. package/dist/team-connectors-cli.d.ts.map +1 -0
  210. package/dist/types.d.ts +39 -0
  211. package/dist/types.d.ts.map +1 -0
  212. package/dist/vercel-sandbox-provider.d.ts +156 -0
  213. package/dist/vercel-sandbox-provider.d.ts.map +1 -0
  214. package/dist/workbench-cli.d.ts +233 -0
  215. package/dist/workbench-cli.d.ts.map +1 -0
  216. package/dist/workspace-sync.d.ts +207 -0
  217. package/dist/workspace-sync.d.ts.map +1 -0
  218. package/dist/workspace.d.ts +92 -0
  219. package/dist/workspace.d.ts.map +1 -0
  220. package/dist/zip-draft-push.d.ts +55 -0
  221. package/dist/zip-draft-push.d.ts.map +1 -0
  222. package/package.json +15 -2
  223. package/requirements/README.md +138 -0
  224. package/requirements/skilled-proposer.in +66 -0
  225. package/requirements/skilled-proposer.lock +265 -0
  226. package/scripts/build-cli-dist.mjs +30 -0
  227. package/scripts/ensure-skilled-proposer-venv.mjs +5 -0
  228. package/scripts/orizu-source-checkout.d.mts +1 -0
  229. package/scripts/orizu-source-checkout.mjs +10 -0
  230. package/scripts/refresh-skilled-proposer-lock.mjs +256 -0
  231. package/scripts/vendor-gepa-python.mjs +187 -4
  232. package/src/diff-comments-cli.ts +41 -3
  233. package/src/gepa-engine-dispatch.ts +340 -0
  234. package/src/gepa-python-command.ts +31 -0
  235. package/src/gepa-python-paths.ts +56 -0
  236. package/src/help.ts +95 -25
  237. package/src/index.ts +131 -166
  238. package/src/instruction-set-gepa-launch.ts +28 -0
  239. package/src/instruction-set-loader.ts +37 -0
  240. package/src/instruction-set-manifest.ts +120 -0
  241. package/src/instruction-sets-cli.ts +306 -0
  242. package/src/markdown-report-input.ts +19 -1
  243. package/src/model-configs-cli.ts +119 -0
  244. package/src/optimizations-promote-cli.ts +41 -0
  245. package/src/prompt-label-cli.ts +55 -0
  246. package/src/prompt-length-wire.ts +1 -1
  247. package/src/prompt-report-cli.ts +2 -2
  248. package/src/prompt-summary-table.ts +12 -0
  249. package/src/report-markdown-blankness.ts +6 -0
  250. package/src/report-replacement-warning.ts +35 -0
  251. package/src/runner-instruction-set-contract.ts +64 -0
  252. package/src/scorers-cli.ts +40 -0
  253. package/src/scorers-verify-parity-bridge.ts +90 -0
  254. package/src/scorers-verify-parity.ts +564 -0
  255. package/src/skilled-proposer-launch.ts +89 -0
  256. package/src/skilled-proposer-venv-manager.mjs +757 -0
  257. package/tsconfig.json +2 -0
  258. package/vendor/gepa-python/LICENSE +7 -0
  259. package/vendor/gepa-python/manifest.json +107 -0
  260. package/vendor/gepa-python/src/gepa/__init__.py +22 -0
  261. package/vendor/gepa-python/src/gepa/adapters/__init__.py +0 -0
  262. package/vendor/gepa-python/src/gepa/adapters/anymaths_adapter/__init__.py +1 -0
  263. package/vendor/gepa-python/src/gepa/adapters/anymaths_adapter/anymaths_adapter.py +174 -0
  264. package/vendor/gepa-python/src/gepa/adapters/confidence_adapter/__init__.py +26 -0
  265. package/vendor/gepa-python/src/gepa/adapters/confidence_adapter/confidence_adapter.py +618 -0
  266. package/vendor/gepa-python/src/gepa/adapters/confidence_adapter/scoring.py +206 -0
  267. package/vendor/gepa-python/src/gepa/adapters/default_adapter/__init__.py +0 -0
  268. package/vendor/gepa-python/src/gepa/adapters/default_adapter/default_adapter.py +206 -0
  269. package/vendor/gepa-python/src/gepa/adapters/dspy_adapter/__init__.py +0 -0
  270. package/vendor/gepa-python/src/gepa/adapters/dspy_adapter/dspy_adapter.py +525 -0
  271. package/vendor/gepa-python/src/gepa/adapters/dspy_adapter/instruction_proposal.py +500 -0
  272. package/vendor/gepa-python/src/gepa/adapters/dspy_full_program_adapter/__init__.py +6 -0
  273. package/vendor/gepa-python/src/gepa/adapters/dspy_full_program_adapter/dspy_program_proposal_signature.py +137 -0
  274. package/vendor/gepa-python/src/gepa/adapters/dspy_full_program_adapter/full_program_adapter.py +269 -0
  275. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/__init__.py +56 -0
  276. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/evaluation_metrics.py +226 -0
  277. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/generic_rag_adapter.py +496 -0
  278. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/rag_pipeline.py +238 -0
  279. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_store_interface.py +212 -0
  280. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/__init__.py +2 -0
  281. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/chroma_store.py +196 -0
  282. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/lancedb_store.py +422 -0
  283. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/milvus_store.py +409 -0
  284. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/qdrant_store.py +368 -0
  285. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/weaviate_store.py +418 -0
  286. package/vendor/gepa-python/src/gepa/adapters/langchain_adapter/__init__.py +11 -0
  287. package/vendor/gepa-python/src/gepa/adapters/langchain_adapter/langchain_adapter.py +261 -0
  288. package/vendor/gepa-python/src/gepa/adapters/mcp_adapter/__init__.py +37 -0
  289. package/vendor/gepa-python/src/gepa/adapters/mcp_adapter/mcp_adapter.py +693 -0
  290. package/vendor/gepa-python/src/gepa/adapters/mcp_adapter/mcp_client.py +364 -0
  291. package/vendor/gepa-python/src/gepa/adapters/optimize_anything_adapter/optimize_anything_adapter.py +879 -0
  292. package/vendor/gepa-python/src/gepa/adapters/terminal_bench_adapter/__init__.py +0 -0
  293. package/vendor/gepa-python/src/gepa/adapters/terminal_bench_adapter/terminal_bench_adapter.py +217 -0
  294. package/vendor/gepa-python/src/gepa/api.py +468 -0
  295. package/vendor/gepa-python/src/gepa/core/__init__.py +0 -0
  296. package/vendor/gepa-python/src/gepa/core/adapter.py +227 -0
  297. package/vendor/gepa-python/src/gepa/core/callbacks.py +551 -0
  298. package/vendor/gepa-python/src/gepa/core/data_loader.py +74 -0
  299. package/vendor/gepa-python/src/gepa/core/engine.py +1025 -0
  300. package/vendor/gepa-python/src/gepa/core/result.py +271 -0
  301. package/vendor/gepa-python/src/gepa/core/state.py +706 -0
  302. package/vendor/gepa-python/src/gepa/examples/__init__.py +0 -0
  303. package/vendor/gepa-python/src/gepa/examples/aime.py +24 -0
  304. package/vendor/gepa-python/src/gepa/examples/anymaths-bench/eval_default.py +111 -0
  305. package/vendor/gepa-python/src/gepa/examples/anymaths-bench/train_anymaths.py +177 -0
  306. package/vendor/gepa-python/src/gepa/examples/mcp_adapter/__init__.py +4 -0
  307. package/vendor/gepa-python/src/gepa/examples/mcp_adapter/mcp_optimization_example.py +456 -0
  308. package/vendor/gepa-python/src/gepa/examples/rag_adapter/__init__.py +9 -0
  309. package/vendor/gepa-python/src/gepa/examples/rag_adapter/rag_optimization.py +824 -0
  310. package/vendor/gepa-python/src/gepa/examples/terminal-bench/train_terminus.py +161 -0
  311. package/vendor/gepa-python/src/gepa/gepa_utils.py +117 -0
  312. package/vendor/gepa-python/src/gepa/gskill/__init__.py +1 -0
  313. package/vendor/gepa-python/src/gepa/gskill/gskill/__init__.py +0 -0
  314. package/vendor/gepa-python/src/gepa/gskill/gskill/cost_tracker.py +194 -0
  315. package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/__init__.py +0 -0
  316. package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/claude_code.py +1117 -0
  317. package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/claude_code_skills.py +613 -0
  318. package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/mini_swe_agent.py +440 -0
  319. package/vendor/gepa-python/src/gepa/gskill/gskill/experiment_logger.py +367 -0
  320. package/vendor/gepa-python/src/gepa/gskill/gskill/swe_fitness_fn.py +209 -0
  321. package/vendor/gepa-python/src/gepa/gskill/gskill/swe_harness.py +352 -0
  322. package/vendor/gepa-python/src/gepa/gskill/gskill/train_optimize_anything.py +830 -0
  323. package/vendor/gepa-python/src/gepa/image.py +104 -0
  324. package/vendor/gepa-python/src/gepa/lm.py +261 -0
  325. package/vendor/gepa-python/src/gepa/logging/__init__.py +0 -0
  326. package/vendor/gepa-python/src/gepa/logging/experiment_tracker.py +457 -0
  327. package/vendor/gepa-python/src/gepa/logging/logger.py +75 -0
  328. package/vendor/gepa-python/src/gepa/logging/utils.py +130 -0
  329. package/vendor/gepa-python/src/gepa/optimize_anything.py +1701 -0
  330. package/vendor/gepa-python/src/gepa/proposer/__init__.py +0 -0
  331. package/vendor/gepa-python/src/gepa/proposer/base.py +53 -0
  332. package/vendor/gepa-python/src/gepa/proposer/merge.py +403 -0
  333. package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/__init__.py +0 -0
  334. package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/base.py +64 -0
  335. package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/reflection_lm.py +178 -0
  336. package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/reflective_mutation.py +641 -0
  337. package/vendor/gepa-python/src/gepa/py.typed +0 -0
  338. package/vendor/gepa-python/src/gepa/strategies/__init__.py +0 -0
  339. package/vendor/gepa-python/src/gepa/strategies/acceptance.py +66 -0
  340. package/vendor/gepa-python/src/gepa/strategies/batch_sampler.py +103 -0
  341. package/vendor/gepa-python/src/gepa/strategies/candidate_selector.py +82 -0
  342. package/vendor/gepa-python/src/gepa/strategies/component_selector.py +36 -0
  343. package/vendor/gepa-python/src/gepa/strategies/eval_policy.py +64 -0
  344. package/vendor/gepa-python/src/gepa/strategies/instruction_proposal.py +153 -0
  345. package/vendor/gepa-python/src/gepa/strategies/proposal_sampling.py +128 -0
  346. package/vendor/gepa-python/src/gepa/strategies/proposal_selection.py +84 -0
  347. package/vendor/gepa-python/src/gepa/utils/__init__.py +63 -0
  348. package/vendor/gepa-python/src/gepa/utils/code_execution.py +626 -0
  349. package/vendor/gepa-python/src/gepa/utils/stdio_capture.py +145 -0
  350. package/vendor/gepa-python/src/gepa/utils/stop_condition.py +230 -0
  351. package/vendor/gepa-python/src/gepa/visualization.py +359 -0
  352. package/vendor/orizu-gepa/pyproject.toml +18 -0
  353. package/vendor/orizu-gepa/src/orizu_gepa_connector/__init__.py +9 -0
  354. package/vendor/orizu-gepa/src/orizu_gepa_connector/__main__.py +5 -0
  355. package/vendor/orizu-gepa/src/orizu_gepa_connector/adapter.py +138 -0
  356. package/vendor/orizu-gepa/src/orizu_gepa_connector/callbacks.py +666 -0
  357. package/vendor/orizu-gepa/src/orizu_gepa_connector/cli.py +7 -0
  358. package/vendor/orizu-gepa/src/orizu_gepa_connector/engine.py +269 -0
  359. package/vendor/orizu-gepa/src/orizu_gepa_connector/instruction_set_loader.py +52 -0
  360. package/vendor/orizu-gepa/src/orizu_gepa_connector/preflight.py +64 -0
  361. package/vendor/orizu-gepa/src/orizu_gepa_connector/reflection.py +186 -0
  362. package/vendor/orizu-gepa/src/orizu_gepa_connector/runtime.py +721 -0
  363. package/vendor/orizu-gepa/src/orizu_gepa_connector/skilled_proposer_bridge.py +381 -0
  364. package/vendor/orizu-gepa/src/orizu_gepa_connector/stop_conditions.py +55 -0
  365. package/vendor/orizu-gepa/src/orizu_gepa_connector/translator.py +203 -0
  366. package/vendor/orizu-gepa-python/pyproject.toml +1 -1
  367. package/vendor/orizu-gepa-python/src/orizu_gepa/cli.py +1 -0
  368. package/vendor/orizu-gepa-python/src/orizu_gepa/client.py +52 -7
  369. package/vendor/orizu-gepa-python/src/orizu_gepa/local_log.py +52 -0
  370. package/vendor/orizu-gepa-python/src/orizu_gepa/optimizer.py +10 -5
  371. package/vendor/orizu-gepa-python/src/orizu_gepa/reflection.py +323 -68
  372. package/vendor/orizu-gepa-python/src/orizu_gepa/runner.py +207 -13
  373. package/vendor/skills/orizu-cli/SKILL.md +3 -1
  374. package/vendor/skills/orizu-cli/references/cli-reference.md +85 -1
  375. package/vendor/skills/orizu-cli/references/migrate-existing-gepa-setup.md +303 -0
  376. package/vendor/skills/orizu-cli/references/optimization-reports.md +1 -1
  377. package/vendor/skills/orizu-cli/references/optimization-with-gepa.md +26 -1
  378. package/vendor/skills/orizu-cli/references/prompt-control-plane.md +113 -10
@@ -0,0 +1,525 @@
1
+ """
2
+ This file provides an example adapter allowing GEPA to optimize text components of DSPy programs (instructions and prompts).
3
+ The most up-to-date version of this file is in the DSPy repository: https://github.com/stanfordnlp/dspy/blob/main/dspy/teleprompt/gepa/gepa_utils.py
4
+ """
5
+
6
+ import json
7
+ import logging
8
+ import random
9
+ from typing import Any, Callable, Protocol, TypedDict
10
+
11
+ import dspy
12
+ from dspy.adapters.chat_adapter import ChatAdapter
13
+ from dspy.adapters.types import History
14
+ from dspy.adapters.types.base_type import Type
15
+ from dspy.adapters.types.tool import Tool
16
+ from dspy.evaluate import Evaluate
17
+ from dspy.primitives import Example, Module, Prediction
18
+ from dspy.teleprompt.bootstrap_trace import FailedPrediction, TraceData
19
+
20
+ from gepa import EvaluationBatch, GEPAAdapter
21
+ from gepa.core.adapter import ProposalFn
22
+ from gepa.strategies.instruction_proposal import InstructionProposalSignature
23
+
24
+ logger = logging.getLogger(__name__)
25
+
26
+
27
+ # Constants for module optimization
28
+ TOOL_MODULE_PREFIX = "tool_module"
29
+
30
+
31
+ class LoggerAdapter:
32
+ def __init__(self, logger: logging.Logger):
33
+ self.logger = logger
34
+
35
+ def log(self, x: str):
36
+ self.logger.info(x)
37
+
38
+
39
+ DSPyTrace = list[tuple[Any, dict[str, Any], Prediction]]
40
+
41
+ ReflectiveExample = TypedDict(
42
+ "ReflectiveExample",
43
+ {
44
+ "Inputs": dict[str, Any],
45
+ "Generated Outputs": dict[str, Any] | str,
46
+ "Feedback": str,
47
+ },
48
+ )
49
+
50
+ ReflectiveExample.__doc__ = """
51
+ Structure of individual examples in the reflective dataset.
52
+
53
+ Each example contains the predictor inputs, generated outputs, and feedback from evaluation.
54
+ """
55
+
56
+
57
+ class ScoreWithFeedback(Prediction):
58
+ score: float
59
+ feedback: str | None = None
60
+ subscores: dict[str, float] | None = None
61
+
62
+
63
+ class PredictorFeedbackFn(Protocol):
64
+ def __call__(
65
+ self,
66
+ predictor_output: dict[str, Any],
67
+ predictor_inputs: dict[str, Any],
68
+ module_inputs: Example,
69
+ module_outputs: Prediction,
70
+ captured_trace: DSPyTrace,
71
+ ) -> ScoreWithFeedback:
72
+ """
73
+ This function is used to provide feedback to a specific predictor.
74
+ The function is called with the following arguments:
75
+ - predictor_output: The output of the predictor.
76
+ - predictor_inputs: The inputs to the predictor.
77
+ - module_inputs: The inputs to the whole program --- `Example`.
78
+ - module_outputs: The outputs of the whole program --- `Prediction`.
79
+ - captured_trace: The trace of the module's execution.
80
+ # Shape of trace is: [predictor_invocation_idx -> Tuple[Predictor, PredictorInputs, Prediction]]
81
+ # Each trace is a tuple of (Predictor, PredictorInputs, Prediction)
82
+
83
+ The function should return a `ScoreWithFeedback` object.
84
+ The feedback is a string that is used to guide the evolution of the predictor.
85
+ """
86
+ ...
87
+
88
+
89
+ class DspyAdapter(GEPAAdapter[Example, TraceData, Prediction]):
90
+ def __init__(
91
+ self,
92
+ student_module,
93
+ metric_fn: Callable,
94
+ feedback_map: dict[str, Callable],
95
+ failure_score=0.0,
96
+ num_threads: int | None = None,
97
+ add_format_failure_as_feedback: bool = False,
98
+ rng: random.Random | None = None,
99
+ reflection_lm=None,
100
+ custom_instruction_proposer: "ProposalFn | None" = None,
101
+ warn_on_score_mismatch: bool = True,
102
+ enable_tool_optimization: bool = False,
103
+ reflection_minibatch_size: int | None = None,
104
+ ):
105
+ self.student = student_module
106
+ self.metric_fn = metric_fn
107
+ self.feedback_map = feedback_map
108
+ self.failure_score = failure_score
109
+ self.num_threads = num_threads
110
+ self.add_format_failure_as_feedback = add_format_failure_as_feedback
111
+ self.rng = rng or random.Random(0)
112
+ self.reflection_lm = reflection_lm
113
+ self.custom_instruction_proposer = custom_instruction_proposer
114
+ self.warn_on_score_mismatch = warn_on_score_mismatch
115
+ self.enable_tool_optimization = enable_tool_optimization
116
+ self.reflection_minibatch_size = reflection_minibatch_size
117
+
118
+ def propose_new_texts(
119
+ self,
120
+ candidate: dict[str, str],
121
+ reflective_dataset: dict[str, list[dict[str, Any]]],
122
+ components_to_update: list[str],
123
+ ) -> dict[str, str]:
124
+ reflection_lm = self.reflection_lm or dspy.settings.lm
125
+ # If custom proposer provided, override everything with custom proposer
126
+ if self.custom_instruction_proposer:
127
+ with dspy.context(lm=reflection_lm):
128
+ return self.custom_instruction_proposer(
129
+ candidate=candidate,
130
+ reflective_dataset=reflective_dataset,
131
+ components_to_update=components_to_update,
132
+ )
133
+
134
+ # Otherwise, route to appropriate proposers
135
+ # Separate into two categories: tool-using modules (ReAct) vs regular instructions
136
+ # TODO: Add generic tool module support when DSPy trace lineage is improved
137
+ tool_components = []
138
+ instruction_components = []
139
+
140
+ for c in components_to_update:
141
+ if c.startswith(TOOL_MODULE_PREFIX):
142
+ tool_components.append(c)
143
+ else:
144
+ instruction_components.append(c)
145
+
146
+ results: dict[str, str] = {}
147
+
148
+ with dspy.context(lm=reflection_lm):
149
+ # Handle regular instruction components
150
+ if instruction_components:
151
+ for name in instruction_components:
152
+ base_instruction = candidate[name]
153
+ dataset_with_feedback = reflective_dataset[name]
154
+ results[name] = InstructionProposalSignature.run(
155
+ lm=(lambda x: self.stripped_lm_call(x)[0]),
156
+ input_dict={
157
+ "current_instruction_doc": base_instruction,
158
+ "dataset_with_feedback": dataset_with_feedback,
159
+ },
160
+ )["new_instruction"]
161
+
162
+ # Handle ReAct modules
163
+ if tool_components:
164
+ from gepa.adapters.dspy_adapter.instruction_proposal import ToolProposer
165
+
166
+ tool_proposer = ToolProposer()
167
+ results.update(
168
+ tool_proposer(
169
+ candidate=candidate,
170
+ reflective_dataset=reflective_dataset,
171
+ components_to_update=tool_components,
172
+ )
173
+ )
174
+
175
+ return results
176
+
177
+ def build_program(self, candidate: dict[str, str]):
178
+ new_prog = self.student.deepcopy()
179
+
180
+ # Start with plain string instructions from candidate
181
+ predictor_candidates = {k: v for k, v in candidate.items() if not k.startswith(TOOL_MODULE_PREFIX)}
182
+
183
+ tool_candidates = {}
184
+ if self.enable_tool_optimization:
185
+ for key, value in candidate.items():
186
+ if not key.startswith(TOOL_MODULE_PREFIX):
187
+ continue
188
+
189
+ config = json.loads(value)
190
+
191
+ for pred_name, instruction in config.items():
192
+ if isinstance(instruction, str):
193
+ predictor_candidates[pred_name] = instruction
194
+
195
+ tool_candidates.update(config.get("tools", {}))
196
+
197
+ # Update predictor instructions
198
+ for name, pred in new_prog.named_predictors():
199
+ if name in predictor_candidates:
200
+ pred.signature = pred.signature.with_instructions(predictor_candidates[name])
201
+
202
+ # Update tool descriptions
203
+ if tool_candidates:
204
+ self._update_tool_descriptions(new_prog, tool_candidates)
205
+
206
+ return new_prog
207
+
208
+ def _update_tool_descriptions(self, program: Module, tool_candidates: dict[str, Any]) -> None:
209
+ all_tools = self._collect_tools(program)
210
+
211
+ for tool_name, tool_config in tool_candidates.items():
212
+ if tool_name not in all_tools:
213
+ logger.warning(
214
+ f"Skipping updates for tool:'{tool_name}' because it cannot be detected on the student program."
215
+ )
216
+ continue
217
+
218
+ tool = all_tools[tool_name]
219
+
220
+ # Update tool description if present.
221
+ if tool_config.get("desc"):
222
+ tool.desc = tool_config["desc"]
223
+
224
+ # Update arg descriptions if present.
225
+ args_schema = tool_config.get("args") or {}
226
+ for arg_name, arg_schema in args_schema.items():
227
+ if arg_schema.get("description") is not None:
228
+ tool.args[arg_name]["description"] = arg_schema["description"]
229
+
230
+ def _collect_tools(self, module: Module) -> dict[str, Tool]:
231
+ """Recursively collect all Tool instances from a module and its sub-modules."""
232
+ all_tools = {}
233
+ visited = set()
234
+
235
+ def _collect_from_attribute(attr_value):
236
+ if isinstance(attr_value, Tool):
237
+ all_tools[attr_value.name] = attr_value
238
+ elif isinstance(attr_value, dspy.Module):
239
+ _traverse(attr_value)
240
+ elif isinstance(attr_value, list | dict):
241
+ items = attr_value if isinstance(attr_value, list) else attr_value.values()
242
+ for item in items:
243
+ if isinstance(item, Tool):
244
+ all_tools[item.name] = item
245
+
246
+ def _traverse(current_module):
247
+ if id(current_module) in visited or not hasattr(current_module, "__dict__"):
248
+ return
249
+ visited.add(id(current_module))
250
+
251
+ for attr_value in current_module.__dict__.values():
252
+ _collect_from_attribute(attr_value)
253
+
254
+ _traverse(module)
255
+ return all_tools
256
+
257
+ def evaluate(self, batch, candidate, capture_traces=False):
258
+ program = self.build_program(candidate)
259
+ callback_metadata = (
260
+ {"metric_key": "eval_full"}
261
+ if self.reflection_minibatch_size is None or len(batch) > self.reflection_minibatch_size
262
+ else {"disable_logging": True}
263
+ )
264
+
265
+ outputs: list[Prediction] = []
266
+ scores: list[float] = []
267
+ subscores: list[dict[str, float]] = []
268
+ trajs: list[TraceData] | None = None
269
+
270
+ if capture_traces:
271
+ # bootstrap_trace_data-like flow with trace capture
272
+ from dspy.teleprompt import bootstrap_trace as bootstrap_trace_module
273
+
274
+ trajs = bootstrap_trace_module.bootstrap_trace_data(
275
+ program=program,
276
+ dataset=batch,
277
+ metric=self.metric_fn,
278
+ num_threads=self.num_threads,
279
+ raise_on_error=False,
280
+ capture_failed_parses=True,
281
+ failure_score=self.failure_score,
282
+ format_failure_score=self.failure_score,
283
+ callback_metadata=callback_metadata,
284
+ )
285
+ for t in trajs:
286
+ outputs.append(t["prediction"])
287
+ score_val, subscore_dict = self._extract_score_and_subscores(t.get("score"))
288
+ if score_val is None:
289
+ score_val = self.failure_score
290
+ scores.append(score_val)
291
+ subscores.append(subscore_dict)
292
+ else:
293
+ evaluator = Evaluate(
294
+ devset=batch,
295
+ metric=self.metric_fn,
296
+ num_threads=self.num_threads,
297
+ return_all_scores=True,
298
+ return_outputs=True,
299
+ failure_score=self.failure_score,
300
+ provide_traceback=True,
301
+ max_errors=len(batch) * 100,
302
+ callback_metadata=callback_metadata,
303
+ )
304
+ res = evaluator(program)
305
+ outputs = [r[1] for r in res.results]
306
+ raw_scores = [r[2] for r in res.results]
307
+ for raw_score in raw_scores:
308
+ score_val, subscore_dict = self._extract_score_and_subscores(raw_score)
309
+ if score_val is None:
310
+ score_val = self.failure_score
311
+ scores.append(score_val)
312
+ subscores.append(subscore_dict)
313
+
314
+ has_subscores = any(subscores)
315
+ # Map DSPy "subscores" into GEPA objective score payloads.
316
+ return EvaluationBatch(
317
+ outputs=outputs,
318
+ scores=scores,
319
+ trajectories=trajs,
320
+ objective_scores=subscores if has_subscores else None,
321
+ )
322
+
323
+ @staticmethod
324
+ def _extract_score_and_subscores(score_obj: Any) -> tuple[float | None, dict[str, float]]:
325
+ """Extract score and subscores from various score object formats."""
326
+ if score_obj is None:
327
+ return None, {}
328
+ if isinstance(score_obj, dict):
329
+ score_val = score_obj.get("score")
330
+ subscores = score_obj.get("subscores") or {}
331
+ return score_val, dict(subscores)
332
+ if hasattr(score_obj, "score"):
333
+ score_val = getattr(score_obj, "score", None)
334
+ subscores = getattr(score_obj, "subscores", None) or {}
335
+ return score_val, dict(subscores)
336
+ try:
337
+ return float(score_obj), {}
338
+ except (TypeError, ValueError):
339
+ return None, {}
340
+
341
+ def make_reflective_dataset(
342
+ self, candidate, eval_batch, components_to_update
343
+ ) -> dict[str, list[ReflectiveExample]]:
344
+ program = self.build_program(candidate)
345
+
346
+ ret_d: dict[str, list[ReflectiveExample]] = {}
347
+
348
+ for pred_name in components_to_update:
349
+ # Extract predictor name from component key
350
+ if pred_name.startswith(TOOL_MODULE_PREFIX):
351
+ target_name = pred_name.removeprefix(f"{TOOL_MODULE_PREFIX}:")
352
+ else:
353
+ target_name = pred_name
354
+
355
+ # Find the predictor object
356
+ module = None
357
+ for name, m in program.named_predictors():
358
+ if name == target_name:
359
+ module = m
360
+ break
361
+ assert module is not None, f"Predictor not found: {target_name}"
362
+
363
+ # Create reflective examples from traces
364
+ items: list[ReflectiveExample] = []
365
+ for data in eval_batch.trajectories or []:
366
+ trace = data["trace"]
367
+ example = data["example"]
368
+ prediction = data["prediction"]
369
+ module_score_obj = data.get("score")
370
+ module_score, _ = self._extract_score_and_subscores(module_score_obj)
371
+
372
+ trace_instances = [t for t in trace if t[0].signature.equals(module.signature)]
373
+ if not self.add_format_failure_as_feedback:
374
+ trace_instances = [t for t in trace_instances if not isinstance(t[2], FailedPrediction)]
375
+ if len(trace_instances) == 0:
376
+ continue
377
+
378
+ selected = None
379
+ for t in trace_instances:
380
+ if isinstance(t[2], FailedPrediction):
381
+ selected = t
382
+ break
383
+
384
+ if selected is None:
385
+ if isinstance(prediction, FailedPrediction):
386
+ continue
387
+ selected = self.rng.choice(trace_instances)
388
+
389
+ inputs = selected[1]
390
+ outputs = selected[2]
391
+
392
+ new_inputs = {}
393
+ new_outputs = {}
394
+
395
+ contains_history = False
396
+ history_key_name = None
397
+ for input_key, input_val in inputs.items():
398
+ if isinstance(input_val, History):
399
+ contains_history = True
400
+ assert history_key_name is None
401
+ history_key_name = input_key
402
+
403
+ if contains_history:
404
+ s = "```json\n"
405
+ for i, message in enumerate(inputs[history_key_name].messages):
406
+ s += f" {i}: {message}\n"
407
+ s += "```"
408
+ new_inputs["Context"] = s
409
+
410
+ for input_key, input_val in inputs.items():
411
+ if contains_history and input_key == history_key_name:
412
+ continue
413
+
414
+ if isinstance(input_val, Type) and self.custom_instruction_proposer is not None:
415
+ # Keep original object - will be properly formatted when sent to reflection LM
416
+ new_inputs[input_key] = input_val
417
+ else:
418
+ new_inputs[input_key] = str(input_val)
419
+
420
+ if isinstance(outputs, FailedPrediction):
421
+ s = "Couldn't parse the output as per the expected output format. The model's raw response was:\n"
422
+ s += "```\n"
423
+ s += outputs.completion_text + "\n"
424
+ s += "```\n\n"
425
+ new_outputs = s
426
+ else:
427
+ for output_key, output_val in outputs.items():
428
+ new_outputs[output_key] = str(output_val)
429
+
430
+ d = {"Inputs": new_inputs, "Generated Outputs": new_outputs}
431
+ if isinstance(outputs, FailedPrediction):
432
+ adapter = ChatAdapter()
433
+ structure_instruction = ""
434
+ for dd in adapter.format(module.signature, [], {}):
435
+ structure_instruction += dd["role"] + ": " + dd["content"] + "\n"
436
+ d["Feedback"] = "Your output failed to parse. Follow this structure:\n" + structure_instruction
437
+ # d['score'] = self.failure_score
438
+ else:
439
+ # Use actual predictor name for feedback lookup
440
+ feedback_fn = self.feedback_map[target_name]
441
+ fb = feedback_fn(
442
+ predictor_output=outputs,
443
+ predictor_inputs=inputs,
444
+ module_inputs=example,
445
+ module_outputs=prediction,
446
+ captured_trace=trace,
447
+ )
448
+ if isinstance(fb, dict):
449
+ feedback_score = fb.get("score")
450
+ feedback_text = fb.get("feedback", "")
451
+ else:
452
+ feedback_score = getattr(fb, "score", None)
453
+ feedback_text = getattr(fb, "feedback", "")
454
+ d["Feedback"] = feedback_text
455
+ if module_score is not None and feedback_score is not None:
456
+ if abs(feedback_score - module_score) > 1e-8:
457
+ if self.warn_on_score_mismatch:
458
+ logger.warning(
459
+ "The score returned by the metric with pred_name is different from the overall metric score. This can indicate 2 things: Either the metric is non-deterministic (e.g., LLM-as-judge, Semantic score, etc.) or the metric returned a score specific to pred_name that differs from the module level score. Currently, GEPA does not support predictor level scoring (support coming soon), and only requires a feedback text to be provided, which can be specific to the predictor or program level. GEPA will ignore the differing score returned, and instead use module level score. You can safely ignore this warning if using a semantic metric, however, if this mismatch is caused due to predictor scoring, please return module-level scores. To disable this warning, set warn_on_score_mismatch=False."
460
+ )
461
+ self.warn_on_score_mismatch = False
462
+
463
+ items.append(d)
464
+
465
+ if len(items) == 0:
466
+ logger.warning(f" No valid reflective examples found for {pred_name}")
467
+ continue
468
+
469
+ ret_d[pred_name] = items
470
+
471
+ if len(ret_d) == 0:
472
+ raise Exception("No valid predictions found for any module.")
473
+
474
+ return ret_d
475
+
476
+ # Always return strings from the LM outputs
477
+ # Even when it returns a dict with e.g., "text" and "reasoning" fields
478
+ def stripped_lm_call(self, x: str) -> list[str]:
479
+ raw_outputs = self.reflection_lm(x)
480
+ outputs = []
481
+ for raw_output in raw_outputs:
482
+ if type(raw_output) == str:
483
+ outputs.append(raw_output)
484
+ elif type(raw_output) == dict:
485
+ if "text" not in raw_output:
486
+ raise KeyError("Missing 'text' field in the output from the base LM!")
487
+ outputs.append(raw_output["text"])
488
+ else:
489
+ raise TypeError("Unexpected output type from the base LM! Expected str or dict")
490
+
491
+ return outputs
492
+
493
+ # TODO: Generic tool module optimization - pending DSPy trace lineage improvements
494
+ # Currently only ReAct modules are supported for tool optimization.
495
+ # Re-enable _update_candidate_tools when DSPy provides better tool→trace lineage.
496
+ #
497
+ # def _update_candidate_tools(self, candidate, program, trajectories) -> None:
498
+ # """Extract dspy.Tool objects from traces for tool modules and update candidate["tools"]."""
499
+ # ...
500
+
501
+ # TODO: The current DSPyAdapter implementation uses the GEPA default propose_new_texts.
502
+ # We can potentially override this, to use the instruction proposal similar to MIPROv2.
503
+
504
+ # def propose_new_texts(
505
+ # self,
506
+ # candidate: Dict[str, str],
507
+ # reflective_dataset: Dict[str, List[Dict[str, Any]]],
508
+ # components_to_update: List[str]
509
+ # ) -> Dict[str, str]:
510
+ # if self.adapter.propose_new_texts is not None:
511
+ # return self.adapter.propose_new_texts(candidate, reflective_dataset, components_to_update)
512
+
513
+ # from .instruction_proposal import InstructionProposalSignature
514
+ # new_texts: Dict[str, str] = {}
515
+ # for name in components_to_update:
516
+ # base_instruction = candidate[name]
517
+ # dataset_with_feedback = reflective_dataset[name]
518
+ # new_texts[name] = InstructionProposalSignature.run(
519
+ # lm=self.reflection_lm,
520
+ # input_dict={
521
+ # "current_instruction_doc": base_instruction,
522
+ # "dataset_with_feedback": dataset_with_feedback
523
+ # }
524
+ # )['new_instruction']
525
+ # return new_texts