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,445 @@
1
+ """Project Pydantic-AI residual forecasts into generic scenario geometry."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import hashlib
7
+ import json
8
+ from dataclasses import dataclass, field
9
+ from enum import Enum
10
+
11
+ from agent_evolve.application.agentic_evolution import EvolutionCandidate
12
+ from agent_evolve.application.forecast_geometry_portfolio import (
13
+ ForecastGeometryScenario,
14
+ MaterializedForecastGeometryBatch,
15
+ MaterializedForecastGeometryMember,
16
+ )
17
+ from agent_evolve.application.residual_portfolio_evolution import (
18
+ MaterializedActionProposalBatch,
19
+ ResidualPortfolioDecisionRequest,
20
+ )
21
+ from agent_evolve.core.optimization_semantics import MetricSense
22
+ from agent_evolve.domain.typed_json import freeze_json, typed_json_sha256
23
+
24
+ from .materialized_hierarchical_residual_expert import (
25
+ MaterializedHierarchicalResidualActionEvidence,
26
+ MaterializedHierarchicalResidualActionEvidencePort,
27
+ )
28
+
29
+
30
+ PYDANTIC_AI_RESIDUAL_FORECAST_GEOMETRY_PROJECTION_ID = (
31
+ "pydantic_ai_residual_forecast_geometry"
32
+ )
33
+ PYDANTIC_AI_RESIDUAL_FORECAST_GEOMETRY_PROJECTION_VERSION = 3
34
+ _DEFINITION_DOMAIN = (
35
+ b"agent-evolve:pydantic-ai-residual-forecast-geometry:v3\x00"
36
+ )
37
+
38
+
39
+ class ResidualForecastEvidenceCoverageMode(str, Enum):
40
+ """How forecast geometry treats heterogeneous proposal engines."""
41
+
42
+ COMPLETE = "complete_action_coverage"
43
+ AVAILABLE_ONLY = "available_forecast_evidence"
44
+
45
+
46
+ def _canonical_json(value: object) -> bytes:
47
+ return json.dumps(
48
+ value,
49
+ allow_nan=False,
50
+ ensure_ascii=True,
51
+ separators=(",", ":"),
52
+ sort_keys=True,
53
+ ).encode("ascii", errors="strict")
54
+
55
+
56
+ @dataclass(slots=True)
57
+ class PydanticAIResidualForecastGeometryProjection:
58
+ """Translate sealed metric forecasts without interpreting a workload.
59
+
60
+ Objective senses are ordinary evaluator semantics, not privileged search
61
+ hints. They permit portable favorable/adverse scenarios for mixed-sense
62
+ problems while lower/median/upper numeric scenarios preserve the raw
63
+ forecast geometry for ablations.
64
+ """
65
+
66
+ prior_candidates: tuple[EvolutionCandidate, ...]
67
+ evidence_sources: tuple[
68
+ MaterializedHierarchicalResidualActionEvidencePort,
69
+ ...,
70
+ ] = field(repr=False, compare=False)
71
+ objective_senses: tuple[tuple[str, MetricSense], ...]
72
+ coverage_mode: ResidualForecastEvidenceCoverageMode = (
73
+ ResidualForecastEvidenceCoverageMode.COMPLETE
74
+ )
75
+ projection_id: str = (
76
+ PYDANTIC_AI_RESIDUAL_FORECAST_GEOMETRY_PROJECTION_ID
77
+ )
78
+ projection_version: int = (
79
+ PYDANTIC_AI_RESIDUAL_FORECAST_GEOMETRY_PROJECTION_VERSION
80
+ )
81
+ definition_sha256: str = field(init=False)
82
+ _cache: dict[str, MaterializedForecastGeometryBatch] = field(
83
+ init=False,
84
+ default_factory=dict,
85
+ repr=False,
86
+ )
87
+ _lock: asyncio.Lock = field(
88
+ init=False,
89
+ default_factory=asyncio.Lock,
90
+ repr=False,
91
+ )
92
+
93
+ def __post_init__(self) -> None:
94
+ if (
95
+ type(self.prior_candidates) is not tuple
96
+ or not self.prior_candidates
97
+ or any(
98
+ type(value) is not EvolutionCandidate
99
+ for value in self.prior_candidates
100
+ )
101
+ ):
102
+ raise TypeError(
103
+ "prior_candidates must contain exact non-empty candidates"
104
+ )
105
+ for value in self.prior_candidates:
106
+ value.__post_init__()
107
+ candidate_ids = tuple(
108
+ value.candidate_id for value in self.prior_candidates
109
+ )
110
+ if len(candidate_ids) != len(set(candidate_ids)):
111
+ raise ValueError("prior candidate IDs must be unique")
112
+ if (
113
+ type(self.evidence_sources) is not tuple
114
+ or not self.evidence_sources
115
+ or any(
116
+ not isinstance(
117
+ value,
118
+ MaterializedHierarchicalResidualActionEvidencePort,
119
+ )
120
+ for value in self.evidence_sources
121
+ )
122
+ ):
123
+ raise TypeError("evidence_sources must implement their port")
124
+ expert_ids = tuple(
125
+ value.expert_id for value in self.evidence_sources
126
+ )
127
+ if expert_ids != tuple(sorted(set(expert_ids))):
128
+ raise ValueError("evidence sources must be unique and canonical")
129
+ if (
130
+ type(self.objective_senses) is not tuple
131
+ or not self.objective_senses
132
+ or self.objective_senses
133
+ != tuple(sorted(self.objective_senses, key=lambda value: value[0]))
134
+ ):
135
+ raise ValueError("objective_senses must be non-empty and canonical")
136
+ metric_ids: list[str] = []
137
+ for metric_id, sense in self.objective_senses:
138
+ if type(metric_id) is not str or not metric_id:
139
+ raise ValueError("objective metric IDs must be non-empty")
140
+ if type(sense) is not MetricSense:
141
+ raise TypeError("objective senses must be exact MetricSense values")
142
+ metric_ids.append(metric_id)
143
+ if len(metric_ids) != len(set(metric_ids)):
144
+ raise ValueError("objective_senses repeats a metric")
145
+ if type(self.coverage_mode) is not ResidualForecastEvidenceCoverageMode:
146
+ raise TypeError(
147
+ "coverage_mode must be an exact "
148
+ "ResidualForecastEvidenceCoverageMode"
149
+ )
150
+ eligible = tuple(
151
+ value
152
+ for value in self.prior_candidates
153
+ if (
154
+ value.valid
155
+ and value.operator_compliant
156
+ and value.evidence_compliant
157
+ )
158
+ )
159
+ if not eligible:
160
+ raise ValueError(
161
+ "forecast geometry requires an eligible prior candidate"
162
+ )
163
+ if any(
164
+ set(value.objective_map) != set(metric_ids)
165
+ for value in eligible
166
+ ):
167
+ raise ValueError(
168
+ "eligible prior candidate objectives differ from senses"
169
+ )
170
+ if (
171
+ self.projection_id
172
+ != PYDANTIC_AI_RESIDUAL_FORECAST_GEOMETRY_PROJECTION_ID
173
+ or self.projection_version
174
+ != PYDANTIC_AI_RESIDUAL_FORECAST_GEOMETRY_PROJECTION_VERSION
175
+ ):
176
+ raise ValueError("projection identity is immutable")
177
+ self.definition_sha256 = hashlib.sha256(
178
+ _DEFINITION_DOMAIN
179
+ + _canonical_json(
180
+ {
181
+ "schema_version": 1,
182
+ "projection_id": self.projection_id,
183
+ "projection_version": self.projection_version,
184
+ "objective_senses": [
185
+ {
186
+ "metric_id": metric_id,
187
+ "sense": sense.value,
188
+ }
189
+ for metric_id, sense in self.objective_senses
190
+ ],
191
+ "prior_candidate_eligibility": (
192
+ "valid_and_operator_and_evidence_compliant"
193
+ ),
194
+ "ineligible_ledger_rows_may_omit_objectives": True,
195
+ "scenarios": {
196
+ "lower_numeric": "parent_plus_p10",
197
+ "median": "parent_plus_p50",
198
+ "upper_numeric": "parent_plus_p90",
199
+ "favorable": "sense_conditioned_favorable_quantile",
200
+ "adverse": "sense_conditioned_adverse_quantile",
201
+ },
202
+ "reliability": (
203
+ "probability_valid_times_minimum_metric_confidence"
204
+ ),
205
+ "coverage_mode": self.coverage_mode.value,
206
+ "missing_forecast_evidence": (
207
+ "fail_closed"
208
+ if self.coverage_mode
209
+ is ResidualForecastEvidenceCoverageMode.COMPLETE
210
+ else "exclude_action_and_log_identity"
211
+ ),
212
+ "current_candidate_outcomes_observed": False,
213
+ "workload_model_provider_branches": False,
214
+ }
215
+ )
216
+ ).hexdigest()
217
+
218
+ def _evidence(
219
+ self,
220
+ action_sha256: str,
221
+ ) -> MaterializedHierarchicalResidualActionEvidence | None:
222
+ matches = tuple(
223
+ value
224
+ for source in self.evidence_sources
225
+ if (value := source.evidence_for(action_sha256)) is not None
226
+ )
227
+ if len(matches) > 1:
228
+ raise ValueError(
229
+ "one action must have exactly one forecast evidence row"
230
+ )
231
+ if not matches:
232
+ if (
233
+ self.coverage_mode
234
+ is ResidualForecastEvidenceCoverageMode.COMPLETE
235
+ ):
236
+ raise ValueError(
237
+ "one action must have exactly one forecast evidence row"
238
+ )
239
+ return None
240
+ return matches[0]
241
+
242
+ def _member(
243
+ self,
244
+ evidence: MaterializedHierarchicalResidualActionEvidence,
245
+ prior_by_id: dict[object, EvolutionCandidate],
246
+ ) -> MaterializedForecastGeometryMember:
247
+ parent = prior_by_id.get(evidence.plan.parent_candidate_id)
248
+ if parent is None:
249
+ raise ValueError("forecast action names a parent outside the cutoff")
250
+ forecast_by_metric = {
251
+ value.metric_id: value for value in evidence.effect_predictions
252
+ }
253
+ sense_by_metric = dict(self.objective_senses)
254
+ if (
255
+ set(forecast_by_metric) != set(parent.objective_map)
256
+ or set(forecast_by_metric) != set(sense_by_metric)
257
+ ):
258
+ raise ValueError("forecast, parent, and objective frames differ")
259
+
260
+ def point(kind: str) -> tuple[tuple[str, float], ...]:
261
+ values = []
262
+ for metric_id, parent_value in parent.objectives:
263
+ forecast = forecast_by_metric[metric_id]
264
+ sense = sense_by_metric[metric_id]
265
+ if kind == "lower_numeric":
266
+ delta = forecast.p10_delta
267
+ elif kind == "median":
268
+ delta = forecast.p50_delta
269
+ elif kind == "upper_numeric":
270
+ delta = forecast.p90_delta
271
+ elif kind == "favorable":
272
+ delta = (
273
+ forecast.p10_delta
274
+ if sense is MetricSense.MINIMIZE
275
+ else forecast.p90_delta
276
+ )
277
+ elif kind == "adverse":
278
+ delta = (
279
+ forecast.p90_delta
280
+ if sense is MetricSense.MINIMIZE
281
+ else forecast.p10_delta
282
+ )
283
+ else: # pragma: no cover - closed call sites.
284
+ raise AssertionError("unknown forecast scenario")
285
+ values.append((metric_id, parent_value + delta))
286
+ return tuple(sorted(values))
287
+
288
+ scenarios = tuple(
289
+ sorted(
290
+ (
291
+ ForecastGeometryScenario(
292
+ scenario_id=scenario_id,
293
+ objective_point=point(scenario_id),
294
+ )
295
+ for scenario_id in (
296
+ "adverse",
297
+ "favorable",
298
+ "lower_numeric",
299
+ "median",
300
+ "upper_numeric",
301
+ )
302
+ ),
303
+ key=lambda value: value.scenario_id,
304
+ )
305
+ )
306
+ source_record = freeze_json(evidence.to_record())
307
+ return MaterializedForecastGeometryMember(
308
+ action_sha256=evidence.action.action_sha256,
309
+ phenotype_identity_sha256=(
310
+ evidence.action.phenotype_identity_sha256
311
+ ),
312
+ reliability=float(
313
+ evidence.probability_valid
314
+ * min(
315
+ value.confidence
316
+ for value in evidence.effect_predictions
317
+ )
318
+ ),
319
+ scenarios=scenarios,
320
+ source_evidence_sha256=typed_json_sha256(source_record),
321
+ )
322
+
323
+ async def project(
324
+ self,
325
+ request: ResidualPortfolioDecisionRequest,
326
+ proposals: tuple[MaterializedActionProposalBatch, ...],
327
+ ) -> MaterializedForecastGeometryBatch:
328
+ self.__post_init__()
329
+ if type(request) is not ResidualPortfolioDecisionRequest:
330
+ raise TypeError("request must be exact")
331
+ request.__post_init__()
332
+ if any(
333
+ value.generation >= request.decision_index
334
+ for value in self.prior_candidates
335
+ ):
336
+ raise ValueError("prior candidates cross the current cutoff")
337
+ if type(proposals) is not tuple or not proposals:
338
+ raise ValueError("proposals must be a non-empty exact tuple")
339
+ for proposal in proposals:
340
+ if type(proposal) is not MaterializedActionProposalBatch:
341
+ raise TypeError("proposals must contain exact batches")
342
+ proposal.__post_init__()
343
+ proposal.require_request(request)
344
+ proposal_sha256s = tuple(
345
+ sorted(value.proposal_sha256 for value in proposals)
346
+ )
347
+ async with self._lock:
348
+ cached = self._cache.get(request.request_sha256)
349
+ if cached is not None:
350
+ if cached.proposal_sha256s != proposal_sha256s:
351
+ raise ValueError(
352
+ "one request identity names two proposal markets"
353
+ )
354
+ return cached
355
+ actions = tuple(
356
+ action
357
+ for proposal in proposals
358
+ for action in proposal.actions
359
+ )
360
+ if len({value.action_sha256 for value in actions}) != len(actions):
361
+ raise ValueError("proposal union repeats an action")
362
+ prior_by_id = {
363
+ value.candidate_id: value
364
+ for value in self.prior_candidates
365
+ if (
366
+ value.valid
367
+ and value.operator_compliant
368
+ and value.evidence_compliant
369
+ )
370
+ }
371
+ member_values: list[MaterializedForecastGeometryMember] = []
372
+ unprojected_action_sha256s: list[str] = []
373
+ for action in actions:
374
+ evidence = self._evidence(action.action_sha256)
375
+ if evidence is None:
376
+ unprojected_action_sha256s.append(
377
+ action.action_sha256
378
+ )
379
+ continue
380
+ member_values.append(
381
+ self._member(evidence, prior_by_id)
382
+ )
383
+ if not member_values:
384
+ raise ValueError(
385
+ "forecast projection requires at least one evidence row"
386
+ )
387
+ members = tuple(
388
+ sorted(
389
+ member_values,
390
+ key=lambda value: value.action_sha256,
391
+ )
392
+ )
393
+ covered_action_sha256s = tuple(
394
+ value.action_sha256 for value in members
395
+ )
396
+ unprojected = tuple(sorted(unprojected_action_sha256s))
397
+ batch = MaterializedForecastGeometryBatch(
398
+ projection_id=self.projection_id,
399
+ projection_version=self.projection_version,
400
+ projection_definition_sha256=self.definition_sha256,
401
+ residual_request_sha256=request.request_sha256,
402
+ proposal_sha256s=proposal_sha256s,
403
+ members=members,
404
+ candidate_outcomes_observed=False,
405
+ evidence=freeze_json(
406
+ {
407
+ "member_source_evidence_sha256s": [
408
+ {
409
+ "action_sha256": value.action_sha256,
410
+ "source_evidence_sha256": (
411
+ value.source_evidence_sha256
412
+ ),
413
+ }
414
+ for value in members
415
+ ],
416
+ "objective_senses": [
417
+ {
418
+ "metric_id": metric_id,
419
+ "sense": sense.value,
420
+ }
421
+ for metric_id, sense in self.objective_senses
422
+ ],
423
+ "coverage_mode": self.coverage_mode.value,
424
+ "proposal_action_count": len(actions),
425
+ "forecast_covered_action_sha256s": list(
426
+ covered_action_sha256s
427
+ ),
428
+ "unprojected_action_sha256s": list(unprojected),
429
+ "complete_action_coverage": not unprojected,
430
+ "unprojected_actions_remain_fallback_eligible": True,
431
+ "candidate_outcomes_observed": False,
432
+ "workload_model_provider_branches": False,
433
+ }
434
+ ),
435
+ )
436
+ self._cache[request.request_sha256] = batch
437
+ return batch
438
+
439
+
440
+ __all__ = [
441
+ "PYDANTIC_AI_RESIDUAL_FORECAST_GEOMETRY_PROJECTION_ID",
442
+ "PYDANTIC_AI_RESIDUAL_FORECAST_GEOMETRY_PROJECTION_VERSION",
443
+ "PydanticAIResidualForecastGeometryProjection",
444
+ "ResidualForecastEvidenceCoverageMode",
445
+ ]