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,403 @@
|
|
|
1
|
+
"""Outcome-blind union of local and optional global finite-action sources.
|
|
2
|
+
|
|
3
|
+
The optimizer sees one ordinary :class:`FiniteVariationCatalog`. Workload
|
|
4
|
+
adapters may contribute global restarts, archive-gap macros, or other sealed
|
|
5
|
+
full-child sources without changing campaign orchestration. Source options
|
|
6
|
+
may declare only a source ID and an evaluation exposure floor. The floor is
|
|
7
|
+
resolved deterministically from the sealed finite contract, so objective
|
|
8
|
+
values and provider fields never enter source union or exposure selection.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import hashlib
|
|
14
|
+
import json
|
|
15
|
+
from dataclasses import dataclass, field, replace
|
|
16
|
+
|
|
17
|
+
from agent_evolve.domain.finite_variation import (
|
|
18
|
+
MAX_FINITE_VARIATION_OPTIONS,
|
|
19
|
+
FiniteVariationContract,
|
|
20
|
+
FiniteVariationOption,
|
|
21
|
+
)
|
|
22
|
+
from agent_evolve.domain.typed_json import FrozenJsonObject
|
|
23
|
+
from agent_evolve.ports.variation_catalog import FiniteVariationCatalog
|
|
24
|
+
from agent_evolve.ports.variation_source import (
|
|
25
|
+
VARIATION_SOURCE_METADATA_KEY,
|
|
26
|
+
VARIATION_SOURCE_MINIMUM_METADATA_KEY,
|
|
27
|
+
VARIATION_SOURCE_RANK_METADATA_KEY,
|
|
28
|
+
finite_variation_source_minimum_counts,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Source-compatible aliases remain public while the authority lives at the
|
|
33
|
+
# inverted API boundary rather than in this concrete union policy.
|
|
34
|
+
EVALUATION_SOURCE_METADATA_KEY = VARIATION_SOURCE_METADATA_KEY
|
|
35
|
+
EVALUATION_SOURCE_MINIMUM_METADATA_KEY = VARIATION_SOURCE_MINIMUM_METADATA_KEY
|
|
36
|
+
SOURCE_UNION_POLICY_ID = "finite_variation_source_union"
|
|
37
|
+
SOURCE_UNION_POLICY_VERSION = 1
|
|
38
|
+
_DEFINITION_DOMAIN = b"agent-evolve:finite-variation-source-union:def:v1\x00"
|
|
39
|
+
_EXPOSURE_DOMAIN = b"agent-evolve:finite-variation-source-exposure:v1\x00"
|
|
40
|
+
_EXPOSURE_POLICY_DOMAIN = (
|
|
41
|
+
b"agent-evolve:finite-variation-source-exposure-policy:def:v1\x00"
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _canonical_json(value: object) -> bytes:
|
|
46
|
+
return json.dumps(
|
|
47
|
+
value,
|
|
48
|
+
allow_nan=False,
|
|
49
|
+
ensure_ascii=True,
|
|
50
|
+
separators=(",", ":"),
|
|
51
|
+
sort_keys=True,
|
|
52
|
+
).encode("ascii", errors="strict")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _catalog_identity(catalog: FiniteVariationCatalog) -> tuple[str, int, str]:
|
|
56
|
+
if not isinstance(catalog, FiniteVariationCatalog):
|
|
57
|
+
raise TypeError("source union members must implement FiniteVariationCatalog")
|
|
58
|
+
catalog_id = getattr(catalog, "catalog_id", None)
|
|
59
|
+
catalog_version = getattr(catalog, "catalog_version", None)
|
|
60
|
+
definition_sha256 = getattr(catalog, "definition_sha256", None)
|
|
61
|
+
if type(catalog_id) is not str or not catalog_id:
|
|
62
|
+
raise ValueError("source catalog must publish catalog_id")
|
|
63
|
+
if type(catalog_version) is not int or catalog_version <= 0:
|
|
64
|
+
raise ValueError("source catalog must publish a positive version")
|
|
65
|
+
if (
|
|
66
|
+
type(definition_sha256) is not str
|
|
67
|
+
or len(definition_sha256) != 64
|
|
68
|
+
or any(value not in "0123456789abcdef" for value in definition_sha256)
|
|
69
|
+
):
|
|
70
|
+
raise ValueError("source catalog must publish a lowercase SHA-256")
|
|
71
|
+
return catalog_id, catalog_version, definition_sha256
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@dataclass(frozen=True, slots=True)
|
|
75
|
+
class SourceUnionFiniteVariationCatalog:
|
|
76
|
+
"""Merge one primary catalog with independently versioned source catalogs."""
|
|
77
|
+
|
|
78
|
+
primary_catalog: FiniteVariationCatalog
|
|
79
|
+
source_catalogs: tuple[FiniteVariationCatalog, ...]
|
|
80
|
+
catalog_id: str = field(init=False)
|
|
81
|
+
catalog_version: int = field(init=False)
|
|
82
|
+
definition_sha256: str = field(init=False)
|
|
83
|
+
option_families: tuple[str, ...] | None = field(init=False, default=None)
|
|
84
|
+
|
|
85
|
+
def __post_init__(self) -> None:
|
|
86
|
+
primary = _catalog_identity(self.primary_catalog)
|
|
87
|
+
if type(self.source_catalogs) is not tuple or not self.source_catalogs:
|
|
88
|
+
raise ValueError("source_catalogs must be a non-empty exact tuple")
|
|
89
|
+
sources = tuple(_catalog_identity(value) for value in self.source_catalogs)
|
|
90
|
+
if len({value[0] for value in sources}) != len(sources):
|
|
91
|
+
raise ValueError("source catalog IDs must be unique")
|
|
92
|
+
definition = {
|
|
93
|
+
"schema_version": 1,
|
|
94
|
+
"policy_id": SOURCE_UNION_POLICY_ID,
|
|
95
|
+
"policy_version": SOURCE_UNION_POLICY_VERSION,
|
|
96
|
+
"primary_catalog": {
|
|
97
|
+
"catalog_id": primary[0],
|
|
98
|
+
"catalog_version": primary[1],
|
|
99
|
+
"definition_sha256": primary[2],
|
|
100
|
+
},
|
|
101
|
+
"source_catalogs": [
|
|
102
|
+
{
|
|
103
|
+
"catalog_id": catalog_id,
|
|
104
|
+
"catalog_version": version,
|
|
105
|
+
"definition_sha256": definition_sha256,
|
|
106
|
+
}
|
|
107
|
+
for catalog_id, version, definition_sha256 in sources
|
|
108
|
+
],
|
|
109
|
+
"merge_order": "primary_then_declared_source_order",
|
|
110
|
+
"duplicate_option_ids": "reject",
|
|
111
|
+
"duplicate_child_configurations": "reject",
|
|
112
|
+
"outcomes_consulted": False,
|
|
113
|
+
"workload_model_provider_identifiers_consulted": False,
|
|
114
|
+
}
|
|
115
|
+
object.__setattr__(self, "catalog_id", primary[0])
|
|
116
|
+
object.__setattr__(
|
|
117
|
+
self,
|
|
118
|
+
"catalog_version",
|
|
119
|
+
primary[1] + SOURCE_UNION_POLICY_VERSION,
|
|
120
|
+
)
|
|
121
|
+
object.__setattr__(
|
|
122
|
+
self,
|
|
123
|
+
"definition_sha256",
|
|
124
|
+
hashlib.sha256(
|
|
125
|
+
_DEFINITION_DOMAIN + _canonical_json(definition)
|
|
126
|
+
).hexdigest(),
|
|
127
|
+
)
|
|
128
|
+
family_sets = tuple(
|
|
129
|
+
getattr(value, "option_families", None)
|
|
130
|
+
for value in (self.primary_catalog, *self.source_catalogs)
|
|
131
|
+
)
|
|
132
|
+
if all(value is not None for value in family_sets):
|
|
133
|
+
if any(
|
|
134
|
+
type(value) is not tuple
|
|
135
|
+
or not value
|
|
136
|
+
or any(type(item) is not str or not item for item in value)
|
|
137
|
+
for value in family_sets
|
|
138
|
+
):
|
|
139
|
+
raise TypeError("source option_families must be non-empty tuples")
|
|
140
|
+
object.__setattr__(
|
|
141
|
+
self,
|
|
142
|
+
"option_families",
|
|
143
|
+
tuple(sorted({item for value in family_sets for item in value})),
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
def options(
|
|
147
|
+
self,
|
|
148
|
+
parent_configuration: FrozenJsonObject,
|
|
149
|
+
) -> tuple[FiniteVariationOption, ...]:
|
|
150
|
+
self.__post_init__()
|
|
151
|
+
members = (self.primary_catalog, *self.source_catalogs)
|
|
152
|
+
options = tuple(
|
|
153
|
+
option
|
|
154
|
+
for catalog in members
|
|
155
|
+
for option in catalog.options(parent_configuration)
|
|
156
|
+
)
|
|
157
|
+
if not options:
|
|
158
|
+
raise ValueError("source union cannot produce an empty finite catalog")
|
|
159
|
+
if len(options) > MAX_FINITE_VARIATION_OPTIONS:
|
|
160
|
+
raise ValueError("source union exceeds MAX_FINITE_VARIATION_OPTIONS")
|
|
161
|
+
option_ids = tuple(value.option_id for value in options)
|
|
162
|
+
if len(set(option_ids)) != len(option_ids):
|
|
163
|
+
raise ValueError("source union contains duplicate option IDs")
|
|
164
|
+
children = tuple(value.child_configuration_sha256 for value in options)
|
|
165
|
+
if len(set(children)) != len(children):
|
|
166
|
+
raise ValueError("source union contains duplicate child configurations")
|
|
167
|
+
return options
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
@dataclass(frozen=True, slots=True)
|
|
171
|
+
class SourceExposureFiniteVariationCatalog:
|
|
172
|
+
"""Set or remove a source's hard evaluator floor without changing actions.
|
|
173
|
+
|
|
174
|
+
Source identity is useful for attribution even when its exposure is
|
|
175
|
+
selected adaptively. This workload-neutral wrapper separates those two
|
|
176
|
+
concerns while authenticating the policy change in the catalog identity.
|
|
177
|
+
``None`` keeps every source-labelled option eligible but removes its hard
|
|
178
|
+
per-lane minimum; an integer installs that exact minimum.
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
source_catalog: FiniteVariationCatalog
|
|
182
|
+
evaluation_source_minimum: int | None
|
|
183
|
+
catalog_id: str = field(init=False)
|
|
184
|
+
catalog_version: int = field(init=False)
|
|
185
|
+
definition_sha256: str = field(init=False)
|
|
186
|
+
option_families: tuple[str, ...] | None = field(init=False, default=None)
|
|
187
|
+
|
|
188
|
+
def __post_init__(self) -> None:
|
|
189
|
+
base_id, base_version, base_definition = _catalog_identity(
|
|
190
|
+
self.source_catalog
|
|
191
|
+
)
|
|
192
|
+
if self.evaluation_source_minimum is not None and (
|
|
193
|
+
type(self.evaluation_source_minimum) is not int
|
|
194
|
+
or not 1 <= self.evaluation_source_minimum < 8
|
|
195
|
+
):
|
|
196
|
+
raise ValueError("evaluation source minimum must be None or lie in [1, 8)")
|
|
197
|
+
object.__setattr__(self, "catalog_id", f"{base_id}_source_exposure")
|
|
198
|
+
object.__setattr__(self, "catalog_version", base_version + 1)
|
|
199
|
+
object.__setattr__(
|
|
200
|
+
self,
|
|
201
|
+
"definition_sha256",
|
|
202
|
+
hashlib.sha256(
|
|
203
|
+
_EXPOSURE_POLICY_DOMAIN
|
|
204
|
+
+ _canonical_json(
|
|
205
|
+
{
|
|
206
|
+
"schema_version": 1,
|
|
207
|
+
"base_catalog": {
|
|
208
|
+
"catalog_id": base_id,
|
|
209
|
+
"catalog_version": base_version,
|
|
210
|
+
"definition_sha256": base_definition,
|
|
211
|
+
},
|
|
212
|
+
"evaluation_source_minimum": (
|
|
213
|
+
self.evaluation_source_minimum
|
|
214
|
+
),
|
|
215
|
+
"source_identity": "preserved",
|
|
216
|
+
"action_set_and_order": "preserved",
|
|
217
|
+
"outcomes_consulted": False,
|
|
218
|
+
"workload_model_provider_identifiers_consulted": False,
|
|
219
|
+
}
|
|
220
|
+
)
|
|
221
|
+
).hexdigest(),
|
|
222
|
+
)
|
|
223
|
+
families = getattr(self.source_catalog, "option_families", None)
|
|
224
|
+
if families is not None:
|
|
225
|
+
if (
|
|
226
|
+
type(families) is not tuple
|
|
227
|
+
or not families
|
|
228
|
+
or any(type(value) is not str or not value for value in families)
|
|
229
|
+
):
|
|
230
|
+
raise TypeError("source catalog option_families are invalid")
|
|
231
|
+
object.__setattr__(self, "option_families", families)
|
|
232
|
+
|
|
233
|
+
def options(
|
|
234
|
+
self,
|
|
235
|
+
parent_configuration: FrozenJsonObject,
|
|
236
|
+
) -> tuple[FiniteVariationOption, ...]:
|
|
237
|
+
self.__post_init__()
|
|
238
|
+
options = self.source_catalog.options(parent_configuration)
|
|
239
|
+
if type(options) is not tuple or any(
|
|
240
|
+
type(value) is not FiniteVariationOption for value in options
|
|
241
|
+
):
|
|
242
|
+
raise TypeError("source catalog returned foreign finite options")
|
|
243
|
+
rewritten: list[FiniteVariationOption] = []
|
|
244
|
+
for option in options:
|
|
245
|
+
option.__post_init__()
|
|
246
|
+
metadata = dict(option.metadata)
|
|
247
|
+
source_id = metadata.get(VARIATION_SOURCE_METADATA_KEY)
|
|
248
|
+
if type(source_id) is not str or not source_id:
|
|
249
|
+
raise ValueError("source-exposure wrapper requires source-labelled options")
|
|
250
|
+
metadata.pop(VARIATION_SOURCE_MINIMUM_METADATA_KEY, None)
|
|
251
|
+
if self.evaluation_source_minimum is not None:
|
|
252
|
+
metadata[VARIATION_SOURCE_MINIMUM_METADATA_KEY] = str(
|
|
253
|
+
self.evaluation_source_minimum
|
|
254
|
+
)
|
|
255
|
+
rewritten.append(
|
|
256
|
+
replace(option, metadata=tuple(sorted(metadata.items())))
|
|
257
|
+
)
|
|
258
|
+
return tuple(rewritten)
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
def required_source_evaluation_option_ids(
|
|
262
|
+
contract: FiniteVariationContract,
|
|
263
|
+
) -> tuple[str, ...]:
|
|
264
|
+
"""Select deterministic source-floor witnesses from one sealed contract.
|
|
265
|
+
|
|
266
|
+
A downstream selector must retain these options in its provider-visible
|
|
267
|
+
pool *and* its evaluated slate. A source may publish an authenticated
|
|
268
|
+
within-batch rank; in that case its smallest ranks define the protected
|
|
269
|
+
prefix. This preserves a source-native decision (for example, the leading
|
|
270
|
+
members of one joint numerical-acquisition batch) without teaching the
|
|
271
|
+
broker source names or objective semantics. Unranked sources retain the
|
|
272
|
+
historical outcome-blind rotating witness.
|
|
273
|
+
"""
|
|
274
|
+
|
|
275
|
+
if type(contract) is not FiniteVariationContract:
|
|
276
|
+
raise TypeError("contract must be an exact FiniteVariationContract")
|
|
277
|
+
contract.__post_init__()
|
|
278
|
+
by_source: dict[str, list[FiniteVariationOption]] = {}
|
|
279
|
+
minimum_by_source: dict[str, int] = {}
|
|
280
|
+
for option in contract.options:
|
|
281
|
+
metadata = dict(option.metadata)
|
|
282
|
+
source_id = metadata.get(EVALUATION_SOURCE_METADATA_KEY)
|
|
283
|
+
raw_minimum = metadata.get(EVALUATION_SOURCE_MINIMUM_METADATA_KEY)
|
|
284
|
+
if source_id is None and raw_minimum is None:
|
|
285
|
+
continue
|
|
286
|
+
if source_id is None:
|
|
287
|
+
raise ValueError("source exposure minimum requires a source ID")
|
|
288
|
+
if raw_minimum is None:
|
|
289
|
+
# Source-labelled challenger remains attributable without claiming
|
|
290
|
+
# a compulsory evaluator slot.
|
|
291
|
+
continue
|
|
292
|
+
if not raw_minimum.isascii() or not raw_minimum.isdigit():
|
|
293
|
+
raise ValueError("evaluation source minimum must be decimal digits")
|
|
294
|
+
minimum = int(raw_minimum)
|
|
295
|
+
if not 1 <= minimum < 8:
|
|
296
|
+
raise ValueError("evaluation source minimum must lie in [1, 8)")
|
|
297
|
+
previous = minimum_by_source.setdefault(source_id, minimum)
|
|
298
|
+
if previous != minimum:
|
|
299
|
+
raise ValueError("one proposal source declares inconsistent minimums")
|
|
300
|
+
by_source.setdefault(source_id, []).append(option)
|
|
301
|
+
|
|
302
|
+
selected: list[str] = []
|
|
303
|
+
contract_identity = bytes.fromhex(contract.identity_sha256)
|
|
304
|
+
for source_id in sorted(by_source):
|
|
305
|
+
source_options = by_source[source_id]
|
|
306
|
+
minimum = minimum_by_source[source_id]
|
|
307
|
+
if len(source_options) < minimum:
|
|
308
|
+
raise ValueError("proposal source cannot satisfy its exposure minimum")
|
|
309
|
+
raw_ranks = tuple(
|
|
310
|
+
dict(option.metadata).get(VARIATION_SOURCE_RANK_METADATA_KEY)
|
|
311
|
+
for option in source_options
|
|
312
|
+
)
|
|
313
|
+
if any(value is not None for value in raw_ranks):
|
|
314
|
+
if any(value is None for value in raw_ranks):
|
|
315
|
+
raise ValueError(
|
|
316
|
+
"one ranked proposal source contains an unranked option"
|
|
317
|
+
)
|
|
318
|
+
parsed_ranks: list[int] = []
|
|
319
|
+
for raw_rank in raw_ranks:
|
|
320
|
+
assert raw_rank is not None
|
|
321
|
+
if not raw_rank.isascii() or not raw_rank.isdigit():
|
|
322
|
+
raise ValueError("evaluation source rank must be decimal digits")
|
|
323
|
+
rank = int(raw_rank)
|
|
324
|
+
if rank <= 0:
|
|
325
|
+
raise ValueError("evaluation source rank must be positive")
|
|
326
|
+
parsed_ranks.append(rank)
|
|
327
|
+
if len(set(parsed_ranks)) != len(parsed_ranks):
|
|
328
|
+
raise ValueError("evaluation source ranks must be unique per contract")
|
|
329
|
+
rank_by_option_id = {
|
|
330
|
+
option.option_id: rank
|
|
331
|
+
for option, rank in zip(source_options, parsed_ranks, strict=True)
|
|
332
|
+
}
|
|
333
|
+
ordered = sorted(
|
|
334
|
+
source_options,
|
|
335
|
+
key=lambda option: (
|
|
336
|
+
rank_by_option_id[option.option_id],
|
|
337
|
+
option.option_id,
|
|
338
|
+
),
|
|
339
|
+
)
|
|
340
|
+
else:
|
|
341
|
+
ordered = sorted(
|
|
342
|
+
source_options,
|
|
343
|
+
key=lambda option: (
|
|
344
|
+
hashlib.sha256(
|
|
345
|
+
_EXPOSURE_DOMAIN
|
|
346
|
+
+ contract_identity
|
|
347
|
+
+ source_id.encode("ascii", errors="strict")
|
|
348
|
+
+ bytes.fromhex(option.identity_sha256)
|
|
349
|
+
).digest(),
|
|
350
|
+
option.option_id,
|
|
351
|
+
),
|
|
352
|
+
)
|
|
353
|
+
selected.extend(option.option_id for option in ordered[:minimum])
|
|
354
|
+
return tuple(sorted(selected))
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def required_source_evaluation_counts(
|
|
358
|
+
contract: FiniteVariationContract,
|
|
359
|
+
) -> tuple[tuple[str, int], ...]:
|
|
360
|
+
"""Return semantic evaluator-exposure floors declared by finite sources.
|
|
361
|
+
|
|
362
|
+
Unlike :func:`required_source_evaluation_option_ids`, this projection does
|
|
363
|
+
not nominate an arbitrary representative action. It is therefore the
|
|
364
|
+
correct contract for feasibility solvers: they may choose *any* compatible
|
|
365
|
+
action from a declared source while satisfying patch, family, operator,
|
|
366
|
+
and memory-dose constraints jointly.
|
|
367
|
+
"""
|
|
368
|
+
|
|
369
|
+
return finite_variation_source_minimum_counts(contract)
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
def required_ranked_source_evaluation_option_ids(
|
|
373
|
+
contract: FiniteVariationContract,
|
|
374
|
+
) -> tuple[str, ...]:
|
|
375
|
+
"""Return only source-floor witnesses backed by source-native ranks.
|
|
376
|
+
|
|
377
|
+
Contextual feasibility solvers normally satisfy an unranked source floor
|
|
378
|
+
with any compatible member of that source. A published source rank adds a
|
|
379
|
+
stronger contract: the selected prefix itself is protected. Keeping this
|
|
380
|
+
projection separate lets the generic broker preserve ranked expert advice
|
|
381
|
+
without turning historical hash witnesses into hard quality preferences.
|
|
382
|
+
"""
|
|
383
|
+
|
|
384
|
+
required = required_source_evaluation_option_ids(contract)
|
|
385
|
+
return tuple(
|
|
386
|
+
option_id
|
|
387
|
+
for option_id in required
|
|
388
|
+
if VARIATION_SOURCE_RANK_METADATA_KEY
|
|
389
|
+
in dict(contract.resolve(option_id).metadata)
|
|
390
|
+
)
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
__all__ = [
|
|
394
|
+
"EVALUATION_SOURCE_METADATA_KEY",
|
|
395
|
+
"EVALUATION_SOURCE_MINIMUM_METADATA_KEY",
|
|
396
|
+
"SOURCE_UNION_POLICY_ID",
|
|
397
|
+
"SOURCE_UNION_POLICY_VERSION",
|
|
398
|
+
"SourceExposureFiniteVariationCatalog",
|
|
399
|
+
"SourceUnionFiniteVariationCatalog",
|
|
400
|
+
"required_ranked_source_evaluation_option_ids",
|
|
401
|
+
"required_source_evaluation_counts",
|
|
402
|
+
"required_source_evaluation_option_ids",
|
|
403
|
+
]
|