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,485 @@
|
|
|
1
|
+
"""Generic campaign-side construction of calibrated portfolio inputs.
|
|
2
|
+
|
|
3
|
+
This module joins campaign-owned facts before a selector call. It has no
|
|
4
|
+
provider dependency and no workload vocabulary: benchmark adapters keep
|
|
5
|
+
owning candidate generation and evaluation, while this factory binds their
|
|
6
|
+
finite palette to prior-wave calibration and structural evidence.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import hashlib
|
|
12
|
+
import json
|
|
13
|
+
from collections import Counter
|
|
14
|
+
from dataclasses import dataclass, field
|
|
15
|
+
|
|
16
|
+
from agent_evolve.application.evolution_campaign import ParentVariationBinding
|
|
17
|
+
from agent_evolve.application.portfolio_outcome_feedback import (
|
|
18
|
+
PortfolioOutcomeFeedbackLedger,
|
|
19
|
+
)
|
|
20
|
+
from agent_evolve.core.optimization_semantics import (
|
|
21
|
+
MetricRole,
|
|
22
|
+
MetricSense,
|
|
23
|
+
OptimizationSemantics,
|
|
24
|
+
)
|
|
25
|
+
from agent_evolve.core.problem import ObjectiveSpec, validate_objective_specs
|
|
26
|
+
from agent_evolve.domain.patch import require_sha256
|
|
27
|
+
from agent_evolve.policies.selection.calibrated_portfolio_binding import (
|
|
28
|
+
CalibratedPortfolioAllocationContext,
|
|
29
|
+
CalibratedPortfolioInputBinding,
|
|
30
|
+
common_pool_required_option_ids,
|
|
31
|
+
proposal_support_candidates,
|
|
32
|
+
)
|
|
33
|
+
from agent_evolve.policies.selection.common_candidate_pool import (
|
|
34
|
+
TaskKeyedCommonCandidatePoolPolicy,
|
|
35
|
+
)
|
|
36
|
+
from agent_evolve.policies.selection.calibrated_slate import (
|
|
37
|
+
MetricOptimizationGoal,
|
|
38
|
+
SlateMetricObjective,
|
|
39
|
+
)
|
|
40
|
+
from agent_evolve.policies.selection.finite_palette_evidence import (
|
|
41
|
+
FinitePaletteStructuralEvidencePolicy,
|
|
42
|
+
FinitePaletteStructuralEvidenceRequest,
|
|
43
|
+
)
|
|
44
|
+
from agent_evolve.policies.selection.finite_option_prompt_projection import (
|
|
45
|
+
FiniteOptionPromptProjectionPolicy,
|
|
46
|
+
)
|
|
47
|
+
from agent_evolve.policies.selection.forecast_calibration import (
|
|
48
|
+
BetaCorrectnessPrior,
|
|
49
|
+
ForecastCalibrationScope,
|
|
50
|
+
)
|
|
51
|
+
from agent_evolve.policies.selection.proposal_support import (
|
|
52
|
+
StructuralProposalSupportPolicy,
|
|
53
|
+
)
|
|
54
|
+
from agent_evolve.ports.decision_metric_projection import DecisionMetricProjection
|
|
55
|
+
from agent_evolve.ports.portfolio_selection import PortfolioSelectionRequest
|
|
56
|
+
from agent_evolve.ports.portfolio_selection import (
|
|
57
|
+
pairwise_disjoint_parent_patch_pairs,
|
|
58
|
+
single_path_parent_patch_option_ids,
|
|
59
|
+
)
|
|
60
|
+
from agent_evolve.ports.contextual_search_allocation import (
|
|
61
|
+
ContextualPortfolioAllocationContract,
|
|
62
|
+
)
|
|
63
|
+
from agent_evolve.ports.variation_source import (
|
|
64
|
+
finite_variation_operator_id,
|
|
65
|
+
finite_variation_source_id,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
_OBJECTIVE_DOMAIN = b"agent-evolve:equal-weight-slate-objective:v1\x00"
|
|
70
|
+
_SEMANTIC_OBJECTIVE_DOMAIN = (
|
|
71
|
+
b"agent-evolve:equal-weight-semantic-slate-objective:v1\x00"
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _contextual_feasibility_witness_option_ids(
|
|
76
|
+
*,
|
|
77
|
+
variation: ParentVariationBinding,
|
|
78
|
+
allocation: ContextualPortfolioAllocationContract | None,
|
|
79
|
+
) -> tuple[str, ...]:
|
|
80
|
+
"""Recover and revalidate the controller's exact current-contract witness.
|
|
81
|
+
|
|
82
|
+
Candidate-pool screening is allowed to shrink semantic-forecast work, but
|
|
83
|
+
it may not erase the only slate known to realize a prospectively selected
|
|
84
|
+
source/operator allocation. The controller exposes only authenticated
|
|
85
|
+
option identities; this boundary resolves them to request-local opaque IDs
|
|
86
|
+
and independently checks all generic count and patch constraints.
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
if allocation is None or not (
|
|
90
|
+
allocation.feasibility_witness_option_identity_sha256s
|
|
91
|
+
):
|
|
92
|
+
return ()
|
|
93
|
+
allocation.__post_init__()
|
|
94
|
+
option_by_identity = {
|
|
95
|
+
value.identity_sha256: value for value in variation.contract.options
|
|
96
|
+
}
|
|
97
|
+
identities = allocation.feasibility_witness_option_identity_sha256s
|
|
98
|
+
try:
|
|
99
|
+
options = tuple(option_by_identity[value] for value in identities)
|
|
100
|
+
except KeyError as error:
|
|
101
|
+
raise ValueError(
|
|
102
|
+
"contextual feasibility witness escapes the finite variation contract"
|
|
103
|
+
) from error
|
|
104
|
+
option_ids = tuple(sorted(value.option_id for value in options))
|
|
105
|
+
source_counts = tuple(
|
|
106
|
+
sorted(Counter(finite_variation_source_id(value) for value in options).items())
|
|
107
|
+
)
|
|
108
|
+
operator_counts = tuple(
|
|
109
|
+
sorted(Counter(finite_variation_operator_id(value) for value in options).items())
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
def with_zero_arms(
|
|
113
|
+
observed: tuple[tuple[str, int], ...],
|
|
114
|
+
requested: tuple[tuple[str, int], ...],
|
|
115
|
+
) -> tuple[tuple[str, int], ...]:
|
|
116
|
+
counts = dict(observed)
|
|
117
|
+
return tuple((arm_id, counts.get(arm_id, 0)) for arm_id, _ in requested)
|
|
118
|
+
|
|
119
|
+
if (
|
|
120
|
+
with_zero_arms(source_counts, allocation.source_target_counts)
|
|
121
|
+
!= allocation.source_target_counts
|
|
122
|
+
or with_zero_arms(operator_counts, allocation.operator_target_counts)
|
|
123
|
+
!= allocation.operator_target_counts
|
|
124
|
+
):
|
|
125
|
+
raise ValueError(
|
|
126
|
+
"contextual feasibility witness differs from its source/operator targets"
|
|
127
|
+
)
|
|
128
|
+
if len(
|
|
129
|
+
single_path_parent_patch_option_ids(variation.contract, option_ids)
|
|
130
|
+
) < allocation.minimum_single_path_interventions:
|
|
131
|
+
raise ValueError(
|
|
132
|
+
"contextual feasibility witness violates its intervention floor"
|
|
133
|
+
)
|
|
134
|
+
if len(
|
|
135
|
+
pairwise_disjoint_parent_patch_pairs(variation.contract, option_ids)
|
|
136
|
+
) < allocation.minimum_disjoint_parent_patch_pairs:
|
|
137
|
+
raise ValueError(
|
|
138
|
+
"contextual feasibility witness violates its offspring-opportunity floor"
|
|
139
|
+
)
|
|
140
|
+
return option_ids
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def _canonical_json(value: object) -> bytes:
|
|
144
|
+
return json.dumps(
|
|
145
|
+
value,
|
|
146
|
+
allow_nan=False,
|
|
147
|
+
ensure_ascii=True,
|
|
148
|
+
separators=(",", ":"),
|
|
149
|
+
sort_keys=True,
|
|
150
|
+
).encode("ascii", errors="strict")
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def equal_weight_slate_objectives(
|
|
154
|
+
objectives: tuple[ObjectiveSpec, ...],
|
|
155
|
+
) -> tuple[SlateMetricObjective, ...]:
|
|
156
|
+
"""Project benchmark objective senses without introducing scalar priority."""
|
|
157
|
+
|
|
158
|
+
if type(objectives) is not tuple or any(
|
|
159
|
+
type(value) is not ObjectiveSpec for value in objectives
|
|
160
|
+
):
|
|
161
|
+
raise TypeError("objectives must contain exact ObjectiveSpec values")
|
|
162
|
+
validate_objective_specs(objectives)
|
|
163
|
+
results = []
|
|
164
|
+
for objective in sorted(objectives, key=lambda value: value.name):
|
|
165
|
+
record = {
|
|
166
|
+
"schema_version": 1,
|
|
167
|
+
"metric_id": objective.name,
|
|
168
|
+
"benchmark_goal": objective.goal,
|
|
169
|
+
"weight_hex": (1.0).hex(),
|
|
170
|
+
"weight_law": "equal_per_metric_no_scalar_objective_claim",
|
|
171
|
+
}
|
|
172
|
+
results.append(
|
|
173
|
+
SlateMetricObjective(
|
|
174
|
+
metric_id=objective.name,
|
|
175
|
+
goal=(
|
|
176
|
+
MetricOptimizationGoal.MINIMIZE
|
|
177
|
+
if objective.goal == "min"
|
|
178
|
+
else MetricOptimizationGoal.MAXIMIZE
|
|
179
|
+
),
|
|
180
|
+
weight=1.0,
|
|
181
|
+
definition_sha256=hashlib.sha256(
|
|
182
|
+
_OBJECTIVE_DOMAIN + _canonical_json(record)
|
|
183
|
+
).hexdigest(),
|
|
184
|
+
)
|
|
185
|
+
)
|
|
186
|
+
return tuple(results)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def equal_weight_slate_objectives_from_decision_metrics(
|
|
190
|
+
projection: DecisionMetricProjection,
|
|
191
|
+
) -> tuple[SlateMetricObjective, ...]:
|
|
192
|
+
"""Build equal-weight slate goals from one outcome projection.
|
|
193
|
+
|
|
194
|
+
Only monotone ``MINIMIZE``/``MAXIMIZE`` senses have an honest mapping to
|
|
195
|
+
the allocator's goal vocabulary. Target, bounded-satisfaction, and
|
|
196
|
+
informational metrics fail closed rather than being silently scalarized.
|
|
197
|
+
"""
|
|
198
|
+
|
|
199
|
+
if type(projection) is not DecisionMetricProjection:
|
|
200
|
+
raise TypeError("projection must be exact DecisionMetricProjection")
|
|
201
|
+
projection.__post_init__()
|
|
202
|
+
results: list[SlateMetricObjective] = []
|
|
203
|
+
for metric in projection.metrics:
|
|
204
|
+
if metric.sense is MetricSense.MINIMIZE:
|
|
205
|
+
goal = MetricOptimizationGoal.MINIMIZE
|
|
206
|
+
benchmark_goal = "min"
|
|
207
|
+
elif metric.sense is MetricSense.MAXIMIZE:
|
|
208
|
+
goal = MetricOptimizationGoal.MAXIMIZE
|
|
209
|
+
benchmark_goal = "max"
|
|
210
|
+
else:
|
|
211
|
+
raise ValueError(
|
|
212
|
+
"decision metric has no meaningful min/max slate mapping: "
|
|
213
|
+
f"{metric.metric_id} ({metric.sense.value})"
|
|
214
|
+
)
|
|
215
|
+
if (
|
|
216
|
+
projection.objective_only_legacy_metric_ids
|
|
217
|
+
and metric.role is MetricRole.OBJECTIVE
|
|
218
|
+
):
|
|
219
|
+
# Deliberately reproduce the historical ObjectiveSpec helper's
|
|
220
|
+
# exact authenticated record for objective-only benchmarks.
|
|
221
|
+
record = {
|
|
222
|
+
"schema_version": 1,
|
|
223
|
+
"metric_id": metric.metric_id,
|
|
224
|
+
"benchmark_goal": benchmark_goal,
|
|
225
|
+
"weight_hex": (1.0).hex(),
|
|
226
|
+
"weight_law": "equal_per_metric_no_scalar_objective_claim",
|
|
227
|
+
}
|
|
228
|
+
domain = _OBJECTIVE_DOMAIN
|
|
229
|
+
else:
|
|
230
|
+
record = {
|
|
231
|
+
"schema_version": 1,
|
|
232
|
+
"projection_definition_sha256": projection.definition_sha256,
|
|
233
|
+
"metric": metric.to_record(),
|
|
234
|
+
"goal": goal.value,
|
|
235
|
+
"weight_hex": (1.0).hex(),
|
|
236
|
+
"weight_law": "equal_per_decision_metric_no_scalar_priority_claim",
|
|
237
|
+
}
|
|
238
|
+
domain = _SEMANTIC_OBJECTIVE_DOMAIN
|
|
239
|
+
results.append(
|
|
240
|
+
SlateMetricObjective(
|
|
241
|
+
metric_id=metric.metric_id,
|
|
242
|
+
goal=goal,
|
|
243
|
+
weight=1.0,
|
|
244
|
+
definition_sha256=hashlib.sha256(
|
|
245
|
+
domain + _canonical_json(record)
|
|
246
|
+
).hexdigest(),
|
|
247
|
+
)
|
|
248
|
+
)
|
|
249
|
+
return tuple(results)
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def equal_weight_slate_objectives_from_optimization_semantics(
|
|
253
|
+
semantics: OptimizationSemantics,
|
|
254
|
+
) -> tuple[SlateMetricObjective, ...]:
|
|
255
|
+
"""Project benchmark semantics into the calibrated allocator's goals."""
|
|
256
|
+
|
|
257
|
+
return equal_weight_slate_objectives_from_decision_metrics(
|
|
258
|
+
DecisionMetricProjection.from_optimization_semantics(semantics)
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
@dataclass(slots=True)
|
|
263
|
+
class CalibratedCampaignBindingFactory:
|
|
264
|
+
"""Create one immutable pre-provider K8→K4 binding per campaign wave."""
|
|
265
|
+
|
|
266
|
+
scope: ForecastCalibrationScope
|
|
267
|
+
objectives: tuple[SlateMetricObjective, ...]
|
|
268
|
+
ledger: PortfolioOutcomeFeedbackLedger
|
|
269
|
+
structural_evidence: FinitePaletteStructuralEvidencePolicy = field(
|
|
270
|
+
default_factory=FinitePaletteStructuralEvidencePolicy
|
|
271
|
+
)
|
|
272
|
+
prior: BetaCorrectnessPrior = field(default_factory=BetaCorrectnessPrior)
|
|
273
|
+
family_min_support: int = 4
|
|
274
|
+
option_prompt_projection: FiniteOptionPromptProjectionPolicy | None = None
|
|
275
|
+
common_candidate_pool_policy: TaskKeyedCommonCandidatePoolPolicy | None = None
|
|
276
|
+
proposal_support_policy: StructuralProposalSupportPolicy | None = None
|
|
277
|
+
assign_all_cards_by_default: bool = True
|
|
278
|
+
|
|
279
|
+
def __post_init__(self) -> None:
|
|
280
|
+
if type(self.scope) is not ForecastCalibrationScope:
|
|
281
|
+
raise TypeError("scope must be exact ForecastCalibrationScope")
|
|
282
|
+
self.scope.revalidate()
|
|
283
|
+
if (
|
|
284
|
+
type(self.objectives) is not tuple
|
|
285
|
+
or not self.objectives
|
|
286
|
+
or any(type(value) is not SlateMetricObjective for value in self.objectives)
|
|
287
|
+
):
|
|
288
|
+
raise ValueError("objectives must contain exact slate objectives")
|
|
289
|
+
for value in self.objectives:
|
|
290
|
+
value.__post_init__()
|
|
291
|
+
metric_ids = tuple(value.metric_id for value in self.objectives)
|
|
292
|
+
if metric_ids != tuple(sorted(set(metric_ids))):
|
|
293
|
+
raise ValueError("objectives must use unique canonical metric order")
|
|
294
|
+
if type(self.ledger) is not PortfolioOutcomeFeedbackLedger:
|
|
295
|
+
raise TypeError("ledger must be exact PortfolioOutcomeFeedbackLedger")
|
|
296
|
+
if type(self.structural_evidence) is not FinitePaletteStructuralEvidencePolicy:
|
|
297
|
+
raise TypeError("structural_evidence must be exact finite-palette policy")
|
|
298
|
+
self.structural_evidence.__post_init__()
|
|
299
|
+
if type(self.prior) is not BetaCorrectnessPrior:
|
|
300
|
+
raise TypeError("prior must be exact BetaCorrectnessPrior")
|
|
301
|
+
self.prior.__post_init__()
|
|
302
|
+
if type(self.family_min_support) is not int or self.family_min_support <= 0:
|
|
303
|
+
raise ValueError("family_min_support must be positive")
|
|
304
|
+
if self.option_prompt_projection is not None:
|
|
305
|
+
if (
|
|
306
|
+
type(self.option_prompt_projection)
|
|
307
|
+
is not FiniteOptionPromptProjectionPolicy
|
|
308
|
+
):
|
|
309
|
+
raise TypeError(
|
|
310
|
+
"option_prompt_projection must be exact projection policy"
|
|
311
|
+
)
|
|
312
|
+
self.option_prompt_projection.__post_init__()
|
|
313
|
+
if self.common_candidate_pool_policy is not None:
|
|
314
|
+
if type(self.common_candidate_pool_policy) is not (
|
|
315
|
+
TaskKeyedCommonCandidatePoolPolicy
|
|
316
|
+
):
|
|
317
|
+
raise TypeError(
|
|
318
|
+
"common_candidate_pool_policy must be an exact policy or None"
|
|
319
|
+
)
|
|
320
|
+
self.common_candidate_pool_policy.__post_init__()
|
|
321
|
+
if self.proposal_support_policy is not None:
|
|
322
|
+
if type(self.proposal_support_policy) is not (
|
|
323
|
+
StructuralProposalSupportPolicy
|
|
324
|
+
):
|
|
325
|
+
raise TypeError(
|
|
326
|
+
"proposal_support_policy must be an exact policy or None"
|
|
327
|
+
)
|
|
328
|
+
self.proposal_support_policy.__post_init__()
|
|
329
|
+
if self.common_candidate_pool_policy is None:
|
|
330
|
+
raise ValueError(
|
|
331
|
+
"proposal support requires a common candidate-pool policy"
|
|
332
|
+
)
|
|
333
|
+
if type(self.assign_all_cards_by_default) is not bool:
|
|
334
|
+
raise TypeError("assign_all_cards_by_default must be an exact bool")
|
|
335
|
+
|
|
336
|
+
def build(
|
|
337
|
+
self,
|
|
338
|
+
*,
|
|
339
|
+
request: PortfolioSelectionRequest,
|
|
340
|
+
variation: ParentVariationBinding,
|
|
341
|
+
wave_index: int,
|
|
342
|
+
frozen_archive_snapshot_sha256: str,
|
|
343
|
+
assigned_card_keys: tuple[str, ...] | None = None,
|
|
344
|
+
contextual_allocation: ContextualPortfolioAllocationContract | None = None,
|
|
345
|
+
) -> CalibratedPortfolioInputBinding:
|
|
346
|
+
"""Bind request, cutoff, palette evidence, and prior calibration exactly."""
|
|
347
|
+
|
|
348
|
+
self.__post_init__()
|
|
349
|
+
if type(request) is not PortfolioSelectionRequest:
|
|
350
|
+
raise TypeError("request must be exact PortfolioSelectionRequest")
|
|
351
|
+
request.__post_init__()
|
|
352
|
+
if type(variation) is not ParentVariationBinding:
|
|
353
|
+
raise TypeError("variation must be exact ParentVariationBinding")
|
|
354
|
+
ParentVariationBinding.__post_init__(variation)
|
|
355
|
+
if request.finite_variation_contract != variation.contract:
|
|
356
|
+
raise ValueError("selection request differs from its campaign variation")
|
|
357
|
+
if self.scope.benchmark_sha256 != variation.benchmark_sha256:
|
|
358
|
+
raise ValueError("calibration scope names a foreign benchmark")
|
|
359
|
+
if type(wave_index) is not int or wave_index <= 0:
|
|
360
|
+
raise ValueError("wave_index must be a positive exact integer")
|
|
361
|
+
require_sha256(
|
|
362
|
+
frozen_archive_snapshot_sha256,
|
|
363
|
+
"frozen_archive_snapshot_sha256",
|
|
364
|
+
)
|
|
365
|
+
receipt = variation.eligibility_receipt
|
|
366
|
+
if receipt is None:
|
|
367
|
+
raise ValueError(
|
|
368
|
+
"calibrated campaign requires phenotype eligibility evidence"
|
|
369
|
+
)
|
|
370
|
+
receipt.__post_init__()
|
|
371
|
+
phenotype_by_option = {
|
|
372
|
+
value.option_id: (
|
|
373
|
+
value.option_identity_sha256,
|
|
374
|
+
value.phenotype_identity_sha256,
|
|
375
|
+
)
|
|
376
|
+
for value in receipt.option_phenotypes
|
|
377
|
+
}
|
|
378
|
+
option_phenotypes: list[tuple[str, str]] = []
|
|
379
|
+
for option in variation.contract.options:
|
|
380
|
+
source = phenotype_by_option.get(option.option_id)
|
|
381
|
+
if source is None or source[0] != option.identity_sha256:
|
|
382
|
+
raise ValueError(
|
|
383
|
+
"eligibility evidence differs from the finite contract"
|
|
384
|
+
)
|
|
385
|
+
option_phenotypes.append((option.option_id, source[1]))
|
|
386
|
+
evidence = self.structural_evidence.project(
|
|
387
|
+
FinitePaletteStructuralEvidenceRequest(
|
|
388
|
+
contract=variation.contract,
|
|
389
|
+
option_phenotype_sha256s=tuple(sorted(option_phenotypes)),
|
|
390
|
+
known_phenotype_sha256s=variation.known_phenotype_sha256s,
|
|
391
|
+
eligibility_receipt_sha256=receipt.receipt_sha256,
|
|
392
|
+
frozen_archive_snapshot_sha256=frozen_archive_snapshot_sha256,
|
|
393
|
+
)
|
|
394
|
+
)
|
|
395
|
+
if assigned_card_keys is None:
|
|
396
|
+
if request.memory_dose_contract is not None:
|
|
397
|
+
keys = request.memory_dose_contract.assigned_card_keys
|
|
398
|
+
elif self.assign_all_cards_by_default:
|
|
399
|
+
keys = tuple(sorted(card.card_key for card in request.cards))
|
|
400
|
+
else:
|
|
401
|
+
keys = ()
|
|
402
|
+
else:
|
|
403
|
+
keys = assigned_card_keys
|
|
404
|
+
if type(keys) is not tuple or keys != tuple(sorted(set(keys))):
|
|
405
|
+
raise ValueError("assigned_card_keys must be unique and canonical")
|
|
406
|
+
if not set(keys).issubset({card.card_key for card in request.cards}):
|
|
407
|
+
raise ValueError("assigned cards escape the selector request")
|
|
408
|
+
objective_ids = tuple(value.metric_id for value in self.objectives)
|
|
409
|
+
if objective_ids != request.required_metric_ids:
|
|
410
|
+
raise ValueError("slate objectives differ from requested metrics")
|
|
411
|
+
context = CalibratedPortfolioAllocationContext(
|
|
412
|
+
scope=self.scope,
|
|
413
|
+
wave_index=wave_index,
|
|
414
|
+
parent_candidate_identity_sha256=(variation.parent_configuration_sha256),
|
|
415
|
+
objectives=self.objectives,
|
|
416
|
+
assigned_card_keys=keys,
|
|
417
|
+
calibration_snapshot=self.ledger.calibration_snapshot(
|
|
418
|
+
scope=self.scope,
|
|
419
|
+
cutoff_wave_index_exclusive=wave_index,
|
|
420
|
+
prior=self.prior,
|
|
421
|
+
family_min_support=self.family_min_support,
|
|
422
|
+
),
|
|
423
|
+
)
|
|
424
|
+
contextual_feasibility_witness_option_ids = (
|
|
425
|
+
_contextual_feasibility_witness_option_ids(
|
|
426
|
+
variation=variation,
|
|
427
|
+
allocation=contextual_allocation,
|
|
428
|
+
)
|
|
429
|
+
)
|
|
430
|
+
common_pool = (
|
|
431
|
+
None
|
|
432
|
+
if self.common_candidate_pool_policy is None
|
|
433
|
+
else self.common_candidate_pool_policy.select(
|
|
434
|
+
benchmark_sha256=self.scope.benchmark_sha256,
|
|
435
|
+
wave_index=wave_index,
|
|
436
|
+
parent_configuration_sha256=(
|
|
437
|
+
variation.parent_configuration_sha256
|
|
438
|
+
),
|
|
439
|
+
contract=variation.contract,
|
|
440
|
+
evaluation_size=request.portfolio_size,
|
|
441
|
+
min_distinct_families=request.min_distinct_families,
|
|
442
|
+
require_pairwise_disjoint_parent_patches=(
|
|
443
|
+
request.require_pairwise_disjoint_parent_patches
|
|
444
|
+
),
|
|
445
|
+
required_option_ids=common_pool_required_option_ids(request),
|
|
446
|
+
certified_feasibility_witness_option_ids=(
|
|
447
|
+
contextual_feasibility_witness_option_ids
|
|
448
|
+
),
|
|
449
|
+
)
|
|
450
|
+
)
|
|
451
|
+
proposal_support = (
|
|
452
|
+
None
|
|
453
|
+
if self.proposal_support_policy is None
|
|
454
|
+
else self.proposal_support_policy.select(
|
|
455
|
+
request_sha256=request.request_sha256,
|
|
456
|
+
common_candidate_pool_decision_sha256=common_pool.decision_sha256,
|
|
457
|
+
model_selection_size=common_pool.model_selection_size,
|
|
458
|
+
candidates=proposal_support_candidates(
|
|
459
|
+
request,
|
|
460
|
+
evidence,
|
|
461
|
+
common_pool,
|
|
462
|
+
),
|
|
463
|
+
)
|
|
464
|
+
)
|
|
465
|
+
return CalibratedPortfolioInputBinding(
|
|
466
|
+
request_sha256=request.request_sha256,
|
|
467
|
+
context=context,
|
|
468
|
+
option_evidence=evidence,
|
|
469
|
+
option_prompt_projection=(
|
|
470
|
+
None
|
|
471
|
+
if self.option_prompt_projection is None
|
|
472
|
+
else self.option_prompt_projection.project(variation.contract)
|
|
473
|
+
),
|
|
474
|
+
common_candidate_pool=common_pool,
|
|
475
|
+
proposal_support=proposal_support,
|
|
476
|
+
contextual_allocation=contextual_allocation,
|
|
477
|
+
)
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
__all__ = [
|
|
481
|
+
"CalibratedCampaignBindingFactory",
|
|
482
|
+
"equal_weight_slate_objectives",
|
|
483
|
+
"equal_weight_slate_objectives_from_decision_metrics",
|
|
484
|
+
"equal_weight_slate_objectives_from_optimization_semantics",
|
|
485
|
+
]
|