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,254 @@
1
+ """Generic campaign boundary for filling an under-realized candidate stage."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import hashlib
6
+ import json
7
+ import re
8
+ from dataclasses import dataclass, field
9
+ from typing import Protocol, runtime_checkable
10
+
11
+ from agent_evolve.application.agentic_evolution import EvolutionCandidate
12
+ from agent_evolve.application.budgeted_optimizer import OptimizerState
13
+ from agent_evolve.domain.patch import require_sha256
14
+ from agent_evolve.domain.typed_json import (
15
+ FrozenJsonObject,
16
+ freeze_json,
17
+ thaw_json,
18
+ typed_json_sha256,
19
+ )
20
+
21
+
22
+ _TOKEN = re.compile(r"^[a-z][a-z0-9_.:-]{0,127}$")
23
+ _REQUEST_DOMAIN = b"agent-evolve:campaign-capacity-recourse-request:v1\x00"
24
+ _RESULT_DOMAIN = b"agent-evolve:campaign-capacity-recourse-result:v1\x00"
25
+
26
+
27
+ def _canonical_json(value: object) -> bytes:
28
+ return json.dumps(
29
+ value,
30
+ allow_nan=False,
31
+ ensure_ascii=True,
32
+ separators=(",", ":"),
33
+ sort_keys=True,
34
+ ).encode("ascii", errors="strict")
35
+
36
+
37
+ def _candidate_record(candidate: EvolutionCandidate) -> dict[str, object]:
38
+ EvolutionCandidate.__post_init__(candidate)
39
+ return {
40
+ "candidate_id": candidate.candidate_id.value,
41
+ "configuration_sha256": candidate.occurrence.configuration_hash,
42
+ "generation": candidate.generation,
43
+ "valid": candidate.valid,
44
+ "objectives": [
45
+ {"metric_id": key, "value_hex": value.hex()}
46
+ for key, value in candidate.objectives
47
+ ],
48
+ }
49
+
50
+
51
+ def _policy_identity(
52
+ port: "CampaignCapacityRecoursePort",
53
+ ) -> tuple[str, int, str]:
54
+ if not isinstance(port, CampaignCapacityRecoursePort):
55
+ raise TypeError("capacity recourse must implement its port")
56
+ values = (
57
+ getattr(port, "policy_id", None),
58
+ getattr(port, "policy_version", None),
59
+ getattr(port, "definition_sha256", None),
60
+ )
61
+ if type(values[0]) is not str or _TOKEN.fullmatch(values[0]) is None:
62
+ raise ValueError("capacity recourse policy_id has invalid syntax")
63
+ if type(values[1]) is not int or values[1] <= 0:
64
+ raise ValueError("capacity recourse policy_version must be positive")
65
+ require_sha256(values[2], "capacity recourse definition_sha256")
66
+ return values # type: ignore[return-value]
67
+
68
+
69
+ @dataclass(frozen=True, slots=True)
70
+ class CampaignCapacityRecourseRequest:
71
+ campaign_scope_sha256: str
72
+ preparation_sha256: str
73
+ stage_request_sha256: str
74
+ generation: int
75
+ planned_candidate_occurrences: int
76
+ realized_candidate_occurrences: int
77
+ state: OptimizerState
78
+ request_sha256: str = field(init=False, default="")
79
+
80
+ def __post_init__(self) -> None:
81
+ require_sha256(self.campaign_scope_sha256, "campaign_scope_sha256")
82
+ require_sha256(self.preparation_sha256, "preparation_sha256")
83
+ require_sha256(self.stage_request_sha256, "stage_request_sha256")
84
+ if type(self.generation) is not int or self.generation <= 0:
85
+ raise ValueError("generation must be positive")
86
+ for name in (
87
+ "planned_candidate_occurrences",
88
+ "realized_candidate_occurrences",
89
+ ):
90
+ value = getattr(self, name)
91
+ if type(value) is not int or value < 0:
92
+ raise ValueError(f"{name} must be non-negative")
93
+ if self.realized_candidate_occurrences >= self.planned_candidate_occurrences:
94
+ raise ValueError("capacity recourse requires a strictly underfilled stage")
95
+ if type(self.state) is not OptimizerState:
96
+ raise TypeError("state must be an exact OptimizerState")
97
+ OptimizerState.__post_init__(self.state)
98
+ if self.state.generation != self.generation:
99
+ raise ValueError("optimizer state generation differs from recourse stage")
100
+ computed = hashlib.sha256(
101
+ _REQUEST_DOMAIN + _canonical_json(self._unsigned_record())
102
+ ).hexdigest()
103
+ if self.request_sha256 not in ("", computed):
104
+ raise ValueError("request_sha256 does not authenticate the request")
105
+ object.__setattr__(self, "request_sha256", computed)
106
+
107
+ @property
108
+ def missing_candidate_occurrences(self) -> int:
109
+ return self.planned_candidate_occurrences - self.realized_candidate_occurrences
110
+
111
+ def _unsigned_record(self) -> dict[str, object]:
112
+ return {
113
+ "schema_version": 1,
114
+ "campaign_scope_sha256": self.campaign_scope_sha256,
115
+ "preparation_sha256": self.preparation_sha256,
116
+ "stage_request_sha256": self.stage_request_sha256,
117
+ "generation": self.generation,
118
+ "planned_candidate_occurrences": self.planned_candidate_occurrences,
119
+ "realized_candidate_occurrences": self.realized_candidate_occurrences,
120
+ "missing_candidate_occurrences": self.missing_candidate_occurrences,
121
+ "state": {
122
+ "archive_snapshot_hash": self.state.archive_snapshot_hash,
123
+ "unique_evaluations": self.state.unique_evaluations,
124
+ "logical_llm_calls": self.state.logical_llm_calls,
125
+ "candidates": [_candidate_record(value) for value in self.state.candidates],
126
+ },
127
+ }
128
+
129
+ def to_record(self) -> dict[str, object]:
130
+ self.__post_init__()
131
+ return {**self._unsigned_record(), "request_sha256": self.request_sha256}
132
+
133
+
134
+ @dataclass(frozen=True, slots=True)
135
+ class CampaignCapacityRecourseResult:
136
+ request_sha256: str
137
+ policy_id: str
138
+ policy_version: int
139
+ policy_definition_sha256: str
140
+ candidates: tuple[EvolutionCandidate, ...]
141
+ evidence: FrozenJsonObject
142
+ result_sha256: str = field(init=False, default="")
143
+
144
+ def __post_init__(self) -> None:
145
+ require_sha256(self.request_sha256, "request_sha256")
146
+ if type(self.policy_id) is not str or _TOKEN.fullmatch(self.policy_id) is None:
147
+ raise ValueError("policy_id has invalid syntax")
148
+ if type(self.policy_version) is not int or self.policy_version <= 0:
149
+ raise ValueError("policy_version must be positive")
150
+ require_sha256(self.policy_definition_sha256, "policy_definition_sha256")
151
+ if type(self.candidates) is not tuple or not self.candidates:
152
+ raise ValueError("capacity recourse must return a non-empty exact tuple")
153
+ if any(type(value) is not EvolutionCandidate for value in self.candidates):
154
+ raise TypeError("capacity recourse candidates must be exact")
155
+ for value in self.candidates:
156
+ EvolutionCandidate.__post_init__(value)
157
+ if len({value.candidate_id for value in self.candidates}) != len(self.candidates):
158
+ raise ValueError("capacity recourse candidate IDs must be unique")
159
+ if len({value.occurrence.configuration_hash for value in self.candidates}) != len(
160
+ self.candidates
161
+ ):
162
+ raise ValueError("capacity recourse configurations must be unique")
163
+ if type(self.evidence) is not FrozenJsonObject or freeze_json(self.evidence) is not self.evidence:
164
+ raise TypeError("evidence must be a frozen typed-JSON object")
165
+ computed = hashlib.sha256(
166
+ _RESULT_DOMAIN + _canonical_json(self._unsigned_record())
167
+ ).hexdigest()
168
+ if self.result_sha256 not in ("", computed):
169
+ raise ValueError("result_sha256 does not authenticate the result")
170
+ object.__setattr__(self, "result_sha256", computed)
171
+
172
+ def _unsigned_record(self) -> dict[str, object]:
173
+ return {
174
+ "schema_version": 1,
175
+ "request_sha256": self.request_sha256,
176
+ "policy": {
177
+ "policy_id": self.policy_id,
178
+ "policy_version": self.policy_version,
179
+ "definition_sha256": self.policy_definition_sha256,
180
+ },
181
+ "candidates": [_candidate_record(value) for value in self.candidates],
182
+ "evidence": thaw_json(self.evidence),
183
+ }
184
+
185
+ def to_record(self) -> dict[str, object]:
186
+ self.__post_init__()
187
+ return {**self._unsigned_record(), "result_sha256": self.result_sha256}
188
+
189
+
190
+ @runtime_checkable
191
+ class CampaignCapacityRecoursePort(Protocol):
192
+ """Fill every requested stage occurrence from the current optimizer state."""
193
+
194
+ policy_id: str
195
+ policy_version: int
196
+ definition_sha256: str
197
+
198
+ async def fill(
199
+ self,
200
+ request: CampaignCapacityRecourseRequest,
201
+ ) -> CampaignCapacityRecourseResult: ...
202
+
203
+
204
+ def validate_campaign_capacity_recourse_result(
205
+ *,
206
+ port: CampaignCapacityRecoursePort,
207
+ request: CampaignCapacityRecourseRequest,
208
+ result: CampaignCapacityRecourseResult,
209
+ ) -> None:
210
+ identity = _policy_identity(port)
211
+ if type(request) is not CampaignCapacityRecourseRequest:
212
+ raise TypeError("request must be exact")
213
+ request.__post_init__()
214
+ if type(result) is not CampaignCapacityRecourseResult:
215
+ raise TypeError("capacity recourse returned a foreign result")
216
+ result.__post_init__()
217
+ if result.request_sha256 != request.request_sha256:
218
+ raise ValueError("capacity recourse result targets another request")
219
+ if (
220
+ result.policy_id,
221
+ result.policy_version,
222
+ result.policy_definition_sha256,
223
+ ) != identity:
224
+ raise ValueError("capacity recourse result has a foreign policy identity")
225
+ if len(result.candidates) != request.missing_candidate_occurrences:
226
+ raise ValueError("capacity recourse did not fill every missing occurrence")
227
+ if any(value.generation != request.generation for value in result.candidates):
228
+ raise ValueError("capacity recourse candidate has the wrong generation")
229
+ known_ids = {value.candidate_id for value in request.state.candidates}
230
+ known_configurations = {
231
+ value.occurrence.configuration_hash for value in request.state.candidates
232
+ }
233
+ if any(value.candidate_id in known_ids for value in result.candidates):
234
+ raise ValueError("capacity recourse repeated a known candidate occurrence")
235
+ if any(
236
+ value.occurrence.configuration_hash in known_configurations
237
+ for value in result.candidates
238
+ ):
239
+ raise ValueError("capacity recourse repeated an evaluated configuration")
240
+
241
+
242
+ def validate_campaign_capacity_recourse_port(
243
+ port: CampaignCapacityRecoursePort,
244
+ ) -> tuple[str, int, str]:
245
+ return _policy_identity(port)
246
+
247
+
248
+ __all__ = [
249
+ "CampaignCapacityRecoursePort",
250
+ "CampaignCapacityRecourseRequest",
251
+ "CampaignCapacityRecourseResult",
252
+ "validate_campaign_capacity_recourse_port",
253
+ "validate_campaign_capacity_recourse_result",
254
+ ]
@@ -0,0 +1,119 @@
1
+ """Campaign adapter for parent-aware empirical outcome history.
2
+
3
+ The outcome ledger is deliberately independent from campaign execution. This
4
+ adapter joins the two at the last safe point before a selector request is
5
+ built: it derives lineage and currently available action families from the
6
+ authenticated campaign context, performs a prior-only query, and returns the
7
+ bounded prompt projection expected by ``CampaignPortfolioContextEnricher``.
8
+
9
+ No objective name, workload, model, or provider is encoded here. Workloads
10
+ with a stronger structural similarity notion may inject an exact relevance
11
+ resolver without replacing the retrieval or audit boundary.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from dataclasses import dataclass
17
+ from typing import Protocol, runtime_checkable
18
+
19
+ from agent_evolve.application.portfolio_campaign_runtime import (
20
+ CampaignPortfolioWaveContext,
21
+ )
22
+ from agent_evolve.application.portfolio_outcome_feedback import (
23
+ ContextualOutcomeQuery,
24
+ PortfolioOutcomeFeedbackLedger,
25
+ )
26
+ from agent_evolve.domain.typed_json import FrozenJsonObject
27
+
28
+
29
+ @runtime_checkable
30
+ class CampaignOutcomeRelevanceResolver(Protocol):
31
+ """Return canonical family/path filters for one prospective wave."""
32
+
33
+ def resolve(
34
+ self,
35
+ context: CampaignPortfolioWaveContext,
36
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]: ...
37
+
38
+
39
+ @dataclass(frozen=True, slots=True)
40
+ class AvailableFamilyOutcomeRelevance:
41
+ """Portable default: compare actions from families available to this parent."""
42
+
43
+ def resolve(
44
+ self,
45
+ context: CampaignPortfolioWaveContext,
46
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
47
+ if type(context) is not CampaignPortfolioWaveContext:
48
+ raise TypeError("context must be an exact CampaignPortfolioWaveContext")
49
+ CampaignPortfolioWaveContext.__post_init__(context)
50
+ families = tuple(
51
+ sorted({option.family for option in context.variation.contract.options})
52
+ )
53
+ if not families:
54
+ raise ValueError("eligible variation contract contains no action family")
55
+ return families, ()
56
+
57
+
58
+ @dataclass(slots=True)
59
+ class ContextualOutcomeCampaignEnricher:
60
+ """Expose bounded prior outcomes with explicit transfer distance.
61
+
62
+ The returned object contains no card identity or model rationale. Exact
63
+ same-parent evidence is ranked first, then direct-lineage evidence. When
64
+ explicitly enabled, clearly labelled cross-lineage analogies rank last.
65
+ The campaign runtime attaches it under its reserved contextual-history key.
66
+ """
67
+
68
+ ledger: PortfolioOutcomeFeedbackLedger
69
+ max_actions: int = 24
70
+ include_cross_lineage_analogies: bool = False
71
+ relevance: CampaignOutcomeRelevanceResolver = AvailableFamilyOutcomeRelevance()
72
+
73
+ def __post_init__(self) -> None:
74
+ if type(self.ledger) is not PortfolioOutcomeFeedbackLedger:
75
+ raise TypeError("ledger must be an exact PortfolioOutcomeFeedbackLedger")
76
+ if type(self.max_actions) is not int or self.max_actions <= 0:
77
+ raise ValueError("max_actions must be a positive exact integer")
78
+ if type(self.include_cross_lineage_analogies) is not bool:
79
+ raise TypeError("include_cross_lineage_analogies must be an exact boolean")
80
+ if not isinstance(self.relevance, CampaignOutcomeRelevanceResolver):
81
+ raise TypeError("relevance must implement CampaignOutcomeRelevanceResolver")
82
+
83
+ @staticmethod
84
+ def _lineage(context: CampaignPortfolioWaveContext) -> tuple[str, ...]:
85
+ parent = context.parent
86
+ values = {value.value for value in parent.parent_ids}
87
+ if parent.common_ancestor_id is not None:
88
+ values.add(parent.common_ancestor_id.value)
89
+ return tuple(sorted(values))
90
+
91
+ def enrich(
92
+ self,
93
+ context: CampaignPortfolioWaveContext,
94
+ ) -> FrozenJsonObject:
95
+ self.__post_init__()
96
+ if type(context) is not CampaignPortfolioWaveContext:
97
+ raise TypeError("context must be an exact CampaignPortfolioWaveContext")
98
+ CampaignPortfolioWaveContext.__post_init__(context)
99
+ families, changed_paths = self.relevance.resolve(context)
100
+ query = ContextualOutcomeQuery(
101
+ current_parent_candidate_id=context.parent.candidate_id.value,
102
+ current_parent_configuration_sha256=(
103
+ context.parent.occurrence.configuration_hash
104
+ ),
105
+ cutoff_wave_index_exclusive=context.stage_request.step.generation,
106
+ lineage_candidate_ids=self._lineage(context),
107
+ families=families,
108
+ changed_paths=changed_paths,
109
+ max_actions=self.max_actions,
110
+ include_cross_lineage_analogies=(self.include_cross_lineage_analogies),
111
+ )
112
+ return self.ledger.contextual_history(query).to_prompt_record()
113
+
114
+
115
+ __all__ = [
116
+ "AvailableFamilyOutcomeRelevance",
117
+ "CampaignOutcomeRelevanceResolver",
118
+ "ContextualOutcomeCampaignEnricher",
119
+ ]