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,376 @@
1
+ """Runtime settings and credential loading at the composition root.
2
+
3
+ Two rules, both learned from defects.
4
+
5
+ **Never search.** A ``.env`` is read only when the caller names one -- through
6
+ ``dotenv_path``/``AGENTEVOLVE_DOTENV`` here, or the explicit path handed to
7
+ :func:`load_credentials`. ``dotenv.load_dotenv()`` with no argument walks
8
+ *upward* from the calling module until it finds any ``.env``, so a library
9
+ buried in a monorepo silently adopts an unrelated project's credentials.
10
+
11
+ **Never re-introduce a name the operator removed.** ``load_dotenv(path,
12
+ override=False)`` looks safe and is not. ``override=False`` defers only to
13
+ variables that are *present*; a variable deliberately removed with ``env -u
14
+ OPENROUTER_API_KEY`` is absent, so the file value is set anyway. A run launched
15
+ to demonstrate that it made no provider call was handed the key straight back by
16
+ the very next line. A process cannot tell "never set" from "deliberately unset",
17
+ so the intent has to be stated -- name the variables in ``AGENTEVOLVE_SCRUBBED``
18
+ and they are removed from the environment and never reintroduced from a file,
19
+ whatever else the caller asks for::
20
+
21
+ AGENTEVOLVE_SCRUBBED=OPENROUTER_API_KEY python run_campaign.py
22
+
23
+ This module therefore never calls ``dotenv.load_dotenv`` at all. It reads a
24
+ named file with ``dotenv_values`` -- which touches nothing -- then applies the
25
+ result key by key and returns a record of exactly what it introduced, refused,
26
+ and removed, so a run can seal that record as evidence instead of asserting a
27
+ constant.
28
+ """
29
+
30
+ from __future__ import annotations
31
+
32
+ import os
33
+ from dataclasses import dataclass
34
+ from pathlib import Path
35
+ from typing import Any, Dict, Mapping, Optional, Sequence, Tuple, Union
36
+
37
+ #: Default model. Cheap by policy, not by accident: a package that defaults to
38
+ #: a frontier model hands a stranger a bill they never chose on their first
39
+ #: run. This route is $0.10 per million input tokens and $0.60 per million
40
+ #: output. Whatever is set here is echoed before any paid call, so nobody is
41
+ #: billed by a default they did not see.
42
+ _DEFAULT_MODEL = "openrouter:openai/gpt-5.6-luna"
43
+ _DEFAULT_HARNESS = "pydantic_ai"
44
+
45
+ #: Published price per million tokens for the routes we default to or document,
46
+ #: so cost can be shown rather than guessed. Absent from this table means
47
+ #: unknown, and unknown is reported as unknown.
48
+ #:
49
+ #: Both spellings of each route are entered because a run is priced by the name
50
+ #: the *caller* used: ``model=`` is echoed straight into the usage record, and a
51
+ #: caller may write either the package's prefixed form or the bare id the
52
+ #: raw-HTTP seam sends. One spelling in the table would report `cost_usd: null`
53
+ #: on the other, which is the defect 0.4.0 fixed for luna.
54
+ #:
55
+ #: The three tiers are the ladder this project measures capability on, and the
56
+ #: numbers are its own routing table (wave-D `wd_common.py`'s `PRICES`, itself
57
+ #: the OpenRouter catalog's published prices) rather than anything recalled.
58
+ #: terra and sol were absent until the ladder wave started using them, so those
59
+ #: runs reported cost unknown -- honest, and no longer necessary.
60
+ MODEL_PRICES_PER_MTOK = {
61
+ "openrouter:openai/gpt-5.6-luna": (0.10, 0.60),
62
+ "openai/gpt-5.6-luna": (0.10, 0.60),
63
+ "openrouter:openai/gpt-5.6-terra": (1.00, 6.00),
64
+ "openai/gpt-5.6-terra": (1.00, 6.00),
65
+ "openrouter:openai/gpt-5.6-sol": (5.00, 30.00),
66
+ "openai/gpt-5.6-sol": (5.00, 30.00),
67
+ }
68
+
69
+
70
+ def model_price(model: str):
71
+ """Return ``(input, output)`` USD per million tokens, or ``None``."""
72
+ return MODEL_PRICES_PER_MTOK.get(model)
73
+
74
+ _API_KEYS = ("OPENAI_API_KEY", "GROQ_API_KEY", "GOOGLE_API_KEY", "ANTHROPIC_API_KEY")
75
+
76
+ #: Environment variable naming an explicit ``.env`` file to load.
77
+ DOTENV_PATH_VAR = "AGENTEVOLVE_DOTENV"
78
+
79
+ #: Environment variable naming variables that must stay unset (comma separated).
80
+ SCRUBBED_VAR = "AGENTEVOLVE_SCRUBBED"
81
+
82
+ #: Name shapes treated as credentials. Deliberately generic -- no provider is
83
+ #: named, so a new provider is covered the day it first appears in a ``.env``.
84
+ _CREDENTIAL_SUFFIXES = (
85
+ "_API_KEY",
86
+ "_KEY",
87
+ "_TOKEN",
88
+ "_SECRET",
89
+ "_PASSWORD",
90
+ "_CREDENTIAL",
91
+ "_CREDENTIALS",
92
+ )
93
+
94
+
95
+ #: The variable names model providers actually document. Used ONLY to answer the
96
+ #: routing question below -- never to decide what to redact.
97
+ #:
98
+ #: Exact names, not a vendor substring. A substring rule reads
99
+ #: `CLAUDE_CODE_MESSAGING_TOKEN` -- an agent harness's own IPC token -- as an
100
+ #: Anthropic credential, which is the same false positive one level down. A new
101
+ #: provider is one line here, and `proposer="llm"` reaches any provider without
102
+ #: consulting this list at all.
103
+ PROVIDER_CREDENTIAL_VARS = frozenset({
104
+ "OPENAI_API_KEY",
105
+ "OPENROUTER_API_KEY",
106
+ "ANTHROPIC_API_KEY",
107
+ "GEMINI_API_KEY",
108
+ "GOOGLE_API_KEY",
109
+ "GOOGLE_GENAI_API_KEY",
110
+ "GOOGLE_APPLICATION_CREDENTIALS",
111
+ "MISTRAL_API_KEY",
112
+ "DEEPSEEK_API_KEY",
113
+ "GROQ_API_KEY",
114
+ "COHERE_API_KEY",
115
+ "CO_API_KEY",
116
+ "XAI_API_KEY",
117
+ "GROK_API_KEY",
118
+ "TOGETHER_API_KEY",
119
+ "FIREWORKS_API_KEY",
120
+ "PERPLEXITY_API_KEY",
121
+ "CEREBRAS_API_KEY",
122
+ "MOONSHOT_API_KEY",
123
+ "HUGGINGFACE_API_KEY",
124
+ "HUGGING_FACE_HUB_TOKEN",
125
+ "HF_TOKEN",
126
+ "AZURE_API_KEY",
127
+ "AZURE_OPENAI_API_KEY",
128
+ "AWS_BEDROCK_API_KEY",
129
+ "OLLAMA_API_KEY",
130
+ })
131
+
132
+ #: Prefix reserved for this package, so an operator can declare a credential for
133
+ #: a provider the list above does not name yet without editing the package.
134
+ _PROVIDER_VAR_PREFIX = "AGENTEVOLVE_"
135
+
136
+
137
+ def is_credential_name(name: str) -> bool:
138
+ """Whether *name* looks like a secret rather than plain configuration.
139
+
140
+ This is the **redaction** predicate: it decides what must not be echoed and
141
+ what an allowlist has to name explicitly. Over-classifying here is safe --
142
+ it protects more -- so the rule stays deliberately generic and no provider
143
+ is named, which is why a new provider is covered the day it first appears in
144
+ a ``.env``.
145
+
146
+ It is *not* the routing predicate. See :func:`is_provider_credential_name`.
147
+ """
148
+ upper = name.upper()
149
+ return upper.endswith(_CREDENTIAL_SUFFIXES) or upper in {"API_KEY", "TOKEN", "SECRET"}
150
+
151
+
152
+ def is_provider_credential_name(name: str) -> bool:
153
+ """Whether *name* plausibly holds a credential for a **model provider**.
154
+
155
+ The two questions the generic rule above used to answer at once are not the
156
+ same question, and conflating them had a consequence in exactly one
157
+ direction. `credentials_present()` decides whether ``proposer="auto"`` may
158
+ reach a provider at all; asking "does this look like a secret" answered
159
+ *yes* for `VSCODE_GIT_IPC_AUTH_TOKEN` and `CLAUDE_CODE_MESSAGING_TOKEN`, so
160
+ on an ordinary developer machine -- an editor open, an agent running, no
161
+ provider account anywhere -- ``auto`` stopped choosing the credential-free
162
+ path and announced that it had found a credential. The documented default
163
+ was being flipped by a variable belonging to something else entirely.
164
+
165
+ So routing requires *both* a credential-shaped name and a vendor this
166
+ package can reach. Over-classifying is safe for redaction and unsafe for
167
+ routing, and the asymmetry is why these are two functions.
168
+
169
+ The escape hatch is explicit rather than inferred: ``proposer="llm"`` never
170
+ consults this at all, so an unrecognized vendor is one flag away and never a
171
+ silent misroute. ``AGENTEVOLVE_*`` credential names also route, so an
172
+ operator can declare one without editing the package.
173
+ """
174
+ upper = name.upper()
175
+ if upper in PROVIDER_CREDENTIAL_VARS:
176
+ return True
177
+ return upper.startswith(_PROVIDER_VAR_PREFIX) and is_credential_name(upper)
178
+
179
+
180
+ def scrubbed_names() -> Tuple[str, ...]:
181
+ """Variables the operator declared must stay unset, via ``AGENTEVOLVE_SCRUBBED``."""
182
+ raw = os.environ.get(SCRUBBED_VAR, "")
183
+ return tuple(sorted({part.strip() for part in raw.split(",") if part.strip()}))
184
+
185
+
186
+ def enforce_scrubbed_environment() -> Tuple[str, ...]:
187
+ """Remove every declared-scrubbed variable from the process environment.
188
+
189
+ Returns the names actually removed. A no-op when nothing is declared, so
190
+ importing this package cannot surprise a caller who has not asked for it.
191
+ """
192
+ removed = []
193
+ for name in scrubbed_names():
194
+ if name in os.environ:
195
+ del os.environ[name]
196
+ removed.append(name)
197
+ return tuple(removed)
198
+
199
+
200
+ @dataclass(frozen=True)
201
+ class CredentialLoad:
202
+ """What a credential load actually did. Names only -- never values."""
203
+
204
+ dotenv_path: Optional[str] = None
205
+ introduced: Tuple[str, ...] = ()
206
+ refused_scrubbed: Tuple[str, ...] = ()
207
+ refused_undeclared: Tuple[str, ...] = ()
208
+ already_present: Tuple[str, ...] = ()
209
+ removed_from_environment: Tuple[str, ...] = ()
210
+
211
+ def to_record(self) -> Dict[str, Any]:
212
+ """A sealable record of the load, safe to write into a run receipt."""
213
+ return {
214
+ "dotenv_path": self.dotenv_path,
215
+ "introduced": list(self.introduced),
216
+ "refused_scrubbed": list(self.refused_scrubbed),
217
+ "refused_undeclared": list(self.refused_undeclared),
218
+ "already_present": list(self.already_present),
219
+ "removed_from_environment": list(self.removed_from_environment),
220
+ }
221
+
222
+
223
+ @dataclass(frozen=True)
224
+ class AgentEvolveSettings:
225
+ """Model selection and credentials. Secrets are never echoed by repr helpers."""
226
+
227
+ model: str = _DEFAULT_MODEL
228
+ harness: str = _DEFAULT_HARNESS
229
+ temperature: Optional[float] = None
230
+ dotenv_source: Optional[str] = None
231
+
232
+ @classmethod
233
+ def from_env(cls, *, dotenv_path: Optional[str] = None) -> "AgentEvolveSettings":
234
+ """Read settings from the process environment.
235
+
236
+ ``dotenv_path`` (or ``AGENTEVOLVE_DOTENV``) names a ``.env`` to merge in
237
+ underneath the process environment. Without one, no file is read at all
238
+ and the process environment is the single source of truth.
239
+ """
240
+ named = dotenv_path or os.environ.get(DOTENV_PATH_VAR)
241
+ if named is None:
242
+ enforce_scrubbed_environment()
243
+ source = None
244
+ else:
245
+ source = load_credentials(named).dotenv_path
246
+ temp = os.environ.get("AGENTEVOLVE_TEMPERATURE")
247
+ return cls(
248
+ model=os.environ.get("AGENTEVOLVE_MODEL", _DEFAULT_MODEL),
249
+ harness=os.environ.get("AGENTEVOLVE_HARNESS", _DEFAULT_HARNESS),
250
+ temperature=float(temp) if temp else None,
251
+ dotenv_source=source,
252
+ )
253
+
254
+ def public_metadata(self) -> Dict[str, Any]:
255
+ """Settings safe to log (no secrets)."""
256
+ return {
257
+ "model": self.model,
258
+ "harness": self.harness,
259
+ "temperature": self.temperature,
260
+ "available_keys": [k for k in _API_KEYS if os.environ.get(k)],
261
+ "dotenv_source": self.dotenv_source,
262
+ "scrubbed": list(scrubbed_names()),
263
+ }
264
+
265
+
266
+ def load_credentials(
267
+ dotenv_path: Union[str, Path],
268
+ *,
269
+ allow_credentials: Optional[Sequence[str]] = None,
270
+ override: bool = False,
271
+ optional: bool = False,
272
+ ) -> CredentialLoad:
273
+ """Merge an explicitly named ``.env`` into the environment, safely.
274
+
275
+ This replaces ``dotenv.load_dotenv(path, override=False)`` at every call
276
+ site. The difference that matters: a variable named in
277
+ ``AGENTEVOLVE_SCRUBBED`` is removed from the environment and never set from
278
+ the file, so the scrub actually holds.
279
+
280
+ ``allow_credentials`` optionally restricts which credential-shaped names the
281
+ file may introduce -- pass ``()`` for a run that should need none. ``None``
282
+ (the default) allows any, matching the behaviour of the call it replaces.
283
+ ``override`` replaces variables already in the environment; the scrub list
284
+ outranks it either way.
285
+
286
+ Raises ``FileNotFoundError`` if the named file is absent, because a named
287
+ path that silently does nothing is how credential bugs hide. Pass
288
+ ``optional=True`` where the file is genuinely a maybe -- a run that layers a
289
+ workspace ``.env`` over a repository one, say -- and its absence returns an
290
+ empty record instead. The scrub list is enforced either way.
291
+ """
292
+ removed = enforce_scrubbed_environment()
293
+ scrubbed = set(scrubbed_names())
294
+ allowed = None if allow_credentials is None else set(allow_credentials)
295
+
296
+ resolved = Path(dotenv_path).expanduser()
297
+ if not resolved.is_file():
298
+ if optional:
299
+ return CredentialLoad(removed_from_environment=removed)
300
+ raise FileNotFoundError(f"agent_evolve dotenv file not found: {resolved}")
301
+
302
+ introduced, refused_scrubbed, refused_undeclared, present = [], [], [], []
303
+ for name, value in _read_dotenv_file(resolved).items():
304
+ if value is None:
305
+ continue
306
+ if name in scrubbed:
307
+ refused_scrubbed.append(name)
308
+ continue
309
+ if name in os.environ and not override:
310
+ present.append(name)
311
+ continue
312
+ if allowed is not None and is_credential_name(name) and name not in allowed:
313
+ refused_undeclared.append(name)
314
+ continue
315
+ os.environ[name] = value
316
+ introduced.append(name)
317
+
318
+ return CredentialLoad(
319
+ dotenv_path=str(resolved.resolve()),
320
+ introduced=tuple(sorted(introduced)),
321
+ refused_scrubbed=tuple(sorted(refused_scrubbed)),
322
+ refused_undeclared=tuple(sorted(refused_undeclared)),
323
+ already_present=tuple(sorted(present)),
324
+ removed_from_environment=removed,
325
+ )
326
+
327
+
328
+ def _read_dotenv_file(resolved: Path) -> Mapping[str, Optional[str]]:
329
+ """Parse a ``.env`` without touching the environment."""
330
+ try:
331
+ from dotenv import dotenv_values
332
+ except Exception as exc: # pragma: no cover - python-dotenv is a hard dep
333
+ raise RuntimeError(
334
+ f"a dotenv file was requested ({resolved}) but python-dotenv is not installed"
335
+ ) from exc
336
+ return dotenv_values(resolved)
337
+
338
+
339
+ def credentials_present() -> bool:
340
+ """True when some provider credential is available in the environment.
341
+
342
+ Used only to decide whether ``proposer="auto"`` may reach a provider. A
343
+ name the operator scrubbed does not count as present, so a run launched to
344
+ demonstrate that it made no provider call falls back to random rather than
345
+ quietly finding a key somewhere else.
346
+
347
+ The test is :func:`is_provider_credential_name`, not the broad redaction
348
+ rule: a secret-shaped variable belonging to an editor or an agent is not
349
+ evidence of a model-provider account, and treating it as one turned the
350
+ credential-free default off on machines that had no provider credential at
351
+ all.
352
+ """
353
+ scrubbed = set(scrubbed_names())
354
+ for name, value in os.environ.items():
355
+ if not value or name in scrubbed:
356
+ continue
357
+ if is_provider_credential_name(name):
358
+ return True
359
+ return False
360
+
361
+
362
+ __all__ = [
363
+ "AgentEvolveSettings",
364
+ "CredentialLoad",
365
+ "DOTENV_PATH_VAR",
366
+ "SCRUBBED_VAR",
367
+ "MODEL_PRICES_PER_MTOK",
368
+ "credentials_present",
369
+ "model_price",
370
+ "enforce_scrubbed_environment",
371
+ "is_credential_name",
372
+ "is_provider_credential_name",
373
+ "PROVIDER_CREDENTIAL_VARS",
374
+ "load_credentials",
375
+ "scrubbed_names",
376
+ ]