agentevolve-optimizer 0.5.0__py3-none-any.whl

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 (414) hide show
  1. agent_evolve/__init__.py +722 -0
  2. agent_evolve/agentic.py +2800 -0
  3. agent_evolve/api.py +767 -0
  4. agent_evolve/application/__init__.py +1580 -0
  5. agent_evolve/application/action_allocation.py +744 -0
  6. agent_evolve/application/action_allocation_frame.py +347 -0
  7. agent_evolve/application/action_allocation_frame_commit.py +185 -0
  8. agent_evolve/application/action_allocation_frame_commit_v3.py +184 -0
  9. agent_evolve/application/action_allocation_frame_v3.py +338 -0
  10. agent_evolve/application/action_archive_value.py +497 -0
  11. agent_evolve/application/action_evidence_consistency.py +455 -0
  12. agent_evolve/application/action_forecast_partitioning.py +1471 -0
  13. agent_evolve/application/action_metric_projection.py +211 -0
  14. agent_evolve/application/action_role_value.py +680 -0
  15. agent_evolve/application/action_score_authorities.py +363 -0
  16. agent_evolve/application/action_structural_signature.py +116 -0
  17. agent_evolve/application/action_target_realization.py +402 -0
  18. agent_evolve/application/agentic_evolution.py +7734 -0
  19. agent_evolve/application/agentic_portfolio_residual_expert.py +835 -0
  20. agent_evolve/application/anchor_residual_identification.py +463 -0
  21. agent_evolve/application/archive_conditioned_action_target.py +208 -0
  22. agent_evolve/application/artifact_journal.py +246 -0
  23. agent_evolve/application/artifact_replay.py +347 -0
  24. agent_evolve/application/budgeted_optimizer.py +1828 -0
  25. agent_evolve/application/calibrated_campaign.py +485 -0
  26. agent_evolve/application/calibrated_current_prefix_forecast_opportunity.py +322 -0
  27. agent_evolve/application/calibrated_positive_gain_opportunity.py +1581 -0
  28. agent_evolve/application/campaign_capacity_recourse.py +254 -0
  29. agent_evolve/application/campaign_contextual_outcomes.py +119 -0
  30. agent_evolve/application/campaign_diagnostic_blocks.py +930 -0
  31. agent_evolve/application/campaign_evidence_registry.py +262 -0
  32. agent_evolve/application/campaign_execution.py +2537 -0
  33. agent_evolve/application/campaign_generation_audit.py +942 -0
  34. agent_evolve/application/campaign_learning.py +1812 -0
  35. agent_evolve/application/campaign_learning_runtime.py +1977 -0
  36. agent_evolve/application/campaign_search_phase.py +227 -0
  37. agent_evolve/application/campaign_selector_context_extension.py +220 -0
  38. agent_evolve/application/campaign_variation_envelope.py +649 -0
  39. agent_evolve/application/campaign_variation_trace.py +451 -0
  40. agent_evolve/application/candidate_archive_consequence.py +128 -0
  41. agent_evolve/application/causal_opportunity_portfolio_gate.py +385 -0
  42. agent_evolve/application/composite_outcome_updater.py +145 -0
  43. agent_evolve/application/composition_portfolio_selection.py +363 -0
  44. agent_evolve/application/concurrent_stage.py +144 -0
  45. agent_evolve/application/contextual_action_allocation.py +181 -0
  46. agent_evolve/application/contextual_campaign_outcomes.py +267 -0
  47. agent_evolve/application/contextual_campaign_planning.py +1366 -0
  48. agent_evolve/application/contextual_delayed_credit.py +651 -0
  49. agent_evolve/application/contextual_search_controller.py +2374 -0
  50. agent_evolve/application/current_prefix_forecast_opportunity.py +714 -0
  51. agent_evolve/application/decision_metric_projection.py +112 -0
  52. agent_evolve/application/derived_action_semantics.py +129 -0
  53. agent_evolve/application/detailed_evaluation.py +449 -0
  54. agent_evolve/application/earned_lineage.py +1011 -0
  55. agent_evolve/application/effective_choice_audit.py +484 -0
  56. agent_evolve/application/empirical_consequence_calibration.py +908 -0
  57. agent_evolve/application/evaluation_accounting.py +325 -0
  58. agent_evolve/application/evaluation_cache.py +199 -0
  59. agent_evolve/application/evaluation_escrow.py +547 -0
  60. agent_evolve/application/evaluation_recourse.py +253 -0
  61. agent_evolve/application/event_recorder.py +151 -0
  62. agent_evolve/application/evolution_campaign.py +1840 -0
  63. agent_evolve/application/executable_hypothesis.py +323 -0
  64. agent_evolve/application/factorial_branch_pilot.py +772 -0
  65. agent_evolve/application/finite_acquisition_capacity_recourse.py +672 -0
  66. agent_evolve/application/finite_acquisition_residual_expert.py +373 -0
  67. agent_evolve/application/finite_acquisition_variation_envelope.py +802 -0
  68. agent_evolve/application/finite_action_hypothesis_semantics.py +446 -0
  69. agent_evolve/application/finite_action_selection.py +188 -0
  70. agent_evolve/application/finite_action_set.py +306 -0
  71. agent_evolve/application/finite_action_transition.py +537 -0
  72. agent_evolve/application/finite_variation_eligibility.py +296 -0
  73. agent_evolve/application/forecast_geometry_portfolio.py +799 -0
  74. agent_evolve/application/forecast_opportunity_shadow_calibration.py +316 -0
  75. agent_evolve/application/front_proximity_admission.py +311 -0
  76. agent_evolve/application/front_proximity_parent_basis.py +458 -0
  77. agent_evolve/application/frozen_hurdle_score.py +659 -0
  78. agent_evolve/application/g3_causal_screen.py +2257 -0
  79. agent_evolve/application/g3_causal_validation.py +1046 -0
  80. agent_evolve/application/g3_postseal_curation.py +818 -0
  81. agent_evolve/application/gated_agentic_generator.py +205 -0
  82. agent_evolve/application/generation_feedback.py +293 -0
  83. agent_evolve/application/generative_proposal_journal.py +185 -0
  84. agent_evolve/application/geometry_conditional_elasticity.py +453 -0
  85. agent_evolve/application/global_wave_action_allocation.py +1151 -0
  86. agent_evolve/application/head_mass_conditional_seat.py +268 -0
  87. agent_evolve/application/identifiable_reflection_evidence.py +1147 -0
  88. agent_evolve/application/identifiable_reflection_learning.py +395 -0
  89. agent_evolve/application/identifiable_reflection_request.py +364 -0
  90. agent_evolve/application/in_memory_residual_archive.py +341 -0
  91. agent_evolve/application/insight_memory.py +1804 -0
  92. agent_evolve/application/live_runtime_manifest.py +758 -0
  93. agent_evolve/application/llm_task_queue.py +769 -0
  94. agent_evolve/application/matched_finite_action_block.py +409 -0
  95. agent_evolve/application/materialized_action_broker.py +2328 -0
  96. agent_evolve/application/materialized_action_constraints.py +83 -0
  97. agent_evolve/application/materialized_variation.py +211 -0
  98. agent_evolve/application/multi_option_evolution.py +1536 -0
  99. agent_evolve/application/outcome_adaptive_action_racing.py +2827 -0
  100. agent_evolve/application/outcome_adaptive_residual_campaign_runtime.py +580 -0
  101. agent_evolve/application/outcome_adaptive_residual_portfolio_evolution.py +3671 -0
  102. agent_evolve/application/outcome_conditioned_portfolio_selection.py +1374 -0
  103. agent_evolve/application/outcome_relation.py +193 -0
  104. agent_evolve/application/paired_allocation_comparison.py +241 -0
  105. agent_evolve/application/paired_block_schedule.py +127 -0
  106. agent_evolve/application/parent_measurement.py +226 -0
  107. agent_evolve/application/pareto_archive.py +811 -0
  108. agent_evolve/application/portfolio_campaign_runtime.py +4739 -0
  109. agent_evolve/application/portfolio_evolution.py +2950 -0
  110. agent_evolve/application/portfolio_hypothesis_observations.py +814 -0
  111. agent_evolve/application/portfolio_memory_attribution.py +581 -0
  112. agent_evolve/application/portfolio_memory_dose.py +788 -0
  113. agent_evolve/application/portfolio_memory_matched_control.py +938 -0
  114. agent_evolve/application/portfolio_memory_transfer.py +297 -0
  115. agent_evolve/application/portfolio_optimization_memory.py +363 -0
  116. agent_evolve/application/portfolio_outcome_feedback.py +1613 -0
  117. agent_evolve/application/portfolio_projection.py +335 -0
  118. agent_evolve/application/portfolio_recombination.py +2032 -0
  119. agent_evolve/application/post_evolution_reflection.py +834 -0
  120. agent_evolve/application/postcommit_rank_authority.py +245 -0
  121. agent_evolve/application/precommitted_portfolio_racing.py +2762 -0
  122. agent_evolve/application/prequential_archive_opportunity_calibration.py +1154 -0
  123. agent_evolve/application/prequential_residual_exploration.py +343 -0
  124. agent_evolve/application/prequential_score_portfolio.py +954 -0
  125. agent_evolve/application/projections.py +292 -0
  126. agent_evolve/application/protected_action_committee.py +1027 -0
  127. agent_evolve/application/protected_branch_pilot.py +376 -0
  128. agent_evolve/application/protected_current_prefix_forecast_opportunity.py +552 -0
  129. agent_evolve/application/provider_replay.py +910 -0
  130. agent_evolve/application/rank_balanced_causal_pilot.py +1372 -0
  131. agent_evolve/application/recombination_residual_expert.py +403 -0
  132. agent_evolve/application/reflection_workflow.py +571 -0
  133. agent_evolve/application/region_conditional_credit.py +911 -0
  134. agent_evolve/application/residual_campaign_runtime.py +531 -0
  135. agent_evolve/application/residual_headroom_campaign_runtime.py +459 -0
  136. agent_evolve/application/residual_headroom_ledger.py +1544 -0
  137. agent_evolve/application/residual_learning_transaction.py +396 -0
  138. agent_evolve/application/residual_portfolio_evolution.py +1228 -0
  139. agent_evolve/application/residual_reachability.py +749 -0
  140. agent_evolve/application/residual_stage_credit.py +499 -0
  141. agent_evolve/application/same_prefix_paired_audit.py +1580 -0
  142. agent_evolve/application/semantic_coverage_score_portfolio.py +838 -0
  143. agent_evolve/application/sequential_lineage_allocation.py +1017 -0
  144. agent_evolve/application/sequential_market_replay.py +1395 -0
  145. agent_evolve/application/sequential_residual_campaign_runtime.py +305 -0
  146. agent_evolve/application/sequential_residual_portfolio_evolution.py +940 -0
  147. agent_evolve/application/single_score_action_allocation.py +299 -0
  148. agent_evolve/application/source_exposure_allocation.py +906 -0
  149. agent_evolve/application/staged_memory.py +210 -0
  150. agent_evolve/application/stratified_cold_start_allocation.py +732 -0
  151. agent_evolve/application/support_guarded_hurdle_score.py +549 -0
  152. agent_evolve/application/target_conditioned_action_forecast.py +595 -0
  153. agent_evolve/application/target_conditioned_campaign.py +566 -0
  154. agent_evolve/application/treatment_assignment.py +201 -0
  155. agent_evolve/application/trusted_objective_evidence.py +217 -0
  156. agent_evolve/application/two_stage_action_evolution.py +1131 -0
  157. agent_evolve/application/v8lite_allocation_policy.py +1083 -0
  158. agent_evolve/application/v9_candidate_policy.py +1303 -0
  159. agent_evolve/bootstrap.py +108 -0
  160. agent_evolve/campaign_presets.py +517 -0
  161. agent_evolve/campaign_profiles.py +452 -0
  162. agent_evolve/campaign_variation_topology.py +288 -0
  163. agent_evolve/campaign_workload.py +950 -0
  164. agent_evolve/cli.py +797 -0
  165. agent_evolve/contract.py +241 -0
  166. agent_evolve/core/__init__.py +91 -0
  167. agent_evolve/core/action_semantics.py +411 -0
  168. agent_evolve/core/authored.py +105 -0
  169. agent_evolve/core/formatting.py +286 -0
  170. agent_evolve/core/optimization_semantics.py +324 -0
  171. agent_evolve/core/problem.py +167 -0
  172. agent_evolve/core/results.py +323 -0
  173. agent_evolve/core/stats.py +70 -0
  174. agent_evolve/core/telemetry.py +100 -0
  175. agent_evolve/domain/__init__.py +89 -0
  176. agent_evolve/domain/artifact.py +162 -0
  177. agent_evolve/domain/durable_text.py +68 -0
  178. agent_evolve/domain/event.py +1454 -0
  179. agent_evolve/domain/finite_action_set.py +426 -0
  180. agent_evolve/domain/finite_variation.py +526 -0
  181. agent_evolve/domain/generative_emission.py +559 -0
  182. agent_evolve/domain/ids.py +163 -0
  183. agent_evolve/domain/inline_text.py +106 -0
  184. agent_evolve/domain/insight.py +27 -0
  185. agent_evolve/domain/lineage.py +737 -0
  186. agent_evolve/domain/llm_task_queue.py +960 -0
  187. agent_evolve/domain/outcome.py +96 -0
  188. agent_evolve/domain/patch.py +854 -0
  189. agent_evolve/domain/typed_json.py +542 -0
  190. agent_evolve/domain/variation_space.py +158 -0
  191. agent_evolve/driver.py +1014 -0
  192. agent_evolve/harness/__init__.py +29 -0
  193. agent_evolve/harness/base.py +242 -0
  194. agent_evolve/harness/directives.py +163 -0
  195. agent_evolve/harness/generative_seal.py +479 -0
  196. agent_evolve/harness/registry.py +41 -0
  197. agent_evolve/infrastructure/__init__.py +39 -0
  198. agent_evolve/infrastructure/artifacts/__init__.py +6 -0
  199. agent_evolve/infrastructure/artifacts/_verification.py +67 -0
  200. agent_evolve/infrastructure/artifacts/filesystem.py +343 -0
  201. agent_evolve/infrastructure/artifacts/in_memory.py +73 -0
  202. agent_evolve/infrastructure/asyncio_runtime.py +109 -0
  203. agent_evolve/infrastructure/authored_runtime.py +188 -0
  204. agent_evolve/infrastructure/authored_worker.py +171 -0
  205. agent_evolve/infrastructure/clock.py +53 -0
  206. agent_evolve/infrastructure/events/__init__.py +6 -0
  207. agent_evolve/infrastructure/events/_validation.py +89 -0
  208. agent_evolve/infrastructure/events/in_memory.py +56 -0
  209. agent_evolve/infrastructure/events/jsonl.py +193 -0
  210. agent_evolve/infrastructure/exception_provenance.py +215 -0
  211. agent_evolve/infrastructure/ids.py +118 -0
  212. agent_evolve/infrastructure/lineage_codec.py +1836 -0
  213. agent_evolve/infrastructure/outcome_adaptive_phase_journal.py +170 -0
  214. agent_evolve/infrastructure/residual_headroom_journal.py +221 -0
  215. agent_evolve/infrastructure/resource_lease.py +370 -0
  216. agent_evolve/infrastructure/sanitization/__init__.py +8 -0
  217. agent_evolve/infrastructure/sanitization/strict_json.py +484 -0
  218. agent_evolve/infrastructure/sequential_phase_journal.py +170 -0
  219. agent_evolve/infrastructure/stream_liveness.py +383 -0
  220. agent_evolve/infrastructure/subprocess_boundary.py +136 -0
  221. agent_evolve/integrations/__init__.py +1 -0
  222. agent_evolve/integrations/botorch/__init__.py +28 -0
  223. agent_evolve/integrations/botorch/finite_qlognehvi.py +190 -0
  224. agent_evolve/integrations/botorch/finite_qlognehvi_batch.py +155 -0
  225. agent_evolve/integrations/botorch/finite_qlognehvi_batch_identity.py +20 -0
  226. agent_evolve/integrations/botorch/finite_qlognehvi_batch_worker.py +55 -0
  227. agent_evolve/integrations/botorch/finite_qlognehvi_identity.py +22 -0
  228. agent_evolve/integrations/botorch/finite_qlognehvi_worker.py +55 -0
  229. agent_evolve/integrations/botorch/subprocess_qlognehvi.py +261 -0
  230. agent_evolve/integrations/botorch/subprocess_qlognehvi_batch.py +273 -0
  231. agent_evolve/integrations/completion.py +242 -0
  232. agent_evolve/integrations/pydantic_ai/__init__.py +441 -0
  233. agent_evolve/integrations/pydantic_ai/action_forecast.py +1068 -0
  234. agent_evolve/integrations/pydantic_ai/agentic_generator.py +2308 -0
  235. agent_evolve/integrations/pydantic_ai/async_generator.py +1604 -0
  236. agent_evolve/integrations/pydantic_ai/boundary_codec.py +1526 -0
  237. agent_evolve/integrations/pydantic_ai/calibrated_portfolio_campaign.py +756 -0
  238. agent_evolve/integrations/pydantic_ai/calibrated_portfolio_selection.py +7537 -0
  239. agent_evolve/integrations/pydantic_ai/campaign_acquisition.py +609 -0
  240. agent_evolve/integrations/pydantic_ai/execution_binding.py +138 -0
  241. agent_evolve/integrations/pydantic_ai/forecast_geometry_action_committee.py +217 -0
  242. agent_evolve/integrations/pydantic_ai/harness.py +159 -0
  243. agent_evolve/integrations/pydantic_ai/heterogeneous_model_execution.py +306 -0
  244. agent_evolve/integrations/pydantic_ai/hierarchical_residual_adaptive_semantic_view.py +179 -0
  245. agent_evolve/integrations/pydantic_ai/json_schema_dialect.py +108 -0
  246. agent_evolve/integrations/pydantic_ai/materialized_hierarchical_residual_expert.py +952 -0
  247. agent_evolve/integrations/pydantic_ai/materialized_portfolio_judge.py +520 -0
  248. agent_evolve/integrations/pydantic_ai/model_execution_profile.py +659 -0
  249. agent_evolve/integrations/pydantic_ai/outbound_request_manifest.py +1170 -0
  250. agent_evolve/integrations/pydantic_ai/portable_residual_consequence_features.py +575 -0
  251. agent_evolve/integrations/pydantic_ai/portfolio_selection.py +422 -0
  252. agent_evolve/integrations/pydantic_ai/progress_aware_openrouter.py +416 -0
  253. agent_evolve/integrations/pydantic_ai/provider_attempt_join.py +1523 -0
  254. agent_evolve/integrations/pydantic_ai/provider_free_calibrated_runner.py +607 -0
  255. agent_evolve/integrations/pydantic_ai/queued_runner.py +2634 -0
  256. agent_evolve/integrations/pydantic_ai/reconciled_residual_reachability.py +1417 -0
  257. agent_evolve/integrations/pydantic_ai/residual_forecast_geometry.py +445 -0
  258. agent_evolve/integrations/pydantic_ai/residual_reachability.py +674 -0
  259. agent_evolve/integrations/pydantic_ai/residual_semantic_cells.py +239 -0
  260. agent_evolve/integrations/pydantic_ai/sealed_output_replay.py +1068 -0
  261. agent_evolve/integrations/pydantic_ai/semantic_coverage_residual_portfolio.py +770 -0
  262. agent_evolve/integrations/pydantic_ai/semantic_decision_replay.py +383 -0
  263. agent_evolve/integrations/pydantic_ai/support_adaptive_residual_portfolio.py +135 -0
  264. agent_evolve/integrations/pydantic_ai/trusted_residual_prompt_context.py +143 -0
  265. agent_evolve/integrations/pydantic_ai/validated_openrouter_model.py +107 -0
  266. agent_evolve/integrations/pymoo_adapter.py +242 -0
  267. agent_evolve/policies/__init__.py +17 -0
  268. agent_evolve/policies/check.py +469 -0
  269. agent_evolve/policies/emit_scaffold.py +451 -0
  270. agent_evolve/policies/feedback/__init__.py +37 -0
  271. agent_evolve/policies/feedback/held_out_asn.py +1325 -0
  272. agent_evolve/policies/genetic.py +607 -0
  273. agent_evolve/policies/llm_backoff.py +183 -0
  274. agent_evolve/policies/llm_chooser.py +226 -0
  275. agent_evolve/policies/llm_generator.py +1760 -0
  276. agent_evolve/policies/llm_init.py +267 -0
  277. agent_evolve/policies/llm_operator.py +109 -0
  278. agent_evolve/policies/llm_prior.py +194 -0
  279. agent_evolve/policies/llm_surrogate.py +334 -0
  280. agent_evolve/policies/measurement_evidence.py +704 -0
  281. agent_evolve/policies/memory/__init__.py +223 -0
  282. agent_evolve/policies/memory/balanced_subset_blocks.py +707 -0
  283. agent_evolve/policies/memory/compatibility_matching.py +593 -0
  284. agent_evolve/policies/memory/global_falsification.py +1841 -0
  285. agent_evolve/policies/memory/prompt_shape.py +503 -0
  286. agent_evolve/policies/memory/randomized_subset.py +714 -0
  287. agent_evolve/policies/memory/staged_causal.py +1270 -0
  288. agent_evolve/policies/memory/treatment_compliance.py +759 -0
  289. agent_evolve/policies/objective_resolution/__init__.py +17 -0
  290. agent_evolve/policies/objective_resolution/fixed_grid.py +364 -0
  291. agent_evolve/policies/operator_portfolio.py +407 -0
  292. agent_evolve/policies/reguidance.py +1133 -0
  293. agent_evolve/policies/reward/__init__.py +83 -0
  294. agent_evolve/policies/reward/affine_candidate_consequence.py +156 -0
  295. agent_evolve/policies/reward/affine_candidate_consequence_3d.py +159 -0
  296. agent_evolve/policies/reward/affine_hypervolume.py +490 -0
  297. agent_evolve/policies/reward/affine_hypervolume_3d.py +567 -0
  298. agent_evolve/policies/reward/contextual_marginal_utility.py +318 -0
  299. agent_evolve/policies/reward/frozen_archive.py +360 -0
  300. agent_evolve/policies/reward/frozen_wave_archive.py +368 -0
  301. agent_evolve/policies/search_state.py +208 -0
  302. agent_evolve/policies/selection/__init__.py +345 -0
  303. agent_evolve/policies/selection/acquisition_certified_slate.py +684 -0
  304. agent_evolve/policies/selection/affine_frontier_context.py +330 -0
  305. agent_evolve/policies/selection/affine_frontier_target.py +473 -0
  306. agent_evolve/policies/selection/archive_elite.py +1346 -0
  307. agent_evolve/policies/selection/calibrated_portfolio_binding.py +640 -0
  308. agent_evolve/policies/selection/calibrated_slate.py +1394 -0
  309. agent_evolve/policies/selection/calibrated_slate_codec.py +579 -0
  310. agent_evolve/policies/selection/common_candidate_pool.py +685 -0
  311. agent_evolve/policies/selection/diagnostic_sampling.py +319 -0
  312. agent_evolve/policies/selection/disjoint_pairs.py +479 -0
  313. agent_evolve/policies/selection/elite_explorer.py +719 -0
  314. agent_evolve/policies/selection/finite_action.py +187 -0
  315. agent_evolve/policies/selection/finite_option_prompt_projection.py +377 -0
  316. agent_evolve/policies/selection/finite_palette_evidence.py +247 -0
  317. agent_evolve/policies/selection/forecast_calibration.py +922 -0
  318. agent_evolve/policies/selection/frontier_probe_slate.py +814 -0
  319. agent_evolve/policies/selection/frozen_archive_pairs.py +762 -0
  320. agent_evolve/policies/selection/full_support_slate.py +91 -0
  321. agent_evolve/policies/selection/meaningful_direction.py +240 -0
  322. agent_evolve/policies/selection/memory_dose_feasibility.py +259 -0
  323. agent_evolve/policies/selection/model_anchored_slate.py +826 -0
  324. agent_evolve/policies/selection/phenotype_recourse.py +979 -0
  325. agent_evolve/policies/selection/proposal_support.py +368 -0
  326. agent_evolve/policies/selection/random_portfolio.py +254 -0
  327. agent_evolve/policies/selection/regret_bounded_slate.py +1084 -0
  328. agent_evolve/policies/selection/residual_frontier.py +463 -0
  329. agent_evolve/policies/selection/residual_frontier_target.py +605 -0
  330. agent_evolve/policies/selection/structural_posterior_slate.py +1571 -0
  331. agent_evolve/policies/selection/target_conditioned_allocator.py +648 -0
  332. agent_evolve/policies/selection/target_conditioned_features.py +812 -0
  333. agent_evolve/policies/selection/target_conditioned_prequential.py +1527 -0
  334. agent_evolve/policies/selection/task_keyed_palette.py +906 -0
  335. agent_evolve/policies/semantics.py +147 -0
  336. agent_evolve/policies/structure.py +362 -0
  337. agent_evolve/policies/structured_output_budget.py +62 -0
  338. agent_evolve/policies/surrogate.py +696 -0
  339. agent_evolve/policies/variation/__init__.py +1 -0
  340. agent_evolve/policies/variation/compositional_finite_catalog.py +426 -0
  341. agent_evolve/policies/variation/crossover_inheritance.py +575 -0
  342. agent_evolve/policies/variation/disjoint_recombination.py +611 -0
  343. agent_evolve/policies/variation/exact_composition_capacity.py +214 -0
  344. agent_evolve/policies/variation/exact_parent_crossover.py +950 -0
  345. agent_evolve/policies/variation/multiscale_restart_catalog.py +372 -0
  346. agent_evolve/policies/variation/source_union_finite_catalog.py +403 -0
  347. agent_evolve/policies/variation/typed_patch.py +1981 -0
  348. agent_evolve/policies/weighted_prior.py +394 -0
  349. agent_evolve/ports/__init__.py +383 -0
  350. agent_evolve/ports/action_allocation.py +733 -0
  351. agent_evolve/ports/action_allocation_frame.py +1153 -0
  352. agent_evolve/ports/action_allocation_frame_commit.py +294 -0
  353. agent_evolve/ports/action_allocation_frame_commit_v3.py +432 -0
  354. agent_evolve/ports/action_allocation_frame_v3.py +995 -0
  355. agent_evolve/ports/action_forecast.py +1568 -0
  356. agent_evolve/ports/action_metric_projection.py +165 -0
  357. agent_evolve/ports/agentic_generator.py +1561 -0
  358. agent_evolve/ports/archive_context.py +136 -0
  359. agent_evolve/ports/artifact_sanitizer.py +44 -0
  360. agent_evolve/ports/artifact_store.py +225 -0
  361. agent_evolve/ports/clock.py +13 -0
  362. agent_evolve/ports/contextual_search_allocation.py +827 -0
  363. agent_evolve/ports/decision_metric_projection.py +258 -0
  364. agent_evolve/ports/event_store.py +55 -0
  365. agent_evolve/ports/executable_hypothesis.py +557 -0
  366. agent_evolve/ports/finite_acquisition.py +377 -0
  367. agent_evolve/ports/finite_acquisition_batch.py +296 -0
  368. agent_evolve/ports/finite_acquisition_batch_json.py +164 -0
  369. agent_evolve/ports/finite_acquisition_json.py +247 -0
  370. agent_evolve/ports/finite_acquisition_space.py +168 -0
  371. agent_evolve/ports/finite_action_selection.py +348 -0
  372. agent_evolve/ports/finite_action_set.py +256 -0
  373. agent_evolve/ports/frontier_target.py +396 -0
  374. agent_evolve/ports/generation_failure.py +43 -0
  375. agent_evolve/ports/hard_feasibility.py +233 -0
  376. agent_evolve/ports/id_factory.py +34 -0
  377. agent_evolve/ports/llm_task_queue.py +93 -0
  378. agent_evolve/ports/objective_resolution.py +419 -0
  379. agent_evolve/ports/paired_allocation_comparison.py +401 -0
  380. agent_evolve/ports/paired_block_schedule.py +475 -0
  381. agent_evolve/ports/parent_measurement.py +336 -0
  382. agent_evolve/ports/portfolio_memory_dose.py +643 -0
  383. agent_evolve/ports/portfolio_selection.py +3169 -0
  384. agent_evolve/ports/postcommit_rank_authority.py +467 -0
  385. agent_evolve/ports/presented_action_evidence.py +794 -0
  386. agent_evolve/ports/resource_lease.py +162 -0
  387. agent_evolve/ports/structured_generator.py +734 -0
  388. agent_evolve/ports/structured_output_budget.py +120 -0
  389. agent_evolve/ports/subprocess_boundary.py +138 -0
  390. agent_evolve/ports/treatment_assignment.py +466 -0
  391. agent_evolve/ports/variation_catalog.py +76 -0
  392. agent_evolve/ports/variation_source.py +226 -0
  393. agent_evolve/proposal_mode.py +157 -0
  394. agent_evolve/proposers/__init__.py +10 -0
  395. agent_evolve/proposers/random_proposer.py +188 -0
  396. agent_evolve/provider_accounting.py +163 -0
  397. agent_evolve/py.typed +0 -0
  398. agent_evolve/reference_method.py +1570 -0
  399. agent_evolve/session/__init__.py +11 -0
  400. agent_evolve/session/authorship.py +864 -0
  401. agent_evolve/session/evaluate.py +236 -0
  402. agent_evolve/session/fidelity.py +237 -0
  403. agent_evolve/session/genetic_loop.py +742 -0
  404. agent_evolve/session/loop.py +803 -0
  405. agent_evolve/session/screening.py +671 -0
  406. agent_evolve/settings.py +376 -0
  407. agent_evolve/workload_kit.py +368 -0
  408. agent_evolve/workload_prompt.py +398 -0
  409. agentevolve_optimizer-0.5.0.dist-info/METADATA +599 -0
  410. agentevolve_optimizer-0.5.0.dist-info/RECORD +414 -0
  411. agentevolve_optimizer-0.5.0.dist-info/WHEEL +5 -0
  412. agentevolve_optimizer-0.5.0.dist-info/entry_points.txt +2 -0
  413. agentevolve_optimizer-0.5.0.dist-info/licenses/LICENSE +21 -0
  414. agentevolve_optimizer-0.5.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,29 @@
