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,580 @@
1
+ """Transactional campaign adapter for outcome-adaptive residual evolution."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import hashlib
6
+ import json
7
+ import math
8
+ from dataclasses import dataclass, field
9
+
10
+ from agent_evolve.application.materialized_action_broker import (
11
+ MaterializedActionExplorationPort,
12
+ MaterializedActionReturnValuePort,
13
+ MaterializedSlateFeasibilityPort,
14
+ MaterializedSlateValuePort,
15
+ RegretBrokeredMaterializedActionPolicy,
16
+ )
17
+ from agent_evolve.application.outcome_adaptive_action_racing import (
18
+ OutcomeAdaptiveActionRacingPolicy,
19
+ )
20
+ from agent_evolve.application.outcome_adaptive_residual_portfolio_evolution import (
21
+ AdaptiveActionMarketProjectorPort,
22
+ AdaptiveActionOutcomeProjectorPort,
23
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_EVOLUTION_DEFINITION_SHA256,
24
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_SHADOW_EVOLUTION_DEFINITION_SHA256,
25
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_STRATIFIED_AUDIT_EVOLUTION_DEFINITION_SHA256,
26
+ OutcomeAdaptiveResidualPhaseCommitPort,
27
+ OutcomeAdaptiveResidualPortfolioEvolution,
28
+ OutcomeAdaptiveResidualPortfolioEvolutionResult,
29
+ )
30
+ from agent_evolve.application.protected_current_prefix_forecast_opportunity import (
31
+ ProtectedCurrentPrefixForecastOpportunityChallenger,
32
+ )
33
+ from agent_evolve.application.same_prefix_paired_audit import (
34
+ FORECAST_STRATIFIED_SAME_PREFIX_AUDIT_DESIGNER_ID,
35
+ ForecastOpportunitySamePrefixShadowDesignerPort,
36
+ SamePrefixPairedAuditDesignerPort,
37
+ )
38
+ from agent_evolve.application.prequential_residual_exploration import (
39
+ PrequentialLowDiscrepancyResidualExploration,
40
+ )
41
+ from agent_evolve.application.residual_campaign_runtime import (
42
+ ResidualArchiveTransitionPort,
43
+ ResidualCampaignStageReceipt,
44
+ commit_residual_campaign_stage,
45
+ )
46
+ from agent_evolve.application.residual_learning_transaction import (
47
+ TransactionalResidualLearningStore,
48
+ )
49
+ from agent_evolve.application.residual_portfolio_evolution import (
50
+ MaterializedActionAllocationPolicyPort,
51
+ MaterializedActionProposalExpertPort,
52
+ ResidualPortfolioDecisionRequest,
53
+ )
54
+ from agent_evolve.domain.patch import require_sha256
55
+
56
+
57
+ OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_ID = (
58
+ "transactional_outcome_adaptive_residual_portfolio_campaign"
59
+ )
60
+ OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_VERSION = 2
61
+ OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_DEFINITION_SHA256 = hashlib.sha256(
62
+ b"agent-evolve:transactional-outcome-adaptive-residual-campaign:v2;"
63
+ b"search=sealed-market-diagnostic-sequential-racing;"
64
+ b"diagnostic-allocation=optional-outcome-blind-required-action-policy;"
65
+ b"publication=shared-generic-residual-archive-learning-transaction;"
66
+ b"broker-cutoff=prior-learning-state-only;"
67
+ b"phase-interception=injected-optional-durable-commit-port;"
68
+ b"workload-objective-model-provider-prompt-config-branches=false"
69
+ ).hexdigest()
70
+ OUTCOME_ADAPTIVE_RESIDUAL_PAIRED_AUDIT_CAMPAIGN_RUNTIME_VERSION = 3
71
+ OUTCOME_ADAPTIVE_RESIDUAL_PAIRED_AUDIT_CAMPAIGN_RUNTIME_DEFINITION_SHA256 = (
72
+ hashlib.sha256(
73
+ b"agent-evolve:transactional-outcome-adaptive-residual-campaign:v3;"
74
+ b"base-definition="
75
+ + OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_DEFINITION_SHA256.encode(
76
+ "ascii"
77
+ )
78
+ + b";paired-audit=optional-same-prefix-distinct-arm-assay;"
79
+ b"publication=predeclared-authoritative-arm-only;"
80
+ b"physical-extra-evaluations=explicit;"
81
+ b"workload-objective-model-provider-prompt-config-branches=false"
82
+ ).hexdigest()
83
+ )
84
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_CAMPAIGN_RUNTIME_VERSION = 4
85
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_CAMPAIGN_RUNTIME_DEFINITION_SHA256 = (
86
+ hashlib.sha256(
87
+ b"agent-evolve:transactional-outcome-adaptive-residual-campaign:v4;"
88
+ b"base-definition="
89
+ + OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_DEFINITION_SHA256.encode(
90
+ "ascii"
91
+ )
92
+ + b";evolution-definition="
93
+ + OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_EVOLUTION_DEFINITION_SHA256.encode(
94
+ "ascii"
95
+ )
96
+ + b";continuation=protected-current-prefix-forecast-opportunity;"
97
+ b"publication=precommitted-authoritative-k-only;"
98
+ b"workload-objective-model-provider-prompt-config-branches=false"
99
+ ).hexdigest()
100
+ )
101
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_SHADOW_CAMPAIGN_RUNTIME_VERSION = 5
102
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_SHADOW_CAMPAIGN_RUNTIME_DEFINITION_SHA256 = (
103
+ hashlib.sha256(
104
+ b"agent-evolve:transactional-outcome-adaptive-residual-campaign:v5;"
105
+ b"base-definition="
106
+ + (
107
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_CAMPAIGN_RUNTIME_DEFINITION_SHA256
108
+ ).encode("ascii")
109
+ + b";evolution-definition="
110
+ + (
111
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_SHADOW_EVOLUTION_DEFINITION_SHA256
112
+ ).encode("ascii")
113
+ + b";shadow=final-step-same-prefix-challenger-vs-fallback;"
114
+ b"publication=precommitted-authoritative-k-only;"
115
+ b"calibration-observation=authenticated-causal-memory;"
116
+ b"workload-objective-model-provider-prompt-config-branches=false"
117
+ ).hexdigest()
118
+ )
119
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_STRATIFIED_AUDIT_CAMPAIGN_RUNTIME_VERSION = 6
120
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_STRATIFIED_AUDIT_CAMPAIGN_RUNTIME_DEFINITION_SHA256 = (
121
+ hashlib.sha256(
122
+ b"agent-evolve:transactional-outcome-adaptive-residual-campaign:v6;"
123
+ b"base-definition="
124
+ + (
125
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_CAMPAIGN_RUNTIME_DEFINITION_SHA256
126
+ ).encode("ascii")
127
+ + b";evolution-definition="
128
+ + (
129
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_STRATIFIED_AUDIT_EVOLUTION_DEFINITION_SHA256
130
+ ).encode("ascii")
131
+ + b";audit=hash-rotated-same-prefix-forecast-stratum;"
132
+ b"counterfactual-quarantine=enforced;"
133
+ b"publication=precommitted-authoritative-k-only;"
134
+ b"calibration-observation=paired-role-and-propensity-authenticated;"
135
+ b"workload-objective-model-provider-prompt-config-branches=false"
136
+ ).hexdigest()
137
+ )
138
+
139
+ _RECEIPT_DOMAIN = (
140
+ b"agent-evolve:outcome-adaptive-campaign-stage-receipt:v1\x00"
141
+ )
142
+
143
+
144
+ def _canonical_json(value: object) -> bytes:
145
+ return json.dumps(
146
+ value,
147
+ allow_nan=False,
148
+ ensure_ascii=True,
149
+ separators=(",", ":"),
150
+ sort_keys=True,
151
+ ).encode("ascii", errors="strict")
152
+
153
+
154
+ def _hash(domain: bytes, value: object) -> str:
155
+ return hashlib.sha256(domain + _canonical_json(value)).hexdigest()
156
+
157
+
158
+ @dataclass(frozen=True, slots=True)
159
+ class OutcomeAdaptiveResidualCampaignStageReceipt:
160
+ """Join one adaptive trace to its one archive/learning transaction."""
161
+
162
+ adaptive_result: OutcomeAdaptiveResidualPortfolioEvolutionResult
163
+ campaign_stage: ResidualCampaignStageReceipt
164
+ runtime_definition_sha256: str = (
165
+ OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_DEFINITION_SHA256
166
+ )
167
+ receipt_sha256: str = field(init=False)
168
+
169
+ def __post_init__(self) -> None:
170
+ if (
171
+ type(self.adaptive_result)
172
+ is not OutcomeAdaptiveResidualPortfolioEvolutionResult
173
+ ):
174
+ raise TypeError("adaptive_result must be exact")
175
+ self.adaptive_result.__post_init__()
176
+ if type(self.campaign_stage) is not ResidualCampaignStageReceipt:
177
+ raise TypeError("campaign_stage must be exact")
178
+ self.campaign_stage.__post_init__()
179
+ require_sha256(
180
+ self.runtime_definition_sha256,
181
+ "runtime_definition_sha256",
182
+ )
183
+ has_forecast = (
184
+ self.adaptive_result
185
+ .forecast_opportunity_challenger_definition_sha256
186
+ is not None
187
+ )
188
+ has_paired_assay = bool(
189
+ self.adaptive_result.paired_audit_executions
190
+ )
191
+ has_forecast_stratified_audit = any(
192
+ value.plan.designer_id
193
+ == FORECAST_STRATIFIED_SAME_PREFIX_AUDIT_DESIGNER_ID
194
+ for value in self.adaptive_result.paired_audit_executions
195
+ )
196
+ expected_runtime_definition_sha256 = (
197
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_STRATIFIED_AUDIT_CAMPAIGN_RUNTIME_DEFINITION_SHA256
198
+ if has_forecast_stratified_audit
199
+ else (
200
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_SHADOW_CAMPAIGN_RUNTIME_DEFINITION_SHA256
201
+ if has_forecast and has_paired_assay
202
+ else (
203
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_CAMPAIGN_RUNTIME_DEFINITION_SHA256
204
+ if has_forecast
205
+ else (
206
+ OUTCOME_ADAPTIVE_RESIDUAL_PAIRED_AUDIT_CAMPAIGN_RUNTIME_DEFINITION_SHA256
207
+ if has_paired_assay
208
+ else OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_DEFINITION_SHA256
209
+ )
210
+ )
211
+ )
212
+ )
213
+ if (
214
+ self.runtime_definition_sha256
215
+ != expected_runtime_definition_sha256
216
+ ):
217
+ raise ValueError(
218
+ "runtime definition differs from paired-audit execution mode"
219
+ )
220
+ if (
221
+ self.adaptive_result.result.result_sha256
222
+ != self.campaign_stage.result.result_sha256
223
+ ):
224
+ raise ValueError(
225
+ "adaptive trace and campaign transaction name "
226
+ "different results"
227
+ )
228
+ object.__setattr__(
229
+ self,
230
+ "receipt_sha256",
231
+ _hash(_RECEIPT_DOMAIN, self._unsigned_record()),
232
+ )
233
+
234
+ def _unsigned_record(self) -> dict[str, object]:
235
+ has_forecast = (
236
+ self.adaptive_result
237
+ .forecast_opportunity_challenger_definition_sha256
238
+ is not None
239
+ )
240
+ has_paired_assay = bool(
241
+ self.adaptive_result.paired_audit_executions
242
+ )
243
+ has_forecast_stratified_audit = any(
244
+ value.plan.designer_id
245
+ == FORECAST_STRATIFIED_SAME_PREFIX_AUDIT_DESIGNER_ID
246
+ for value in self.adaptive_result.paired_audit_executions
247
+ )
248
+ return {
249
+ "schema_version": 1,
250
+ "runtime": {
251
+ "runtime_id": (
252
+ OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_ID
253
+ ),
254
+ "runtime_version": (
255
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_STRATIFIED_AUDIT_CAMPAIGN_RUNTIME_VERSION
256
+ if has_forecast_stratified_audit
257
+ else (
258
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_SHADOW_CAMPAIGN_RUNTIME_VERSION
259
+ if has_forecast and has_paired_assay
260
+ else (
261
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_CAMPAIGN_RUNTIME_VERSION
262
+ if has_forecast
263
+ else (
264
+ OUTCOME_ADAPTIVE_RESIDUAL_PAIRED_AUDIT_CAMPAIGN_RUNTIME_VERSION
265
+ if has_paired_assay
266
+ else OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_VERSION
267
+ )
268
+ )
269
+ )
270
+ ),
271
+ "definition_sha256": self.runtime_definition_sha256,
272
+ },
273
+ "adaptive_result_sha256": (
274
+ self.adaptive_result.adaptive_result_sha256
275
+ ),
276
+ "campaign_stage_receipt_sha256": (
277
+ self.campaign_stage.receipt_sha256
278
+ ),
279
+ "shared_combined_result_sha256": (
280
+ self.campaign_stage.result.result_sha256
281
+ ),
282
+ "archive_and_learning_published_once": True,
283
+ "workload_objective_model_provider_prompt_fields_present": False,
284
+ }
285
+
286
+ @property
287
+ def result(self):
288
+ return self.campaign_stage.result
289
+
290
+ @property
291
+ def archive_preparation(self):
292
+ return self.campaign_stage.archive_preparation
293
+
294
+ @property
295
+ def archive_commit(self):
296
+ return self.campaign_stage.archive_commit
297
+
298
+ @property
299
+ def learning_preparation(self):
300
+ return self.campaign_stage.learning_preparation
301
+
302
+ @property
303
+ def learning_commit(self):
304
+ return self.campaign_stage.learning_commit
305
+
306
+ def to_record(self, *, include_evidence: bool = False) -> dict[str, object]:
307
+ self.__post_init__()
308
+ return {
309
+ **self._unsigned_record(),
310
+ "adaptive_result": self.adaptive_result.to_record(
311
+ include_evidence=include_evidence
312
+ ),
313
+ "campaign_stage": self.campaign_stage.to_record(),
314
+ "receipt_sha256": self.receipt_sha256,
315
+ }
316
+
317
+
318
+ @dataclass(frozen=True, slots=True)
319
+ class OutcomeAdaptiveResidualPortfolioCampaignStageRuntime:
320
+ """Run and transactionally publish one generic adaptive stage."""
321
+
322
+ experts: tuple[MaterializedActionProposalExpertPort, ...]
323
+ archive: ResidualArchiveTransitionPort = field(
324
+ repr=False,
325
+ compare=False,
326
+ )
327
+ learning: TransactionalResidualLearningStore = field(
328
+ repr=False,
329
+ compare=False,
330
+ )
331
+ racing_policy: OutcomeAdaptiveActionRacingPolicy
332
+ market_projector: AdaptiveActionMarketProjectorPort = field(
333
+ repr=False,
334
+ compare=False,
335
+ )
336
+ outcome_projector: AdaptiveActionOutcomeProjectorPort = field(
337
+ repr=False,
338
+ compare=False,
339
+ )
340
+ slate_value: MaterializedSlateValuePort = field(
341
+ repr=False,
342
+ compare=False,
343
+ )
344
+ slate_feasibility: MaterializedSlateFeasibilityPort = field(
345
+ repr=False,
346
+ compare=False,
347
+ )
348
+ return_value: MaterializedActionReturnValuePort | None = field(
349
+ default=None,
350
+ repr=False,
351
+ compare=False,
352
+ )
353
+ exploration_policy: MaterializedActionExplorationPort | None = field(
354
+ default_factory=PrequentialLowDiscrepancyResidualExploration,
355
+ repr=False,
356
+ compare=False,
357
+ )
358
+ diagnostic_allocation_policy: (
359
+ MaterializedActionAllocationPolicyPort | None
360
+ ) = field(
361
+ default=None,
362
+ repr=False,
363
+ compare=False,
364
+ )
365
+ phase_committer: OutcomeAdaptiveResidualPhaseCommitPort | None = field(
366
+ default=None,
367
+ repr=False,
368
+ compare=False,
369
+ )
370
+ paired_audit_designer: SamePrefixPairedAuditDesignerPort | None = field(
371
+ default=None,
372
+ repr=False,
373
+ compare=False,
374
+ )
375
+ forecast_opportunity_challenger: (
376
+ ProtectedCurrentPrefixForecastOpportunityChallenger | None
377
+ ) = field(
378
+ default=None,
379
+ repr=False,
380
+ compare=False,
381
+ )
382
+ forecast_opportunity_shadow_designer: (
383
+ ForecastOpportunitySamePrefixShadowDesignerPort | None
384
+ ) = field(
385
+ default=None,
386
+ repr=False,
387
+ compare=False,
388
+ )
389
+ require_durable_phase_commits: bool = False
390
+ hierarchical_kappa: float = 4.0
391
+ confidence_width: float = 1.0
392
+ exact_combination_limit: int = 250_000
393
+ beam_width: int = 512
394
+
395
+ def __post_init__(self) -> None:
396
+ if type(self.experts) is not tuple or not self.experts:
397
+ raise ValueError("experts must be a non-empty exact tuple")
398
+ if not isinstance(self.archive, ResidualArchiveTransitionPort):
399
+ raise TypeError(
400
+ "archive must implement ResidualArchiveTransitionPort"
401
+ )
402
+ if type(self.learning) is not TransactionalResidualLearningStore:
403
+ raise TypeError("learning must be an exact transactional store")
404
+ self.learning.__post_init__()
405
+ if type(self.racing_policy) is not OutcomeAdaptiveActionRacingPolicy:
406
+ # Structural admission mirroring the stage-runtime gate: an
407
+ # injected controller must expose the exact racing surface.
408
+ required_attributes = (
409
+ "policy_id",
410
+ "policy_version",
411
+ "definition_sha256",
412
+ "design_diagnostic_pilot",
413
+ "select_next",
414
+ "__post_init__",
415
+ )
416
+ missing = tuple(
417
+ name
418
+ for name in required_attributes
419
+ if not hasattr(self.racing_policy, name)
420
+ )
421
+ if missing:
422
+ raise TypeError(
423
+ "racing_policy must be the exact racing policy or "
424
+ "implement its surface; missing: "
425
+ + ",".join(missing)
426
+ )
427
+ if self.exploration_policy is not None and not isinstance(
428
+ self.exploration_policy,
429
+ MaterializedActionExplorationPort,
430
+ ):
431
+ raise TypeError(
432
+ "exploration_policy must implement "
433
+ "MaterializedActionExplorationPort"
434
+ )
435
+ if self.diagnostic_allocation_policy is not None and not isinstance(
436
+ self.diagnostic_allocation_policy,
437
+ MaterializedActionAllocationPolicyPort,
438
+ ):
439
+ raise TypeError(
440
+ "diagnostic_allocation_policy must implement its port"
441
+ )
442
+ if self.paired_audit_designer is not None and not isinstance(
443
+ self.paired_audit_designer,
444
+ SamePrefixPairedAuditDesignerPort,
445
+ ):
446
+ raise TypeError(
447
+ "paired_audit_designer must implement its port"
448
+ )
449
+ if (
450
+ self.forecast_opportunity_challenger is not None
451
+ and type(self.forecast_opportunity_challenger)
452
+ is not ProtectedCurrentPrefixForecastOpportunityChallenger
453
+ ):
454
+ raise TypeError(
455
+ "forecast_opportunity_challenger must be exact"
456
+ )
457
+ if (
458
+ self.forecast_opportunity_shadow_designer is not None
459
+ and not isinstance(
460
+ self.forecast_opportunity_shadow_designer,
461
+ ForecastOpportunitySamePrefixShadowDesignerPort,
462
+ )
463
+ ):
464
+ raise TypeError(
465
+ "forecast_opportunity_shadow_designer must implement its port"
466
+ )
467
+ if (
468
+ self.forecast_opportunity_shadow_designer is not None
469
+ and self.forecast_opportunity_challenger is None
470
+ ):
471
+ raise ValueError(
472
+ "forecast shadow designer requires a forecast challenger"
473
+ )
474
+ if type(self.require_durable_phase_commits) is not bool:
475
+ raise TypeError("require_durable_phase_commits must be exact")
476
+ for name in ("hierarchical_kappa", "confidence_width"):
477
+ value = getattr(self, name)
478
+ if (
479
+ type(value) is not float
480
+ or not math.isfinite(value)
481
+ or value <= 0.0
482
+ ):
483
+ raise ValueError(
484
+ f"{name} must be a positive finite exact float"
485
+ )
486
+ for name in ("exact_combination_limit", "beam_width"):
487
+ value = getattr(self, name)
488
+ if type(value) is not int or value <= 0:
489
+ raise ValueError(f"{name} must be a positive exact integer")
490
+
491
+ async def run(
492
+ self,
493
+ request: ResidualPortfolioDecisionRequest,
494
+ ) -> OutcomeAdaptiveResidualCampaignStageReceipt:
495
+ self.__post_init__()
496
+ adaptive = await OutcomeAdaptiveResidualPortfolioEvolution(
497
+ experts=self.experts,
498
+ broker=RegretBrokeredMaterializedActionPolicy(
499
+ ledger=self.learning.state.broker_evidence,
500
+ return_value=self.return_value,
501
+ exploration_policy=self.exploration_policy,
502
+ hierarchical_kappa=self.hierarchical_kappa,
503
+ confidence_width=self.confidence_width,
504
+ exact_combination_limit=self.exact_combination_limit,
505
+ beam_width=self.beam_width,
506
+ ),
507
+ racing_policy=self.racing_policy,
508
+ market_projector=self.market_projector,
509
+ outcome_projector=self.outcome_projector,
510
+ slate_value=self.slate_value,
511
+ slate_feasibility=self.slate_feasibility,
512
+ diagnostic_allocation_policy=(
513
+ self.diagnostic_allocation_policy
514
+ ),
515
+ phase_committer=self.phase_committer,
516
+ paired_audit_designer=self.paired_audit_designer,
517
+ forecast_opportunity_challenger=(
518
+ self.forecast_opportunity_challenger
519
+ ),
520
+ forecast_opportunity_shadow_designer=(
521
+ self.forecast_opportunity_shadow_designer
522
+ ),
523
+ require_durable_phase_commits=(
524
+ self.require_durable_phase_commits
525
+ ),
526
+ ).run(request)
527
+ campaign_stage = await commit_residual_campaign_stage(
528
+ archive=self.archive,
529
+ learning=self.learning,
530
+ result=adaptive.result,
531
+ )
532
+ has_forecast = (
533
+ adaptive.forecast_opportunity_challenger_definition_sha256
534
+ is not None
535
+ )
536
+ has_paired_assay = bool(adaptive.paired_audit_executions)
537
+ has_forecast_stratified_audit = any(
538
+ value.plan.designer_id
539
+ == FORECAST_STRATIFIED_SAME_PREFIX_AUDIT_DESIGNER_ID
540
+ for value in adaptive.paired_audit_executions
541
+ )
542
+ runtime_definition_sha256 = (
543
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_STRATIFIED_AUDIT_CAMPAIGN_RUNTIME_DEFINITION_SHA256
544
+ if has_forecast_stratified_audit
545
+ else (
546
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_SHADOW_CAMPAIGN_RUNTIME_DEFINITION_SHA256
547
+ if has_forecast and has_paired_assay
548
+ else (
549
+ OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_CAMPAIGN_RUNTIME_DEFINITION_SHA256
550
+ if has_forecast
551
+ else (
552
+ OUTCOME_ADAPTIVE_RESIDUAL_PAIRED_AUDIT_CAMPAIGN_RUNTIME_DEFINITION_SHA256
553
+ if has_paired_assay
554
+ else OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_DEFINITION_SHA256
555
+ )
556
+ )
557
+ )
558
+ )
559
+ return OutcomeAdaptiveResidualCampaignStageReceipt(
560
+ adaptive_result=adaptive,
561
+ campaign_stage=campaign_stage,
562
+ runtime_definition_sha256=runtime_definition_sha256,
563
+ )
564
+
565
+
566
+ __all__ = [
567
+ "OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_DEFINITION_SHA256",
568
+ "OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_ID",
569
+ "OUTCOME_ADAPTIVE_RESIDUAL_CAMPAIGN_RUNTIME_VERSION",
570
+ "OUTCOME_ADAPTIVE_RESIDUAL_PAIRED_AUDIT_CAMPAIGN_RUNTIME_DEFINITION_SHA256",
571
+ "OUTCOME_ADAPTIVE_RESIDUAL_PAIRED_AUDIT_CAMPAIGN_RUNTIME_VERSION",
572
+ "OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_CAMPAIGN_RUNTIME_DEFINITION_SHA256",
573
+ "OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_OPPORTUNITY_CAMPAIGN_RUNTIME_VERSION",
574
+ "OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_SHADOW_CAMPAIGN_RUNTIME_DEFINITION_SHA256",
575
+ "OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_SHADOW_CAMPAIGN_RUNTIME_VERSION",
576
+ "OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_STRATIFIED_AUDIT_CAMPAIGN_RUNTIME_DEFINITION_SHA256",
577
+ "OUTCOME_ADAPTIVE_RESIDUAL_FORECAST_STRATIFIED_AUDIT_CAMPAIGN_RUNTIME_VERSION",
578
+ "OutcomeAdaptiveResidualCampaignStageReceipt",
579
+ "OutcomeAdaptiveResidualPortfolioCampaignStageRuntime",
580
+ ]