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,452 @@
1
+ """Immutable experiment profiles for workload- and model-transfer campaigns.
2
+
3
+ The workload boundary owns candidate and evaluator semantics. A campaign
4
+ profile owns every optimizer decision that must remain fixed when the same
5
+ method is transferred between workloads: depth/width, proposal support,
6
+ parent selection, acquisition, memory, recombination, reflection, and prompt
7
+ arm. Model routing and concurrency are bound in the same inspectable object,
8
+ but have a separate digest so systems changes cannot be mistaken for method
9
+ changes.
10
+
11
+ The executable objects inside :class:`CampaignPolicyBinding` are deliberately
12
+ excluded from identity by that type. Their authenticated public policy
13
+ identities are included. This permits workload-specific composition objects
14
+ to implement the same inverted port without silently creating a new method.
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ import hashlib
20
+ import json
21
+ import re
22
+ from dataclasses import dataclass
23
+
24
+ from agent_evolve.application.evolution_campaign import (
25
+ ArchiveUtilityPort,
26
+ CampaignAgentRuntimePort,
27
+ CampaignJournalPort,
28
+ CampaignPolicyBinding,
29
+ CampaignReflectionSupervisionPolicy,
30
+ EvolutionCampaign,
31
+ PreparedEvolutionCampaign,
32
+ )
33
+ from agent_evolve.campaign_presets import (
34
+ DelayedPortfolioCampaignPreset,
35
+ PortfolioCampaignBehavior,
36
+ PortfolioScaleShape,
37
+ )
38
+ from agent_evolve.campaign_workload import AgenticCampaignWorkloadConfig
39
+ from agent_evolve.integrations.pydantic_ai.model_execution_profile import (
40
+ OpenRouterModelExecutionProfile,
41
+ )
42
+ from agent_evolve.ports.archive_context import (
43
+ CampaignPortfolioArchiveContextProjector,
44
+ )
45
+ from agent_evolve.workload_kit import WorkloadKit
46
+ from agent_evolve.workload_prompt import WorkloadPromptArm
47
+
48
+
49
+ _TOKEN = re.compile(r"^[a-z][a-z0-9_]{0,95}$")
50
+ _METHOD_DOMAIN = b"agent-evolve:campaign-method-profile:v2\x00"
51
+ _METHOD_DOMAIN_V3 = b"agent-evolve:campaign-method-profile:v3\x00"
52
+ _EXECUTION_DOMAIN = b"agent-evolve:campaign-experiment-profile:v2\x00"
53
+ _EXECUTION_DOMAIN_V3 = b"agent-evolve:campaign-experiment-profile:v3\x00"
54
+ _CONFORMANCE_DOMAIN = b"agent-evolve:campaign-profile-conformance:v1\x00"
55
+
56
+
57
+ def _canonical_bytes(value: object) -> bytes:
58
+ return json.dumps(
59
+ value,
60
+ allow_nan=False,
61
+ ensure_ascii=True,
62
+ separators=(",", ":"),
63
+ sort_keys=True,
64
+ ).encode("ascii", errors="strict")
65
+
66
+
67
+ def _digest(domain: bytes, value: object) -> str:
68
+ return hashlib.sha256(domain + _canonical_bytes(value)).hexdigest()
69
+
70
+
71
+ @dataclass(frozen=True, slots=True, eq=False)
72
+ class CampaignExperimentProfile:
73
+ """One complete, replay-identifiable campaign composition contract.
74
+
75
+ ``method_definition_sha256`` intentionally excludes model routing and
76
+ concurrency. It must remain identical across a workload/model transfer
77
+ block. ``experiment_definition_sha256`` additionally binds those systems
78
+ settings and therefore identifies an executable cell.
79
+ """
80
+
81
+ profile_id: str
82
+ profile_version: int
83
+ method_id: str
84
+ method_version: int
85
+ scale_shape: PortfolioScaleShape
86
+ candidate_pool_size: int | None
87
+ model_selection_size: int
88
+ prompt_arm: WorkloadPromptArm
89
+ parent_selection: CampaignPolicyBinding
90
+ memory_assignment: CampaignPolicyBinding
91
+ portfolio_selection: CampaignPolicyBinding
92
+ recombination: CampaignPolicyBinding
93
+ reflection: CampaignPolicyBinding
94
+ model_execution: OpenRouterModelExecutionProfile
95
+ archive_context: CampaignPolicyBinding | None = None
96
+ variation_topology: CampaignPolicyBinding | None = None
97
+ contextual_outcomes: CampaignPolicyBinding | None = None
98
+ evaluator_concurrency: int = 1
99
+ agent_concurrency: int = 3
100
+ agent_queue_capacity: int = 8
101
+ reflection_supervision: CampaignReflectionSupervisionPolicy = (
102
+ CampaignReflectionSupervisionPolicy()
103
+ )
104
+
105
+ def __post_init__(self) -> None:
106
+ for name in ("profile_id", "method_id"):
107
+ value = getattr(self, name)
108
+ if type(value) is not str or _TOKEN.fullmatch(value) is None:
109
+ raise ValueError(f"{name} must use the closed lowercase token grammar")
110
+ for name in ("profile_version", "method_version"):
111
+ value = getattr(self, name)
112
+ if type(value) is not int or value <= 0:
113
+ raise ValueError(f"{name} must be a positive exact integer")
114
+ if type(self.scale_shape) is not PortfolioScaleShape:
115
+ raise TypeError("scale_shape must be an exact PortfolioScaleShape")
116
+ self.scale_shape.__post_init__()
117
+ if self.candidate_pool_size is not None and (
118
+ type(self.candidate_pool_size) is not int
119
+ or self.candidate_pool_size <= 0
120
+ ):
121
+ raise ValueError(
122
+ "candidate_pool_size must be a positive exact integer or None"
123
+ )
124
+ if type(self.model_selection_size) is not int or (
125
+ self.model_selection_size <= 0
126
+ ):
127
+ raise ValueError("model_selection_size must be a positive exact integer")
128
+ if not (
129
+ self.model_selection_size >= self.scale_shape.portfolio_width
130
+ and (
131
+ self.candidate_pool_size is None
132
+ or self.candidate_pool_size >= self.model_selection_size
133
+ )
134
+ ):
135
+ raise ValueError(
136
+ "candidate/model/evaluated widths must satisfy M >= K >= k"
137
+ )
138
+ if type(self.prompt_arm) is not WorkloadPromptArm:
139
+ raise TypeError("prompt_arm must be an exact WorkloadPromptArm")
140
+ for name in (
141
+ "parent_selection",
142
+ "memory_assignment",
143
+ "portfolio_selection",
144
+ "recombination",
145
+ "reflection",
146
+ ):
147
+ binding = getattr(self, name)
148
+ if type(binding) is not CampaignPolicyBinding:
149
+ raise TypeError(f"{name} must be an exact CampaignPolicyBinding")
150
+ CampaignPolicyBinding.__post_init__(binding)
151
+ if self.archive_context is not None:
152
+ if type(self.archive_context) is not CampaignPolicyBinding:
153
+ raise TypeError(
154
+ "archive_context must be an exact CampaignPolicyBinding or None"
155
+ )
156
+ CampaignPolicyBinding.__post_init__(self.archive_context)
157
+ if not isinstance(
158
+ self.archive_context.implementation,
159
+ CampaignPortfolioArchiveContextProjector,
160
+ ):
161
+ raise TypeError(
162
+ "archive_context implementation must satisfy the generic "
163
+ "archive-context projector port"
164
+ )
165
+ for name in ("variation_topology", "contextual_outcomes"):
166
+ binding = getattr(self, name)
167
+ if binding is not None:
168
+ if type(binding) is not CampaignPolicyBinding:
169
+ raise TypeError(
170
+ f"{name} must be an exact CampaignPolicyBinding or None"
171
+ )
172
+ CampaignPolicyBinding.__post_init__(binding)
173
+ if type(self.model_execution) is not OpenRouterModelExecutionProfile:
174
+ raise TypeError(
175
+ "model_execution must be an exact OpenRouterModelExecutionProfile"
176
+ )
177
+ self.model_execution.__post_init__()
178
+ for name in ("evaluator_concurrency", "agent_concurrency"):
179
+ value = getattr(self, name)
180
+ if type(value) is not int or value <= 0:
181
+ raise ValueError(f"{name} must be a positive exact integer")
182
+ if (
183
+ type(self.agent_queue_capacity) is not int
184
+ or self.agent_queue_capacity < self.agent_concurrency
185
+ ):
186
+ raise ValueError("agent_queue_capacity must cover agent_concurrency")
187
+ if (
188
+ self.model_execution.route_concurrency_cap is not None
189
+ and self.agent_concurrency
190
+ > self.model_execution.route_concurrency_cap
191
+ ):
192
+ raise ValueError(
193
+ "agent_concurrency exceeds the authenticated model-route cap"
194
+ )
195
+ if type(self.reflection_supervision) is not (
196
+ CampaignReflectionSupervisionPolicy
197
+ ):
198
+ raise TypeError(
199
+ "reflection_supervision must be exact "
200
+ "CampaignReflectionSupervisionPolicy"
201
+ )
202
+ CampaignReflectionSupervisionPolicy.__post_init__(
203
+ self.reflection_supervision
204
+ )
205
+
206
+ def _method_record(self) -> dict[str, object]:
207
+ self.__post_init__()
208
+ extended_identity = (
209
+ self.variation_topology is not None
210
+ or self.contextual_outcomes is not None
211
+ )
212
+ record = {
213
+ "schema_version": 3 if extended_identity else 2,
214
+ "method_id": self.method_id,
215
+ "method_version": self.method_version,
216
+ "scale_shape": self.scale_shape.to_record(),
217
+ "candidate_pool_size": self.candidate_pool_size,
218
+ "candidate_pool_mode": (
219
+ "complete_finite_contract"
220
+ if self.candidate_pool_size is None
221
+ else "fixed_size"
222
+ ),
223
+ "model_selection_size": self.model_selection_size,
224
+ "evaluated_portfolio_width": self.scale_shape.portfolio_width,
225
+ "prompt_arm": self.prompt_arm.value,
226
+ "policies": {
227
+ "parent_selection": self.parent_selection.to_record(),
228
+ "memory_assignment": self.memory_assignment.to_record(),
229
+ "portfolio_selection": self.portfolio_selection.to_record(),
230
+ "recombination": self.recombination.to_record(),
231
+ "reflection": self.reflection.to_record(),
232
+ "archive_context": (
233
+ None
234
+ if self.archive_context is None
235
+ else self.archive_context.to_record()
236
+ ),
237
+ "reflection_supervision": self.reflection_supervision.to_record(),
238
+ },
239
+ "workload_specific_fields": [],
240
+ "model_specific_optimizer_fields": [],
241
+ }
242
+ if extended_identity:
243
+ policies = record["policies"]
244
+ assert type(policies) is dict
245
+ policies["variation_topology"] = (
246
+ None
247
+ if self.variation_topology is None
248
+ else self.variation_topology.to_record()
249
+ )
250
+ policies["contextual_outcomes"] = (
251
+ None
252
+ if self.contextual_outcomes is None
253
+ else self.contextual_outcomes.to_record()
254
+ )
255
+ return record
256
+
257
+ @property
258
+ def method_definition_sha256(self) -> str:
259
+ """Identity compared across every workload and model quality cell."""
260
+
261
+ record = self._method_record()
262
+ return _digest(
263
+ _METHOD_DOMAIN_V3 if record["schema_version"] == 3 else _METHOD_DOMAIN,
264
+ record,
265
+ )
266
+
267
+ def _execution_record(self) -> dict[str, object]:
268
+ self.__post_init__()
269
+ extended_identity = (
270
+ self.variation_topology is not None
271
+ or self.contextual_outcomes is not None
272
+ )
273
+ return {
274
+ "schema_version": 3 if extended_identity else 2,
275
+ "profile_id": self.profile_id,
276
+ "profile_version": self.profile_version,
277
+ "method_definition_sha256": self.method_definition_sha256,
278
+ "model_execution_profile_sha256": self.model_execution.profile_sha256,
279
+ "systems": {
280
+ "evaluator_concurrency": self.evaluator_concurrency,
281
+ "agent_concurrency": self.agent_concurrency,
282
+ "agent_queue_capacity": self.agent_queue_capacity,
283
+ },
284
+ }
285
+
286
+ @property
287
+ def experiment_definition_sha256(self) -> str:
288
+ """Identity of the method plus model route and systems settings."""
289
+
290
+ record = self._execution_record()
291
+ return _digest(
292
+ (
293
+ _EXECUTION_DOMAIN_V3
294
+ if record["schema_version"] == 3
295
+ else _EXECUTION_DOMAIN
296
+ ),
297
+ record,
298
+ )
299
+
300
+ def to_record(self) -> dict[str, object]:
301
+ """Publish both identities so quality and systems changes stay separate."""
302
+
303
+ return {
304
+ **self._execution_record(),
305
+ "method": self._method_record(),
306
+ "model_execution": self.model_execution.to_record(),
307
+ "experiment_definition_sha256": self.experiment_definition_sha256,
308
+ }
309
+
310
+ def behavior(self, *, archive_utility: ArchiveUtilityPort) -> PortfolioCampaignBehavior:
311
+ """Bind workload-owned objective utility to the frozen generic method."""
312
+
313
+ self.__post_init__()
314
+ if not isinstance(archive_utility, ArchiveUtilityPort):
315
+ raise TypeError("archive_utility must implement ArchiveUtilityPort")
316
+ return PortfolioCampaignBehavior(
317
+ parent_selection=self.parent_selection,
318
+ memory_assignment=self.memory_assignment,
319
+ portfolio_selection=self.portfolio_selection,
320
+ recombination=self.recombination,
321
+ reflection=self.reflection,
322
+ archive_utility=archive_utility,
323
+ reflection_supervision=self.reflection_supervision,
324
+ )
325
+
326
+ @property
327
+ def archive_context_projector(
328
+ self,
329
+ ) -> CampaignPortfolioArchiveContextProjector | None:
330
+ """Return the executable projector authenticated by this method profile."""
331
+
332
+ self.__post_init__()
333
+ if self.archive_context is None:
334
+ return None
335
+ implementation = self.archive_context.implementation
336
+ if not isinstance(implementation, CampaignPortfolioArchiveContextProjector):
337
+ raise AssertionError("validated archive-context implementation drifted")
338
+ return implementation
339
+
340
+ def preset(self, *, outer_seed: int) -> DelayedPortfolioCampaignPreset:
341
+ """Construct the exact scale schedule without workload constants."""
342
+
343
+ self.__post_init__()
344
+ return DelayedPortfolioCampaignPreset.scale_shape(
345
+ self.scale_shape,
346
+ outer_seed=outer_seed,
347
+ evaluator_concurrency=self.evaluator_concurrency,
348
+ agent_concurrency=self.agent_concurrency,
349
+ agent_queue_capacity=self.agent_queue_capacity,
350
+ )
351
+
352
+ def compose(
353
+ self,
354
+ *,
355
+ outer_seed: int,
356
+ workload: WorkloadKit | AgenticCampaignWorkloadConfig,
357
+ archive_utility: ArchiveUtilityPort,
358
+ runtime: CampaignAgentRuntimePort,
359
+ journals: tuple[CampaignJournalPort, ...],
360
+ ) -> EvolutionCampaign:
361
+ """Compose one workload through the frozen experiment profile."""
362
+
363
+ return self.preset(outer_seed=outer_seed).compose(
364
+ workload=workload,
365
+ behavior=self.behavior(archive_utility=archive_utility),
366
+ runtime=runtime,
367
+ journals=journals,
368
+ )
369
+
370
+ def prepared_conformance_record(
371
+ self,
372
+ *,
373
+ prepared: PreparedEvolutionCampaign,
374
+ archive_utility: ArchiveUtilityPort,
375
+ outer_seed: int,
376
+ ) -> dict[str, object]:
377
+ """Authenticate that a workload runner executed this profile.
378
+
379
+ Runners may retain a workload-facing protocol label, but they may not
380
+ silently change the optimizer shape, budget, policy identities, or
381
+ concurrency. The runtime implementations behind policy bindings are
382
+ intentionally swappable and do not affect these scientific identities.
383
+ """
384
+
385
+ self.__post_init__()
386
+ if type(prepared) is not PreparedEvolutionCampaign:
387
+ raise TypeError("prepared must be an exact PreparedEvolutionCampaign")
388
+ prepared.__post_init__()
389
+ if type(outer_seed) is not int or outer_seed < 0:
390
+ raise ValueError("outer_seed must be a non-negative exact integer")
391
+ preset = self.preset(outer_seed=outer_seed)
392
+ expected_protocol = preset.protocol(
393
+ required_seed_count=prepared.protocol.required_seed_count
394
+ )
395
+ expected_budget = preset.budget(
396
+ required_seed_count=prepared.protocol.required_seed_count
397
+ )
398
+ expected_concurrency = preset.concurrency()
399
+ expected_policies = self.behavior(
400
+ archive_utility=archive_utility
401
+ ).bind()
402
+ shape_fields = (
403
+ "outer_seed",
404
+ "generation_count",
405
+ "required_seed_count",
406
+ "parents_per_portfolio_generation",
407
+ "portfolio_width",
408
+ "recombinations_per_parent",
409
+ "reflections_per_recombination_generation",
410
+ "reflection_promotion_block_pairs",
411
+ "terminal_reflection_policy",
412
+ )
413
+ gates = {
414
+ "optimizer_shape_exact": all(
415
+ getattr(prepared.protocol, name)
416
+ == getattr(expected_protocol, name)
417
+ for name in shape_fields
418
+ ),
419
+ "derived_budget_exact": prepared.budget == expected_budget,
420
+ "concurrency_exact": prepared.concurrency == expected_concurrency,
421
+ "policy_identity_exact": (
422
+ prepared.policies_sha256 == expected_policies.policies_sha256
423
+ ),
424
+ }
425
+ unsigned = {
426
+ "schema_version": 1,
427
+ "method_definition_sha256": self.method_definition_sha256,
428
+ "experiment_definition_sha256": self.experiment_definition_sha256,
429
+ "preparation_sha256": prepared.preparation_sha256,
430
+ "gates": gates,
431
+ "pass": all(gates.values()),
432
+ }
433
+ record = {
434
+ **unsigned,
435
+ "conformance_sha256": _digest(_CONFORMANCE_DOMAIN, unsigned),
436
+ }
437
+ if not record["pass"]:
438
+ failed = ", ".join(name for name, value in gates.items() if not value)
439
+ raise RuntimeError(f"prepared campaign violates profile: {failed}")
440
+ return record
441
+
442
+ def __eq__(self, other: object) -> bool:
443
+ return (
444
+ type(other) is CampaignExperimentProfile
445
+ and self.experiment_definition_sha256
446
+ == other.experiment_definition_sha256
447
+ )
448
+
449
+ __hash__ = None
450
+
451
+
452
+ __all__ = ["CampaignExperimentProfile"]