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,242 @@
|
|
|
1
|
+
"""One prompt in, one string out.
|
|
2
|
+
|
|
3
|
+
The operator chooser needs a single completion, not a proposal protocol. A
|
|
4
|
+
narrow seam keeps the chooser testable without a provider and keeps the
|
|
5
|
+
credential handling in one place instead of threaded through a harness.
|
|
6
|
+
|
|
7
|
+
Failures are surfaced, never swallowed: a provider that returns an error body
|
|
8
|
+
raises after bounded retries rather than yielding empty text, because a chooser
|
|
9
|
+
that silently receives nothing degrades into random choice and produces a null
|
|
10
|
+
indistinguishable from an honest one.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import json
|
|
16
|
+
import os
|
|
17
|
+
import time
|
|
18
|
+
from typing import Any, Callable, Optional, Sequence
|
|
19
|
+
|
|
20
|
+
__all__ = ["Completion", "completion_for", "credential_for", "wire_model"]
|
|
21
|
+
|
|
22
|
+
Completion = Callable[[str], str]
|
|
23
|
+
|
|
24
|
+
_ENDPOINT = "https://openrouter.ai/api/v1/chat/completions"
|
|
25
|
+
_KEYS = ("OPENROUTER_API_KEY", "OPENAI_API_KEY")
|
|
26
|
+
|
|
27
|
+
#: The harness prefix ``Settings.model`` carries. This seam talks to
|
|
28
|
+
#: OpenRouter's REST API directly, and OpenRouter's wire model IDs do not carry
|
|
29
|
+
#: it -- so it has to come off before the body is built.
|
|
30
|
+
_HARNESS_PREFIX = "openrouter:"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def wire_model(model: str) -> str:
|
|
34
|
+
"""The OpenRouter wire model ID for a configured route.
|
|
35
|
+
|
|
36
|
+
One setting, ``AGENTEVOLVE_MODEL``, feeds two consumers that spell a model
|
|
37
|
+
differently: the pydantic-ai harness wants the provider-qualified
|
|
38
|
+
``openrouter:openai/gpt-5.6-luna``, and this raw-HTTP seam wants the bare
|
|
39
|
+
``openai/gpt-5.6-luna``. The package's *default* is written in the harness
|
|
40
|
+
spelling, so every call this seam made on the default route was rejected:
|
|
41
|
+
|
|
42
|
+
HTTP 400: "openrouter:openai/gpt-5.6-luna is not a valid model ID"
|
|
43
|
+
|
|
44
|
+
four times per call, after which the caller fell back to the classical path
|
|
45
|
+
-- which is the fallback guarantee doing its job, and also why the failure
|
|
46
|
+
could sit there unnoticed: the run still produced a result, and the usage
|
|
47
|
+
ledger reported ``calls: 0`` because no call ever completed.
|
|
48
|
+
|
|
49
|
+
Only the ``openrouter:`` prefix is removed. A different vendor prefix is
|
|
50
|
+
left exactly as written, because rewriting it would quietly send one
|
|
51
|
+
vendor's model ID to another vendor rather than failing where the mistake
|
|
52
|
+
is. Bodies that worked before are byte-identical, so no sealed replay
|
|
53
|
+
moves: the only strings this changes are the ones the provider rejected.
|
|
54
|
+
"""
|
|
55
|
+
if type(model) is not str:
|
|
56
|
+
raise TypeError("model must be an exact string")
|
|
57
|
+
if model.lower().startswith(_HARNESS_PREFIX):
|
|
58
|
+
return model[len(_HARNESS_PREFIX):]
|
|
59
|
+
return model
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def credential_for() -> Optional[tuple[str, str]]:
|
|
63
|
+
"""The first credential present, as ``(variable_name, value)``."""
|
|
64
|
+
|
|
65
|
+
for name in _KEYS:
|
|
66
|
+
value = os.environ.get(name)
|
|
67
|
+
if value:
|
|
68
|
+
return name, value
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def completion_for(
|
|
73
|
+
model: str,
|
|
74
|
+
settings: Any = None,
|
|
75
|
+
*,
|
|
76
|
+
attempts: int = 4,
|
|
77
|
+
timeout_s: float = 300.0,
|
|
78
|
+
journal: Any = None,
|
|
79
|
+
effort: Optional[str] = None,
|
|
80
|
+
provider_only: Optional[Sequence[str]] = None,
|
|
81
|
+
max_output_tokens: Optional[int] = None,
|
|
82
|
+
) -> Optional[Completion]:
|
|
83
|
+
"""A completion callable for *model*, or ``None`` with no credential.
|
|
84
|
+
|
|
85
|
+
``None`` rather than an exception: a caller without a key should fall back
|
|
86
|
+
to the unguided loop, which is a working optimizer, rather than fail. The
|
|
87
|
+
caller announces the fallback so it is never silent.
|
|
88
|
+
|
|
89
|
+
``effort`` is an ADDITIVE reasoning-effort pin: when given, the request
|
|
90
|
+
body carries ``{"reasoning": {"effort": <level>}}`` and each journalled
|
|
91
|
+
record additionally echoes ``effort_requested`` plus the reply's
|
|
92
|
+
``finish_reason``/``native_finish_reason`` (so honoring is verifiable
|
|
93
|
+
from journals alone). When omitted, the request body is byte-identical to
|
|
94
|
+
the pre-effort seam.
|
|
95
|
+
|
|
96
|
+
``provider_only`` is the second ADDITIVE pin: when given, the body carries
|
|
97
|
+
``{"provider": {"only": [...]}}``, which is what the shipped
|
|
98
|
+
``OpenRouterModelExecutionProfile`` declares for these routes
|
|
99
|
+
(``provider_only=("openai",)``). It matters for any dose or scale ladder:
|
|
100
|
+
a router free to move between serving providers can change the *reasoning
|
|
101
|
+
implementation* underneath a rung, so a measured dose difference would be
|
|
102
|
+
confounded with a routing difference.
|
|
103
|
+
|
|
104
|
+
It is deliberately NOT pinned by default. Pinning is a measurement-design
|
|
105
|
+
choice that belongs to the row that needs it, not to the product default:
|
|
106
|
+
the one row that measured the pin (ROW O2) found it a no-op against the
|
|
107
|
+
unpinned request, while a default pin would change the body of every call
|
|
108
|
+
this seam has ever made and so would silently re-cut the sealed rows'
|
|
109
|
+
replay. What ships instead is the EVIDENCE: the served provider is
|
|
110
|
+
journalled UNCONDITIONALLY, as ``provider_served`` (plus the reply
|
|
111
|
+
``response_id``), whether or not the pin is used. Recording it costs
|
|
112
|
+
nothing and is the only way an auditor can check, from journals alone,
|
|
113
|
+
that a rung did not silently span providers -- which no journal in this
|
|
114
|
+
program could do before.
|
|
115
|
+
|
|
116
|
+
``max_output_tokens`` is the third ADDITIVE pin, and it is the one that
|
|
117
|
+
stops a reasoning model from thinking its way past the answer. It is named
|
|
118
|
+
for the ``OpenRouterModelExecutionProfile`` field it is meant to carry
|
|
119
|
+
(``max_output_tokens``); the OpenRouter wire spelling it becomes is
|
|
120
|
+
``max_tokens``. This seam used to send no completion limit at all, which
|
|
121
|
+
does NOT mean "no limit": it means the PROVIDER's default, measured at
|
|
122
|
+
65,536 on this route, while the route's own ``max_completion_tokens`` is
|
|
123
|
+
128,000 and the shipped profile declares ``max_output_tokens=128_000``.
|
|
124
|
+
At the top of the reasoning-effort range that gap is fatal -- a measured
|
|
125
|
+
``max``-effort call spent 63,446 of its 65,536 output tokens on reasoning,
|
|
126
|
+
returned ``finish_reason="length"`` /
|
|
127
|
+
``native_finish_reason="max_output_tokens"``, and produced **no content at
|
|
128
|
+
all**. Half the declared capacity was being left unused, and the artifact
|
|
129
|
+
was what got dropped. Worse, the truncation SELECTS: it deletes exactly the
|
|
130
|
+
calls that reasoned longest, which is the direction that manufactures a
|
|
131
|
+
null on a reasoning-effort ladder. ``agent_evolve.api.optimize`` therefore
|
|
132
|
+
passes the profile's declared ceiling by default (see
|
|
133
|
+
``declared_max_output_tokens``) rather than accepting the provider's
|
|
134
|
+
silent one -- but this seam itself keeps NO default, so that a caller who
|
|
135
|
+
omits the cap still sends the sealed rows' exact body.
|
|
136
|
+
|
|
137
|
+
Which is why a missing completion now RAISES. ``choices[0].message.content``
|
|
138
|
+
can be ``None``, and this function used to return that ``None`` straight to
|
|
139
|
+
the caller -- who is documented above to never receive empty text, because
|
|
140
|
+
a policy that silently receives nothing degrades into random choice and
|
|
141
|
+
produces a null indistinguishable from an honest one. A ``None`` or blank
|
|
142
|
+
content is now treated exactly like a provider error: retried, and raised
|
|
143
|
+
after ``attempts``, carrying the ``finish_reason`` so the caller can see
|
|
144
|
+
the truncation rather than infer it.
|
|
145
|
+
|
|
146
|
+
JOURNAL SHAPE, stated once so readers can rely on it. What was SERVED is
|
|
147
|
+
always recorded -- ``model_served``, ``provider_served``, ``response_id``,
|
|
148
|
+
``finish_reason``, ``native_finish_reason``, ``content_chars``, ``usage``
|
|
149
|
+
-- because truncation and provider drift are not effort-only hazards and
|
|
150
|
+
their evidence must not be gated on a pin the caller may not have used.
|
|
151
|
+
What was PINNED is recorded when it was sent: ``effort_requested`` and
|
|
152
|
+
``max_output_tokens_requested`` appear only when the corresponding field
|
|
153
|
+
is in the body, so the ABSENCE of ``effort_requested`` in a record means
|
|
154
|
+
exactly one thing -- no ``reasoning`` field was sent, and the route
|
|
155
|
+
resolved its own ``default_effort``. That reading is what the M11 audit
|
|
156
|
+
used to separate the affected rows from the unaffected ones, and it stays
|
|
157
|
+
readable. ``provider_pinned`` is the single exception: it is always
|
|
158
|
+
present (``None`` when unpinned) because an auditor must pair it with
|
|
159
|
+
``provider_served`` on EVERY record to ask "did this rung span providers?"
|
|
160
|
+
"""
|
|
161
|
+
|
|
162
|
+
found = credential_for()
|
|
163
|
+
if found is None:
|
|
164
|
+
return None
|
|
165
|
+
_name, key = found
|
|
166
|
+
# The body carries the wire ID; `model_requested` in the journal keeps the
|
|
167
|
+
# configured route, so a record still says which route was asked for.
|
|
168
|
+
on_the_wire = wire_model(model)
|
|
169
|
+
|
|
170
|
+
def complete(prompt: str) -> str:
|
|
171
|
+
import urllib.error
|
|
172
|
+
import urllib.request
|
|
173
|
+
|
|
174
|
+
fields: dict[str, Any] = {
|
|
175
|
+
"model": on_the_wire,
|
|
176
|
+
"messages": [{"role": "user", "content": prompt}],
|
|
177
|
+
}
|
|
178
|
+
if effort is not None:
|
|
179
|
+
fields["reasoning"] = {"effort": effort}
|
|
180
|
+
if provider_only is not None:
|
|
181
|
+
fields["provider"] = {"only": list(provider_only)}
|
|
182
|
+
if max_output_tokens is not None:
|
|
183
|
+
fields["max_tokens"] = int(max_output_tokens)
|
|
184
|
+
body = json.dumps(fields).encode()
|
|
185
|
+
last: str | None = None
|
|
186
|
+
for attempt in range(attempts):
|
|
187
|
+
request = urllib.request.Request(
|
|
188
|
+
_ENDPOINT, data=body,
|
|
189
|
+
headers={"Authorization": f"Bearer {key}",
|
|
190
|
+
"Content-Type": "application/json"})
|
|
191
|
+
payload: dict | None = None
|
|
192
|
+
try:
|
|
193
|
+
with urllib.request.urlopen(request, timeout=timeout_s) as response:
|
|
194
|
+
payload = json.loads(response.read().decode())
|
|
195
|
+
except urllib.error.HTTPError as error:
|
|
196
|
+
last = f"HTTP {error.code}: {error.read()[:200].decode(errors='replace')}"
|
|
197
|
+
except Exception as error: # network, decode, timeout
|
|
198
|
+
last = f"{type(error).__name__}: {error}"[:200]
|
|
199
|
+
if payload is not None and "choices" in payload:
|
|
200
|
+
choice = payload["choices"][0]
|
|
201
|
+
text = (choice.get("message") or {}).get("content")
|
|
202
|
+
if journal is not None:
|
|
203
|
+
record = dict(model_requested=model,
|
|
204
|
+
model_served=payload.get("model"),
|
|
205
|
+
usage=payload.get("usage") or {},
|
|
206
|
+
provider_served=payload.get("provider"),
|
|
207
|
+
provider_pinned=(None if provider_only is None
|
|
208
|
+
else list(provider_only)),
|
|
209
|
+
response_id=payload.get("id"),
|
|
210
|
+
finish_reason=choice.get("finish_reason"),
|
|
211
|
+
native_finish_reason=choice.get(
|
|
212
|
+
"native_finish_reason"),
|
|
213
|
+
content_chars=(None if text is None
|
|
214
|
+
else len(text)))
|
|
215
|
+
if effort is not None:
|
|
216
|
+
record["effort_requested"] = effort
|
|
217
|
+
if max_output_tokens is not None:
|
|
218
|
+
record["max_output_tokens_requested"] = int(
|
|
219
|
+
max_output_tokens)
|
|
220
|
+
journal(record)
|
|
221
|
+
if text is not None and text.strip():
|
|
222
|
+
return text
|
|
223
|
+
# An empty completion is a NON-ANSWER, not an answer. At the
|
|
224
|
+
# top of the reasoning range the provider can spend the whole
|
|
225
|
+
# output budget on reasoning and return content=None with
|
|
226
|
+
# finish_reason="length"; returning that would hand a policy
|
|
227
|
+
# nothing while it reports a model arm. Retry, then raise.
|
|
228
|
+
last = (f"empty completion (finish_reason="
|
|
229
|
+
f"{choice.get('finish_reason')!r}, native="
|
|
230
|
+
f"{choice.get('native_finish_reason')!r}, "
|
|
231
|
+
f"completion_tokens="
|
|
232
|
+
f"{(payload.get('usage') or {}).get('completion_tokens')}"
|
|
233
|
+
f", reasoning_tokens="
|
|
234
|
+
f"{((payload.get('usage') or {}).get('completion_tokens_details') or {}).get('reasoning_tokens')})")
|
|
235
|
+
elif payload is not None: # a provider error body
|
|
236
|
+
last = json.dumps(payload.get("error", payload))[:300]
|
|
237
|
+
time.sleep(2 ** attempt)
|
|
238
|
+
raise RuntimeError(
|
|
239
|
+
f"no completion from {model!r} after {attempts} attempts: {last}"
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
return complete
|