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,402 @@
1
+ """Workload-neutral projection from action forecasts to frontier closure.
2
+
3
+ The residual-frontier planner operates in objective space while the finite
4
+ action forecaster estimates parent-relative metric deltas. This module is the
5
+ missing bridge: it converts those authenticated, provider-neutral values into
6
+ one-sided aspiration shortfall and exposes an identified portfolio utility for
7
+ the existing forecast allocator. It neither evaluates a candidate nor knows
8
+ workload, model, provider, or option-family names.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import hashlib
14
+ import json
15
+ import math
16
+ from dataclasses import dataclass
17
+
18
+ from agent_evolve.ports.action_allocation import (
19
+ ForecastPortfolioUtilityBinding,
20
+ ForecastPortfolioUtilityInput,
21
+ ForecastQuantile,
22
+ )
23
+ from agent_evolve.ports.action_forecast import (
24
+ ResolvedActionForecast,
25
+ ResolvedActionForecastBatch,
26
+ ResolvedActionMetricForecast,
27
+ )
28
+ from agent_evolve.ports.frontier_target import (
29
+ ObjectiveSpaceTarget,
30
+ )
31
+
32
+
33
+ TARGET_CLOSURE_PORTFOLIO_UTILITY_ID = "residual_target_closure"
34
+ TARGET_CLOSURE_PORTFOLIO_UTILITY_VERSION = 1
35
+ TARGET_CLOSURE_PORTFOLIO_UTILITY_DEFINITION_SHA256 = hashlib.sha256(
36
+ b"agent-evolve:residual-target-closure-portfolio-utility:v1;"
37
+ b"inputs=authenticated-objective-space-target-and-resolved-action-forecasts;"
38
+ b"child=target-parent-plus-forecast-delta;"
39
+ b"frame=affine-lower-is-better;shortfall=positive-part-child-minus-aspiration;"
40
+ b"member-value=validity-times-parent-minus-child-l1-shortfall-plus-attainment;"
41
+ b"set-value=best-plus-harmonic-redundancy;"
42
+ b"workload-model-provider-identifiers=false;real-outcomes=false"
43
+ ).hexdigest()
44
+ _TARGET_CLOSURE_BINDING_DOMAIN = (
45
+ b"agent-evolve:residual-target-closure-utility-binding:v1\x00"
46
+ )
47
+
48
+
49
+ def _finite(value: object, *, name: str) -> float:
50
+ if type(value) is not float or not math.isfinite(value):
51
+ raise TypeError(f"{name} must be a finite exact float")
52
+ return value
53
+
54
+
55
+ @dataclass(frozen=True, slots=True)
56
+ class TargetMetricAlias:
57
+ """Explicit bridge when forecast and archive metric identifiers differ."""
58
+
59
+ target_metric_id: str
60
+ forecast_metric_id: str
61
+
62
+ def __post_init__(self) -> None:
63
+ for name in ("target_metric_id", "forecast_metric_id"):
64
+ value = getattr(self, name)
65
+ if type(value) is not str or not value:
66
+ raise ValueError(f"{name} must be non-empty")
67
+
68
+
69
+ @dataclass(frozen=True, slots=True)
70
+ class TargetClosureScenario:
71
+ """Aspiration-closure statistics under one forecast quantile scenario."""
72
+
73
+ quantile: ForecastQuantile
74
+ normalized_shortfalls: tuple[tuple[str, float], ...]
75
+ normalized_shortfall_l1: float
76
+ normalized_shortfall_linf: float
77
+ shortfall_reduction_l1: float
78
+ attains_or_dominates_aspiration: bool
79
+
80
+ def __post_init__(self) -> None:
81
+ if type(self.quantile) is not ForecastQuantile:
82
+ raise TypeError("quantile must be an exact ForecastQuantile")
83
+ if type(self.normalized_shortfalls) is not tuple or not (
84
+ self.normalized_shortfalls
85
+ ):
86
+ raise ValueError("normalized_shortfalls must be a non-empty tuple")
87
+ metric_ids = tuple(value[0] for value in self.normalized_shortfalls)
88
+ if metric_ids != tuple(sorted(set(metric_ids))):
89
+ raise ValueError("normalized shortfalls must be unique and canonical")
90
+ for metric_id, value in self.normalized_shortfalls:
91
+ if type(metric_id) is not str or not metric_id:
92
+ raise ValueError("shortfall metric_id must be non-empty")
93
+ _finite(value, name="normalized shortfall")
94
+ if value < 0.0:
95
+ raise ValueError("normalized shortfall cannot be negative")
96
+ for name in (
97
+ "normalized_shortfall_l1",
98
+ "normalized_shortfall_linf",
99
+ "shortfall_reduction_l1",
100
+ ):
101
+ _finite(getattr(self, name), name=name)
102
+ expected_l1 = sum(value for _, value in self.normalized_shortfalls)
103
+ expected_linf = max(value for _, value in self.normalized_shortfalls)
104
+ if self.normalized_shortfall_l1 != expected_l1:
105
+ raise ValueError("L1 shortfall differs from its metric cells")
106
+ if self.normalized_shortfall_linf != expected_linf:
107
+ raise ValueError("Linf shortfall differs from its metric cells")
108
+ if type(self.attains_or_dominates_aspiration) is not bool:
109
+ raise TypeError("aspiration attainment must be an exact bool")
110
+ if self.attains_or_dominates_aspiration != (expected_linf == 0.0):
111
+ raise ValueError("aspiration attainment differs from shortfall")
112
+
113
+ def to_record(self) -> dict[str, object]:
114
+ self.__post_init__()
115
+ return {
116
+ "quantile": self.quantile.value,
117
+ "normalized_shortfalls_hex": [
118
+ {"metric_id": metric_id, "value_hex": value.hex()}
119
+ for metric_id, value in self.normalized_shortfalls
120
+ ],
121
+ "normalized_shortfall_l1_hex": self.normalized_shortfall_l1.hex(),
122
+ "normalized_shortfall_linf_hex": self.normalized_shortfall_linf.hex(),
123
+ "shortfall_reduction_l1_hex": self.shortfall_reduction_l1.hex(),
124
+ "attains_or_dominates_aspiration": (
125
+ self.attains_or_dominates_aspiration
126
+ ),
127
+ }
128
+
129
+
130
+ @dataclass(frozen=True, slots=True)
131
+ class ActionTargetRealization:
132
+ """Complete target-closure audit for one finite action forecast."""
133
+
134
+ option_id: str
135
+ option_identity_sha256: str
136
+ probability_valid: float
137
+ scenarios: tuple[TargetClosureScenario, ...]
138
+
139
+ def __post_init__(self) -> None:
140
+ if type(self.option_id) is not str or not self.option_id:
141
+ raise ValueError("option_id must be non-empty")
142
+ if type(self.option_identity_sha256) is not str or len(
143
+ self.option_identity_sha256
144
+ ) != 64:
145
+ raise ValueError("option_identity_sha256 must be a SHA-256 digest")
146
+ _finite(self.probability_valid, name="probability_valid")
147
+ if not 0.0 <= self.probability_valid <= 1.0:
148
+ raise ValueError("probability_valid must lie in [0,1]")
149
+ if type(self.scenarios) is not tuple or any(
150
+ type(value) is not TargetClosureScenario for value in self.scenarios
151
+ ):
152
+ raise TypeError("scenarios must contain exact target-closure values")
153
+ for value in self.scenarios:
154
+ value.__post_init__()
155
+ if tuple(value.quantile for value in self.scenarios) != (
156
+ ForecastQuantile.P10,
157
+ ForecastQuantile.P50,
158
+ ForecastQuantile.P90,
159
+ ):
160
+ raise ValueError("scenarios must use canonical p10/p50/p90 order")
161
+
162
+ def scenario(self, quantile: ForecastQuantile) -> TargetClosureScenario:
163
+ self.__post_init__()
164
+ return next(value for value in self.scenarios if value.quantile is quantile)
165
+
166
+ def to_record(self) -> dict[str, object]:
167
+ self.__post_init__()
168
+ return {
169
+ "option_id": self.option_id,
170
+ "option_identity_sha256": self.option_identity_sha256,
171
+ "probability_valid_hex": self.probability_valid.hex(),
172
+ "scenarios": [value.to_record() for value in self.scenarios],
173
+ }
174
+
175
+
176
+ def _metric_delta(
177
+ forecast: ResolvedActionMetricForecast,
178
+ quantile: ForecastQuantile,
179
+ ) -> float:
180
+ if quantile is ForecastQuantile.P10:
181
+ return forecast.p10_delta
182
+ if quantile is ForecastQuantile.P50:
183
+ return forecast.p50_delta
184
+ return forecast.p90_delta
185
+
186
+
187
+ def _alias_map(
188
+ target: ObjectiveSpaceTarget,
189
+ aliases: tuple[TargetMetricAlias, ...],
190
+ ) -> dict[str, str]:
191
+ target.__post_init__()
192
+ if type(aliases) is not tuple or any(
193
+ type(value) is not TargetMetricAlias for value in aliases
194
+ ):
195
+ raise TypeError("aliases must contain exact TargetMetricAlias values")
196
+ for value in aliases:
197
+ value.__post_init__()
198
+ if aliases:
199
+ target_ids = tuple(value.target_metric_id for value in aliases)
200
+ forecast_ids = tuple(value.forecast_metric_id for value in aliases)
201
+ if target_ids != tuple(sorted(set(target_ids))):
202
+ raise ValueError("target aliases must be unique and canonical")
203
+ if len(set(forecast_ids)) != len(forecast_ids):
204
+ raise ValueError("forecast aliases must be one-to-one")
205
+ if target_ids != target.metric_ids:
206
+ raise ValueError("aliases must exactly cover the objective target")
207
+ return {value.target_metric_id: value.forecast_metric_id for value in aliases}
208
+ return {metric_id: metric_id for metric_id in target.metric_ids}
209
+
210
+
211
+ def _scenario(
212
+ *,
213
+ target: ObjectiveSpaceTarget,
214
+ forecast: ResolvedActionForecast,
215
+ aliases: dict[str, str],
216
+ quantile: ForecastQuantile,
217
+ ) -> TargetClosureScenario:
218
+ forecast_by_id = {value.metric_id: value for value in forecast.metric_forecasts}
219
+ required = set(aliases.values())
220
+ if not required.issubset(forecast_by_id):
221
+ raise ValueError("action forecast omits an objective target metric")
222
+ shortfalls: list[tuple[str, float]] = []
223
+ parent_l1 = 0.0
224
+ for axis in target.axes:
225
+ metric_forecast = forecast_by_id[aliases[axis.metric_id]]
226
+ child_value = axis.parent_value + _metric_delta(metric_forecast, quantile)
227
+ child_shortfall = max(
228
+ 0.0,
229
+ axis.normalize(child_value) - axis.aspiration_normalized,
230
+ )
231
+ shortfalls.append((axis.metric_id, child_shortfall))
232
+ parent_l1 += axis.parent_shortfall
233
+ canonical = tuple(sorted(shortfalls))
234
+ shortfall_l1 = sum(value for _, value in canonical)
235
+ shortfall_linf = max(value for _, value in canonical)
236
+ return TargetClosureScenario(
237
+ quantile=quantile,
238
+ normalized_shortfalls=canonical,
239
+ normalized_shortfall_l1=shortfall_l1,
240
+ normalized_shortfall_linf=shortfall_linf,
241
+ shortfall_reduction_l1=parent_l1 - shortfall_l1,
242
+ attains_or_dominates_aspiration=shortfall_linf == 0.0,
243
+ )
244
+
245
+
246
+ def assess_action_target_realization(
247
+ *,
248
+ target: ObjectiveSpaceTarget,
249
+ forecasts: ResolvedActionForecastBatch,
250
+ aliases: tuple[TargetMetricAlias, ...] = (),
251
+ ) -> tuple[ActionTargetRealization, ...]:
252
+ """Audit every forecast against a shared target without evaluator access."""
253
+
254
+ if type(target) is not ObjectiveSpaceTarget:
255
+ raise TypeError("target must be an exact ObjectiveSpaceTarget")
256
+ target.__post_init__()
257
+ if type(forecasts) is not ResolvedActionForecastBatch:
258
+ raise TypeError("forecasts must be an exact ResolvedActionForecastBatch")
259
+ forecasts.__post_init__()
260
+ mapping = _alias_map(target, aliases)
261
+ return tuple(
262
+ ActionTargetRealization(
263
+ option_id=forecast.option_id,
264
+ option_identity_sha256=forecast.option_identity_sha256,
265
+ probability_valid=forecast.probability_valid,
266
+ scenarios=tuple(
267
+ _scenario(
268
+ target=target,
269
+ forecast=forecast,
270
+ aliases=mapping,
271
+ quantile=quantile,
272
+ )
273
+ for quantile in (
274
+ ForecastQuantile.P10,
275
+ ForecastQuantile.P50,
276
+ ForecastQuantile.P90,
277
+ )
278
+ ),
279
+ )
280
+ for forecast in forecasts.forecasts
281
+ )
282
+
283
+
284
+ @dataclass(frozen=True, slots=True)
285
+ class ResidualTargetClosurePortfolioUtility:
286
+ """Plug-in utility for the existing forecast-based greedy set allocator.
287
+
288
+ The best predicted bridge carries most of the utility. A bounded harmonic
289
+ redundancy term rewards additional independent chances without allowing a
290
+ large collection of mediocre actions to swamp the best bridge.
291
+ """
292
+
293
+ target: ObjectiveSpaceTarget
294
+ aliases: tuple[TargetMetricAlias, ...] = ()
295
+ attainment_bonus: float = 0.25
296
+ redundancy_weight: float = 0.25
297
+
298
+ def __post_init__(self) -> None:
299
+ if type(self.target) is not ObjectiveSpaceTarget:
300
+ raise TypeError("target must be an exact ObjectiveSpaceTarget")
301
+ self.target.__post_init__()
302
+ _alias_map(self.target, self.aliases)
303
+ for name in ("attainment_bonus", "redundancy_weight"):
304
+ value = _finite(getattr(self, name), name=name)
305
+ if value < 0.0:
306
+ raise ValueError(f"{name} must be non-negative")
307
+
308
+ @property
309
+ def binding_definition_sha256(self) -> str:
310
+ """Bind the reusable policy law to this exact target configuration.
311
+
312
+ ``ActionAllocationRequest`` records only the identified utility
313
+ binding. Including the target, aliases, and utility configuration in
314
+ that identity prevents an allocation receipt from being replayed under
315
+ a different frontier aspiration while retaining a stable policy ID.
316
+ """
317
+
318
+ self.__post_init__()
319
+ payload = json.dumps(
320
+ {
321
+ "schema_version": 1,
322
+ "base_policy_definition_sha256": (
323
+ TARGET_CLOSURE_PORTFOLIO_UTILITY_DEFINITION_SHA256
324
+ ),
325
+ "target": self.target.to_record(),
326
+ "aliases": [
327
+ {
328
+ "target_metric_id": value.target_metric_id,
329
+ "forecast_metric_id": value.forecast_metric_id,
330
+ }
331
+ for value in self.aliases
332
+ ],
333
+ "attainment_bonus_hex": self.attainment_bonus.hex(),
334
+ "redundancy_weight_hex": self.redundancy_weight.hex(),
335
+ },
336
+ allow_nan=False,
337
+ ensure_ascii=True,
338
+ separators=(",", ":"),
339
+ sort_keys=True,
340
+ ).encode("ascii")
341
+ return hashlib.sha256(_TARGET_CLOSURE_BINDING_DOMAIN + payload).hexdigest()
342
+
343
+ def binding(self) -> ForecastPortfolioUtilityBinding:
344
+ """Return the exact identified utility expected by the allocator port."""
345
+
346
+ return ForecastPortfolioUtilityBinding(
347
+ utility=self,
348
+ policy_id=TARGET_CLOSURE_PORTFOLIO_UTILITY_ID,
349
+ policy_version=TARGET_CLOSURE_PORTFOLIO_UTILITY_VERSION,
350
+ definition_sha256=self.binding_definition_sha256,
351
+ )
352
+
353
+ def __call__(self, request: ForecastPortfolioUtilityInput) -> float:
354
+ if type(request) is not ForecastPortfolioUtilityInput:
355
+ raise TypeError("request must be exact ForecastPortfolioUtilityInput")
356
+ request.__post_init__()
357
+ self.__post_init__()
358
+ mapping = _alias_map(self.target, self.aliases)
359
+ parent_by_id = {value.metric_id: value.value for value in request.parent_metric_values}
360
+ for axis in self.target.axes:
361
+ forecast_metric_id = mapping[axis.metric_id]
362
+ if parent_by_id.get(forecast_metric_id) != axis.parent_value:
363
+ raise ValueError("forecast parent values differ from the target")
364
+ values: list[float] = []
365
+ for member in request.members:
366
+ scenario = _scenario(
367
+ target=self.target,
368
+ forecast=member,
369
+ aliases=mapping,
370
+ quantile=request.quantile,
371
+ )
372
+ value = member.probability_valid * (
373
+ scenario.shortfall_reduction_l1
374
+ + (
375
+ self.attainment_bonus
376
+ if scenario.attains_or_dominates_aspiration
377
+ else 0.0
378
+ )
379
+ )
380
+ values.append(value)
381
+ ranked = sorted(values, reverse=True)
382
+ total = ranked[0]
383
+ if len(ranked) > 1 and self.redundancy_weight > 0.0:
384
+ total += self.redundancy_weight * sum(
385
+ max(0.0, value) / rank
386
+ for rank, value in enumerate(ranked[1:], start=2)
387
+ )
388
+ if not math.isfinite(total): # pragma: no cover - guarded arithmetic.
389
+ raise ValueError("target-closure utility became non-finite")
390
+ return float(total)
391
+
392
+
393
+ __all__ = [
394
+ "ActionTargetRealization",
395
+ "ResidualTargetClosurePortfolioUtility",
396
+ "TARGET_CLOSURE_PORTFOLIO_UTILITY_DEFINITION_SHA256",
397
+ "TARGET_CLOSURE_PORTFOLIO_UTILITY_ID",
398
+ "TARGET_CLOSURE_PORTFOLIO_UTILITY_VERSION",
399
+ "TargetClosureScenario",
400
+ "TargetMetricAlias",
401
+ "assess_action_target_realization",
402
+ ]