1
+ """The Harness port and registry (LLM-runtime-agnostic)."""
2
+
3
+ from agent_evolve.harness.base import (
4
+ OP_NAMES,
5
+ CallObserver,
6
+ Harness,
7
+ HarnessBase,
8
+ HarnessContext,
9
+ HarnessOutputError,
10
+ LLMConfig,
11
+ build_context,
12
+ )
13
+ from agent_evolve.harness.directives import DefaultDirectives, Directives
14
+ from agent_evolve.harness.registry import HarnessRegistry, harness_registry
15
+
16
+ __all__ = [
17
+ "OP_NAMES",
18
+ "CallObserver",
19
+ "DefaultDirectives",
20
+ "Directives",
21
+ "Harness",
22
+ "HarnessBase",
23
+ "HarnessContext",
24
+ "HarnessOutputError",
25
+ "HarnessRegistry",
26
+ "LLMConfig",
27
+ "build_context",
28
+ "harness_registry",
29
+ ]
@@ -0,0 +1,242 @@
1
+ """The Harness port: the switchable LLM seam the loop depends on.
2
+
3
+ A harness turns the per-op inputs into **typed** candidates / insights. The loop
4
+ never imports a concrete LLM runtime; it talks only to this interface. Concrete
5
+ adapters live under ``agent_evolve.integrations``.
6
+
7
+ Output typing is the headline: candidate ops return ``list[CandidateConfig]``
8
+ (structured), insight ops return ``list[str]`` / ``str`` — no JSON-in-a-string.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import abc
14
+ import inspect
15
+ from dataclasses import dataclass, field
16
+ from typing import Any, Callable, Dict, List, Optional, Protocol, Sequence, runtime_checkable
17
+
18
+ from pydantic import BaseModel, ConfigDict
19
+
20
+ from agent_evolve.core.problem import ObjectiveSpec
21
+ from agent_evolve.harness.directives import DefaultDirectives, Directives
22
+
23
+ #: The fixed set of LLM operations exposed by every harness implementation.
24
+ OP_NAMES: tuple[str, ...] = (
25
+ "generate_initial",
26
+ "regenerate",
27
+ "generate_offspring",
28
+ "regenerate_offspring",
29
+ "failure_insights",
30
+ "constraint_instruction",
31
+ "performance_insights",
32
+ )
33
+
34
+
35
+ class HarnessOutputError(RuntimeError):
36
+ """Raised when a harness call yields no usable candidates (triggers loop retry)."""
37
+
38
+
39
+ @dataclass(frozen=True)
40
+ class LLMConfig:
41
+ """Model selection and call parameters, identical across harnesses."""
42
+
43
+ model: str
44
+ temperature: Optional[float] = None
45
+ retries: int = 3
46
+ extra: Dict[str, Any] = field(default_factory=dict)
47
+
48
+
49
+ @dataclass(frozen=True)
50
+ class HarnessContext:
51
+ """Per-run context bound into the harness before any call."""
52
+
53
+ objectives: Sequence[ObjectiveSpec]
54
+ search_space_desc: str
55
+ candidate_model: Optional[type] = None
56
+ constraints_description: str = ""
57
+ #: Prompt wording; defaults to the generic backbone directives.
58
+ directives: Directives = field(default_factory=DefaultDirectives)
59
+
60
+
61
+ class _AnyCandidate(BaseModel):
62
+ """Permissive fallback candidate schema for problems without a candidate_model."""
63
+
64
+ model_config = ConfigDict(extra="allow")
65
+
66
+
67
+ def build_context(ctx: "HarnessContext") -> str:
68
+ """Compose the static per-run context block (objectives/search space + constraints).
69
+
70
+ This is shared *data* prep, not prompt wording — each harness composes its own
71
+ prompts. The candidate schema is conveyed by the typed output, not restated here.
72
+ """
73
+ parts = [ctx.search_space_desc]
74
+ if ctx.constraints_description:
75
+ parts.append(f"DOMAIN CONSTRAINTS:\n{ctx.constraints_description}")
76
+ return "\n\n".join(parts)
77
+
78
+
79
+ @runtime_checkable
80
+ class Harness(Protocol):
81
+ """The switchable LLM interface the loop depends on."""
82
+
83
+ id: str
84
+
85
+ def bind(self, ctx: HarnessContext, cfg: LLMConfig) -> None: ...
86
+ def generate_initial(self, n: int) -> List[Dict[str, Any]]: ...
87
+ def regenerate(
88
+ self, failed_str: str, n: int, constraint_instruction: str, performance_insights: str
89
+ ) -> List[Dict[str, Any]]: ...
90
+ def generate_offspring(
91
+ self, pareto_str: str, n: int, constraint_instruction: str, performance_insights: str
92
+ ) -> List[Dict[str, Any]]: ...
93
+ def regenerate_offspring(
94
+ self, failed_str: str, pareto_str: str, n: int,
95
+ constraint_instruction: str, performance_insights: str,
96
+ ) -> List[Dict[str, Any]]: ...
97
+ def failure_insights(self, failed_str: str, n_failed: int) -> List[str]: ...
98
+ def constraint_instruction(self, failed_str: str, previous: Optional[str] = None) -> str: ...
99
+ def performance_insights(
100
+ self, stats_str: str, pareto_str: str, previous: Optional[str] = None
101
+ ) -> str: ...
102
+
103
+
104
+ CallObserver = Callable[[Dict[str, Any]], None]
105
+
106
+
107
+ class HarnessContractError(TypeError):
108
+ """A harness subclass does not satisfy the operations it inherits."""
109
+
110
+
111
+ def _positional_arity(func: Any) -> Optional[tuple]:
112
+ """Return ``(required, maximum_or_None)`` positional arity, ignoring ``self``.
113
+
114
+ ``None`` maximum means ``*args``, which accepts anything.
115
+ """
116
+ try:
117
+ params = list(inspect.signature(func).parameters.values())
118
+ except (TypeError, ValueError): # pragma: no cover - builtins, C functions
119
+ return None
120
+ if params and params[0].name in ("self", "cls"):
121
+ params = params[1:]
122
+ required = 0
123
+ maximum: Optional[int] = 0
124
+ for p in params:
125
+ if p.kind is inspect.Parameter.VAR_POSITIONAL:
126
+ return (required, None)
127
+ if p.kind in (inspect.Parameter.POSITIONAL_ONLY, inspect.Parameter.POSITIONAL_OR_KEYWORD):
128
+ maximum = (maximum or 0) + 1
129
+ if p.default is inspect.Parameter.empty:
130
+ required += 1
131
+ return (required, maximum)
132
+
133
+
134
+ class HarnessBase(abc.ABC):
135
+ """Shared lifecycle + result normalization for harness adapters.
136
+
137
+ **The operations are enforced, not merely declared.** This class used to
138
+ inherit ``abc.ABC`` while marking nothing abstract, so it promised a
139
+ contract and checked none of it: a subclass could omit an operation, or
140
+ define one with the wrong arity, and the only symptom was a ``TypeError``
141
+ from inside the optimization loop after the run had already started. A
142
+ shipped proposer did exactly that, three times.
143
+
144
+ ``__init_subclass__`` now checks, at class-definition time, that every
145
+ operation in :data:`OP_NAMES` exists and accepts the number of positional
146
+ arguments the loop passes it. A wrong signature is a failure to import the
147
+ module that declares it, which is when it is cheap to fix.
148
+ """
149
+
150
+ id: str = "base"
151
+
152
+ def __init_subclass__(cls, **kwargs: Any) -> None:
153
+ super().__init_subclass__(**kwargs)
154
+ # An intermediate base may legitimately be partial; it declares so.
155
+ if getattr(cls, "__abstract_harness__", False):
156
+ return
157
+ problems: List[str] = []
158
+ for op in OP_NAMES:
159
+ impl = getattr(cls, op, None)
160
+ if impl is None or not callable(impl):
161
+ problems.append(f"{op}: not implemented")
162
+ continue
163
+ expected = _positional_arity(getattr(Harness, op, None))
164
+ actual = _positional_arity(impl)
165
+ if expected is None or actual is None:
166
+ continue
167
+ need, _ = expected
168
+ takes_min, takes_max = actual
169
+ if takes_max is not None and takes_max < need:
170
+ problems.append(
171
+ f"{op}: the loop passes {need} positional argument(s), "
172
+ f"this accepts at most {takes_max}"
173
+ )
174
+ elif takes_min > need:
175
+ problems.append(
176
+ f"{op}: requires {takes_min} positional argument(s), "
177
+ f"the loop passes {need}"
178
+ )
179
+ if problems:
180
+ raise HarnessContractError(
181
+ f"{cls.__name__} does not satisfy the Harness contract:\n "
182
+ + "\n ".join(problems)
183
+ )
184
+
185
+ def __init__(self) -> None:
186
+ self._ctx: Optional[HarnessContext] = None
187
+ self._cfg: Optional[LLMConfig] = None
188
+ self._observer: Optional[CallObserver] = None
189
+ self.context: str = ""
190
+ self.candidate_type: type = _AnyCandidate
191
+
192
+ def bind(self, ctx: HarnessContext, cfg: LLMConfig) -> None:
193
+ self._ctx = ctx
194
+ self._cfg = cfg
195
+ self.context = build_context(ctx)
196
+ self.candidate_type = ctx.candidate_model or _AnyCandidate
197
+ self._on_bind(ctx, cfg)
198
+
199
+ def set_call_observer(self, observer: Optional[CallObserver]) -> None:
200
+ self._observer = observer
201
+
202
+ @property
203
+ def cfg(self) -> LLMConfig:
204
+ if self._cfg is None:
205
+ raise RuntimeError("Harness used before bind()")
206
+ return self._cfg
207
+
208
+ @property
209
+ def directives(self) -> Directives:
210
+ if self._ctx is None:
211
+ raise RuntimeError("Harness used before bind()")
212
+ return self._ctx.directives
213
+
214
+ # -- subclass hook ---------------------------------------------------
215
+ def _on_bind(self, ctx: HarnessContext, cfg: LLMConfig) -> None:
216
+ """Optional adapter-specific setup."""
217
+
218
+ # -- normalization helpers ------------------------------------------
219
+ def _observe(self, op: str) -> None:
220
+ if self._observer is not None:
221
+ self._observer({"kind": "llm_call", "op": op, "harness": self.id,
222
+ "model": self.cfg.model})
223
+
224
+ @staticmethod
225
+ def _to_dicts(objs: Any, op: str) -> List[Dict[str, Any]]:
226
+ if not isinstance(objs, (list, tuple)) or not objs:
227
+ raise HarnessOutputError(f"{op}: model returned no candidates")
228
+ out: List[Dict[str, Any]] = []
229
+ for o in objs:
230
+ if isinstance(o, BaseModel):
231
+ out.append(o.model_dump())
232
+ elif isinstance(o, dict):
233
+ out.append(o)
234
+ else:
235
+ raise HarnessOutputError(f"{op}: unexpected candidate type {type(o).__name__}")
236
+ return out
237
+
238
+ @staticmethod
239
+ def _to_str_list(objs: Any) -> List[str]:
240
+ if isinstance(objs, (list, tuple)):
241
+ return [str(x) for x in objs]
242
+ return [str(objs)]
@@ -0,0 +1,163 @@
1
+ """The Directives port: problem-supplied prompt text.
2
+
3
+ A ``Directives`` provider supplies *what to say* to the LLM while harness
4
+ adapters supply *how to run it*. The backbone ships
5
+ :class:`DefaultDirectives` (generic wording) so examples and new problems work
6
+ out of the box; a problem can expose its own ``directives`` attribute to fully
7
+ own its prompts.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from typing import Protocol, runtime_checkable
13
+
14
+ #: Chain-of-thought instruction, paired with a Proposal(thought_process,
15
+ #: candidates) output type so the model reasons before committing.
16
+ #:
17
+ #: This wording used to instruct the model to "split its factors across the
18
+ #: levels so every per-dimension product is EXACTLY correct" -- the constraint
19
+ #: of the one problem the backbone was first written against, shipped as if it
20
+ #: were generic. Every other problem received an instruction about a structure
21
+ #: it does not have. ``DefaultDirectives`` is the *problem-agnostic* wording by
22
+ #: definition; anything specific to one search space belongs in that problem's
23
+ #: own ``Directives``, which is exactly what the port is for.
24
+ _COT = (
25
+ " First, in thought_process, reason step by step as a mental draft: state what the "
26
+ "measurements so far imply about which parts of the configuration matter, decide what "
27
+ "to change and by how much, and check each proposal against the stated constraints and "
28
+ "the declared schema. Then fill candidates."
29
+ )
30
+
31
+
32
+ @runtime_checkable
33
+ class Directives(Protocol):
34
+ """Prompt wording for each operation."""
35
+
36
+ def compose_initial(self, context: str, n_candidates: int) -> str: ...
37
+ def compose_regenerate(
38
+ self, context: str, failed_str: str, n_candidates: int,
39
+ constraint_instruction: str, performance_insights: str,
40
+ ) -> str: ...
41
+ def compose_offspring(
42
+ self, context: str, pareto_str: str, n_candidates: int,
43
+ constraint_instruction: str, performance_insights: str,
44
+ ) -> str: ...
45
+ def compose_regenerate_offspring(
46
+ self, context: str, failed_str: str, pareto_str: str, n_candidates: int,
47
+ constraint_instruction: str, performance_insights: str,
48
+ ) -> str: ...
49
+ def compose_failure_insights(self, context: str, failed_str: str, n_failed: int) -> str: ...
50
+ def compose_constraint_instruction(self, context: str, failed_str: str, previous: str = "") -> str: ...
51
+ def compose_performance_insights(
52
+ self, context: str, stats_str: str, pareto_str: str, previous: str = ""
53
+ ) -> str: ...
54
+
55
+
56
+ class DefaultDirectives:
57
+ """Generic, problem-agnostic prompt wording.
58
+
59
+ Problem specifics (search space, constraints, examples) reach the prompt
60
+ through ``context`` (built from the problem's hooks), so this generic wording
61
+ works for any problem; a problem may still supply its own ``Directives``.
62
+ """
63
+
64
+ def compose_initial(self, context: str, n_candidates: int) -> str:
65
+ return (
66
+ "You are an optimization expert generating candidates for a multi-objective problem.\n\n"
67
+ f"{context}\n\n"
68
+ f"Propose exactly {n_candidates} diverse, valid candidates that explore different "
69
+ "regions of the search space and trade off the objectives."
70
+ + _COT
71
+ )
72
+
73
+ def compose_regenerate(
74
+ self, context: str, failed_str: str, n_candidates: int,
75
+ constraint_instruction: str, performance_insights: str,
76
+ ) -> str:
77
+ return (
78
+ "You are an optimization expert. Previous candidates failed validation; learn from "
79
+ "them and propose better ones.\n\n"
80
+ f"{context}\n\n"
81
+ f"FAILED CANDIDATES AND THEIR ISSUES:\n{failed_str}\n\n"
82
+ f"CONSTRAINT COMPLIANCE INSTRUCTIONS:\n{constraint_instruction or 'None yet.'}\n\n"
83
+ f"PERFORMANCE INSIGHTS:\n{performance_insights or 'None yet.'}\n\n"
84
+ f"Propose exactly {n_candidates} NEW valid candidates that fix the failures and follow "
85
+ "the constraint instructions."
86
+ + _COT
87
+ )
88
+
89
+ def compose_offspring(
90
+ self, context: str, pareto_str: str, n_candidates: int,
91
+ constraint_instruction: str, performance_insights: str,
92
+ ) -> str:
93
+ return (
94
+ "You are an optimization expert. Breed offspring from high-quality Pareto-optimal "
95
+ "configurations.\n\n"
96
+ f"{context}\n\n"
97
+ f"PARETO-OPTIMAL CONFIGURATIONS (best so far):\n{pareto_str}\n\n"
98
+ f"CONSTRAINT COMPLIANCE INSTRUCTIONS:\n{constraint_instruction or 'Follow standard constraints.'}\n\n"
99
+ f"PERFORMANCE INSIGHTS:\n{performance_insights or 'Analyze the Pareto set for patterns.'}\n\n"
100
+ f"Propose exactly {n_candidates} NEW valid candidates that build on the Pareto patterns, "
101
+ "explore new trade-offs, and try to improve on existing solutions."
102
+ + _COT
103
+ )
104
+
105
+ def compose_regenerate_offspring(
106
+ self, context: str, failed_str: str, pareto_str: str, n_candidates: int,
107
+ constraint_instruction: str, performance_insights: str,
108
+ ) -> str:
109
+ return (
110
+ "You are an optimization expert. Some offspring failed; fix them while staying close to "
111
+ "the known-valid Pareto set.\n\n"
112
+ f"{context}\n\n"
113
+ f"PARETO-OPTIMAL CONFIGURATIONS (known valid, high quality):\n{pareto_str}\n\n"
114
+ f"FAILED OFFSPRING AND THEIR ISSUES:\n{failed_str}\n\n"
115
+ f"CONSTRAINT COMPLIANCE INSTRUCTIONS:\n{constraint_instruction or 'Follow the Pareto patterns.'}\n\n"
116
+ f"PERFORMANCE INSIGHTS:\n{performance_insights or ''}\n\n"
117
+ f"Propose exactly {n_candidates} NEW valid candidates that fix the failures and try to improve."
118
+ + _COT
119
+ )
120
+
121
+ def compose_failure_insights(self, context: str, failed_str: str, n_failed: int) -> str:
122
+ return (
123
+ "You are an optimization expert. Analyze why each candidate failed and give one "
124
+ "specific, actionable fix per candidate.\n\n"
125
+ f"{context}\n\n"
126
+ f"FAILED CANDIDATES:\n{failed_str}\n\n"
127
+ f"Provide exactly {n_failed} insight strings, one per failed candidate, in order."
128
+ )
129
+
130
+ def compose_constraint_instruction(self, context: str, failed_str: str, previous: str = "") -> str:
131
+ if previous:
132
+ return (
133
+ "You are an optimization expert. Update the constraint-compliance guide using new failures.\n\n"
134
+ f"PREVIOUS GUIDE:\n{previous}\n\n"
135
+ f"NEW FAILED CANDIDATES AND INSIGHTS:\n{failed_str}\n\n"
136
+ "Produce an updated, comprehensive constraint-compliance guide."
137
+ )
138
+ return (
139
+ "You are an optimization expert. From these failures, write a consolidated "
140
+ "constraint-compliance guide future candidates should follow.\n\n"
141
+ f"{context}\n\n"
142
+ f"FAILED CANDIDATES AND INSIGHTS:\n{failed_str}\n\n"
143
+ "Produce a clear, actionable constraint-compliance guide."
144
+ )
145
+
146
+ def compose_performance_insights(
147
+ self, context: str, stats_str: str, pareto_str: str, previous: str = ""
148
+ ) -> str:
149
+ if previous:
150
+ return (
151
+ "You are an optimization expert. Update the performance insights with new results.\n\n"
152
+ f"PREVIOUS INSIGHTS:\n{previous}\n\n"
153
+ f"CURRENT PERFORMANCE STATISTICS:\n{stats_str}\n\n"
154
+ f"CURRENT TOP PARETO CONFIGURATIONS:\n{pareto_str}\n\n"
155
+ "Produce updated performance insights that capture new patterns."
156
+ )
157
+ return (
158
+ "You are an optimization expert. Analyze the performance patterns to guide better candidates.\n\n"
159
+ f"{context}\n\n"
160
+ f"PERFORMANCE STATISTICS:\n{stats_str}\n\n"
161
+ f"TOP PARETO CONFIGURATIONS:\n{pareto_str}\n\n"
162
+ "Explain what makes configurations perform well, the trade-offs, and how to improve."
163
+ )