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.
- agent_evolve/__init__.py +722 -0
- agent_evolve/agentic.py +2800 -0
- agent_evolve/api.py +767 -0
- agent_evolve/application/__init__.py +1580 -0
- agent_evolve/application/action_allocation.py +744 -0
- agent_evolve/application/action_allocation_frame.py +347 -0
- agent_evolve/application/action_allocation_frame_commit.py +185 -0
- agent_evolve/application/action_allocation_frame_commit_v3.py +184 -0
- agent_evolve/application/action_allocation_frame_v3.py +338 -0
- agent_evolve/application/action_archive_value.py +497 -0
- agent_evolve/application/action_evidence_consistency.py +455 -0
- agent_evolve/application/action_forecast_partitioning.py +1471 -0
- agent_evolve/application/action_metric_projection.py +211 -0
- agent_evolve/application/action_role_value.py +680 -0
- agent_evolve/application/action_score_authorities.py +363 -0
- agent_evolve/application/action_structural_signature.py +116 -0
- agent_evolve/application/action_target_realization.py +402 -0
- agent_evolve/application/agentic_evolution.py +7734 -0
- agent_evolve/application/agentic_portfolio_residual_expert.py +835 -0
- agent_evolve/application/anchor_residual_identification.py +463 -0
- agent_evolve/application/archive_conditioned_action_target.py +208 -0
- agent_evolve/application/artifact_journal.py +246 -0
- agent_evolve/application/artifact_replay.py +347 -0
- agent_evolve/application/budgeted_optimizer.py +1828 -0
- agent_evolve/application/calibrated_campaign.py +485 -0
- agent_evolve/application/calibrated_current_prefix_forecast_opportunity.py +322 -0
- agent_evolve/application/calibrated_positive_gain_opportunity.py +1581 -0
- agent_evolve/application/campaign_capacity_recourse.py +254 -0
- agent_evolve/application/campaign_contextual_outcomes.py +119 -0
- agent_evolve/application/campaign_diagnostic_blocks.py +930 -0
- agent_evolve/application/campaign_evidence_registry.py +262 -0
- agent_evolve/application/campaign_execution.py +2537 -0
- agent_evolve/application/campaign_generation_audit.py +942 -0
- agent_evolve/application/campaign_learning.py +1812 -0
- agent_evolve/application/campaign_learning_runtime.py +1977 -0
- agent_evolve/application/campaign_search_phase.py +227 -0
- agent_evolve/application/campaign_selector_context_extension.py +220 -0
- agent_evolve/application/campaign_variation_envelope.py +649 -0
- agent_evolve/application/campaign_variation_trace.py +451 -0
- agent_evolve/application/candidate_archive_consequence.py +128 -0
- agent_evolve/application/causal_opportunity_portfolio_gate.py +385 -0
- agent_evolve/application/composite_outcome_updater.py +145 -0
- agent_evolve/application/composition_portfolio_selection.py +363 -0
- agent_evolve/application/concurrent_stage.py +144 -0
- agent_evolve/application/contextual_action_allocation.py +181 -0
- agent_evolve/application/contextual_campaign_outcomes.py +267 -0
- agent_evolve/application/contextual_campaign_planning.py +1366 -0
- agent_evolve/application/contextual_delayed_credit.py +651 -0
- agent_evolve/application/contextual_search_controller.py +2374 -0
- agent_evolve/application/current_prefix_forecast_opportunity.py +714 -0
- agent_evolve/application/decision_metric_projection.py +112 -0
- agent_evolve/application/derived_action_semantics.py +129 -0
- agent_evolve/application/detailed_evaluation.py +449 -0
- agent_evolve/application/earned_lineage.py +1011 -0
- agent_evolve/application/effective_choice_audit.py +484 -0
- agent_evolve/application/empirical_consequence_calibration.py +908 -0
- agent_evolve/application/evaluation_accounting.py +325 -0
- agent_evolve/application/evaluation_cache.py +199 -0
- agent_evolve/application/evaluation_escrow.py +547 -0
- agent_evolve/application/evaluation_recourse.py +253 -0
- agent_evolve/application/event_recorder.py +151 -0
- agent_evolve/application/evolution_campaign.py +1840 -0
- agent_evolve/application/executable_hypothesis.py +323 -0
- agent_evolve/application/factorial_branch_pilot.py +772 -0
- agent_evolve/application/finite_acquisition_capacity_recourse.py +672 -0
- agent_evolve/application/finite_acquisition_residual_expert.py +373 -0
- agent_evolve/application/finite_acquisition_variation_envelope.py +802 -0
- agent_evolve/application/finite_action_hypothesis_semantics.py +446 -0
- agent_evolve/application/finite_action_selection.py +188 -0
- agent_evolve/application/finite_action_set.py +306 -0
- agent_evolve/application/finite_action_transition.py +537 -0
- agent_evolve/application/finite_variation_eligibility.py +296 -0
- agent_evolve/application/forecast_geometry_portfolio.py +799 -0
- agent_evolve/application/forecast_opportunity_shadow_calibration.py +316 -0
- agent_evolve/application/front_proximity_admission.py +311 -0
- agent_evolve/application/front_proximity_parent_basis.py +458 -0
- agent_evolve/application/frozen_hurdle_score.py +659 -0
- agent_evolve/application/g3_causal_screen.py +2257 -0
- agent_evolve/application/g3_causal_validation.py +1046 -0
- agent_evolve/application/g3_postseal_curation.py +818 -0
- agent_evolve/application/gated_agentic_generator.py +205 -0
- agent_evolve/application/generation_feedback.py +293 -0
- agent_evolve/application/generative_proposal_journal.py +185 -0
- agent_evolve/application/geometry_conditional_elasticity.py +453 -0
- agent_evolve/application/global_wave_action_allocation.py +1151 -0
- agent_evolve/application/head_mass_conditional_seat.py +268 -0
- agent_evolve/application/identifiable_reflection_evidence.py +1147 -0
- agent_evolve/application/identifiable_reflection_learning.py +395 -0
- agent_evolve/application/identifiable_reflection_request.py +364 -0
- agent_evolve/application/in_memory_residual_archive.py +341 -0
- agent_evolve/application/insight_memory.py +1804 -0
- agent_evolve/application/live_runtime_manifest.py +758 -0
- agent_evolve/application/llm_task_queue.py +769 -0
- agent_evolve/application/matched_finite_action_block.py +409 -0
- agent_evolve/application/materialized_action_broker.py +2328 -0
- agent_evolve/application/materialized_action_constraints.py +83 -0
- agent_evolve/application/materialized_variation.py +211 -0
- agent_evolve/application/multi_option_evolution.py +1536 -0
- agent_evolve/application/outcome_adaptive_action_racing.py +2827 -0
- agent_evolve/application/outcome_adaptive_residual_campaign_runtime.py +580 -0
- agent_evolve/application/outcome_adaptive_residual_portfolio_evolution.py +3671 -0
- agent_evolve/application/outcome_conditioned_portfolio_selection.py +1374 -0
- agent_evolve/application/outcome_relation.py +193 -0
- agent_evolve/application/paired_allocation_comparison.py +241 -0
- agent_evolve/application/paired_block_schedule.py +127 -0
- agent_evolve/application/parent_measurement.py +226 -0
- agent_evolve/application/pareto_archive.py +811 -0
- agent_evolve/application/portfolio_campaign_runtime.py +4739 -0
- agent_evolve/application/portfolio_evolution.py +2950 -0
- agent_evolve/application/portfolio_hypothesis_observations.py +814 -0
- agent_evolve/application/portfolio_memory_attribution.py +581 -0
- agent_evolve/application/portfolio_memory_dose.py +788 -0
- agent_evolve/application/portfolio_memory_matched_control.py +938 -0
- agent_evolve/application/portfolio_memory_transfer.py +297 -0
- agent_evolve/application/portfolio_optimization_memory.py +363 -0
- agent_evolve/application/portfolio_outcome_feedback.py +1613 -0
- agent_evolve/application/portfolio_projection.py +335 -0
- agent_evolve/application/portfolio_recombination.py +2032 -0
- agent_evolve/application/post_evolution_reflection.py +834 -0
- agent_evolve/application/postcommit_rank_authority.py +245 -0
- agent_evolve/application/precommitted_portfolio_racing.py +2762 -0
- agent_evolve/application/prequential_archive_opportunity_calibration.py +1154 -0
- agent_evolve/application/prequential_residual_exploration.py +343 -0
- agent_evolve/application/prequential_score_portfolio.py +954 -0
- agent_evolve/application/projections.py +292 -0
- agent_evolve/application/protected_action_committee.py +1027 -0
- agent_evolve/application/protected_branch_pilot.py +376 -0
- agent_evolve/application/protected_current_prefix_forecast_opportunity.py +552 -0
- agent_evolve/application/provider_replay.py +910 -0
- agent_evolve/application/rank_balanced_causal_pilot.py +1372 -0
- agent_evolve/application/recombination_residual_expert.py +403 -0
- agent_evolve/application/reflection_workflow.py +571 -0
- agent_evolve/application/region_conditional_credit.py +911 -0
- agent_evolve/application/residual_campaign_runtime.py +531 -0
- agent_evolve/application/residual_headroom_campaign_runtime.py +459 -0
- agent_evolve/application/residual_headroom_ledger.py +1544 -0
- agent_evolve/application/residual_learning_transaction.py +396 -0
- agent_evolve/application/residual_portfolio_evolution.py +1228 -0
- agent_evolve/application/residual_reachability.py +749 -0
- agent_evolve/application/residual_stage_credit.py +499 -0
- agent_evolve/application/same_prefix_paired_audit.py +1580 -0
- agent_evolve/application/semantic_coverage_score_portfolio.py +838 -0
- agent_evolve/application/sequential_lineage_allocation.py +1017 -0
- agent_evolve/application/sequential_market_replay.py +1395 -0
- agent_evolve/application/sequential_residual_campaign_runtime.py +305 -0
- agent_evolve/application/sequential_residual_portfolio_evolution.py +940 -0
- agent_evolve/application/single_score_action_allocation.py +299 -0
- agent_evolve/application/source_exposure_allocation.py +906 -0
- agent_evolve/application/staged_memory.py +210 -0
- agent_evolve/application/stratified_cold_start_allocation.py +732 -0
- agent_evolve/application/support_guarded_hurdle_score.py +549 -0
- agent_evolve/application/target_conditioned_action_forecast.py +595 -0
- agent_evolve/application/target_conditioned_campaign.py +566 -0
- agent_evolve/application/treatment_assignment.py +201 -0
- agent_evolve/application/trusted_objective_evidence.py +217 -0
- agent_evolve/application/two_stage_action_evolution.py +1131 -0
- agent_evolve/application/v8lite_allocation_policy.py +1083 -0
- agent_evolve/application/v9_candidate_policy.py +1303 -0
- agent_evolve/bootstrap.py +108 -0
- agent_evolve/campaign_presets.py +517 -0
- agent_evolve/campaign_profiles.py +452 -0
- agent_evolve/campaign_variation_topology.py +288 -0
- agent_evolve/campaign_workload.py +950 -0
- agent_evolve/cli.py +797 -0
- agent_evolve/contract.py +241 -0
- agent_evolve/core/__init__.py +91 -0
- agent_evolve/core/action_semantics.py +411 -0
- agent_evolve/core/authored.py +105 -0
- agent_evolve/core/formatting.py +286 -0
- agent_evolve/core/optimization_semantics.py +324 -0
- agent_evolve/core/problem.py +167 -0
- agent_evolve/core/results.py +323 -0
- agent_evolve/core/stats.py +70 -0
- agent_evolve/core/telemetry.py +100 -0
- agent_evolve/domain/__init__.py +89 -0
- agent_evolve/domain/artifact.py +162 -0
- agent_evolve/domain/durable_text.py +68 -0
- agent_evolve/domain/event.py +1454 -0
- agent_evolve/domain/finite_action_set.py +426 -0
- agent_evolve/domain/finite_variation.py +526 -0
- agent_evolve/domain/generative_emission.py +559 -0
- agent_evolve/domain/ids.py +163 -0
- agent_evolve/domain/inline_text.py +106 -0
- agent_evolve/domain/insight.py +27 -0
- agent_evolve/domain/lineage.py +737 -0
- agent_evolve/domain/llm_task_queue.py +960 -0
- agent_evolve/domain/outcome.py +96 -0
- agent_evolve/domain/patch.py +854 -0
- agent_evolve/domain/typed_json.py +542 -0
- agent_evolve/domain/variation_space.py +158 -0
- agent_evolve/driver.py +1014 -0
- agent_evolve/harness/__init__.py +29 -0
- agent_evolve/harness/base.py +242 -0
- agent_evolve/harness/directives.py +163 -0
- agent_evolve/harness/generative_seal.py +479 -0
- agent_evolve/harness/registry.py +41 -0
- agent_evolve/infrastructure/__init__.py +39 -0
- agent_evolve/infrastructure/artifacts/__init__.py +6 -0
- agent_evolve/infrastructure/artifacts/_verification.py +67 -0
- agent_evolve/infrastructure/artifacts/filesystem.py +343 -0
- agent_evolve/infrastructure/artifacts/in_memory.py +73 -0
- agent_evolve/infrastructure/asyncio_runtime.py +109 -0
- agent_evolve/infrastructure/authored_runtime.py +188 -0
- agent_evolve/infrastructure/authored_worker.py +171 -0
- agent_evolve/infrastructure/clock.py +53 -0
- agent_evolve/infrastructure/events/__init__.py +6 -0
- agent_evolve/infrastructure/events/_validation.py +89 -0
- agent_evolve/infrastructure/events/in_memory.py +56 -0
- agent_evolve/infrastructure/events/jsonl.py +193 -0
- agent_evolve/infrastructure/exception_provenance.py +215 -0
- agent_evolve/infrastructure/ids.py +118 -0
- agent_evolve/infrastructure/lineage_codec.py +1836 -0
- agent_evolve/infrastructure/outcome_adaptive_phase_journal.py +170 -0
- agent_evolve/infrastructure/residual_headroom_journal.py +221 -0
- agent_evolve/infrastructure/resource_lease.py +370 -0
- agent_evolve/infrastructure/sanitization/__init__.py +8 -0
- agent_evolve/infrastructure/sanitization/strict_json.py +484 -0
- agent_evolve/infrastructure/sequential_phase_journal.py +170 -0
- agent_evolve/infrastructure/stream_liveness.py +383 -0
- agent_evolve/infrastructure/subprocess_boundary.py +136 -0
- agent_evolve/integrations/__init__.py +1 -0
- agent_evolve/integrations/botorch/__init__.py +28 -0
- agent_evolve/integrations/botorch/finite_qlognehvi.py +190 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_batch.py +155 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_batch_identity.py +20 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_batch_worker.py +55 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_identity.py +22 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_worker.py +55 -0
- agent_evolve/integrations/botorch/subprocess_qlognehvi.py +261 -0
- agent_evolve/integrations/botorch/subprocess_qlognehvi_batch.py +273 -0
- agent_evolve/integrations/completion.py +242 -0
- agent_evolve/integrations/pydantic_ai/__init__.py +441 -0
- agent_evolve/integrations/pydantic_ai/action_forecast.py +1068 -0
- agent_evolve/integrations/pydantic_ai/agentic_generator.py +2308 -0
- agent_evolve/integrations/pydantic_ai/async_generator.py +1604 -0
- agent_evolve/integrations/pydantic_ai/boundary_codec.py +1526 -0
- agent_evolve/integrations/pydantic_ai/calibrated_portfolio_campaign.py +756 -0
- agent_evolve/integrations/pydantic_ai/calibrated_portfolio_selection.py +7537 -0
- agent_evolve/integrations/pydantic_ai/campaign_acquisition.py +609 -0
- agent_evolve/integrations/pydantic_ai/execution_binding.py +138 -0
- agent_evolve/integrations/pydantic_ai/forecast_geometry_action_committee.py +217 -0
- agent_evolve/integrations/pydantic_ai/harness.py +159 -0
- agent_evolve/integrations/pydantic_ai/heterogeneous_model_execution.py +306 -0
- agent_evolve/integrations/pydantic_ai/hierarchical_residual_adaptive_semantic_view.py +179 -0
- agent_evolve/integrations/pydantic_ai/json_schema_dialect.py +108 -0
- agent_evolve/integrations/pydantic_ai/materialized_hierarchical_residual_expert.py +952 -0
- agent_evolve/integrations/pydantic_ai/materialized_portfolio_judge.py +520 -0
- agent_evolve/integrations/pydantic_ai/model_execution_profile.py +659 -0
- agent_evolve/integrations/pydantic_ai/outbound_request_manifest.py +1170 -0
- agent_evolve/integrations/pydantic_ai/portable_residual_consequence_features.py +575 -0
- agent_evolve/integrations/pydantic_ai/portfolio_selection.py +422 -0
- agent_evolve/integrations/pydantic_ai/progress_aware_openrouter.py +416 -0
- agent_evolve/integrations/pydantic_ai/provider_attempt_join.py +1523 -0
- agent_evolve/integrations/pydantic_ai/provider_free_calibrated_runner.py +607 -0
- agent_evolve/integrations/pydantic_ai/queued_runner.py +2634 -0
- agent_evolve/integrations/pydantic_ai/reconciled_residual_reachability.py +1417 -0
- agent_evolve/integrations/pydantic_ai/residual_forecast_geometry.py +445 -0
- agent_evolve/integrations/pydantic_ai/residual_reachability.py +674 -0
- agent_evolve/integrations/pydantic_ai/residual_semantic_cells.py +239 -0
- agent_evolve/integrations/pydantic_ai/sealed_output_replay.py +1068 -0
- agent_evolve/integrations/pydantic_ai/semantic_coverage_residual_portfolio.py +770 -0
- agent_evolve/integrations/pydantic_ai/semantic_decision_replay.py +383 -0
- agent_evolve/integrations/pydantic_ai/support_adaptive_residual_portfolio.py +135 -0
- agent_evolve/integrations/pydantic_ai/trusted_residual_prompt_context.py +143 -0
- agent_evolve/integrations/pydantic_ai/validated_openrouter_model.py +107 -0
- agent_evolve/integrations/pymoo_adapter.py +242 -0
- agent_evolve/policies/__init__.py +17 -0
- agent_evolve/policies/check.py +469 -0
- agent_evolve/policies/emit_scaffold.py +451 -0
- agent_evolve/policies/feedback/__init__.py +37 -0
- agent_evolve/policies/feedback/held_out_asn.py +1325 -0
- agent_evolve/policies/genetic.py +607 -0
- agent_evolve/policies/llm_backoff.py +183 -0
- agent_evolve/policies/llm_chooser.py +226 -0
- agent_evolve/policies/llm_generator.py +1760 -0
- agent_evolve/policies/llm_init.py +267 -0
- agent_evolve/policies/llm_operator.py +109 -0
- agent_evolve/policies/llm_prior.py +194 -0
- agent_evolve/policies/llm_surrogate.py +334 -0
- agent_evolve/policies/measurement_evidence.py +704 -0
- agent_evolve/policies/memory/__init__.py +223 -0
- agent_evolve/policies/memory/balanced_subset_blocks.py +707 -0
- agent_evolve/policies/memory/compatibility_matching.py +593 -0
- agent_evolve/policies/memory/global_falsification.py +1841 -0
- agent_evolve/policies/memory/prompt_shape.py +503 -0
- agent_evolve/policies/memory/randomized_subset.py +714 -0
- agent_evolve/policies/memory/staged_causal.py +1270 -0
- agent_evolve/policies/memory/treatment_compliance.py +759 -0
- agent_evolve/policies/objective_resolution/__init__.py +17 -0
- agent_evolve/policies/objective_resolution/fixed_grid.py +364 -0
- agent_evolve/policies/operator_portfolio.py +407 -0
- agent_evolve/policies/reguidance.py +1133 -0
- agent_evolve/policies/reward/__init__.py +83 -0
- agent_evolve/policies/reward/affine_candidate_consequence.py +156 -0
- agent_evolve/policies/reward/affine_candidate_consequence_3d.py +159 -0
- agent_evolve/policies/reward/affine_hypervolume.py +490 -0
- agent_evolve/policies/reward/affine_hypervolume_3d.py +567 -0
- agent_evolve/policies/reward/contextual_marginal_utility.py +318 -0
- agent_evolve/policies/reward/frozen_archive.py +360 -0
- agent_evolve/policies/reward/frozen_wave_archive.py +368 -0
- agent_evolve/policies/search_state.py +208 -0
- agent_evolve/policies/selection/__init__.py +345 -0
- agent_evolve/policies/selection/acquisition_certified_slate.py +684 -0
- agent_evolve/policies/selection/affine_frontier_context.py +330 -0
- agent_evolve/policies/selection/affine_frontier_target.py +473 -0
- agent_evolve/policies/selection/archive_elite.py +1346 -0
- agent_evolve/policies/selection/calibrated_portfolio_binding.py +640 -0
- agent_evolve/policies/selection/calibrated_slate.py +1394 -0
- agent_evolve/policies/selection/calibrated_slate_codec.py +579 -0
- agent_evolve/policies/selection/common_candidate_pool.py +685 -0
- agent_evolve/policies/selection/diagnostic_sampling.py +319 -0
- agent_evolve/policies/selection/disjoint_pairs.py +479 -0
- agent_evolve/policies/selection/elite_explorer.py +719 -0
- agent_evolve/policies/selection/finite_action.py +187 -0
- agent_evolve/policies/selection/finite_option_prompt_projection.py +377 -0
- agent_evolve/policies/selection/finite_palette_evidence.py +247 -0
- agent_evolve/policies/selection/forecast_calibration.py +922 -0
- agent_evolve/policies/selection/frontier_probe_slate.py +814 -0
- agent_evolve/policies/selection/frozen_archive_pairs.py +762 -0
- agent_evolve/policies/selection/full_support_slate.py +91 -0
- agent_evolve/policies/selection/meaningful_direction.py +240 -0
- agent_evolve/policies/selection/memory_dose_feasibility.py +259 -0
- agent_evolve/policies/selection/model_anchored_slate.py +826 -0
- agent_evolve/policies/selection/phenotype_recourse.py +979 -0
- agent_evolve/policies/selection/proposal_support.py +368 -0
- agent_evolve/policies/selection/random_portfolio.py +254 -0
- agent_evolve/policies/selection/regret_bounded_slate.py +1084 -0
- agent_evolve/policies/selection/residual_frontier.py +463 -0
- agent_evolve/policies/selection/residual_frontier_target.py +605 -0
- agent_evolve/policies/selection/structural_posterior_slate.py +1571 -0
- agent_evolve/policies/selection/target_conditioned_allocator.py +648 -0
- agent_evolve/policies/selection/target_conditioned_features.py +812 -0
- agent_evolve/policies/selection/target_conditioned_prequential.py +1527 -0
- agent_evolve/policies/selection/task_keyed_palette.py +906 -0
- agent_evolve/policies/semantics.py +147 -0
- agent_evolve/policies/structure.py +362 -0
- agent_evolve/policies/structured_output_budget.py +62 -0
- agent_evolve/policies/surrogate.py +696 -0
- agent_evolve/policies/variation/__init__.py +1 -0
- agent_evolve/policies/variation/compositional_finite_catalog.py +426 -0
- agent_evolve/policies/variation/crossover_inheritance.py +575 -0
- agent_evolve/policies/variation/disjoint_recombination.py +611 -0
- agent_evolve/policies/variation/exact_composition_capacity.py +214 -0
- agent_evolve/policies/variation/exact_parent_crossover.py +950 -0
- agent_evolve/policies/variation/multiscale_restart_catalog.py +372 -0
- agent_evolve/policies/variation/source_union_finite_catalog.py +403 -0
- agent_evolve/policies/variation/typed_patch.py +1981 -0
- agent_evolve/policies/weighted_prior.py +394 -0
- agent_evolve/ports/__init__.py +383 -0
- agent_evolve/ports/action_allocation.py +733 -0
- agent_evolve/ports/action_allocation_frame.py +1153 -0
- agent_evolve/ports/action_allocation_frame_commit.py +294 -0
- agent_evolve/ports/action_allocation_frame_commit_v3.py +432 -0
- agent_evolve/ports/action_allocation_frame_v3.py +995 -0
- agent_evolve/ports/action_forecast.py +1568 -0
- agent_evolve/ports/action_metric_projection.py +165 -0
- agent_evolve/ports/agentic_generator.py +1561 -0
- agent_evolve/ports/archive_context.py +136 -0
- agent_evolve/ports/artifact_sanitizer.py +44 -0
- agent_evolve/ports/artifact_store.py +225 -0
- agent_evolve/ports/clock.py +13 -0
- agent_evolve/ports/contextual_search_allocation.py +827 -0
- agent_evolve/ports/decision_metric_projection.py +258 -0
- agent_evolve/ports/event_store.py +55 -0
- agent_evolve/ports/executable_hypothesis.py +557 -0
- agent_evolve/ports/finite_acquisition.py +377 -0
- agent_evolve/ports/finite_acquisition_batch.py +296 -0
- agent_evolve/ports/finite_acquisition_batch_json.py +164 -0
- agent_evolve/ports/finite_acquisition_json.py +247 -0
- agent_evolve/ports/finite_acquisition_space.py +168 -0
- agent_evolve/ports/finite_action_selection.py +348 -0
- agent_evolve/ports/finite_action_set.py +256 -0
- agent_evolve/ports/frontier_target.py +396 -0
- agent_evolve/ports/generation_failure.py +43 -0
- agent_evolve/ports/hard_feasibility.py +233 -0
- agent_evolve/ports/id_factory.py +34 -0
- agent_evolve/ports/llm_task_queue.py +93 -0
- agent_evolve/ports/objective_resolution.py +419 -0
- agent_evolve/ports/paired_allocation_comparison.py +401 -0
- agent_evolve/ports/paired_block_schedule.py +475 -0
- agent_evolve/ports/parent_measurement.py +336 -0
- agent_evolve/ports/portfolio_memory_dose.py +643 -0
- agent_evolve/ports/portfolio_selection.py +3169 -0
- agent_evolve/ports/postcommit_rank_authority.py +467 -0
- agent_evolve/ports/presented_action_evidence.py +794 -0
- agent_evolve/ports/resource_lease.py +162 -0
- agent_evolve/ports/structured_generator.py +734 -0
- agent_evolve/ports/structured_output_budget.py +120 -0
- agent_evolve/ports/subprocess_boundary.py +138 -0
- agent_evolve/ports/treatment_assignment.py +466 -0
- agent_evolve/ports/variation_catalog.py +76 -0
- agent_evolve/ports/variation_source.py +226 -0
- agent_evolve/proposal_mode.py +157 -0
- agent_evolve/proposers/__init__.py +10 -0
- agent_evolve/proposers/random_proposer.py +188 -0
- agent_evolve/provider_accounting.py +163 -0
- agent_evolve/py.typed +0 -0
- agent_evolve/reference_method.py +1570 -0
- agent_evolve/session/__init__.py +11 -0
- agent_evolve/session/authorship.py +864 -0
- agent_evolve/session/evaluate.py +236 -0
- agent_evolve/session/fidelity.py +237 -0
- agent_evolve/session/genetic_loop.py +742 -0
- agent_evolve/session/loop.py +803 -0
- agent_evolve/session/screening.py +671 -0
- agent_evolve/settings.py +376 -0
- agent_evolve/workload_kit.py +368 -0
- agent_evolve/workload_prompt.py +398 -0
- agentevolve_optimizer-0.5.0.dist-info/METADATA +599 -0
- agentevolve_optimizer-0.5.0.dist-info/RECORD +414 -0
- agentevolve_optimizer-0.5.0.dist-info/WHEEL +5 -0
- agentevolve_optimizer-0.5.0.dist-info/entry_points.txt +2 -0
- agentevolve_optimizer-0.5.0.dist-info/licenses/LICENSE +21 -0
- agentevolve_optimizer-0.5.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
"""The model writes the surrogate: structure from meaning, fit from data.
|
|
2
|
+
|
|
3
|
+
This is the first mechanism in the package whose task a rule cannot do. A
|
|
4
|
+
rule can FIT anything -- the shipped additive and kNN surrogates are exactly
|
|
5
|
+
that -- but it cannot decide, from what the parameters MEAN, that gain-
|
|
6
|
+
bandwidth divides by a compensation capacitance or that two pass-orderings
|
|
7
|
+
are interchangeable. The model is asked once, before any evaluation, to
|
|
8
|
+
write ``fit_predict`` source encoding that structure; the harness then fits
|
|
9
|
+
and validates it on real data every generation, against the rule surrogates,
|
|
10
|
+
under the same gate. Authorship is the model's; arbitration never is.
|
|
11
|
+
|
|
12
|
+
Rejection semantics follow ``llm_prior``: the reply is used whole or not at
|
|
13
|
+
all. No fenced block, a block that defines the wrong name, a forbidden
|
|
14
|
+
import, or unparseable source each count and yield nothing -- the rule
|
|
15
|
+
surrogates then carry the run, so failure costs the caller a completion, not
|
|
16
|
+
a result.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
import re
|
|
22
|
+
from dataclasses import dataclass, field
|
|
23
|
+
from typing import Any, Callable, Mapping, Optional, Sequence, Tuple
|
|
24
|
+
|
|
25
|
+
from agent_evolve.core.authored import CONTRACTS, AuthoredArtifact, authored_artifact
|
|
26
|
+
from agent_evolve.core.problem import ObjectiveSpec
|
|
27
|
+
# The worker applies this same gate before executing; sharing the function is
|
|
28
|
+
# what keeps "rejected at authoring time" and "rejected at run time" one rule.
|
|
29
|
+
from agent_evolve.infrastructure.authored_worker import (
|
|
30
|
+
ALLOWED_IMPORTS,
|
|
31
|
+
_forbidden_import,
|
|
32
|
+
)
|
|
33
|
+
from agent_evolve.infrastructure.authored_runtime import AuthoredRuntime
|
|
34
|
+
from agent_evolve.policies.surrogate import Predict, SurrogateBuilder
|
|
35
|
+
|
|
36
|
+
__all__ = [
|
|
37
|
+
"AuthorTelemetry",
|
|
38
|
+
"accept_block",
|
|
39
|
+
"author_surrogate",
|
|
40
|
+
"authored_surrogate_builder",
|
|
41
|
+
"gate_source",
|
|
42
|
+
"PROMPT",
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
Config = dict[str, Any]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@dataclass
|
|
49
|
+
class AuthorTelemetry:
|
|
50
|
+
"""What the authoring replies did. Counted, never inferred."""
|
|
51
|
+
|
|
52
|
+
calls: int = 0
|
|
53
|
+
accepted: int = 0
|
|
54
|
+
no_code_block: int = 0
|
|
55
|
+
wrong_entry_point: int = 0
|
|
56
|
+
forbidden_import: int = 0
|
|
57
|
+
unparseable: int = 0
|
|
58
|
+
errors: int = 0
|
|
59
|
+
sources: list = field(default_factory=list)
|
|
60
|
+
|
|
61
|
+
def as_dict(self) -> dict[str, int]:
|
|
62
|
+
return {
|
|
63
|
+
"calls": self.calls,
|
|
64
|
+
"accepted": self.accepted,
|
|
65
|
+
"no_code_block": self.no_code_block,
|
|
66
|
+
"wrong_entry_point": self.wrong_entry_point,
|
|
67
|
+
"forbidden_import": self.forbidden_import,
|
|
68
|
+
"unparseable": self.unparseable,
|
|
69
|
+
"errors": self.errors,
|
|
70
|
+
"sources": len(self.sources),
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
PROMPT = """You are writing the SURROGATE MODEL for a black-box multi-objective \
|
|
75
|
+
optimizer. Real evaluations are expensive; your code gives cheap predictions so \
|
|
76
|
+
the optimizer can rank candidate configurations before paying to measure them.
|
|
77
|
+
|
|
78
|
+
OBJECTIVES (name and direction):
|
|
79
|
+
{goals}
|
|
80
|
+
|
|
81
|
+
SEARCH SPACE:
|
|
82
|
+
{schema}
|
|
83
|
+
|
|
84
|
+
Write ONE Python function with EXACTLY this signature:
|
|
85
|
+
|
|
86
|
+
{contract}
|
|
87
|
+
|
|
88
|
+
Rules:
|
|
89
|
+
- Use what the parameter NAMES AND MEANINGS tell you about this domain --
|
|
90
|
+
known relationships, ratios, interactions, orderings. That knowledge is the
|
|
91
|
+
only reason your code can beat a generic per-parameter average, which is
|
|
92
|
+
what it will be validated against on held-out data before it is trusted.
|
|
93
|
+
- Fit whatever coefficients your structure needs from train_x/train_y inside
|
|
94
|
+
the function. It is called fresh every time with all data measured so far.
|
|
95
|
+
- Return one dict per test_x row containing EVERY objective name.
|
|
96
|
+
- Standard library only; imports limited to: {imports}.
|
|
97
|
+
- No I/O, no globals, deterministic.
|
|
98
|
+
|
|
99
|
+
Reply with ONLY one fenced Python code block and no other text."""
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
_FENCE = re.compile(r"```(?:python)?\s*\n(.*?)```", re.S)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def gate_source(
|
|
106
|
+
source: str, *, contract: Any, telemetry: AuthorTelemetry
|
|
107
|
+
) -> Optional[str]:
|
|
108
|
+
"""The authoring gate over one block of source: pass it, or count why not.
|
|
109
|
+
|
|
110
|
+
Import allowlist (shared with the worker, so "rejected at authoring time"
|
|
111
|
+
and "rejected at run time" stay one rule), then the entry point the
|
|
112
|
+
contract names. Every rejection is a counted, ordinary event; nothing
|
|
113
|
+
raises. Shared by every authored kind -- surrogate, operator, generator --
|
|
114
|
+
because a per-kind copy of a security gate is how the copies drift.
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
try:
|
|
118
|
+
forbidden = _forbidden_import(source)
|
|
119
|
+
except SyntaxError:
|
|
120
|
+
telemetry.unparseable += 1
|
|
121
|
+
return None
|
|
122
|
+
if forbidden is not None:
|
|
123
|
+
telemetry.forbidden_import += 1
|
|
124
|
+
return None
|
|
125
|
+
if not re.search(rf"^def {contract.entry_point}\(", source, re.M):
|
|
126
|
+
telemetry.wrong_entry_point += 1
|
|
127
|
+
return None
|
|
128
|
+
return source
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def accept_block(
|
|
132
|
+
text: str, *, contract: Any, telemetry: AuthorTelemetry
|
|
133
|
+
) -> Optional[str]:
|
|
134
|
+
"""The first fenced block of *text*, if it passes :func:`gate_source`."""
|
|
135
|
+
|
|
136
|
+
match = _FENCE.search(text)
|
|
137
|
+
if match is None:
|
|
138
|
+
telemetry.no_code_block += 1
|
|
139
|
+
return None
|
|
140
|
+
return gate_source(match.group(1), contract=contract, telemetry=telemetry)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def author_surrogate(
|
|
144
|
+
complete: Callable[[str], str],
|
|
145
|
+
*,
|
|
146
|
+
objectives: Sequence[ObjectiveSpec],
|
|
147
|
+
schema_text: str,
|
|
148
|
+
attempts: int = 2,
|
|
149
|
+
telemetry: Optional[AuthorTelemetry] = None,
|
|
150
|
+
) -> Optional[AuthoredArtifact]:
|
|
151
|
+
"""Ask the model to write ``fit_predict``; accept whole or not at all."""
|
|
152
|
+
|
|
153
|
+
tel = telemetry if telemetry is not None else AuthorTelemetry()
|
|
154
|
+
contract = CONTRACTS["surrogate"]
|
|
155
|
+
prompt = PROMPT.format(
|
|
156
|
+
goals="\n".join(f" {s.name}: {s.goal}imise" for s in objectives),
|
|
157
|
+
schema=schema_text,
|
|
158
|
+
contract=contract.description,
|
|
159
|
+
imports=", ".join(sorted(ALLOWED_IMPORTS)),
|
|
160
|
+
)
|
|
161
|
+
for _attempt in range(max(1, attempts)):
|
|
162
|
+
tel.calls += 1
|
|
163
|
+
try:
|
|
164
|
+
text = complete(prompt)
|
|
165
|
+
except Exception:
|
|
166
|
+
tel.errors += 1
|
|
167
|
+
continue
|
|
168
|
+
source = accept_block(text, contract=contract, telemetry=tel)
|
|
169
|
+
if source is None:
|
|
170
|
+
continue
|
|
171
|
+
tel.accepted += 1
|
|
172
|
+
tel.sources.append(source)
|
|
173
|
+
return authored_artifact(
|
|
174
|
+
"surrogate", source, name="llm_surrogate", authored_by="llm"
|
|
175
|
+
)
|
|
176
|
+
return None
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
REVISION_PROMPT = """You previously wrote this surrogate model for a black-box \
|
|
180
|
+
multi-objective optimizer:
|
|
181
|
+
|
|
182
|
+
```python
|
|
183
|
+
{source}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
It was validated on REAL evaluation data it had never seen, and here is how
|
|
187
|
+
it actually performed:
|
|
188
|
+
|
|
189
|
+
{feedback}
|
|
190
|
+
|
|
191
|
+
Revise the function. Keep what works, fix what the residuals show is wrong --
|
|
192
|
+
a systematic bias on one objective means a missing term or interaction, not a
|
|
193
|
+
scaling constant. Same rules as before: exactly this signature
|
|
194
|
+
|
|
195
|
+
{contract}
|
|
196
|
+
|
|
197
|
+
fit whatever coefficients your structure needs from train_x/train_y inside
|
|
198
|
+
the function; return one dict per test_x row with EVERY objective name;
|
|
199
|
+
standard library only ({imports}); deterministic; no I/O.
|
|
200
|
+
|
|
201
|
+
Reply with ONLY one fenced Python code block and no other text."""
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def render_validation_feedback(
|
|
205
|
+
verdict: Any,
|
|
206
|
+
evaluated: Sequence[Tuple[Config, Mapping[str, float]]],
|
|
207
|
+
predictions: Optional[Sequence[Mapping[str, float]]] = None,
|
|
208
|
+
*,
|
|
209
|
+
worst: int = 5,
|
|
210
|
+
) -> str:
|
|
211
|
+
"""The residual story a revision needs, as text.
|
|
212
|
+
|
|
213
|
+
Per-objective error against the trivial train-mean baseline, plus the
|
|
214
|
+
worst individual mispredictions when the caller has them -- the concrete
|
|
215
|
+
cases a systematic bias shows up in. Pure rendering; never raises.
|
|
216
|
+
"""
|
|
217
|
+
|
|
218
|
+
lines = []
|
|
219
|
+
mse = getattr(verdict, "per_objective_mse", {}) or {}
|
|
220
|
+
baseline = getattr(verdict, "baseline_mse", {}) or {}
|
|
221
|
+
for name in mse:
|
|
222
|
+
base = baseline.get(name)
|
|
223
|
+
ratio = (f"{mse[name] / base:.2f}x the train-mean baseline"
|
|
224
|
+
if base else "baseline unavailable")
|
|
225
|
+
lines.append(f" {name}: holdout MSE {mse[name]:.6g} ({ratio}; "
|
|
226
|
+
"below 1.00x is predictive)")
|
|
227
|
+
detail = getattr(verdict, "detail", "")
|
|
228
|
+
if detail:
|
|
229
|
+
lines.append(f" gate detail: {detail}")
|
|
230
|
+
if predictions and evaluated:
|
|
231
|
+
residuals = []
|
|
232
|
+
for (config, actual), predicted in zip(evaluated, predictions):
|
|
233
|
+
if not isinstance(predicted, Mapping):
|
|
234
|
+
continue
|
|
235
|
+
for name, value in actual.items():
|
|
236
|
+
guess = predicted.get(name)
|
|
237
|
+
if isinstance(guess, (int, float)):
|
|
238
|
+
residuals.append((abs(float(guess) - float(value)),
|
|
239
|
+
name, config, guess, value))
|
|
240
|
+
residuals.sort(reverse=True, key=lambda row: row[0])
|
|
241
|
+
for _size, name, config, guess, value in residuals[:worst]:
|
|
242
|
+
lines.append(f" worst: {name} predicted {guess:.6g}, actual "
|
|
243
|
+
f"{value:.6g} at {json_compact(config)}")
|
|
244
|
+
return "\n".join(lines) if lines else " (no usable validation detail)"
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
def json_compact(config: Config) -> str:
|
|
248
|
+
import json as _json
|
|
249
|
+
|
|
250
|
+
text = _json.dumps(config, sort_keys=True, default=str)
|
|
251
|
+
return text if len(text) <= 200 else text[:197] + "..."
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
def revise_surrogate(
|
|
255
|
+
complete: Callable[[str], str],
|
|
256
|
+
*,
|
|
257
|
+
artifact: AuthoredArtifact,
|
|
258
|
+
feedback: str,
|
|
259
|
+
attempts: int = 1,
|
|
260
|
+
telemetry: Optional[AuthorTelemetry] = None,
|
|
261
|
+
) -> Optional[AuthoredArtifact]:
|
|
262
|
+
"""One revision round: the artifact, its measured failures, a rewrite.
|
|
263
|
+
|
|
264
|
+
The gate treats a revision exactly like a fresh authorship: fenced block
|
|
265
|
+
only, import allowlist, correct entry point, whole-reply rejection. A
|
|
266
|
+
revision that fails yields None and the caller keeps what it had.
|
|
267
|
+
"""
|
|
268
|
+
|
|
269
|
+
tel = telemetry if telemetry is not None else AuthorTelemetry()
|
|
270
|
+
contract = CONTRACTS["surrogate"]
|
|
271
|
+
prompt = REVISION_PROMPT.format(
|
|
272
|
+
source=artifact.source,
|
|
273
|
+
feedback=feedback,
|
|
274
|
+
contract=contract.description,
|
|
275
|
+
imports=", ".join(sorted(ALLOWED_IMPORTS)),
|
|
276
|
+
)
|
|
277
|
+
for _attempt in range(max(1, attempts)):
|
|
278
|
+
tel.calls += 1
|
|
279
|
+
try:
|
|
280
|
+
text = complete(prompt)
|
|
281
|
+
except Exception:
|
|
282
|
+
tel.errors += 1
|
|
283
|
+
continue
|
|
284
|
+
source = accept_block(text, contract=contract, telemetry=tel)
|
|
285
|
+
if source is None:
|
|
286
|
+
continue
|
|
287
|
+
tel.accepted += 1
|
|
288
|
+
tel.sources.append(source)
|
|
289
|
+
return authored_artifact(
|
|
290
|
+
"surrogate", source,
|
|
291
|
+
name=f"{artifact.name}_rev", authored_by="llm",
|
|
292
|
+
)
|
|
293
|
+
return None
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
def authored_surrogate_builder(
|
|
297
|
+
artifact: AuthoredArtifact,
|
|
298
|
+
runtime: AuthoredRuntime,
|
|
299
|
+
*,
|
|
300
|
+
on_failure: Optional[Callable[[str], None]] = None,
|
|
301
|
+
) -> SurrogateBuilder:
|
|
302
|
+
"""Wrap an authored artifact behind the standard builder interface.
|
|
303
|
+
|
|
304
|
+
The artifact is stateless by contract (fit + predict in one call), so the
|
|
305
|
+
builder's "fit" is just closing over the training data; every predict
|
|
306
|
+
batch ships train and test together to one out-of-process worker. Any
|
|
307
|
+
non-ok outcome predicts nothing, which the gate and the screen both treat
|
|
308
|
+
as "sit out" -- an authored crash can cost a generation its screening,
|
|
309
|
+
never its budget and never the run.
|
|
310
|
+
"""
|
|
311
|
+
|
|
312
|
+
def build(
|
|
313
|
+
evaluated: Sequence[Tuple[Config, Mapping[str, float]]],
|
|
314
|
+
specs: Sequence[ObjectiveSpec],
|
|
315
|
+
) -> Predict:
|
|
316
|
+
train_x = [dict(cfg) for cfg, _obj in evaluated]
|
|
317
|
+
train_y = [dict(obj) for _cfg, obj in evaluated]
|
|
318
|
+
|
|
319
|
+
def predict(pool: Sequence[Config]):
|
|
320
|
+
outcome = runtime.call(
|
|
321
|
+
artifact, [[train_x, train_y, [dict(c) for c in pool]]]
|
|
322
|
+
)
|
|
323
|
+
if not outcome.ok:
|
|
324
|
+
if on_failure is not None:
|
|
325
|
+
on_failure(f"{outcome.status}: {outcome.detail}"[:200])
|
|
326
|
+
return None
|
|
327
|
+
[rows] = outcome.results
|
|
328
|
+
if not isinstance(rows, list):
|
|
329
|
+
return None
|
|
330
|
+
return rows
|
|
331
|
+
|
|
332
|
+
return predict
|
|
333
|
+
|
|
334
|
+
return build
|