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,29 @@
|
|
|
1
|
+
"""The Harness port and registry (LLM-runtime-agnostic)."""
|
|
2
|
+
|
|
3
|
+
from agent_evolve.harness.base import (
|
|
4
|
+
OP_NAMES,
|
|
5
|
+
CallObserver,
|
|
6
|
+
Harness,
|
|
7
|
+
HarnessBase,
|
|
8
|
+
HarnessContext,
|
|
9
|
+
HarnessOutputError,
|
|
10
|
+
LLMConfig,
|
|
11
|
+
build_context,
|
|
12
|
+
)
|
|
13
|
+
from agent_evolve.harness.directives import DefaultDirectives, Directives
|
|
14
|
+
from agent_evolve.harness.registry import HarnessRegistry, harness_registry
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"OP_NAMES",
|
|
18
|
+
"CallObserver",
|
|
19
|
+
"DefaultDirectives",
|
|
20
|
+
"Directives",
|
|
21
|
+
"Harness",
|
|
22
|
+
"HarnessBase",
|
|
23
|
+
"HarnessContext",
|
|
24
|
+
"HarnessOutputError",
|
|
25
|
+
"HarnessRegistry",
|
|
26
|
+
"LLMConfig",
|
|
27
|
+
"build_context",
|
|
28
|
+
"harness_registry",
|
|
29
|
+
]
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"""The Harness port: the switchable LLM seam the loop depends on.
|
|
2
|
+
|
|
3
|
+
A harness turns the per-op inputs into **typed** candidates / insights. The loop
|
|
4
|
+
never imports a concrete LLM runtime; it talks only to this interface. Concrete
|
|
5
|
+
adapters live under ``agent_evolve.integrations``.
|
|
6
|
+
|
|
7
|
+
Output typing is the headline: candidate ops return ``list[CandidateConfig]``
|
|
8
|
+
(structured), insight ops return ``list[str]`` / ``str`` — no JSON-in-a-string.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import abc
|
|
14
|
+
import inspect
|
|
15
|
+
from dataclasses import dataclass, field
|
|
16
|
+
from typing import Any, Callable, Dict, List, Optional, Protocol, Sequence, runtime_checkable
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel, ConfigDict
|
|
19
|
+
|
|
20
|
+
from agent_evolve.core.problem import ObjectiveSpec
|
|
21
|
+
from agent_evolve.harness.directives import DefaultDirectives, Directives
|
|
22
|
+
|
|
23
|
+
#: The fixed set of LLM operations exposed by every harness implementation.
|
|
24
|
+
OP_NAMES: tuple[str, ...] = (
|
|
25
|
+
"generate_initial",
|
|
26
|
+
"regenerate",
|
|
27
|
+
"generate_offspring",
|
|
28
|
+
"regenerate_offspring",
|
|
29
|
+
"failure_insights",
|
|
30
|
+
"constraint_instruction",
|
|
31
|
+
"performance_insights",
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class HarnessOutputError(RuntimeError):
|
|
36
|
+
"""Raised when a harness call yields no usable candidates (triggers loop retry)."""
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@dataclass(frozen=True)
|
|
40
|
+
class LLMConfig:
|
|
41
|
+
"""Model selection and call parameters, identical across harnesses."""
|
|
42
|
+
|
|
43
|
+
model: str
|
|
44
|
+
temperature: Optional[float] = None
|
|
45
|
+
retries: int = 3
|
|
46
|
+
extra: Dict[str, Any] = field(default_factory=dict)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass(frozen=True)
|
|
50
|
+
class HarnessContext:
|
|
51
|
+
"""Per-run context bound into the harness before any call."""
|
|
52
|
+
|
|
53
|
+
objectives: Sequence[ObjectiveSpec]
|
|
54
|
+
search_space_desc: str
|
|
55
|
+
candidate_model: Optional[type] = None
|
|
56
|
+
constraints_description: str = ""
|
|
57
|
+
#: Prompt wording; defaults to the generic backbone directives.
|
|
58
|
+
directives: Directives = field(default_factory=DefaultDirectives)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class _AnyCandidate(BaseModel):
|
|
62
|
+
"""Permissive fallback candidate schema for problems without a candidate_model."""
|
|
63
|
+
|
|
64
|
+
model_config = ConfigDict(extra="allow")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def build_context(ctx: "HarnessContext") -> str:
|
|
68
|
+
"""Compose the static per-run context block (objectives/search space + constraints).
|
|
69
|
+
|
|
70
|
+
This is shared *data* prep, not prompt wording — each harness composes its own
|
|
71
|
+
prompts. The candidate schema is conveyed by the typed output, not restated here.
|
|
72
|
+
"""
|
|
73
|
+
parts = [ctx.search_space_desc]
|
|
74
|
+
if ctx.constraints_description:
|
|
75
|
+
parts.append(f"DOMAIN CONSTRAINTS:\n{ctx.constraints_description}")
|
|
76
|
+
return "\n\n".join(parts)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@runtime_checkable
|
|
80
|
+
class Harness(Protocol):
|
|
81
|
+
"""The switchable LLM interface the loop depends on."""
|
|
82
|
+
|
|
83
|
+
id: str
|
|
84
|
+
|
|
85
|
+
def bind(self, ctx: HarnessContext, cfg: LLMConfig) -> None: ...
|
|
86
|
+
def generate_initial(self, n: int) -> List[Dict[str, Any]]: ...
|
|
87
|
+
def regenerate(
|
|
88
|
+
self, failed_str: str, n: int, constraint_instruction: str, performance_insights: str
|
|
89
|
+
) -> List[Dict[str, Any]]: ...
|
|
90
|
+
def generate_offspring(
|
|
91
|
+
self, pareto_str: str, n: int, constraint_instruction: str, performance_insights: str
|
|
92
|
+
) -> List[Dict[str, Any]]: ...
|
|
93
|
+
def regenerate_offspring(
|
|
94
|
+
self, failed_str: str, pareto_str: str, n: int,
|
|
95
|
+
constraint_instruction: str, performance_insights: str,
|
|
96
|
+
) -> List[Dict[str, Any]]: ...
|
|
97
|
+
def failure_insights(self, failed_str: str, n_failed: int) -> List[str]: ...
|
|
98
|
+
def constraint_instruction(self, failed_str: str, previous: Optional[str] = None) -> str: ...
|
|
99
|
+
def performance_insights(
|
|
100
|
+
self, stats_str: str, pareto_str: str, previous: Optional[str] = None
|
|
101
|
+
) -> str: ...
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
CallObserver = Callable[[Dict[str, Any]], None]
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class HarnessContractError(TypeError):
|
|
108
|
+
"""A harness subclass does not satisfy the operations it inherits."""
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _positional_arity(func: Any) -> Optional[tuple]:
|
|
112
|
+
"""Return ``(required, maximum_or_None)`` positional arity, ignoring ``self``.
|
|
113
|
+
|
|
114
|
+
``None`` maximum means ``*args``, which accepts anything.
|
|
115
|
+
"""
|
|
116
|
+
try:
|
|
117
|
+
params = list(inspect.signature(func).parameters.values())
|
|
118
|
+
except (TypeError, ValueError): # pragma: no cover - builtins, C functions
|
|
119
|
+
return None
|
|
120
|
+
if params and params[0].name in ("self", "cls"):
|
|
121
|
+
params = params[1:]
|
|
122
|
+
required = 0
|
|
123
|
+
maximum: Optional[int] = 0
|
|
124
|
+
for p in params:
|
|
125
|
+
if p.kind is inspect.Parameter.VAR_POSITIONAL:
|
|
126
|
+
return (required, None)
|
|
127
|
+
if p.kind in (inspect.Parameter.POSITIONAL_ONLY, inspect.Parameter.POSITIONAL_OR_KEYWORD):
|
|
128
|
+
maximum = (maximum or 0) + 1
|
|
129
|
+
if p.default is inspect.Parameter.empty:
|
|
130
|
+
required += 1
|
|
131
|
+
return (required, maximum)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
class HarnessBase(abc.ABC):
|
|
135
|
+
"""Shared lifecycle + result normalization for harness adapters.
|
|
136
|
+
|
|
137
|
+
**The operations are enforced, not merely declared.** This class used to
|
|
138
|
+
inherit ``abc.ABC`` while marking nothing abstract, so it promised a
|
|
139
|
+
contract and checked none of it: a subclass could omit an operation, or
|
|
140
|
+
define one with the wrong arity, and the only symptom was a ``TypeError``
|
|
141
|
+
from inside the optimization loop after the run had already started. A
|
|
142
|
+
shipped proposer did exactly that, three times.
|
|
143
|
+
|
|
144
|
+
``__init_subclass__`` now checks, at class-definition time, that every
|
|
145
|
+
operation in :data:`OP_NAMES` exists and accepts the number of positional
|
|
146
|
+
arguments the loop passes it. A wrong signature is a failure to import the
|
|
147
|
+
module that declares it, which is when it is cheap to fix.
|
|
148
|
+
"""
|
|
149
|
+
|
|
150
|
+
id: str = "base"
|
|
151
|
+
|
|
152
|
+
def __init_subclass__(cls, **kwargs: Any) -> None:
|
|
153
|
+
super().__init_subclass__(**kwargs)
|
|
154
|
+
# An intermediate base may legitimately be partial; it declares so.
|
|
155
|
+
if getattr(cls, "__abstract_harness__", False):
|
|
156
|
+
return
|
|
157
|
+
problems: List[str] = []
|
|
158
|
+
for op in OP_NAMES:
|
|
159
|
+
impl = getattr(cls, op, None)
|
|
160
|
+
if impl is None or not callable(impl):
|
|
161
|
+
problems.append(f"{op}: not implemented")
|
|
162
|
+
continue
|
|
163
|
+
expected = _positional_arity(getattr(Harness, op, None))
|
|
164
|
+
actual = _positional_arity(impl)
|
|
165
|
+
if expected is None or actual is None:
|
|
166
|
+
continue
|
|
167
|
+
need, _ = expected
|
|
168
|
+
takes_min, takes_max = actual
|
|
169
|
+
if takes_max is not None and takes_max < need:
|
|
170
|
+
problems.append(
|
|
171
|
+
f"{op}: the loop passes {need} positional argument(s), "
|
|
172
|
+
f"this accepts at most {takes_max}"
|
|
173
|
+
)
|
|
174
|
+
elif takes_min > need:
|
|
175
|
+
problems.append(
|
|
176
|
+
f"{op}: requires {takes_min} positional argument(s), "
|
|
177
|
+
f"the loop passes {need}"
|
|
178
|
+
)
|
|
179
|
+
if problems:
|
|
180
|
+
raise HarnessContractError(
|
|
181
|
+
f"{cls.__name__} does not satisfy the Harness contract:\n "
|
|
182
|
+
+ "\n ".join(problems)
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
def __init__(self) -> None:
|
|
186
|
+
self._ctx: Optional[HarnessContext] = None
|
|
187
|
+
self._cfg: Optional[LLMConfig] = None
|
|
188
|
+
self._observer: Optional[CallObserver] = None
|
|
189
|
+
self.context: str = ""
|
|
190
|
+
self.candidate_type: type = _AnyCandidate
|
|
191
|
+
|
|
192
|
+
def bind(self, ctx: HarnessContext, cfg: LLMConfig) -> None:
|
|
193
|
+
self._ctx = ctx
|
|
194
|
+
self._cfg = cfg
|
|
195
|
+
self.context = build_context(ctx)
|
|
196
|
+
self.candidate_type = ctx.candidate_model or _AnyCandidate
|
|
197
|
+
self._on_bind(ctx, cfg)
|
|
198
|
+
|
|
199
|
+
def set_call_observer(self, observer: Optional[CallObserver]) -> None:
|
|
200
|
+
self._observer = observer
|
|
201
|
+
|
|
202
|
+
@property
|
|
203
|
+
def cfg(self) -> LLMConfig:
|
|
204
|
+
if self._cfg is None:
|
|
205
|
+
raise RuntimeError("Harness used before bind()")
|
|
206
|
+
return self._cfg
|
|
207
|
+
|
|
208
|
+
@property
|
|
209
|
+
def directives(self) -> Directives:
|
|
210
|
+
if self._ctx is None:
|
|
211
|
+
raise RuntimeError("Harness used before bind()")
|
|
212
|
+
return self._ctx.directives
|
|
213
|
+
|
|
214
|
+
# -- subclass hook ---------------------------------------------------
|
|
215
|
+
def _on_bind(self, ctx: HarnessContext, cfg: LLMConfig) -> None:
|
|
216
|
+
"""Optional adapter-specific setup."""
|
|
217
|
+
|
|
218
|
+
# -- normalization helpers ------------------------------------------
|
|
219
|
+
def _observe(self, op: str) -> None:
|
|
220
|
+
if self._observer is not None:
|
|
221
|
+
self._observer({"kind": "llm_call", "op": op, "harness": self.id,
|
|
222
|
+
"model": self.cfg.model})
|
|
223
|
+
|
|
224
|
+
@staticmethod
|
|
225
|
+
def _to_dicts(objs: Any, op: str) -> List[Dict[str, Any]]:
|
|
226
|
+
if not isinstance(objs, (list, tuple)) or not objs:
|
|
227
|
+
raise HarnessOutputError(f"{op}: model returned no candidates")
|
|
228
|
+
out: List[Dict[str, Any]] = []
|
|
229
|
+
for o in objs:
|
|
230
|
+
if isinstance(o, BaseModel):
|
|
231
|
+
out.append(o.model_dump())
|
|
232
|
+
elif isinstance(o, dict):
|
|
233
|
+
out.append(o)
|
|
234
|
+
else:
|
|
235
|
+
raise HarnessOutputError(f"{op}: unexpected candidate type {type(o).__name__}")
|
|
236
|
+
return out
|
|
237
|
+
|
|
238
|
+
@staticmethod
|
|
239
|
+
def _to_str_list(objs: Any) -> List[str]:
|
|
240
|
+
if isinstance(objs, (list, tuple)):
|
|
241
|
+
return [str(x) for x in objs]
|
|
242
|
+
return [str(objs)]
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"""The Directives port: problem-supplied prompt text.
|
|
2
|
+
|
|
3
|
+
A ``Directives`` provider supplies *what to say* to the LLM while harness
|
|
4
|
+
adapters supply *how to run it*. The backbone ships
|
|
5
|
+
:class:`DefaultDirectives` (generic wording) so examples and new problems work
|
|
6
|
+
out of the box; a problem can expose its own ``directives`` attribute to fully
|
|
7
|
+
own its prompts.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from typing import Protocol, runtime_checkable
|
|
13
|
+
|
|
14
|
+
#: Chain-of-thought instruction, paired with a Proposal(thought_process,
|
|
15
|
+
#: candidates) output type so the model reasons before committing.
|
|
16
|
+
#:
|
|
17
|
+
#: This wording used to instruct the model to "split its factors across the
|
|
18
|
+
#: levels so every per-dimension product is EXACTLY correct" -- the constraint
|
|
19
|
+
#: of the one problem the backbone was first written against, shipped as if it
|
|
20
|
+
#: were generic. Every other problem received an instruction about a structure
|
|
21
|
+
#: it does not have. ``DefaultDirectives`` is the *problem-agnostic* wording by
|
|
22
|
+
#: definition; anything specific to one search space belongs in that problem's
|
|
23
|
+
#: own ``Directives``, which is exactly what the port is for.
|
|
24
|
+
_COT = (
|
|
25
|
+
" First, in thought_process, reason step by step as a mental draft: state what the "
|
|
26
|
+
"measurements so far imply about which parts of the configuration matter, decide what "
|
|
27
|
+
"to change and by how much, and check each proposal against the stated constraints and "
|
|
28
|
+
"the declared schema. Then fill candidates."
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@runtime_checkable
|
|
33
|
+
class Directives(Protocol):
|
|
34
|
+
"""Prompt wording for each operation."""
|
|
35
|
+
|
|
36
|
+
def compose_initial(self, context: str, n_candidates: int) -> str: ...
|
|
37
|
+
def compose_regenerate(
|
|
38
|
+
self, context: str, failed_str: str, n_candidates: int,
|
|
39
|
+
constraint_instruction: str, performance_insights: str,
|
|
40
|
+
) -> str: ...
|
|
41
|
+
def compose_offspring(
|
|
42
|
+
self, context: str, pareto_str: str, n_candidates: int,
|
|
43
|
+
constraint_instruction: str, performance_insights: str,
|
|
44
|
+
) -> str: ...
|
|
45
|
+
def compose_regenerate_offspring(
|
|
46
|
+
self, context: str, failed_str: str, pareto_str: str, n_candidates: int,
|
|
47
|
+
constraint_instruction: str, performance_insights: str,
|
|
48
|
+
) -> str: ...
|
|
49
|
+
def compose_failure_insights(self, context: str, failed_str: str, n_failed: int) -> str: ...
|
|
50
|
+
def compose_constraint_instruction(self, context: str, failed_str: str, previous: str = "") -> str: ...
|
|
51
|
+
def compose_performance_insights(
|
|
52
|
+
self, context: str, stats_str: str, pareto_str: str, previous: str = ""
|
|
53
|
+
) -> str: ...
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class DefaultDirectives:
|
|
57
|
+
"""Generic, problem-agnostic prompt wording.
|
|
58
|
+
|
|
59
|
+
Problem specifics (search space, constraints, examples) reach the prompt
|
|
60
|
+
through ``context`` (built from the problem's hooks), so this generic wording
|
|
61
|
+
works for any problem; a problem may still supply its own ``Directives``.
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
def compose_initial(self, context: str, n_candidates: int) -> str:
|
|
65
|
+
return (
|
|
66
|
+
"You are an optimization expert generating candidates for a multi-objective problem.\n\n"
|
|
67
|
+
f"{context}\n\n"
|
|
68
|
+
f"Propose exactly {n_candidates} diverse, valid candidates that explore different "
|
|
69
|
+
"regions of the search space and trade off the objectives."
|
|
70
|
+
+ _COT
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
def compose_regenerate(
|
|
74
|
+
self, context: str, failed_str: str, n_candidates: int,
|
|
75
|
+
constraint_instruction: str, performance_insights: str,
|
|
76
|
+
) -> str:
|
|
77
|
+
return (
|
|
78
|
+
"You are an optimization expert. Previous candidates failed validation; learn from "
|
|
79
|
+
"them and propose better ones.\n\n"
|
|
80
|
+
f"{context}\n\n"
|
|
81
|
+
f"FAILED CANDIDATES AND THEIR ISSUES:\n{failed_str}\n\n"
|
|
82
|
+
f"CONSTRAINT COMPLIANCE INSTRUCTIONS:\n{constraint_instruction or 'None yet.'}\n\n"
|
|
83
|
+
f"PERFORMANCE INSIGHTS:\n{performance_insights or 'None yet.'}\n\n"
|
|
84
|
+
f"Propose exactly {n_candidates} NEW valid candidates that fix the failures and follow "
|
|
85
|
+
"the constraint instructions."
|
|
86
|
+
+ _COT
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
def compose_offspring(
|
|
90
|
+
self, context: str, pareto_str: str, n_candidates: int,
|
|
91
|
+
constraint_instruction: str, performance_insights: str,
|
|
92
|
+
) -> str:
|
|
93
|
+
return (
|
|
94
|
+
"You are an optimization expert. Breed offspring from high-quality Pareto-optimal "
|
|
95
|
+
"configurations.\n\n"
|
|
96
|
+
f"{context}\n\n"
|
|
97
|
+
f"PARETO-OPTIMAL CONFIGURATIONS (best so far):\n{pareto_str}\n\n"
|
|
98
|
+
f"CONSTRAINT COMPLIANCE INSTRUCTIONS:\n{constraint_instruction or 'Follow standard constraints.'}\n\n"
|
|
99
|
+
f"PERFORMANCE INSIGHTS:\n{performance_insights or 'Analyze the Pareto set for patterns.'}\n\n"
|
|
100
|
+
f"Propose exactly {n_candidates} NEW valid candidates that build on the Pareto patterns, "
|
|
101
|
+
"explore new trade-offs, and try to improve on existing solutions."
|
|
102
|
+
+ _COT
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
def compose_regenerate_offspring(
|
|
106
|
+
self, context: str, failed_str: str, pareto_str: str, n_candidates: int,
|
|
107
|
+
constraint_instruction: str, performance_insights: str,
|
|
108
|
+
) -> str:
|
|
109
|
+
return (
|
|
110
|
+
"You are an optimization expert. Some offspring failed; fix them while staying close to "
|
|
111
|
+
"the known-valid Pareto set.\n\n"
|
|
112
|
+
f"{context}\n\n"
|
|
113
|
+
f"PARETO-OPTIMAL CONFIGURATIONS (known valid, high quality):\n{pareto_str}\n\n"
|
|
114
|
+
f"FAILED OFFSPRING AND THEIR ISSUES:\n{failed_str}\n\n"
|
|
115
|
+
f"CONSTRAINT COMPLIANCE INSTRUCTIONS:\n{constraint_instruction or 'Follow the Pareto patterns.'}\n\n"
|
|
116
|
+
f"PERFORMANCE INSIGHTS:\n{performance_insights or ''}\n\n"
|
|
117
|
+
f"Propose exactly {n_candidates} NEW valid candidates that fix the failures and try to improve."
|
|
118
|
+
+ _COT
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
def compose_failure_insights(self, context: str, failed_str: str, n_failed: int) -> str:
|
|
122
|
+
return (
|
|
123
|
+
"You are an optimization expert. Analyze why each candidate failed and give one "
|
|
124
|
+
"specific, actionable fix per candidate.\n\n"
|
|
125
|
+
f"{context}\n\n"
|
|
126
|
+
f"FAILED CANDIDATES:\n{failed_str}\n\n"
|
|
127
|
+
f"Provide exactly {n_failed} insight strings, one per failed candidate, in order."
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
def compose_constraint_instruction(self, context: str, failed_str: str, previous: str = "") -> str:
|
|
131
|
+
if previous:
|
|
132
|
+
return (
|
|
133
|
+
"You are an optimization expert. Update the constraint-compliance guide using new failures.\n\n"
|
|
134
|
+
f"PREVIOUS GUIDE:\n{previous}\n\n"
|
|
135
|
+
f"NEW FAILED CANDIDATES AND INSIGHTS:\n{failed_str}\n\n"
|
|
136
|
+
"Produce an updated, comprehensive constraint-compliance guide."
|
|
137
|
+
)
|
|
138
|
+
return (
|
|
139
|
+
"You are an optimization expert. From these failures, write a consolidated "
|
|
140
|
+
"constraint-compliance guide future candidates should follow.\n\n"
|
|
141
|
+
f"{context}\n\n"
|
|
142
|
+
f"FAILED CANDIDATES AND INSIGHTS:\n{failed_str}\n\n"
|
|
143
|
+
"Produce a clear, actionable constraint-compliance guide."
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
def compose_performance_insights(
|
|
147
|
+
self, context: str, stats_str: str, pareto_str: str, previous: str = ""
|
|
148
|
+
) -> str:
|
|
149
|
+
if previous:
|
|
150
|
+
return (
|
|
151
|
+
"You are an optimization expert. Update the performance insights with new results.\n\n"
|
|
152
|
+
f"PREVIOUS INSIGHTS:\n{previous}\n\n"
|
|
153
|
+
f"CURRENT PERFORMANCE STATISTICS:\n{stats_str}\n\n"
|
|
154
|
+
f"CURRENT TOP PARETO CONFIGURATIONS:\n{pareto_str}\n\n"
|
|
155
|
+
"Produce updated performance insights that capture new patterns."
|
|
156
|
+
)
|
|
157
|
+
return (
|
|
158
|
+
"You are an optimization expert. Analyze the performance patterns to guide better candidates.\n\n"
|
|
159
|
+
f"{context}\n\n"
|
|
160
|
+
f"PERFORMANCE STATISTICS:\n{stats_str}\n\n"
|
|
161
|
+
f"TOP PARETO CONFIGURATIONS:\n{pareto_str}\n\n"
|
|
162
|
+
"Explain what makes configurations perform well, the trade-offs, and how to improve."
|
|
163
|
+
)
|