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,485 @@
1
+ """Generic campaign-side construction of calibrated portfolio inputs.
2
+
3
+ This module joins campaign-owned facts before a selector call. It has no
4
+ provider dependency and no workload vocabulary: benchmark adapters keep
5
+ owning candidate generation and evaluation, while this factory binds their
6
+ finite palette to prior-wave calibration and structural evidence.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import hashlib
12
+ import json
13
+ from collections import Counter
14
+ from dataclasses import dataclass, field
15
+
16
+ from agent_evolve.application.evolution_campaign import ParentVariationBinding
17
+ from agent_evolve.application.portfolio_outcome_feedback import (
18
+ PortfolioOutcomeFeedbackLedger,
19
+ )
20
+ from agent_evolve.core.optimization_semantics import (
21
+ MetricRole,
22
+ MetricSense,
23
+ OptimizationSemantics,
24
+ )
25
+ from agent_evolve.core.problem import ObjectiveSpec, validate_objective_specs
26
+ from agent_evolve.domain.patch import require_sha256
27
+ from agent_evolve.policies.selection.calibrated_portfolio_binding import (
28
+ CalibratedPortfolioAllocationContext,
29
+ CalibratedPortfolioInputBinding,
30
+ common_pool_required_option_ids,
31
+ proposal_support_candidates,
32
+ )
33
+ from agent_evolve.policies.selection.common_candidate_pool import (
34
+ TaskKeyedCommonCandidatePoolPolicy,
35
+ )
36
+ from agent_evolve.policies.selection.calibrated_slate import (
37
+ MetricOptimizationGoal,
38
+ SlateMetricObjective,
39
+ )
40
+ from agent_evolve.policies.selection.finite_palette_evidence import (
41
+ FinitePaletteStructuralEvidencePolicy,
42
+ FinitePaletteStructuralEvidenceRequest,
43
+ )
44
+ from agent_evolve.policies.selection.finite_option_prompt_projection import (
45
+ FiniteOptionPromptProjectionPolicy,
46
+ )
47
+ from agent_evolve.policies.selection.forecast_calibration import (
48
+ BetaCorrectnessPrior,
49
+ ForecastCalibrationScope,
50
+ )
51
+ from agent_evolve.policies.selection.proposal_support import (
52
+ StructuralProposalSupportPolicy,
53
+ )
54
+ from agent_evolve.ports.decision_metric_projection import DecisionMetricProjection
55
+ from agent_evolve.ports.portfolio_selection import PortfolioSelectionRequest
56
+ from agent_evolve.ports.portfolio_selection import (
57
+ pairwise_disjoint_parent_patch_pairs,
58
+ single_path_parent_patch_option_ids,
59
+ )
60
+ from agent_evolve.ports.contextual_search_allocation import (
61
+ ContextualPortfolioAllocationContract,
62
+ )
63
+ from agent_evolve.ports.variation_source import (
64
+ finite_variation_operator_id,
65
+ finite_variation_source_id,
66
+ )
67
+
68
+
69
+ _OBJECTIVE_DOMAIN = b"agent-evolve:equal-weight-slate-objective:v1\x00"
70
+ _SEMANTIC_OBJECTIVE_DOMAIN = (
71
+ b"agent-evolve:equal-weight-semantic-slate-objective:v1\x00"
72
+ )
73
+
74
+
75
+ def _contextual_feasibility_witness_option_ids(
76
+ *,
77
+ variation: ParentVariationBinding,
78
+ allocation: ContextualPortfolioAllocationContract | None,
79
+ ) -> tuple[str, ...]:
80
+ """Recover and revalidate the controller's exact current-contract witness.
81
+
82
+ Candidate-pool screening is allowed to shrink semantic-forecast work, but
83
+ it may not erase the only slate known to realize a prospectively selected
84
+ source/operator allocation. The controller exposes only authenticated
85
+ option identities; this boundary resolves them to request-local opaque IDs
86
+ and independently checks all generic count and patch constraints.
87
+ """
88
+
89
+ if allocation is None or not (
90
+ allocation.feasibility_witness_option_identity_sha256s
91
+ ):
92
+ return ()
93
+ allocation.__post_init__()
94
+ option_by_identity = {
95
+ value.identity_sha256: value for value in variation.contract.options
96
+ }
97
+ identities = allocation.feasibility_witness_option_identity_sha256s
98
+ try:
99
+ options = tuple(option_by_identity[value] for value in identities)
100
+ except KeyError as error:
101
+ raise ValueError(
102
+ "contextual feasibility witness escapes the finite variation contract"
103
+ ) from error
104
+ option_ids = tuple(sorted(value.option_id for value in options))
105
+ source_counts = tuple(
106
+ sorted(Counter(finite_variation_source_id(value) for value in options).items())
107
+ )
108
+ operator_counts = tuple(
109
+ sorted(Counter(finite_variation_operator_id(value) for value in options).items())
110
+ )
111
+
112
+ def with_zero_arms(
113
+ observed: tuple[tuple[str, int], ...],
114
+ requested: tuple[tuple[str, int], ...],
115
+ ) -> tuple[tuple[str, int], ...]:
116
+ counts = dict(observed)
117
+ return tuple((arm_id, counts.get(arm_id, 0)) for arm_id, _ in requested)
118
+
119
+ if (
120
+ with_zero_arms(source_counts, allocation.source_target_counts)
121
+ != allocation.source_target_counts
122
+ or with_zero_arms(operator_counts, allocation.operator_target_counts)
123
+ != allocation.operator_target_counts
124
+ ):
125
+ raise ValueError(
126
+ "contextual feasibility witness differs from its source/operator targets"
127
+ )
128
+ if len(
129
+ single_path_parent_patch_option_ids(variation.contract, option_ids)
130
+ ) < allocation.minimum_single_path_interventions:
131
+ raise ValueError(
132
+ "contextual feasibility witness violates its intervention floor"
133
+ )
134
+ if len(
135
+ pairwise_disjoint_parent_patch_pairs(variation.contract, option_ids)
136
+ ) < allocation.minimum_disjoint_parent_patch_pairs:
137
+ raise ValueError(
138
+ "contextual feasibility witness violates its offspring-opportunity floor"
139
+ )
140
+ return option_ids
141
+
142
+
143
+ def _canonical_json(value: object) -> bytes:
144
+ return json.dumps(
145
+ value,
146
+ allow_nan=False,
147
+ ensure_ascii=True,
148
+ separators=(",", ":"),
149
+ sort_keys=True,
150
+ ).encode("ascii", errors="strict")
151
+
152
+
153
+ def equal_weight_slate_objectives(
154
+ objectives: tuple[ObjectiveSpec, ...],
155
+ ) -> tuple[SlateMetricObjective, ...]:
156
+ """Project benchmark objective senses without introducing scalar priority."""
157
+
158
+ if type(objectives) is not tuple or any(
159
+ type(value) is not ObjectiveSpec for value in objectives
160
+ ):
161
+ raise TypeError("objectives must contain exact ObjectiveSpec values")
162
+ validate_objective_specs(objectives)
163
+ results = []
164
+ for objective in sorted(objectives, key=lambda value: value.name):
165
+ record = {
166
+ "schema_version": 1,
167
+ "metric_id": objective.name,
168
+ "benchmark_goal": objective.goal,
169
+ "weight_hex": (1.0).hex(),
170
+ "weight_law": "equal_per_metric_no_scalar_objective_claim",
171
+ }
172
+ results.append(
173
+ SlateMetricObjective(
174
+ metric_id=objective.name,
175
+ goal=(
176
+ MetricOptimizationGoal.MINIMIZE
177
+ if objective.goal == "min"
178
+ else MetricOptimizationGoal.MAXIMIZE
179
+ ),
180
+ weight=1.0,
181
+ definition_sha256=hashlib.sha256(
182
+ _OBJECTIVE_DOMAIN + _canonical_json(record)
183
+ ).hexdigest(),
184
+ )
185
+ )
186
+ return tuple(results)
187
+
188
+
189
+ def equal_weight_slate_objectives_from_decision_metrics(
190
+ projection: DecisionMetricProjection,
191
+ ) -> tuple[SlateMetricObjective, ...]:
192
+ """Build equal-weight slate goals from one outcome projection.
193
+
194
+ Only monotone ``MINIMIZE``/``MAXIMIZE`` senses have an honest mapping to
195
+ the allocator's goal vocabulary. Target, bounded-satisfaction, and
196
+ informational metrics fail closed rather than being silently scalarized.
197
+ """
198
+
199
+ if type(projection) is not DecisionMetricProjection:
200
+ raise TypeError("projection must be exact DecisionMetricProjection")
201
+ projection.__post_init__()
202
+ results: list[SlateMetricObjective] = []
203
+ for metric in projection.metrics:
204
+ if metric.sense is MetricSense.MINIMIZE:
205
+ goal = MetricOptimizationGoal.MINIMIZE
206
+ benchmark_goal = "min"
207
+ elif metric.sense is MetricSense.MAXIMIZE:
208
+ goal = MetricOptimizationGoal.MAXIMIZE
209
+ benchmark_goal = "max"
210
+ else:
211
+ raise ValueError(
212
+ "decision metric has no meaningful min/max slate mapping: "
213
+ f"{metric.metric_id} ({metric.sense.value})"
214
+ )
215
+ if (
216
+ projection.objective_only_legacy_metric_ids
217
+ and metric.role is MetricRole.OBJECTIVE
218
+ ):
219
+ # Deliberately reproduce the historical ObjectiveSpec helper's
220
+ # exact authenticated record for objective-only benchmarks.
221
+ record = {
222
+ "schema_version": 1,
223
+ "metric_id": metric.metric_id,
224
+ "benchmark_goal": benchmark_goal,
225
+ "weight_hex": (1.0).hex(),
226
+ "weight_law": "equal_per_metric_no_scalar_objective_claim",
227
+ }
228
+ domain = _OBJECTIVE_DOMAIN
229
+ else:
230
+ record = {
231
+ "schema_version": 1,
232
+ "projection_definition_sha256": projection.definition_sha256,
233
+ "metric": metric.to_record(),
234
+ "goal": goal.value,
235
+ "weight_hex": (1.0).hex(),
236
+ "weight_law": "equal_per_decision_metric_no_scalar_priority_claim",
237
+ }
238
+ domain = _SEMANTIC_OBJECTIVE_DOMAIN
239
+ results.append(
240
+ SlateMetricObjective(
241
+ metric_id=metric.metric_id,
242
+ goal=goal,
243
+ weight=1.0,
244
+ definition_sha256=hashlib.sha256(
245
+ domain + _canonical_json(record)
246
+ ).hexdigest(),
247
+ )
248
+ )
249
+ return tuple(results)
250
+
251
+
252
+ def equal_weight_slate_objectives_from_optimization_semantics(
253
+ semantics: OptimizationSemantics,
254
+ ) -> tuple[SlateMetricObjective, ...]:
255
+ """Project benchmark semantics into the calibrated allocator's goals."""
256
+
257
+ return equal_weight_slate_objectives_from_decision_metrics(
258
+ DecisionMetricProjection.from_optimization_semantics(semantics)
259
+ )
260
+
261
+
262
+ @dataclass(slots=True)
263
+ class CalibratedCampaignBindingFactory:
264
+ """Create one immutable pre-provider K8→K4 binding per campaign wave."""
265
+
266
+ scope: ForecastCalibrationScope
267
+ objectives: tuple[SlateMetricObjective, ...]
268
+ ledger: PortfolioOutcomeFeedbackLedger
269
+ structural_evidence: FinitePaletteStructuralEvidencePolicy = field(
270
+ default_factory=FinitePaletteStructuralEvidencePolicy
271
+ )
272
+ prior: BetaCorrectnessPrior = field(default_factory=BetaCorrectnessPrior)
273
+ family_min_support: int = 4
274
+ option_prompt_projection: FiniteOptionPromptProjectionPolicy | None = None
275
+ common_candidate_pool_policy: TaskKeyedCommonCandidatePoolPolicy | None = None
276
+ proposal_support_policy: StructuralProposalSupportPolicy | None = None
277
+ assign_all_cards_by_default: bool = True
278
+
279
+ def __post_init__(self) -> None:
280
+ if type(self.scope) is not ForecastCalibrationScope:
281
+ raise TypeError("scope must be exact ForecastCalibrationScope")
282
+ self.scope.revalidate()
283
+ if (
284
+ type(self.objectives) is not tuple
285
+ or not self.objectives
286
+ or any(type(value) is not SlateMetricObjective for value in self.objectives)
287
+ ):
288
+ raise ValueError("objectives must contain exact slate objectives")
289
+ for value in self.objectives:
290
+ value.__post_init__()
291
+ metric_ids = tuple(value.metric_id for value in self.objectives)
292
+ if metric_ids != tuple(sorted(set(metric_ids))):
293
+ raise ValueError("objectives must use unique canonical metric order")
294
+ if type(self.ledger) is not PortfolioOutcomeFeedbackLedger:
295
+ raise TypeError("ledger must be exact PortfolioOutcomeFeedbackLedger")
296
+ if type(self.structural_evidence) is not FinitePaletteStructuralEvidencePolicy:
297
+ raise TypeError("structural_evidence must be exact finite-palette policy")
298
+ self.structural_evidence.__post_init__()
299
+ if type(self.prior) is not BetaCorrectnessPrior:
300
+ raise TypeError("prior must be exact BetaCorrectnessPrior")
301
+ self.prior.__post_init__()
302
+ if type(self.family_min_support) is not int or self.family_min_support <= 0:
303
+ raise ValueError("family_min_support must be positive")
304
+ if self.option_prompt_projection is not None:
305
+ if (
306
+ type(self.option_prompt_projection)
307
+ is not FiniteOptionPromptProjectionPolicy
308
+ ):
309
+ raise TypeError(
310
+ "option_prompt_projection must be exact projection policy"
311
+ )
312
+ self.option_prompt_projection.__post_init__()
313
+ if self.common_candidate_pool_policy is not None:
314
+ if type(self.common_candidate_pool_policy) is not (
315
+ TaskKeyedCommonCandidatePoolPolicy
316
+ ):
317
+ raise TypeError(
318
+ "common_candidate_pool_policy must be an exact policy or None"
319
+ )
320
+ self.common_candidate_pool_policy.__post_init__()
321
+ if self.proposal_support_policy is not None:
322
+ if type(self.proposal_support_policy) is not (
323
+ StructuralProposalSupportPolicy
324
+ ):
325
+ raise TypeError(
326
+ "proposal_support_policy must be an exact policy or None"
327
+ )
328
+ self.proposal_support_policy.__post_init__()
329
+ if self.common_candidate_pool_policy is None:
330
+ raise ValueError(
331
+ "proposal support requires a common candidate-pool policy"
332
+ )
333
+ if type(self.assign_all_cards_by_default) is not bool:
334
+ raise TypeError("assign_all_cards_by_default must be an exact bool")
335
+
336
+ def build(
337
+ self,
338
+ *,
339
+ request: PortfolioSelectionRequest,
340
+ variation: ParentVariationBinding,
341
+ wave_index: int,
342
+ frozen_archive_snapshot_sha256: str,
343
+ assigned_card_keys: tuple[str, ...] | None = None,
344
+ contextual_allocation: ContextualPortfolioAllocationContract | None = None,
345
+ ) -> CalibratedPortfolioInputBinding:
346
+ """Bind request, cutoff, palette evidence, and prior calibration exactly."""
347
+
348
+ self.__post_init__()
349
+ if type(request) is not PortfolioSelectionRequest:
350
+ raise TypeError("request must be exact PortfolioSelectionRequest")
351
+ request.__post_init__()
352
+ if type(variation) is not ParentVariationBinding:
353
+ raise TypeError("variation must be exact ParentVariationBinding")
354
+ ParentVariationBinding.__post_init__(variation)
355
+ if request.finite_variation_contract != variation.contract:
356
+ raise ValueError("selection request differs from its campaign variation")
357
+ if self.scope.benchmark_sha256 != variation.benchmark_sha256:
358
+ raise ValueError("calibration scope names a foreign benchmark")
359
+ if type(wave_index) is not int or wave_index <= 0:
360
+ raise ValueError("wave_index must be a positive exact integer")
361
+ require_sha256(
362
+ frozen_archive_snapshot_sha256,
363
+ "frozen_archive_snapshot_sha256",
364
+ )
365
+ receipt = variation.eligibility_receipt
366
+ if receipt is None:
367
+ raise ValueError(
368
+ "calibrated campaign requires phenotype eligibility evidence"
369
+ )
370
+ receipt.__post_init__()
371
+ phenotype_by_option = {
372
+ value.option_id: (
373
+ value.option_identity_sha256,
374
+ value.phenotype_identity_sha256,
375
+ )
376
+ for value in receipt.option_phenotypes
377
+ }
378
+ option_phenotypes: list[tuple[str, str]] = []
379
+ for option in variation.contract.options:
380
+ source = phenotype_by_option.get(option.option_id)
381
+ if source is None or source[0] != option.identity_sha256:
382
+ raise ValueError(
383
+ "eligibility evidence differs from the finite contract"
384
+ )
385
+ option_phenotypes.append((option.option_id, source[1]))
386
+ evidence = self.structural_evidence.project(
387
+ FinitePaletteStructuralEvidenceRequest(
388
+ contract=variation.contract,
389
+ option_phenotype_sha256s=tuple(sorted(option_phenotypes)),
390
+ known_phenotype_sha256s=variation.known_phenotype_sha256s,
391
+ eligibility_receipt_sha256=receipt.receipt_sha256,
392
+ frozen_archive_snapshot_sha256=frozen_archive_snapshot_sha256,
393
+ )
394
+ )
395
+ if assigned_card_keys is None:
396
+ if request.memory_dose_contract is not None:
397
+ keys = request.memory_dose_contract.assigned_card_keys
398
+ elif self.assign_all_cards_by_default:
399
+ keys = tuple(sorted(card.card_key for card in request.cards))
400
+ else:
401
+ keys = ()
402
+ else:
403
+ keys = assigned_card_keys
404
+ if type(keys) is not tuple or keys != tuple(sorted(set(keys))):
405
+ raise ValueError("assigned_card_keys must be unique and canonical")
406
+ if not set(keys).issubset({card.card_key for card in request.cards}):
407
+ raise ValueError("assigned cards escape the selector request")
408
+ objective_ids = tuple(value.metric_id for value in self.objectives)
409
+ if objective_ids != request.required_metric_ids:
410
+ raise ValueError("slate objectives differ from requested metrics")
411
+ context = CalibratedPortfolioAllocationContext(
412
+ scope=self.scope,
413
+ wave_index=wave_index,
414
+ parent_candidate_identity_sha256=(variation.parent_configuration_sha256),
415
+ objectives=self.objectives,
416
+ assigned_card_keys=keys,
417
+ calibration_snapshot=self.ledger.calibration_snapshot(
418
+ scope=self.scope,
419
+ cutoff_wave_index_exclusive=wave_index,
420
+ prior=self.prior,
421
+ family_min_support=self.family_min_support,
422
+ ),
423
+ )
424
+ contextual_feasibility_witness_option_ids = (
425
+ _contextual_feasibility_witness_option_ids(
426
+ variation=variation,
427
+ allocation=contextual_allocation,
428
+ )
429
+ )
430
+ common_pool = (
431
+ None
432
+ if self.common_candidate_pool_policy is None
433
+ else self.common_candidate_pool_policy.select(
434
+ benchmark_sha256=self.scope.benchmark_sha256,
435
+ wave_index=wave_index,
436
+ parent_configuration_sha256=(
437
+ variation.parent_configuration_sha256
438
+ ),
439
+ contract=variation.contract,
440
+ evaluation_size=request.portfolio_size,
441
+ min_distinct_families=request.min_distinct_families,
442
+ require_pairwise_disjoint_parent_patches=(
443
+ request.require_pairwise_disjoint_parent_patches
444
+ ),
445
+ required_option_ids=common_pool_required_option_ids(request),
446
+ certified_feasibility_witness_option_ids=(
447
+ contextual_feasibility_witness_option_ids
448
+ ),
449
+ )
450
+ )
451
+ proposal_support = (
452
+ None
453
+ if self.proposal_support_policy is None
454
+ else self.proposal_support_policy.select(
455
+ request_sha256=request.request_sha256,
456
+ common_candidate_pool_decision_sha256=common_pool.decision_sha256,
457
+ model_selection_size=common_pool.model_selection_size,
458
+ candidates=proposal_support_candidates(
459
+ request,
460
+ evidence,
461
+ common_pool,
462
+ ),
463
+ )
464
+ )
465
+ return CalibratedPortfolioInputBinding(
466
+ request_sha256=request.request_sha256,
467
+ context=context,
468
+ option_evidence=evidence,
469
+ option_prompt_projection=(
470
+ None
471
+ if self.option_prompt_projection is None
472
+ else self.option_prompt_projection.project(variation.contract)
473
+ ),
474
+ common_candidate_pool=common_pool,
475
+ proposal_support=proposal_support,
476
+ contextual_allocation=contextual_allocation,
477
+ )
478
+
479
+
480
+ __all__ = [
481
+ "CalibratedCampaignBindingFactory",
482
+ "equal_weight_slate_objectives",
483
+ "equal_weight_slate_objectives_from_decision_metrics",
484
+ "equal_weight_slate_objectives_from_optimization_semantics",
485
+ ]