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,422 @@
1
+ """Pydantic-AI adapter for one-call ranked portfolio selection.
2
+
3
+ This adapter owns only prompt/schema construction and translation. The
4
+ injected low-level runner may be the existing queued runner, so concurrency,
5
+ retry, exponential backoff, and provider policy remain outside this module.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import hashlib
11
+ import json
12
+ from dataclasses import dataclass
13
+ from typing import Annotated, Any, ClassVar, Literal, cast
14
+
15
+ from pydantic import (
16
+ BaseModel,
17
+ ConfigDict,
18
+ Field,
19
+ StringConstraints,
20
+ create_model,
21
+ model_validator,
22
+ )
23
+
24
+ from agent_evolve.integrations.pydantic_ai.agentic_generator import (
25
+ AttemptedStructuredGenerationResponse,
26
+ LowLevelRunner,
27
+ )
28
+ from agent_evolve.ports.agentic_generator import (
29
+ AgenticCallTelemetry,
30
+ MetricEffectDirection,
31
+ MetricEffectPrediction,
32
+ )
33
+ from agent_evolve.ports.portfolio_selection import (
34
+ PortfolioMemberDraft,
35
+ PortfolioSelectionRequest,
36
+ PortfolioSelectionResult,
37
+ resolve_ranked_portfolio_decision,
38
+ validate_pairwise_disjoint_parent_patch_selection,
39
+ )
40
+ from agent_evolve.ports.structured_generator import (
41
+ StructuredGenerationRequest,
42
+ StructuredGenerationResponse,
43
+ )
44
+
45
+
46
+ PORTFOLIO_SELECTION_TOOL_NAME = "select_ranked_portfolio"
47
+ PORTFOLIO_SELECTION_POLICY_ID = "pydantic_ai_ranked_portfolio"
48
+ PORTFOLIO_SELECTION_POLICY_VERSION = 1
49
+ PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256 = hashlib.sha256(
50
+ b"agent-evolve:pydantic-ai-ranked-portfolio:v1:"
51
+ b"one-call-exact-k-sealed-options-card-attribution-metric-predictions"
52
+ ).hexdigest()
53
+ PORTFOLIO_SELECTION_DISJOINT_POLICY_VERSION = 2
54
+ PORTFOLIO_SELECTION_DISJOINT_POLICY_DEFINITION_SHA256 = hashlib.sha256(
55
+ b"agent-evolve:pydantic-ai-ranked-portfolio:v2:"
56
+ b"one-call-exact-k-sealed-options-card-attribution-metric-predictions;"
57
+ b"optional-trusted-prefix-aware-pairwise-parent-patch-disjointness"
58
+ ).hexdigest()
59
+
60
+ _STRICT_CONFIG = ConfigDict(
61
+ extra="forbid",
62
+ strict=True,
63
+ populate_by_name=True,
64
+ validate_default=True,
65
+ )
66
+ _Rationale = Annotated[
67
+ str,
68
+ StringConstraints(
69
+ strict=True,
70
+ strip_whitespace=True,
71
+ min_length=1,
72
+ max_length=16_384,
73
+ ),
74
+ ]
75
+ _Direction = Literal["decrease", "increase", "unchanged", "unknown"]
76
+
77
+
78
+ class _PortfolioMemberOutputBase(BaseModel):
79
+ model_config = _STRICT_CONFIG
80
+
81
+ allowed_card_keys: ClassVar[frozenset[str]] = frozenset()
82
+ required_metric_ids: ClassVar[tuple[str, ...]] = ()
83
+ require_supporting_cards: ClassVar[bool] = True
84
+
85
+ @model_validator(mode="after")
86
+ def _validate_member(self) -> "_PortfolioMemberOutputBase":
87
+ card_keys = tuple(cast(Any, self).supporting_card_keys)
88
+ if len(set(card_keys)) != len(card_keys):
89
+ raise ValueError("supporting_card_keys cannot contain duplicates")
90
+ if not set(card_keys).issubset(type(self).allowed_card_keys):
91
+ raise ValueError("supporting_card_keys escape the request snapshot")
92
+ if type(self).require_supporting_cards and not card_keys:
93
+ raise ValueError("this request requires supporting-card attribution")
94
+ predictions = tuple(cast(Any, self).effect_predictions)
95
+ metric_ids = tuple(item.metric_id for item in predictions)
96
+ if len(set(metric_ids)) != len(metric_ids):
97
+ raise ValueError("effect_predictions cannot repeat a metric")
98
+ if set(metric_ids) != set(type(self).required_metric_ids):
99
+ raise ValueError(
100
+ "effect_predictions must cover the exact requested metrics"
101
+ )
102
+ return self
103
+
104
+
105
+ class _PortfolioOutputBase(BaseModel):
106
+ model_config = _STRICT_CONFIG
107
+
108
+ portfolio_size: ClassVar[int] = 1
109
+ option_family_by_id: ClassVar[dict[str, str]] = {}
110
+ min_distinct_families: ClassVar[int | None] = None
111
+ require_pairwise_disjoint_parent_patches: ClassVar[bool] = False
112
+ finite_variation_contract: ClassVar[Any] = None
113
+
114
+ @model_validator(mode="after")
115
+ def _validate_portfolio(self) -> "_PortfolioOutputBase":
116
+ members = tuple(cast(Any, self).members)
117
+ if len(members) != type(self).portfolio_size:
118
+ raise ValueError("members must contain exactly portfolio_size entries")
119
+ option_ids = tuple(member.option_id for member in members)
120
+ if len(set(option_ids)) != len(option_ids):
121
+ raise ValueError("members cannot repeat a finite option")
122
+ minimum = type(self).min_distinct_families
123
+ if minimum is not None and len(
124
+ {type(self).option_family_by_id[option_id] for option_id in option_ids}
125
+ ) < minimum:
126
+ raise ValueError("members violate min_distinct_families")
127
+ if type(self).require_pairwise_disjoint_parent_patches:
128
+ validate_pairwise_disjoint_parent_patch_selection(
129
+ type(self).finite_variation_contract,
130
+ option_ids,
131
+ )
132
+ return self
133
+
134
+
135
+ def _portfolio_output_type(request: PortfolioSelectionRequest) -> type[BaseModel]:
136
+ request.__post_init__()
137
+ option_ids = tuple(
138
+ option.option_id for option in request.finite_variation_contract.options
139
+ )
140
+ card_keys = tuple(card.card_key for card in request.cards)
141
+ metric_ids = request.required_metric_ids
142
+ option_literal = Literal.__getitem__(option_ids)
143
+ card_literal = Literal.__getitem__(card_keys)
144
+ metric_literal = Literal.__getitem__(metric_ids)
145
+
146
+ prediction_type = create_model(
147
+ "PortfolioMetricPrediction",
148
+ __config__=_STRICT_CONFIG,
149
+ __module__=__name__,
150
+ metric_id=(metric_literal, ...),
151
+ direction=(_Direction, ...),
152
+ )
153
+ member_type = create_model(
154
+ "PortfolioMemberSelection",
155
+ __base__=_PortfolioMemberOutputBase,
156
+ __module__=__name__,
157
+ option_id=(
158
+ option_literal,
159
+ Field(description="One selected immutable finite option ID."),
160
+ ),
161
+ supporting_card_keys=(
162
+ list[card_literal],
163
+ Field(
164
+ description=(
165
+ "Opaque keys of cards that materially support this action."
166
+ ),
167
+ max_length=len(card_keys),
168
+ ),
169
+ ),
170
+ effect_predictions=(
171
+ list[prediction_type],
172
+ Field(
173
+ description=(
174
+ "One direction prediction for every required metric."
175
+ ),
176
+ min_length=len(metric_ids),
177
+ max_length=len(metric_ids),
178
+ ),
179
+ ),
180
+ design_rationale=(
181
+ _Rationale,
182
+ Field(description="Concise reason for this ranked action."),
183
+ ),
184
+ )
185
+ member_type.allowed_card_keys = frozenset(card_keys)
186
+ member_type.required_metric_ids = metric_ids
187
+ member_type.require_supporting_cards = request.require_supporting_cards
188
+
189
+ output_type = create_model(
190
+ "RankedPortfolioSelection",
191
+ __base__=_PortfolioOutputBase,
192
+ __module__=__name__,
193
+ members=(
194
+ list[member_type],
195
+ Field(
196
+ description="Actions ordered best-first; list position is rank.",
197
+ min_length=request.portfolio_size,
198
+ max_length=request.portfolio_size,
199
+ ),
200
+ ),
201
+ )
202
+ output_type.portfolio_size = request.portfolio_size
203
+ output_type.option_family_by_id = {
204
+ option.option_id: option.family
205
+ for option in request.finite_variation_contract.options
206
+ }
207
+ output_type.min_distinct_families = request.min_distinct_families
208
+ output_type.require_pairwise_disjoint_parent_patches = (
209
+ request.require_pairwise_disjoint_parent_patches
210
+ )
211
+ output_type.finite_variation_contract = request.finite_variation_contract
212
+ return output_type
213
+
214
+
215
+ def render_portfolio_selection_prompt(request: PortfolioSelectionRequest) -> str:
216
+ """Render only prompt-safe card views and sealed option descriptions."""
217
+
218
+ if type(request) is not PortfolioSelectionRequest:
219
+ raise TypeError("request must be an exact PortfolioSelectionRequest")
220
+ request.__post_init__()
221
+ contract = request.finite_variation_contract
222
+ machine_contract = {
223
+ "schema_version": 1,
224
+ "request_sha256": request.request_sha256,
225
+ "context_sha256": request.context_sha256,
226
+ "context": cast(Any, request.context),
227
+ "finite_variation_contract": {
228
+ "catalog_id": contract.catalog_id,
229
+ "catalog_version": contract.catalog_version,
230
+ "catalog_definition_sha256": contract.catalog_definition_sha256,
231
+ "parent_configuration_sha256": contract.parent_configuration_sha256,
232
+ "contract_identity_sha256": contract.identity_sha256,
233
+ },
234
+ "ordered_options": list(contract.prompt_records()),
235
+ "cards": [card.prompt_record() for card in request.cards],
236
+ "portfolio_constraints": {
237
+ "portfolio_size": request.portfolio_size,
238
+ "distinct_option_ids": True,
239
+ "min_distinct_families": request.min_distinct_families,
240
+ "require_supporting_cards": request.require_supporting_cards,
241
+ **(
242
+ {
243
+ "require_pairwise_disjoint_parent_patches": True,
244
+ "selector_policy_version": (
245
+ PORTFOLIO_SELECTION_DISJOINT_POLICY_VERSION
246
+ ),
247
+ "selector_policy_definition_sha256": (
248
+ PORTFOLIO_SELECTION_DISJOINT_POLICY_DEFINITION_SHA256
249
+ ),
250
+ }
251
+ if request.require_pairwise_disjoint_parent_patches
252
+ else {}
253
+ ),
254
+ "required_metric_ids": list(request.required_metric_ids),
255
+ },
256
+ }
257
+ # Frozen typed-JSON containers are not directly JSON serializable. The
258
+ # context is intentionally projected through its public thaw operation;
259
+ # card prompt records already return detached Python JSON values.
260
+ from agent_evolve.domain.typed_json import thaw_json
261
+
262
+ machine_contract["context"] = thaw_json(request.context)
263
+ encoded = json.dumps(
264
+ machine_contract,
265
+ allow_nan=False,
266
+ ensure_ascii=True,
267
+ separators=(",", ":"),
268
+ sort_keys=True,
269
+ )
270
+ return "\n".join(
271
+ (
272
+ request.instruction,
273
+ "",
274
+ "RANKED PORTFOLIO SELECTION CONTRACT",
275
+ encoded,
276
+ "Return exactly the requested number of distinct option IDs in "
277
+ "best-first order. For each member, cite only supplied card_key "
278
+ "values and predict every required metric exactly once. Do not "
279
+ "return candidate configurations.",
280
+ )
281
+ )
282
+
283
+
284
+ def _validated_response(
285
+ result: object,
286
+ *,
287
+ output_type: type[BaseModel],
288
+ ) -> tuple[StructuredGenerationResponse[Any], int]:
289
+ if type(result) is AttemptedStructuredGenerationResponse:
290
+ AttemptedStructuredGenerationResponse.__post_init__(result)
291
+ response = result.response
292
+ attempt_count = result.attempt_count
293
+ elif type(result) is StructuredGenerationResponse:
294
+ response = result
295
+ attempt_count = 1
296
+ else:
297
+ raise TypeError(
298
+ "low-level runner must return StructuredGenerationResponse or "
299
+ "AttemptedStructuredGenerationResponse"
300
+ )
301
+ StructuredGenerationResponse.__post_init__(response)
302
+ if type(response.value) is not output_type:
303
+ raise TypeError(
304
+ "low-level response value does not match the portfolio output type"
305
+ )
306
+ return response, attempt_count
307
+
308
+
309
+ def _telemetry(
310
+ response: StructuredGenerationResponse[Any],
311
+ *,
312
+ attempt_count: int,
313
+ ) -> AgenticCallTelemetry:
314
+ return AgenticCallTelemetry(
315
+ requested_model=response.requested_model,
316
+ resolved_model=response.resolved_model,
317
+ resolved_provider=response.resolved_provider,
318
+ provider_response_id=response.provider_response_id,
319
+ finish_reason=response.finish_reason,
320
+ input_tokens=response.input_tokens,
321
+ output_tokens=response.output_tokens,
322
+ reasoning_tokens=response.reasoning_tokens,
323
+ cache_read_tokens=response.cache_read_tokens,
324
+ cache_write_tokens=response.cache_write_tokens,
325
+ cost_usd=response.cost_usd,
326
+ latency_ns=response.latency_ns,
327
+ attempt_count=attempt_count,
328
+ )
329
+
330
+
331
+ @dataclass(slots=True)
332
+ class PydanticAIPortfolioSelectionPolicy:
333
+ """Translate one queued structured call into a fully resolved decision."""
334
+
335
+ generate_once: LowLevelRunner
336
+
337
+ policy_id: ClassVar[str] = PORTFOLIO_SELECTION_POLICY_ID
338
+ policy_version: ClassVar[int] = PORTFOLIO_SELECTION_POLICY_VERSION
339
+ policy_definition_sha256: ClassVar[str] = (
340
+ PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256
341
+ )
342
+
343
+ def __post_init__(self) -> None:
344
+ if not callable(self.generate_once):
345
+ raise TypeError("generate_once must be callable")
346
+
347
+ async def select(
348
+ self,
349
+ request: PortfolioSelectionRequest,
350
+ ) -> PortfolioSelectionResult:
351
+ if type(request) is not PortfolioSelectionRequest:
352
+ raise TypeError("request must be an exact PortfolioSelectionRequest")
353
+ request.__post_init__()
354
+ output_type = _portfolio_output_type(request)
355
+ low_level_request = StructuredGenerationRequest(
356
+ call_id=request.call_id,
357
+ operation=request.operation,
358
+ prompt=render_portfolio_selection_prompt(request),
359
+ output_type=output_type,
360
+ output_tool_name=PORTFOLIO_SELECTION_TOOL_NAME,
361
+ max_output_tokens=request.max_output_tokens,
362
+ temperature=request.temperature,
363
+ )
364
+ raw = await self.generate_once(low_level_request)
365
+ response, attempt_count = _validated_response(
366
+ raw,
367
+ output_type=output_type,
368
+ )
369
+ value = cast(Any, response.value)
370
+ drafts = tuple(
371
+ PortfolioMemberDraft(
372
+ option_id=member.option_id,
373
+ supporting_card_keys=tuple(sorted(member.supporting_card_keys)),
374
+ effect_predictions=tuple(
375
+ sorted(
376
+ (
377
+ MetricEffectPrediction(
378
+ metric_id=prediction.metric_id,
379
+ direction=MetricEffectDirection(
380
+ prediction.direction
381
+ ),
382
+ )
383
+ for prediction in member.effect_predictions
384
+ ),
385
+ key=lambda prediction: prediction.metric_id,
386
+ )
387
+ ),
388
+ design_rationale=member.design_rationale,
389
+ )
390
+ for member in value.members
391
+ )
392
+ decision = resolve_ranked_portfolio_decision(
393
+ request,
394
+ drafts,
395
+ policy_id=self.policy_id,
396
+ policy_version=(
397
+ PORTFOLIO_SELECTION_DISJOINT_POLICY_VERSION
398
+ if request.require_pairwise_disjoint_parent_patches
399
+ else self.policy_version
400
+ ),
401
+ policy_definition_sha256=(
402
+ PORTFOLIO_SELECTION_DISJOINT_POLICY_DEFINITION_SHA256
403
+ if request.require_pairwise_disjoint_parent_patches
404
+ else self.policy_definition_sha256
405
+ ),
406
+ )
407
+ return PortfolioSelectionResult(
408
+ decision=decision,
409
+ telemetry=_telemetry(response, attempt_count=attempt_count),
410
+ )
411
+
412
+
413
+ __all__ = [
414
+ "PORTFOLIO_SELECTION_POLICY_DEFINITION_SHA256",
415
+ "PORTFOLIO_SELECTION_POLICY_ID",
416
+ "PORTFOLIO_SELECTION_POLICY_VERSION",
417
+ "PORTFOLIO_SELECTION_DISJOINT_POLICY_DEFINITION_SHA256",
418
+ "PORTFOLIO_SELECTION_DISJOINT_POLICY_VERSION",
419
+ "PORTFOLIO_SELECTION_TOOL_NAME",
420
+ "PydanticAIPortfolioSelectionPolicy",
421
+ "render_portfolio_selection_prompt",
422
+ ]