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,609 @@
1
+ """Workload-neutral composition for K-slate acquisition experiments.
2
+
3
+ Workload launchers choose an explicit mode; this module owns the matching
4
+ allocator and outer selector identity. Keeping that decision out of workload
5
+ code prevents Airfoil, BOiLS, Heat, and Timeloop adapters from silently giving
6
+ the same method name to different K8-to-K4 behavior.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import math
12
+ from dataclasses import dataclass
13
+ from enum import Enum
14
+ from typing import Mapping
15
+
16
+ from agent_evolve.integrations.pydantic_ai.calibrated_portfolio_selection import (
17
+ ACQUISITION_CERTIFIED_RESIDUAL_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
18
+ REGRET_BOUNDED_INFORMATION_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
19
+ CONSTRAINT_DECOUPLED_HORIZON_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
20
+ CONSTRAINT_DECOUPLED_TARGET_CONDITIONED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
21
+ CONTEXTUAL_SEARCH_ALLOCATION_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
22
+ EVIDENCE_CALIBRATED_SOURCE_MIX_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
23
+ FULL_SUPPORT_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
24
+ HORIZON_BOUNDED_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
25
+ MINIMUM_INTERVENTION_HORIZON_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
26
+ MODEL_ANCHORED_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
27
+ OPERATOR_STRATIFIED_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
28
+ STRUCTURAL_POSTERIOR_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
29
+ TARGET_CONDITIONED_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256,
30
+ CalibratedPortfolioAllocator,
31
+ )
32
+ from agent_evolve.policies.selection.acquisition_certified_slate import (
33
+ AcquisitionCertifiedSlateContextProvider,
34
+ AcquisitionCertifiedSlatePolicy,
35
+ )
36
+ from agent_evolve.policies.selection.regret_bounded_slate import (
37
+ RegretBoundedSlatePolicy,
38
+ ResidualInformationAssayValuePolicy,
39
+ SlateFutureValuePolicy,
40
+ ZeroSlateFutureValuePolicy,
41
+ )
42
+ from agent_evolve.policies.selection.full_support_slate import FullSupportSlatePolicy
43
+ from agent_evolve.policies.selection.model_anchored_slate import (
44
+ ModelAnchoredCalibratedSlatePolicy,
45
+ )
46
+ from agent_evolve.policies.selection.structural_posterior_slate import (
47
+ FamilyExposurePhase,
48
+ HorizonBoundedStructuralPosteriorSlatePolicy,
49
+ OperatorStratifiedStructuralPosteriorSlatePolicy,
50
+ StructuralPosteriorSlatePolicy,
51
+ )
52
+ from agent_evolve.policies.selection.proposal_support import (
53
+ StructuralProposalSupportPolicy,
54
+ )
55
+ from agent_evolve.policies.selection.target_conditioned_allocator import (
56
+ RegisteredTargetConditionedAllocationContextProvider,
57
+ TargetConditionedAllocationContextProvider,
58
+ TargetConditionedSlateAllocatorAdapter,
59
+ )
60
+ from agent_evolve.policies.selection.target_conditioned_prequential import (
61
+ TargetConditionedAcquisitionProfile,
62
+ )
63
+ from agent_evolve.policies.variation.compositional_finite_catalog import (
64
+ COMPOSITE_OPTION_FAMILY,
65
+ )
66
+ from agent_evolve.ports.finite_acquisition_batch import (
67
+ FiniteAcquisitionBatchScorePolicy,
68
+ )
69
+
70
+
71
+ class CampaignAcquisitionMode(str, Enum):
72
+ """Closed acquisition treatments shared by every workload launcher."""
73
+
74
+ FULL_SUPPORT = "full_support"
75
+ MODEL_TOP_K = "model_top_k"
76
+ CALIBRATED_FRONTIER = "calibrated_frontier"
77
+ HIERARCHICAL_SUPPORT = "hierarchical_support"
78
+ OPERATOR_STRATIFIED = "operator_stratified"
79
+ HORIZON_BOUNDED = "horizon_bounded"
80
+ TARGET_CONDITIONED = "target_conditioned"
81
+ ACQUISITION_CERTIFIED = "acquisition_certified"
82
+ REGRET_BOUNDED_INFORMATION = "regret_bounded_information"
83
+
84
+
85
+ OPERATOR_ASSAY_MINIMUM_ENV = "AGENT_EVOLVE_OPERATOR_ASSAY_MINIMUM"
86
+ CONSTRAINT_DECOUPLED_ACQUISITION_ENV = (
87
+ "AGENT_EVOLVE_CONSTRAINT_DECOUPLED_ACQUISITION"
88
+ )
89
+ MINIMUM_INTERVENTION_PROJECTION_ENV = (
90
+ "AGENT_EVOLVE_MINIMUM_INTERVENTION_PROJECTION"
91
+ )
92
+ EVIDENCE_CALIBRATED_SOURCE_MIX_ENV = (
93
+ "AGENT_EVOLVE_EVIDENCE_CALIBRATED_SOURCE_MIX"
94
+ )
95
+ CONTEXTUAL_SEARCH_ALLOCATION_ENV = "AGENT_EVOLVE_CONTEXTUAL_SEARCH_ALLOCATION"
96
+ RESIDUAL_FRONTIER_PLANNING_ENV = "AGENT_EVOLVE_RESIDUAL_FRONTIER_PLANNING"
97
+ REGRET_MINIMUM_ACQUISITION_RETENTION_RATIO_ENV = (
98
+ "AGENT_EVOLVE_REGRET_MINIMUM_ACQUISITION_RETENTION_RATIO"
99
+ )
100
+ REGRET_MINIMUM_RESIDUAL_AUDIT_MEMBERS_ENV = (
101
+ "AGENT_EVOLVE_REGRET_MINIMUM_RESIDUAL_AUDIT_MEMBERS"
102
+ )
103
+ REGRET_RESIDUAL_ASSAY_VALUE_ENV = "AGENT_EVOLVE_REGRET_RESIDUAL_ASSAY_VALUE"
104
+ REGRET_ALLOW_DEVELOPMENT_ASSAY_ENV = (
105
+ "AGENT_EVOLVE_REGRET_ALLOW_DEVELOPMENT_ASSAY"
106
+ )
107
+ REGRET_CALIBRATION_ERROR_BOUND_ENV = (
108
+ "AGENT_EVOLVE_REGRET_CALIBRATION_ERROR_BOUND"
109
+ )
110
+
111
+
112
+ def _finite_environment_float(
113
+ environ: Mapping[str, str],
114
+ name: str,
115
+ *,
116
+ default: float | None,
117
+ ) -> float | None:
118
+ raw = environ.get(name)
119
+ if raw is None:
120
+ return default
121
+ try:
122
+ value = float(raw)
123
+ except ValueError as error:
124
+ raise ValueError(f"{name} must be a finite decimal number") from error
125
+ if not math.isfinite(value):
126
+ raise ValueError(f"{name} must be a finite decimal number")
127
+ return value
128
+
129
+
130
+ @dataclass(frozen=True, slots=True)
131
+ class RegretBoundedInformationControls:
132
+ """Workload-neutral, explicit authority for one RBIE treatment arm."""
133
+
134
+ minimum_acquisition_retention_ratio: float
135
+ minimum_residual_audit_members: int
136
+ future_value_policy: SlateFutureValuePolicy
137
+ calibration_error_bound: float | None
138
+ allow_development_assay: bool
139
+
140
+ def __post_init__(self) -> None:
141
+ if (
142
+ type(self.minimum_acquisition_retention_ratio) is not float
143
+ or not math.isfinite(self.minimum_acquisition_retention_ratio)
144
+ or not 0.0 < self.minimum_acquisition_retention_ratio <= 1.0
145
+ ):
146
+ raise ValueError("regret retention ratio must lie in (0, 1]")
147
+ if (
148
+ type(self.minimum_residual_audit_members) is not int
149
+ or self.minimum_residual_audit_members < 0
150
+ ):
151
+ raise ValueError("minimum residual audit members must be non-negative")
152
+ if not isinstance(self.future_value_policy, SlateFutureValuePolicy):
153
+ raise TypeError("future_value_policy must implement its exact port")
154
+ if self.calibration_error_bound is not None and (
155
+ type(self.calibration_error_bound) is not float
156
+ or not math.isfinite(self.calibration_error_bound)
157
+ or self.calibration_error_bound < 0.0
158
+ ):
159
+ raise ValueError("regret calibration error must be non-negative")
160
+ if type(self.allow_development_assay) is not bool:
161
+ raise TypeError("allow_development_assay must be exact")
162
+ is_assay = type(self.future_value_policy) is ResidualInformationAssayValuePolicy
163
+ if is_assay != self.allow_development_assay:
164
+ raise ValueError(
165
+ "development assay authority and assay future-value policy must agree"
166
+ )
167
+
168
+
169
+ def campaign_regret_bounded_information_controls_from_environment(
170
+ environ: Mapping[str, str],
171
+ ) -> RegretBoundedInformationControls:
172
+ """Read a safe-by-default RBIE arm without workload-specific knowledge."""
173
+
174
+ ratio = _finite_environment_float(
175
+ environ,
176
+ REGRET_MINIMUM_ACQUISITION_RETENTION_RATIO_ENV,
177
+ default=1.0,
178
+ )
179
+ assert ratio is not None
180
+ residual_audit_raw = environ.get(
181
+ REGRET_MINIMUM_RESIDUAL_AUDIT_MEMBERS_ENV,
182
+ "0",
183
+ )
184
+ if not residual_audit_raw.isascii() or not residual_audit_raw.isdigit():
185
+ raise ValueError(
186
+ f"{REGRET_MINIMUM_RESIDUAL_AUDIT_MEMBERS_ENV} must contain decimal digits"
187
+ )
188
+ residual_audit_members = int(residual_audit_raw)
189
+ assay_value = _finite_environment_float(
190
+ environ,
191
+ REGRET_RESIDUAL_ASSAY_VALUE_ENV,
192
+ default=None,
193
+ )
194
+ calibration_error = _finite_environment_float(
195
+ environ,
196
+ REGRET_CALIBRATION_ERROR_BOUND_ENV,
197
+ default=None,
198
+ )
199
+ allow_raw = environ.get(REGRET_ALLOW_DEVELOPMENT_ASSAY_ENV, "0")
200
+ if allow_raw not in {"0", "1"}:
201
+ raise ValueError(
202
+ f"{REGRET_ALLOW_DEVELOPMENT_ASSAY_ENV} must be exactly 0 or 1"
203
+ )
204
+ allow_assay = allow_raw == "1"
205
+ if assay_value is not None and assay_value <= 0.0:
206
+ raise ValueError(f"{REGRET_RESIDUAL_ASSAY_VALUE_ENV} must be positive")
207
+ future_value_policy: SlateFutureValuePolicy = (
208
+ ZeroSlateFutureValuePolicy()
209
+ if assay_value is None
210
+ else ResidualInformationAssayValuePolicy(float(assay_value))
211
+ )
212
+ return RegretBoundedInformationControls(
213
+ minimum_acquisition_retention_ratio=float(ratio),
214
+ minimum_residual_audit_members=residual_audit_members,
215
+ future_value_policy=future_value_policy,
216
+ calibration_error_bound=(
217
+ None if calibration_error is None else float(calibration_error)
218
+ ),
219
+ allow_development_assay=allow_assay,
220
+ )
221
+
222
+
223
+ def campaign_constraint_decoupled_acquisition_from_environment(
224
+ environ: Mapping[str, str],
225
+ ) -> bool:
226
+ """Read the shared opt-in for engine-reconciled semantic proposals."""
227
+
228
+ raw = environ.get(CONSTRAINT_DECOUPLED_ACQUISITION_ENV, "0")
229
+ if raw not in {"0", "1"}:
230
+ raise ValueError(
231
+ f"{CONSTRAINT_DECOUPLED_ACQUISITION_ENV} must be exactly 0 or 1"
232
+ )
233
+ return raw == "1"
234
+
235
+
236
+ def campaign_minimum_intervention_projection_from_environment(
237
+ environ: Mapping[str, str],
238
+ ) -> bool:
239
+ """Read the shared opt-in for minimum-intervention semantic projection."""
240
+
241
+ raw = environ.get(MINIMUM_INTERVENTION_PROJECTION_ENV, "0")
242
+ if raw not in {"0", "1"}:
243
+ raise ValueError(
244
+ f"{MINIMUM_INTERVENTION_PROJECTION_ENV} must be exactly 0 or 1"
245
+ )
246
+ return raw == "1"
247
+
248
+
249
+ def campaign_evidence_calibrated_source_mix_from_environment(
250
+ environ: Mapping[str, str],
251
+ ) -> bool:
252
+ """Read the shared opt-in for a protected global proposal source."""
253
+
254
+ raw = environ.get(EVIDENCE_CALIBRATED_SOURCE_MIX_ENV, "0")
255
+ if raw not in {"0", "1"}:
256
+ raise ValueError(
257
+ f"{EVIDENCE_CALIBRATED_SOURCE_MIX_ENV} must be exactly 0 or 1"
258
+ )
259
+ return raw == "1"
260
+
261
+
262
+ def campaign_contextual_search_allocation_from_environment(
263
+ environ: Mapping[str, str],
264
+ ) -> bool:
265
+ """Read the shared opt-in for prior-only source/operator allocation."""
266
+
267
+ raw = environ.get(CONTEXTUAL_SEARCH_ALLOCATION_ENV, "0")
268
+ if raw not in {"0", "1"}:
269
+ raise ValueError(
270
+ f"{CONTEXTUAL_SEARCH_ALLOCATION_ENV} must be exactly 0 or 1"
271
+ )
272
+ return raw == "1"
273
+
274
+
275
+ def campaign_residual_frontier_planning_from_environment(
276
+ environ: Mapping[str, str],
277
+ ) -> bool:
278
+ """Read the shared opt-in for joint residual-cell search planning."""
279
+
280
+ raw = environ.get(RESIDUAL_FRONTIER_PLANNING_ENV, "0")
281
+ if raw not in {"0", "1"}:
282
+ raise ValueError(
283
+ f"{RESIDUAL_FRONTIER_PLANNING_ENV} must be exactly 0 or 1"
284
+ )
285
+ return raw == "1"
286
+
287
+
288
+ def campaign_operator_assay_minimum_from_environment(
289
+ environ: Mapping[str, str],
290
+ ) -> int:
291
+ """Read the workload-neutral evaluator exposure floor."""
292
+
293
+ raw = environ.get(OPERATOR_ASSAY_MINIMUM_ENV, "1")
294
+ if not raw.isascii() or not raw.isdigit():
295
+ raise ValueError(f"{OPERATOR_ASSAY_MINIMUM_ENV} must be decimal digits")
296
+ value = int(raw)
297
+ if not 1 <= value <= 4:
298
+ raise ValueError(f"{OPERATOR_ASSAY_MINIMUM_ENV} must lie in [1, 4]")
299
+ return value
300
+
301
+
302
+ def build_campaign_acquisition_allocator(
303
+ mode: CampaignAcquisitionMode,
304
+ *,
305
+ common_pool_enabled: bool,
306
+ operator_assay_minimum: int = 1,
307
+ family_exposure_phases: tuple[FamilyExposurePhase, ...] | None = None,
308
+ target_conditioned_profile: TargetConditionedAcquisitionProfile | None = None,
309
+ target_conditioned_context_provider: (
310
+ TargetConditionedAllocationContextProvider | None
311
+ ) = None,
312
+ acquisition_certification_context_provider: (
313
+ AcquisitionCertifiedSlateContextProvider | None
314
+ ) = None,
315
+ acquisition_batch_scorer: FiniteAcquisitionBatchScorePolicy | None = None,
316
+ regret_minimum_acquisition_retention_ratio: float = 1.0,
317
+ regret_minimum_residual_audit_members: int = 0,
318
+ regret_future_value_policy: SlateFutureValuePolicy | None = None,
319
+ regret_calibration_error_bound: float | None = None,
320
+ regret_allow_development_assay: bool = False,
321
+ ) -> CalibratedPortfolioAllocator:
322
+ """Build one exact allocator without benchmark-specific parameters."""
323
+
324
+ if type(mode) is not CampaignAcquisitionMode:
325
+ raise TypeError("mode must be an exact CampaignAcquisitionMode")
326
+ if type(common_pool_enabled) is not bool:
327
+ raise TypeError("common_pool_enabled must be an exact bool")
328
+ if (
329
+ type(operator_assay_minimum) is not int
330
+ or not 1 <= operator_assay_minimum <= 4
331
+ ):
332
+ raise ValueError("operator_assay_minimum must lie in [1, 4]")
333
+ if (
334
+ mode is not CampaignAcquisitionMode.OPERATOR_STRATIFIED
335
+ and operator_assay_minimum != 1
336
+ ):
337
+ raise ValueError(
338
+ "operator_assay_minimum is configurable only for operator_stratified"
339
+ )
340
+ if (
341
+ mode is CampaignAcquisitionMode.HORIZON_BOUNDED
342
+ and family_exposure_phases is None
343
+ ):
344
+ raise ValueError("horizon_bounded requires explicit family_exposure_phases")
345
+ if (
346
+ mode is not CampaignAcquisitionMode.HORIZON_BOUNDED
347
+ and family_exposure_phases is not None
348
+ ):
349
+ raise ValueError(
350
+ "family_exposure_phases are configurable only for horizon_bounded"
351
+ )
352
+ if mode is CampaignAcquisitionMode.TARGET_CONDITIONED:
353
+ if not common_pool_enabled:
354
+ raise ValueError(
355
+ "target-conditioned K8-to-K4 acquisition requires a common pool"
356
+ )
357
+ if type(target_conditioned_profile) is not (
358
+ TargetConditionedAcquisitionProfile
359
+ ):
360
+ raise TypeError("target-conditioned mode requires one exact profile")
361
+ if target_conditioned_context_provider is None:
362
+ target_conditioned_context_provider = (
363
+ RegisteredTargetConditionedAllocationContextProvider()
364
+ )
365
+ return TargetConditionedSlateAllocatorAdapter(
366
+ context_provider=target_conditioned_context_provider,
367
+ profile=target_conditioned_profile,
368
+ )
369
+ if mode in {
370
+ CampaignAcquisitionMode.ACQUISITION_CERTIFIED,
371
+ CampaignAcquisitionMode.REGRET_BOUNDED_INFORMATION,
372
+ }:
373
+ if not common_pool_enabled:
374
+ raise ValueError(
375
+ "acquisition-certified K8-to-K4 allocation requires a common pool"
376
+ )
377
+ if not isinstance(
378
+ acquisition_certification_context_provider,
379
+ AcquisitionCertifiedSlateContextProvider,
380
+ ):
381
+ raise TypeError(
382
+ "acquisition-certified mode requires its context provider"
383
+ )
384
+ if not isinstance(acquisition_batch_scorer, FiniteAcquisitionBatchScorePolicy):
385
+ raise TypeError("acquisition-certified mode requires its batch scorer")
386
+ if mode is CampaignAcquisitionMode.ACQUISITION_CERTIFIED:
387
+ if (
388
+ regret_minimum_acquisition_retention_ratio != 1.0
389
+ or regret_minimum_residual_audit_members != 0
390
+ or regret_future_value_policy is not None
391
+ or regret_calibration_error_bound is not None
392
+ or regret_allow_development_assay
393
+ ):
394
+ raise ValueError("regret controls require regret-bounded mode")
395
+ return AcquisitionCertifiedSlatePolicy(
396
+ context_provider=acquisition_certification_context_provider,
397
+ scorer=acquisition_batch_scorer,
398
+ )
399
+ return RegretBoundedSlatePolicy(
400
+ context_provider=acquisition_certification_context_provider,
401
+ scorer=acquisition_batch_scorer,
402
+ future_value_policy=(
403
+ ZeroSlateFutureValuePolicy()
404
+ if regret_future_value_policy is None
405
+ else regret_future_value_policy
406
+ ),
407
+ minimum_acquisition_retention_ratio=(
408
+ regret_minimum_acquisition_retention_ratio
409
+ ),
410
+ minimum_residual_audit_members=(
411
+ regret_minimum_residual_audit_members
412
+ ),
413
+ calibration_error_bound=regret_calibration_error_bound,
414
+ allow_development_assay=regret_allow_development_assay,
415
+ )
416
+ if (
417
+ target_conditioned_profile is not None
418
+ or target_conditioned_context_provider is not None
419
+ ):
420
+ raise ValueError(
421
+ "target-conditioned components are valid only for their exact mode"
422
+ )
423
+ if (
424
+ acquisition_certification_context_provider is not None
425
+ or acquisition_batch_scorer is not None
426
+ ):
427
+ raise ValueError(
428
+ "certified-acquisition components are valid only for their exact mode"
429
+ )
430
+ if (
431
+ regret_minimum_acquisition_retention_ratio != 1.0
432
+ or regret_minimum_residual_audit_members != 0
433
+ or regret_future_value_policy is not None
434
+ or regret_calibration_error_bound is not None
435
+ or regret_allow_development_assay
436
+ ):
437
+ raise ValueError("regret controls require regret-bounded mode")
438
+ if not common_pool_enabled:
439
+ if mode is not CampaignAcquisitionMode.FULL_SUPPORT:
440
+ raise ValueError(
441
+ "K8-to-K4 acquisition requires the common candidate-pool contract"
442
+ )
443
+ return FullSupportSlatePolicy()
444
+ if mode is CampaignAcquisitionMode.FULL_SUPPORT:
445
+ raise ValueError("full-support K8 evaluation is incompatible with K4 width")
446
+ if mode is CampaignAcquisitionMode.MODEL_TOP_K:
447
+ return ModelAnchoredCalibratedSlatePolicy(model_anchor_count=4)
448
+ if mode is CampaignAcquisitionMode.OPERATOR_STRATIFIED:
449
+ return OperatorStratifiedStructuralPosteriorSlatePolicy(
450
+ ((COMPOSITE_OPTION_FAMILY, operator_assay_minimum),)
451
+ )
452
+ if mode is CampaignAcquisitionMode.HORIZON_BOUNDED:
453
+ assert family_exposure_phases is not None
454
+ return HorizonBoundedStructuralPosteriorSlatePolicy(
455
+ family_exposure_phases
456
+ )
457
+ return StructuralPosteriorSlatePolicy()
458
+
459
+
460
+ def build_campaign_proposal_support_policy(
461
+ mode: CampaignAcquisitionMode,
462
+ *,
463
+ common_pool_enabled: bool,
464
+ ) -> StructuralProposalSupportPolicy | None:
465
+ """Build the proposal-support stage paired with one acquisition mode."""
466
+
467
+ if type(mode) is not CampaignAcquisitionMode:
468
+ raise TypeError("mode must be an exact CampaignAcquisitionMode")
469
+ if type(common_pool_enabled) is not bool:
470
+ raise TypeError("common_pool_enabled must be an exact bool")
471
+ if mode in {
472
+ CampaignAcquisitionMode.HIERARCHICAL_SUPPORT,
473
+ CampaignAcquisitionMode.OPERATOR_STRATIFIED,
474
+ CampaignAcquisitionMode.HORIZON_BOUNDED,
475
+ CampaignAcquisitionMode.TARGET_CONDITIONED,
476
+ }:
477
+ if not common_pool_enabled:
478
+ raise ValueError(
479
+ "hierarchical proposal support requires the common candidate pool"
480
+ )
481
+ return StructuralProposalSupportPolicy()
482
+ return None
483
+
484
+
485
+ def campaign_selector_policy_definition_sha256(
486
+ allocator: CalibratedPortfolioAllocator,
487
+ *,
488
+ constraint_decoupled: bool = False,
489
+ minimum_intervention_projection: bool = False,
490
+ evidence_calibrated_source_mix: bool = False,
491
+ contextual_search_allocation: bool = False,
492
+ ) -> str:
493
+ """Return the outer adapter identity paired with an exact allocator."""
494
+
495
+ if type(constraint_decoupled) is not bool:
496
+ raise TypeError("constraint_decoupled must be an exact bool")
497
+ if type(minimum_intervention_projection) is not bool:
498
+ raise TypeError("minimum_intervention_projection must be an exact bool")
499
+ if type(evidence_calibrated_source_mix) is not bool:
500
+ raise TypeError("evidence_calibrated_source_mix must be an exact bool")
501
+ if type(contextual_search_allocation) is not bool:
502
+ raise TypeError("contextual_search_allocation must be an exact bool")
503
+ if contextual_search_allocation and not evidence_calibrated_source_mix:
504
+ raise ValueError(
505
+ "contextual search allocation requires evidence-calibrated source mix"
506
+ )
507
+ if evidence_calibrated_source_mix and not minimum_intervention_projection:
508
+ raise ValueError(
509
+ "evidence-calibrated source mix requires minimum intervention"
510
+ )
511
+ if minimum_intervention_projection and not constraint_decoupled:
512
+ raise ValueError(
513
+ "minimum intervention requires constraint-decoupled acquisition"
514
+ )
515
+ if contextual_search_allocation:
516
+ if type(allocator) is not HorizonBoundedStructuralPosteriorSlatePolicy:
517
+ raise ValueError(
518
+ "contextual search allocation requires the horizon-bounded "
519
+ "allocator"
520
+ )
521
+ return (
522
+ CONTEXTUAL_SEARCH_ALLOCATION_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
523
+ )
524
+ if evidence_calibrated_source_mix:
525
+ if type(allocator) is not HorizonBoundedStructuralPosteriorSlatePolicy:
526
+ raise ValueError(
527
+ "evidence-calibrated source mix requires the horizon-bounded "
528
+ "allocator"
529
+ )
530
+ return (
531
+ EVIDENCE_CALIBRATED_SOURCE_MIX_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
532
+ )
533
+ if minimum_intervention_projection:
534
+ if type(allocator) is not HorizonBoundedStructuralPosteriorSlatePolicy:
535
+ raise ValueError(
536
+ "minimum intervention requires the horizon-bounded allocator"
537
+ )
538
+ return (
539
+ MINIMUM_INTERVENTION_HORIZON_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
540
+ )
541
+ if constraint_decoupled:
542
+ if type(allocator) is AcquisitionCertifiedSlatePolicy:
543
+ return (
544
+ ACQUISITION_CERTIFIED_RESIDUAL_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
545
+ )
546
+ if type(allocator) is RegretBoundedSlatePolicy:
547
+ return (
548
+ REGRET_BOUNDED_INFORMATION_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
549
+ )
550
+ if type(allocator) is TargetConditionedSlateAllocatorAdapter:
551
+ return (
552
+ CONSTRAINT_DECOUPLED_TARGET_CONDITIONED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
553
+ )
554
+ if type(allocator) is not HorizonBoundedStructuralPosteriorSlatePolicy:
555
+ raise ValueError(
556
+ "constraint-decoupled acquisition requires the horizon-bounded "
557
+ "or target-conditioned allocator"
558
+ )
559
+ return (
560
+ CONSTRAINT_DECOUPLED_HORIZON_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
561
+ )
562
+
563
+ if type(allocator) is FullSupportSlatePolicy:
564
+ return FULL_SUPPORT_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
565
+ if type(allocator) is ModelAnchoredCalibratedSlatePolicy:
566
+ return MODEL_ANCHORED_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
567
+ if type(allocator) is StructuralPosteriorSlatePolicy:
568
+ return (
569
+ STRUCTURAL_POSTERIOR_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
570
+ )
571
+ if type(allocator) is OperatorStratifiedStructuralPosteriorSlatePolicy:
572
+ return (
573
+ OPERATOR_STRATIFIED_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
574
+ )
575
+ if type(allocator) is HorizonBoundedStructuralPosteriorSlatePolicy:
576
+ return (
577
+ HORIZON_BOUNDED_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
578
+ )
579
+ if type(allocator) is TargetConditionedSlateAllocatorAdapter:
580
+ return (
581
+ TARGET_CONDITIONED_CALIBRATED_PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
582
+ )
583
+ raise TypeError("allocator is not a supported campaign acquisition policy")
584
+
585
+
586
+ __all__ = [
587
+ "CampaignAcquisitionMode",
588
+ "CONSTRAINT_DECOUPLED_ACQUISITION_ENV",
589
+ "CONTEXTUAL_SEARCH_ALLOCATION_ENV",
590
+ "EVIDENCE_CALIBRATED_SOURCE_MIX_ENV",
591
+ "MINIMUM_INTERVENTION_PROJECTION_ENV",
592
+ "OPERATOR_ASSAY_MINIMUM_ENV",
593
+ "RESIDUAL_FRONTIER_PLANNING_ENV",
594
+ "REGRET_ALLOW_DEVELOPMENT_ASSAY_ENV",
595
+ "REGRET_CALIBRATION_ERROR_BOUND_ENV",
596
+ "REGRET_MINIMUM_ACQUISITION_RETENTION_RATIO_ENV",
597
+ "REGRET_RESIDUAL_ASSAY_VALUE_ENV",
598
+ "RegretBoundedInformationControls",
599
+ "build_campaign_acquisition_allocator",
600
+ "build_campaign_proposal_support_policy",
601
+ "campaign_constraint_decoupled_acquisition_from_environment",
602
+ "campaign_contextual_search_allocation_from_environment",
603
+ "campaign_evidence_calibrated_source_mix_from_environment",
604
+ "campaign_minimum_intervention_projection_from_environment",
605
+ "campaign_operator_assay_minimum_from_environment",
606
+ "campaign_residual_frontier_planning_from_environment",
607
+ "campaign_regret_bounded_information_controls_from_environment",
608
+ "campaign_selector_policy_definition_sha256",
609
+ ]