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,403 @@
1
+ """Outcome-blind union of local and optional global finite-action sources.
2
+
3
+ The optimizer sees one ordinary :class:`FiniteVariationCatalog`. Workload
4
+ adapters may contribute global restarts, archive-gap macros, or other sealed
5
+ full-child sources without changing campaign orchestration. Source options
6
+ may declare only a source ID and an evaluation exposure floor. The floor is
7
+ resolved deterministically from the sealed finite contract, so objective
8
+ values and provider fields never enter source union or exposure selection.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import hashlib
14
+ import json
15
+ from dataclasses import dataclass, field, replace
16
+
17
+ from agent_evolve.domain.finite_variation import (
18
+ MAX_FINITE_VARIATION_OPTIONS,
19
+ FiniteVariationContract,
20
+ FiniteVariationOption,
21
+ )
22
+ from agent_evolve.domain.typed_json import FrozenJsonObject
23
+ from agent_evolve.ports.variation_catalog import FiniteVariationCatalog
24
+ from agent_evolve.ports.variation_source import (
25
+ VARIATION_SOURCE_METADATA_KEY,
26
+ VARIATION_SOURCE_MINIMUM_METADATA_KEY,
27
+ VARIATION_SOURCE_RANK_METADATA_KEY,
28
+ finite_variation_source_minimum_counts,
29
+ )
30
+
31
+
32
+ # Source-compatible aliases remain public while the authority lives at the
33
+ # inverted API boundary rather than in this concrete union policy.
34
+ EVALUATION_SOURCE_METADATA_KEY = VARIATION_SOURCE_METADATA_KEY
35
+ EVALUATION_SOURCE_MINIMUM_METADATA_KEY = VARIATION_SOURCE_MINIMUM_METADATA_KEY
36
+ SOURCE_UNION_POLICY_ID = "finite_variation_source_union"
37
+ SOURCE_UNION_POLICY_VERSION = 1
38
+ _DEFINITION_DOMAIN = b"agent-evolve:finite-variation-source-union:def:v1\x00"
39
+ _EXPOSURE_DOMAIN = b"agent-evolve:finite-variation-source-exposure:v1\x00"
40
+ _EXPOSURE_POLICY_DOMAIN = (
41
+ b"agent-evolve:finite-variation-source-exposure-policy:def:v1\x00"
42
+ )
43
+
44
+
45
+ def _canonical_json(value: object) -> bytes:
46
+ return json.dumps(
47
+ value,
48
+ allow_nan=False,
49
+ ensure_ascii=True,
50
+ separators=(",", ":"),
51
+ sort_keys=True,
52
+ ).encode("ascii", errors="strict")
53
+
54
+
55
+ def _catalog_identity(catalog: FiniteVariationCatalog) -> tuple[str, int, str]:
56
+ if not isinstance(catalog, FiniteVariationCatalog):
57
+ raise TypeError("source union members must implement FiniteVariationCatalog")
58
+ catalog_id = getattr(catalog, "catalog_id", None)
59
+ catalog_version = getattr(catalog, "catalog_version", None)
60
+ definition_sha256 = getattr(catalog, "definition_sha256", None)
61
+ if type(catalog_id) is not str or not catalog_id:
62
+ raise ValueError("source catalog must publish catalog_id")
63
+ if type(catalog_version) is not int or catalog_version <= 0:
64
+ raise ValueError("source catalog must publish a positive version")
65
+ if (
66
+ type(definition_sha256) is not str
67
+ or len(definition_sha256) != 64
68
+ or any(value not in "0123456789abcdef" for value in definition_sha256)
69
+ ):
70
+ raise ValueError("source catalog must publish a lowercase SHA-256")
71
+ return catalog_id, catalog_version, definition_sha256
72
+
73
+
74
+ @dataclass(frozen=True, slots=True)
75
+ class SourceUnionFiniteVariationCatalog:
76
+ """Merge one primary catalog with independently versioned source catalogs."""
77
+
78
+ primary_catalog: FiniteVariationCatalog
79
+ source_catalogs: tuple[FiniteVariationCatalog, ...]
80
+ catalog_id: str = field(init=False)
81
+ catalog_version: int = field(init=False)
82
+ definition_sha256: str = field(init=False)
83
+ option_families: tuple[str, ...] | None = field(init=False, default=None)
84
+
85
+ def __post_init__(self) -> None:
86
+ primary = _catalog_identity(self.primary_catalog)
87
+ if type(self.source_catalogs) is not tuple or not self.source_catalogs:
88
+ raise ValueError("source_catalogs must be a non-empty exact tuple")
89
+ sources = tuple(_catalog_identity(value) for value in self.source_catalogs)
90
+ if len({value[0] for value in sources}) != len(sources):
91
+ raise ValueError("source catalog IDs must be unique")
92
+ definition = {
93
+ "schema_version": 1,
94
+ "policy_id": SOURCE_UNION_POLICY_ID,
95
+ "policy_version": SOURCE_UNION_POLICY_VERSION,
96
+ "primary_catalog": {
97
+ "catalog_id": primary[0],
98
+ "catalog_version": primary[1],
99
+ "definition_sha256": primary[2],
100
+ },
101
+ "source_catalogs": [
102
+ {
103
+ "catalog_id": catalog_id,
104
+ "catalog_version": version,
105
+ "definition_sha256": definition_sha256,
106
+ }
107
+ for catalog_id, version, definition_sha256 in sources
108
+ ],
109
+ "merge_order": "primary_then_declared_source_order",
110
+ "duplicate_option_ids": "reject",
111
+ "duplicate_child_configurations": "reject",
112
+ "outcomes_consulted": False,
113
+ "workload_model_provider_identifiers_consulted": False,
114
+ }
115
+ object.__setattr__(self, "catalog_id", primary[0])
116
+ object.__setattr__(
117
+ self,
118
+ "catalog_version",
119
+ primary[1] + SOURCE_UNION_POLICY_VERSION,
120
+ )
121
+ object.__setattr__(
122
+ self,
123
+ "definition_sha256",
124
+ hashlib.sha256(
125
+ _DEFINITION_DOMAIN + _canonical_json(definition)
126
+ ).hexdigest(),
127
+ )
128
+ family_sets = tuple(
129
+ getattr(value, "option_families", None)
130
+ for value in (self.primary_catalog, *self.source_catalogs)
131
+ )
132
+ if all(value is not None for value in family_sets):
133
+ if any(
134
+ type(value) is not tuple
135
+ or not value
136
+ or any(type(item) is not str or not item for item in value)
137
+ for value in family_sets
138
+ ):
139
+ raise TypeError("source option_families must be non-empty tuples")
140
+ object.__setattr__(
141
+ self,
142
+ "option_families",
143
+ tuple(sorted({item for value in family_sets for item in value})),
144
+ )
145
+
146
+ def options(
147
+ self,
148
+ parent_configuration: FrozenJsonObject,
149
+ ) -> tuple[FiniteVariationOption, ...]:
150
+ self.__post_init__()
151
+ members = (self.primary_catalog, *self.source_catalogs)
152
+ options = tuple(
153
+ option
154
+ for catalog in members
155
+ for option in catalog.options(parent_configuration)
156
+ )
157
+ if not options:
158
+ raise ValueError("source union cannot produce an empty finite catalog")
159
+ if len(options) > MAX_FINITE_VARIATION_OPTIONS:
160
+ raise ValueError("source union exceeds MAX_FINITE_VARIATION_OPTIONS")
161
+ option_ids = tuple(value.option_id for value in options)
162
+ if len(set(option_ids)) != len(option_ids):
163
+ raise ValueError("source union contains duplicate option IDs")
164
+ children = tuple(value.child_configuration_sha256 for value in options)
165
+ if len(set(children)) != len(children):
166
+ raise ValueError("source union contains duplicate child configurations")
167
+ return options
168
+
169
+
170
+ @dataclass(frozen=True, slots=True)
171
+ class SourceExposureFiniteVariationCatalog:
172
+ """Set or remove a source's hard evaluator floor without changing actions.
173
+
174
+ Source identity is useful for attribution even when its exposure is
175
+ selected adaptively. This workload-neutral wrapper separates those two
176
+ concerns while authenticating the policy change in the catalog identity.
177
+ ``None`` keeps every source-labelled option eligible but removes its hard
178
+ per-lane minimum; an integer installs that exact minimum.
179
+ """
180
+
181
+ source_catalog: FiniteVariationCatalog
182
+ evaluation_source_minimum: int | None
183
+ catalog_id: str = field(init=False)
184
+ catalog_version: int = field(init=False)
185
+ definition_sha256: str = field(init=False)
186
+ option_families: tuple[str, ...] | None = field(init=False, default=None)
187
+
188
+ def __post_init__(self) -> None:
189
+ base_id, base_version, base_definition = _catalog_identity(
190
+ self.source_catalog
191
+ )
192
+ if self.evaluation_source_minimum is not None and (
193
+ type(self.evaluation_source_minimum) is not int
194
+ or not 1 <= self.evaluation_source_minimum < 8
195
+ ):
196
+ raise ValueError("evaluation source minimum must be None or lie in [1, 8)")
197
+ object.__setattr__(self, "catalog_id", f"{base_id}_source_exposure")
198
+ object.__setattr__(self, "catalog_version", base_version + 1)
199
+ object.__setattr__(
200
+ self,
201
+ "definition_sha256",
202
+ hashlib.sha256(
203
+ _EXPOSURE_POLICY_DOMAIN
204
+ + _canonical_json(
205
+ {
206
+ "schema_version": 1,
207
+ "base_catalog": {
208
+ "catalog_id": base_id,
209
+ "catalog_version": base_version,
210
+ "definition_sha256": base_definition,
211
+ },
212
+ "evaluation_source_minimum": (
213
+ self.evaluation_source_minimum
214
+ ),
215
+ "source_identity": "preserved",
216
+ "action_set_and_order": "preserved",
217
+ "outcomes_consulted": False,
218
+ "workload_model_provider_identifiers_consulted": False,
219
+ }
220
+ )
221
+ ).hexdigest(),
222
+ )
223
+ families = getattr(self.source_catalog, "option_families", None)
224
+ if families is not None:
225
+ if (
226
+ type(families) is not tuple
227
+ or not families
228
+ or any(type(value) is not str or not value for value in families)
229
+ ):
230
+ raise TypeError("source catalog option_families are invalid")
231
+ object.__setattr__(self, "option_families", families)
232
+
233
+ def options(
234
+ self,
235
+ parent_configuration: FrozenJsonObject,
236
+ ) -> tuple[FiniteVariationOption, ...]:
237
+ self.__post_init__()
238
+ options = self.source_catalog.options(parent_configuration)
239
+ if type(options) is not tuple or any(
240
+ type(value) is not FiniteVariationOption for value in options
241
+ ):
242
+ raise TypeError("source catalog returned foreign finite options")
243
+ rewritten: list[FiniteVariationOption] = []
244
+ for option in options:
245
+ option.__post_init__()
246
+ metadata = dict(option.metadata)
247
+ source_id = metadata.get(VARIATION_SOURCE_METADATA_KEY)
248
+ if type(source_id) is not str or not source_id:
249
+ raise ValueError("source-exposure wrapper requires source-labelled options")
250
+ metadata.pop(VARIATION_SOURCE_MINIMUM_METADATA_KEY, None)
251
+ if self.evaluation_source_minimum is not None:
252
+ metadata[VARIATION_SOURCE_MINIMUM_METADATA_KEY] = str(
253
+ self.evaluation_source_minimum
254
+ )
255
+ rewritten.append(
256
+ replace(option, metadata=tuple(sorted(metadata.items())))
257
+ )
258
+ return tuple(rewritten)
259
+
260
+
261
+ def required_source_evaluation_option_ids(
262
+ contract: FiniteVariationContract,
263
+ ) -> tuple[str, ...]:
264
+ """Select deterministic source-floor witnesses from one sealed contract.
265
+
266
+ A downstream selector must retain these options in its provider-visible
267
+ pool *and* its evaluated slate. A source may publish an authenticated
268
+ within-batch rank; in that case its smallest ranks define the protected
269
+ prefix. This preserves a source-native decision (for example, the leading
270
+ members of one joint numerical-acquisition batch) without teaching the
271
+ broker source names or objective semantics. Unranked sources retain the
272
+ historical outcome-blind rotating witness.
273
+ """
274
+
275
+ if type(contract) is not FiniteVariationContract:
276
+ raise TypeError("contract must be an exact FiniteVariationContract")
277
+ contract.__post_init__()
278
+ by_source: dict[str, list[FiniteVariationOption]] = {}
279
+ minimum_by_source: dict[str, int] = {}
280
+ for option in contract.options:
281
+ metadata = dict(option.metadata)
282
+ source_id = metadata.get(EVALUATION_SOURCE_METADATA_KEY)
283
+ raw_minimum = metadata.get(EVALUATION_SOURCE_MINIMUM_METADATA_KEY)
284
+ if source_id is None and raw_minimum is None:
285
+ continue
286
+ if source_id is None:
287
+ raise ValueError("source exposure minimum requires a source ID")
288
+ if raw_minimum is None:
289
+ # Source-labelled challenger remains attributable without claiming
290
+ # a compulsory evaluator slot.
291
+ continue
292
+ if not raw_minimum.isascii() or not raw_minimum.isdigit():
293
+ raise ValueError("evaluation source minimum must be decimal digits")
294
+ minimum = int(raw_minimum)
295
+ if not 1 <= minimum < 8:
296
+ raise ValueError("evaluation source minimum must lie in [1, 8)")
297
+ previous = minimum_by_source.setdefault(source_id, minimum)
298
+ if previous != minimum:
299
+ raise ValueError("one proposal source declares inconsistent minimums")
300
+ by_source.setdefault(source_id, []).append(option)
301
+
302
+ selected: list[str] = []
303
+ contract_identity = bytes.fromhex(contract.identity_sha256)
304
+ for source_id in sorted(by_source):
305
+ source_options = by_source[source_id]
306
+ minimum = minimum_by_source[source_id]
307
+ if len(source_options) < minimum:
308
+ raise ValueError("proposal source cannot satisfy its exposure minimum")
309
+ raw_ranks = tuple(
310
+ dict(option.metadata).get(VARIATION_SOURCE_RANK_METADATA_KEY)
311
+ for option in source_options
312
+ )
313
+ if any(value is not None for value in raw_ranks):
314
+ if any(value is None for value in raw_ranks):
315
+ raise ValueError(
316
+ "one ranked proposal source contains an unranked option"
317
+ )
318
+ parsed_ranks: list[int] = []
319
+ for raw_rank in raw_ranks:
320
+ assert raw_rank is not None
321
+ if not raw_rank.isascii() or not raw_rank.isdigit():
322
+ raise ValueError("evaluation source rank must be decimal digits")
323
+ rank = int(raw_rank)
324
+ if rank <= 0:
325
+ raise ValueError("evaluation source rank must be positive")
326
+ parsed_ranks.append(rank)
327
+ if len(set(parsed_ranks)) != len(parsed_ranks):
328
+ raise ValueError("evaluation source ranks must be unique per contract")
329
+ rank_by_option_id = {
330
+ option.option_id: rank
331
+ for option, rank in zip(source_options, parsed_ranks, strict=True)
332
+ }
333
+ ordered = sorted(
334
+ source_options,
335
+ key=lambda option: (
336
+ rank_by_option_id[option.option_id],
337
+ option.option_id,
338
+ ),
339
+ )
340
+ else:
341
+ ordered = sorted(
342
+ source_options,
343
+ key=lambda option: (
344
+ hashlib.sha256(
345
+ _EXPOSURE_DOMAIN
346
+ + contract_identity
347
+ + source_id.encode("ascii", errors="strict")
348
+ + bytes.fromhex(option.identity_sha256)
349
+ ).digest(),
350
+ option.option_id,
351
+ ),
352
+ )
353
+ selected.extend(option.option_id for option in ordered[:minimum])
354
+ return tuple(sorted(selected))
355
+
356
+
357
+ def required_source_evaluation_counts(
358
+ contract: FiniteVariationContract,
359
+ ) -> tuple[tuple[str, int], ...]:
360
+ """Return semantic evaluator-exposure floors declared by finite sources.
361
+
362
+ Unlike :func:`required_source_evaluation_option_ids`, this projection does
363
+ not nominate an arbitrary representative action. It is therefore the
364
+ correct contract for feasibility solvers: they may choose *any* compatible
365
+ action from a declared source while satisfying patch, family, operator,
366
+ and memory-dose constraints jointly.
367
+ """
368
+
369
+ return finite_variation_source_minimum_counts(contract)
370
+
371
+
372
+ def required_ranked_source_evaluation_option_ids(
373
+ contract: FiniteVariationContract,
374
+ ) -> tuple[str, ...]:
375
+ """Return only source-floor witnesses backed by source-native ranks.
376
+
377
+ Contextual feasibility solvers normally satisfy an unranked source floor
378
+ with any compatible member of that source. A published source rank adds a
379
+ stronger contract: the selected prefix itself is protected. Keeping this
380
+ projection separate lets the generic broker preserve ranked expert advice
381
+ without turning historical hash witnesses into hard quality preferences.
382
+ """
383
+
384
+ required = required_source_evaluation_option_ids(contract)
385
+ return tuple(
386
+ option_id
387
+ for option_id in required
388
+ if VARIATION_SOURCE_RANK_METADATA_KEY
389
+ in dict(contract.resolve(option_id).metadata)
390
+ )
391
+
392
+
393
+ __all__ = [
394
+ "EVALUATION_SOURCE_METADATA_KEY",
395
+ "EVALUATION_SOURCE_MINIMUM_METADATA_KEY",
396
+ "SOURCE_UNION_POLICY_ID",
397
+ "SOURCE_UNION_POLICY_VERSION",
398
+ "SourceExposureFiniteVariationCatalog",
399
+ "SourceUnionFiniteVariationCatalog",
400
+ "required_ranked_source_evaluation_option_ids",
401
+ "required_source_evaluation_counts",
402
+ "required_source_evaluation_option_ids",
403
+ ]