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,107 @@
1
+ """Pinned OpenRouter stream-item compatibility boundary.
2
+
3
+ The OpenAI SDK's streamed decoder can yield an arbitrary JSON primitive when
4
+ an OpenAI-compatible endpoint sends a syntactically valid SSE ``data`` field
5
+ whose JSON value is not a chat-completion object. Pydantic-AI 1.107.1 assumes
6
+ that every decoded value is a ``ChatCompletionChunk`` before validating its
7
+ runtime type. This adapter rejects that narrow malformed wire topology
8
+ without broadening retry semantics to unrelated ``AttributeError`` or
9
+ validation failures.
10
+
11
+ The underlying SDK stream remains owned and closed by Pydantic-AI's
12
+ ``request_stream`` context manager. The wrapper is single-pass and validates
13
+ each decoded SDK item immediately before exposing it to Pydantic-AI.
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ from collections.abc import AsyncIterable, AsyncIterator
19
+ from typing import cast
20
+
21
+ from openai import AsyncStream
22
+ from openai.types.chat import ChatCompletionChunk
23
+ from pydantic_ai.models import ModelRequestParameters
24
+ from pydantic_ai.models.openai import (
25
+ OpenAIChatModelSettings,
26
+ OpenAIStreamedResponse,
27
+ )
28
+ from pydantic_ai.models.openrouter import OpenRouterModel
29
+
30
+
31
+ class InvalidOpenRouterStreamItemError(RuntimeError):
32
+ """A payload-free signal for a non-chat-completion decoded SSE item."""
33
+
34
+ __slots__ = ()
35
+
36
+ def __init__(self) -> None:
37
+ # The decoded item, its rendering, and its provider payload must never
38
+ # become exception state or scientific telemetry.
39
+ super().__init__("OpenRouter stream yielded an invalid item")
40
+
41
+
42
+ class _ValidatedChatCompletionChunkStream(AsyncIterator[ChatCompletionChunk]):
43
+ """Single-pass view that validates every decoded SDK stream item."""
44
+
45
+ __slots__ = (
46
+ "_closed",
47
+ "_source",
48
+ "_source_iterator",
49
+ )
50
+
51
+ def __init__(self, source: AsyncStream[ChatCompletionChunk]) -> None:
52
+ # Keep the original AsyncStream: Pydantic-AI's streamed response closes
53
+ # ``PeekableAsyncStream.source`` through its async ``close`` method.
54
+ self._source = source
55
+ self._source_iterator = aiter(cast(AsyncIterable[object], source))
56
+ self._closed = False
57
+
58
+ def __aiter__(self) -> AsyncIterator[ChatCompletionChunk]:
59
+ return self
60
+
61
+ async def __anext__(self) -> ChatCompletionChunk:
62
+ item = await anext(self._source_iterator)
63
+ if type(item) is not ChatCompletionChunk:
64
+ raise InvalidOpenRouterStreamItemError()
65
+ return cast(ChatCompletionChunk, item)
66
+
67
+ async def close(self) -> None:
68
+ """Delegate Pydantic-AI's close contract to the owned SDK stream."""
69
+
70
+ if self._closed:
71
+ return
72
+ self._closed = True
73
+ await self._source.close()
74
+
75
+ async def aclose(self) -> None:
76
+ """Support generic async-iterator cleanup without changing ownership."""
77
+
78
+ await self.close()
79
+
80
+
81
+ class ValidatedOpenRouterModel(OpenRouterModel):
82
+ """OpenRouterModel with a narrow decoded stream-item boundary.
83
+
84
+ The override is intentionally isolated because ``_process_streamed_response``
85
+ is a private Pydantic-AI compatibility seam. ``pydantic-ai==1.107.1`` is
86
+ pinned by this project; conformance tests must fail loudly if that seam
87
+ changes on a future dependency upgrade.
88
+ """
89
+
90
+ async def _process_streamed_response(
91
+ self,
92
+ response: AsyncStream[ChatCompletionChunk],
93
+ model_request_parameters: ModelRequestParameters,
94
+ model_settings: OpenAIChatModelSettings | None = None,
95
+ ) -> OpenAIStreamedResponse:
96
+ validated = _ValidatedChatCompletionChunkStream(response)
97
+ return await super()._process_streamed_response(
98
+ cast(AsyncStream[ChatCompletionChunk], validated),
99
+ model_request_parameters,
100
+ model_settings,
101
+ )
102
+
103
+
104
+ __all__ = [
105
+ "InvalidOpenRouterStreamItemError",
106
+ "ValidatedOpenRouterModel",
107
+ ]
@@ -0,0 +1,242 @@
1
+ """Use a pymoo problem as an ``agent_evolve`` problem: ``from_pymoo(p)``.
2
+
3
+ pymoo and this package disagree about what a candidate is. pymoo evaluates
4
+ real-valued vectors inside box bounds; this package searches typed
5
+ configurations whose every axis declares a *finite* domain, because the genetic
6
+ operators (:mod:`agent_evolve.policies.genetic`) read their allowed values from
7
+ the candidate schema and refuse to invent any. The adapter reconciles the two
8
+ by quantizing each continuous axis onto a declared grid.
9
+
10
+ The quantization rule
11
+ ---------------------
12
+ Decision variable ``i`` with box bounds ``[xl_i, xu_i]`` becomes a required
13
+ field ``x{i}`` on a generated pydantic model, typed::
14
+
15
+ Literal[g_0, ..., g_{k-1}] k = grid_points (default 16)
16
+ g_j = xl_i + j * (xu_i - xl_i) / (k - 1)
17
+
18
+ that is, ``k`` evenly spaced values *including both endpoints*, deduplicated
19
+ (a variable with ``xl_i == xu_i`` collapses to its single legal value, which
20
+ ``locus_domain`` reads as a one-value domain since ``const`` became readable on
21
+ 2026-08-19). The
22
+ ``Literal`` grid serializes to a JSON-schema ``enum``, which is exactly what
23
+ ``locus_domain`` reads -- so every variable is a mutable locus with a visible
24
+ domain, and the uninformed random proposer draws only legal vectors. Grid
25
+ values are exact ``linspace`` floats; Python's ``repr`` round-trips them
26
+ through JSON without drift, so schema, validation and evaluation all see the
27
+ same numbers. The resolution cost is honest and stated: the adapter searches
28
+ the ``k**n_var`` lattice, not the continuum -- raise ``grid_points`` to refine.
29
+
30
+ ``genetic._number_domain`` now projects a doubly bounded ``number`` field onto
31
+ the same 16-point rule, and this adapter deliberately does *not* delegate to it:
32
+ that projection rounds each point through ``%.10g`` so a value renders
33
+ identically in a prompt, a card and a comparison, while ``linspace`` keeps the
34
+ full binary float. The two grids therefore differ in their last digits, and
35
+ these values are the adapter's declared enum -- the schema a swapped run
36
+ validates against and the acceptance test measures. One shared rule is not worth
37
+ silently moving every pymoo grid point.
38
+
39
+ The rest of the mapping
40
+ -----------------------
41
+ * ``objectives`` -- pymoo always minimizes, so the ``n_obj`` outputs of
42
+ ``_evaluate`` become ``ObjectiveSpec("f0", "min") .. ObjectiveSpec(f"f{n-1}",
43
+ "min")``.
44
+ * ``seeds()`` -- the single midpoint configuration: for each variable, the
45
+ grid value nearest ``(xl_i + xu_i) / 2`` (exact ties resolve to the lower
46
+ grid value, deterministically).
47
+ * ``materialize`` -- config -> the ordered tuple ``(x0, ..., x{n-1})``, which
48
+ is the vector pymoo measures and a stable cache key.
49
+ * ``evaluate`` -- one call to the pymoo problem's own ``evaluate`` (which
50
+ dispatches to its ``_evaluate``). Constrained problems are honored: a
51
+ candidate violating the pymoo convention (``G <= 0``, ``H == 0``) raises
52
+ ``ValueError`` naming the total violation, which is the contract's word for
53
+ "infeasible in a way only measurement could reveal".
54
+
55
+ The adapter never imports pymoo. It reads the four attributes every pymoo
56
+ ``Problem`` carries (``n_var``, ``n_obj``, ``xl``, ``xu``) and calls
57
+ ``evaluate``, so any object with that surface works and the module imports
58
+ cleanly where pymoo is absent.
59
+ """
60
+
61
+ from __future__ import annotations
62
+
63
+ from typing import Any, Literal, Mapping, Sequence
64
+
65
+ import numpy as np
66
+ from pydantic import Field, create_model
67
+
68
+ from agent_evolve.contract import Config, ObjectiveSpec, ValidationOutcome
69
+
70
+ __all__ = ["from_pymoo", "PymooProblemAdapter"]
71
+
72
+
73
+ def _box_bounds(pymoo_problem: Any) -> tuple[np.ndarray, np.ndarray, int]:
74
+ """Read and normalize ``(xl, xu, n_var)``, explaining every refusal."""
75
+ missing = [name for name in ("n_var", "n_obj", "xl", "xu")
76
+ if getattr(pymoo_problem, name, None) is None]
77
+ if missing:
78
+ raise TypeError(
79
+ f"{type(pymoo_problem).__name__} lacks {', '.join(missing)}. "
80
+ "from_pymoo needs a box-bounded pymoo Problem: n_var, n_obj and "
81
+ "finite xl/xu bounds (pass xl=/xu= to the pymoo Problem constructor)."
82
+ )
83
+ if getattr(pymoo_problem, "vars", None) is not None:
84
+ raise TypeError(
85
+ "this pymoo problem declares mixed/typed variables via 'vars'; "
86
+ "from_pymoo supports only box-bounded real vectors (xl/xu). "
87
+ "Wrap it as a plain Problem, or express it directly as an "
88
+ "agent_evolve Problem, whose candidates are typed already."
89
+ )
90
+ n_var = int(pymoo_problem.n_var)
91
+ xl = np.broadcast_to(np.asarray(pymoo_problem.xl, dtype=float), (n_var,))
92
+ xu = np.broadcast_to(np.asarray(pymoo_problem.xu, dtype=float), (n_var,))
93
+ bad = [i for i in range(n_var)
94
+ if not (np.isfinite(xl[i]) and np.isfinite(xu[i]) and xl[i] <= xu[i])]
95
+ if bad:
96
+ raise ValueError(
97
+ f"variables {bad} have no finite ordered bounds; a Literal grid "
98
+ "needs finite xl <= xu for every variable."
99
+ )
100
+ return xl, xu, n_var
101
+
102
+
103
+ class PymooProblemAdapter:
104
+ """A pymoo problem presented through the five-obligation contract.
105
+
106
+ Built by :func:`from_pymoo`; see the module docstring for the mapping and
107
+ the quantization rule.
108
+ """
109
+
110
+ def __init__(self, pymoo_problem: Any, *, grid_points: int = 16) -> None:
111
+ if not isinstance(grid_points, int) or isinstance(grid_points, bool) \
112
+ or grid_points < 2:
113
+ raise ValueError(
114
+ f"grid_points must be an integer >= 2, got {grid_points!r}: "
115
+ "one point per axis is not a search space, it is a constant."
116
+ )
117
+ self._pymoo = pymoo_problem
118
+ self.grid_points = grid_points
119
+ xl, xu, n_var = _box_bounds(pymoo_problem)
120
+ self._n_var = n_var
121
+ self._n_obj = int(pymoo_problem.n_obj)
122
+
123
+ # The documented rule: k evenly spaced values, endpoints included,
124
+ # exact linspace floats, deduplicated in order.
125
+ self._grids: tuple[tuple[float, ...], ...] = tuple(
126
+ tuple(dict.fromkeys(float(v)
127
+ for v in np.linspace(xl[i], xu[i], grid_points)))
128
+ for i in range(n_var)
129
+ )
130
+
131
+ self.candidate_model = create_model(
132
+ f"Pymoo{type(pymoo_problem).__name__}Candidate",
133
+ **{
134
+ self._field(i): (
135
+ Literal[grid], # tuple subscript == one Literal per value
136
+ Field(...,
137
+ description=f"decision variable {i}, quantized to "
138
+ f"{len(grid)} grid values in "
139
+ f"[{xl[i]:g}, {xu[i]:g}]"),
140
+ )
141
+ for i, grid in enumerate(self._grids)
142
+ },
143
+ )
144
+ self.objectives: Sequence[ObjectiveSpec] = tuple(
145
+ ObjectiveSpec(f"f{j}", "min") for j in range(self._n_obj)
146
+ )
147
+
148
+ @staticmethod
149
+ def _field(i: int) -> str:
150
+ return f"x{i}"
151
+
152
+ # -- where to start ----------------------------------------------------
153
+ def seeds(self) -> Sequence[Config]:
154
+ """The midpoint configuration, snapped to the grid.
155
+
156
+ For each variable the grid value nearest ``(xl + xu) / 2`` under
157
+ float arithmetic; an exact float tie resolves to the lower value via
158
+ ``argmin``'s first-hit rule. Either way the seed is deterministic.
159
+ """
160
+ seed: dict[str, float] = {}
161
+ for i, grid in enumerate(self._grids):
162
+ arr = np.asarray(grid)
163
+ midpoint = (arr[0] + arr[-1]) / 2.0
164
+ seed[self._field(i)] = float(arr[int(np.argmin(np.abs(arr - midpoint)))])
165
+ return (seed,)
166
+
167
+ # -- cheap rejection that explains itself ------------------------------
168
+ def validate(self, config: Config) -> ValidationOutcome:
169
+ for i, grid in enumerate(self._grids):
170
+ name = self._field(i)
171
+ if name not in config:
172
+ return ValidationOutcome(
173
+ False, "structural",
174
+ f"missing field '{name}'; supply all of "
175
+ f"x0..x{self._n_var - 1}.")
176
+ value = config[name]
177
+ if isinstance(value, bool) or not isinstance(value, (int, float)):
178
+ return ValidationOutcome(
179
+ False, "structural",
180
+ f"'{name}' must be a number from its declared grid, got "
181
+ f"{value!r}.")
182
+ if float(value) not in grid:
183
+ nearest = min(grid, key=lambda g: abs(g - float(value)))
184
+ return ValidationOutcome(
185
+ False, "structural",
186
+ f"'{name}'={value!r} is not on the declared grid; the "
187
+ f"nearest allowed value is {nearest!r} (grid spans "
188
+ f"[{grid[0]!r}, {grid[-1]!r}] in {len(grid)} steps).")
189
+ return ValidationOutcome(True)
190
+
191
+ # -- candidate -> the artifact that gets measured ----------------------
192
+ def materialize(self, config: Config) -> tuple[float, ...]:
193
+ return tuple(float(config[self._field(i)]) for i in range(self._n_var))
194
+
195
+ # -- measure it --------------------------------------------------------
196
+ def evaluate(self, artifact: Any) -> Mapping[str, float]:
197
+ x = np.asarray(artifact, dtype=float)
198
+ wants = ["F"]
199
+ has_constraints = getattr(self._pymoo, "has_constraints", None)
200
+ constrained = bool(has_constraints()) if callable(has_constraints) else False
201
+ if constrained:
202
+ wants += ["G", "H"]
203
+ out = self._pymoo.evaluate(x, return_values_of=wants)
204
+ values = dict(zip(wants, out if isinstance(out, (list, tuple)) else [out]))
205
+ if constrained:
206
+ g = np.atleast_1d(np.asarray(values.get("G"), dtype=float)).ravel() \
207
+ if values.get("G") is not None else np.zeros(0)
208
+ h = np.atleast_1d(np.asarray(values.get("H"), dtype=float)).ravel() \
209
+ if values.get("H") is not None else np.zeros(0)
210
+ violation = float(np.clip(g, 0.0, None).sum() + np.abs(h).sum())
211
+ if violation > 0.0:
212
+ raise ValueError(
213
+ f"infeasible under the pymoo constraints: total violation "
214
+ f"{violation:.6g} (G must be <= 0, H must be == 0). Move "
215
+ "toward the feasible region.")
216
+ f = np.asarray(values["F"], dtype=float).ravel()
217
+ if f.size != self._n_obj:
218
+ raise ValueError(
219
+ f"pymoo evaluate returned {f.size} objective values, but the "
220
+ f"problem declares n_obj={self._n_obj}.")
221
+ return {f"f{j}": float(f[j]) for j in range(self._n_obj)}
222
+
223
+ # -- optional: one honest sentence for a model-driven proposer ---------
224
+ def search_space_description(self) -> str:
225
+ return (
226
+ f"{type(self._pymoo).__name__} (pymoo): minimize "
227
+ f"{self._n_obj} objectives f0..f{self._n_obj - 1} over "
228
+ f"{self._n_var} decision variables x0..x{self._n_var - 1}, each "
229
+ f"restricted to its declared grid of at most {self.grid_points} "
230
+ "evenly spaced values between its bounds."
231
+ )
232
+
233
+
234
+ def from_pymoo(pymoo_problem: Any, *, grid_points: int = 16) -> PymooProblemAdapter:
235
+ """Present *pymoo_problem* as a five-obligation ``agent_evolve`` problem.
236
+
237
+ ``optimize(from_pymoo(p), budget=..., proposer="random")`` is the whole
238
+ swap; see the module docstring for the quantization rule and the mapping.
239
+ *grid_points* sets the per-variable resolution (evenly spaced, endpoints
240
+ included, default 16).
241
+ """
242
+ return PymooProblemAdapter(pymoo_problem, grid_points=grid_points)
@@ -0,0 +1,17 @@
1
+ """Replaceable scientific policies for the explicit AgentEvolve workflow."""
2
+
3
+ from agent_evolve.policies.objective_resolution import (
4
+ FIXED_GRID_OBJECTIVE_RESOLUTION_POLICY_ID,
5
+ FIXED_GRID_OBJECTIVE_RESOLUTION_POLICY_VERSION,
6
+ FixedGridMetricSpec,
7
+ FixedGridObjectiveResolution,
8
+ FixedGridRoundingLaw,
9
+ )
10
+
11
+ __all__ = [
12
+ "FIXED_GRID_OBJECTIVE_RESOLUTION_POLICY_ID",
13
+ "FIXED_GRID_OBJECTIVE_RESOLUTION_POLICY_VERSION",
14
+ "FixedGridMetricSpec",
15
+ "FixedGridObjectiveResolution",
16
+ "FixedGridRoundingLaw",
17
+ ]