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,446 @@
|
|
|
1
|
+
"""Portable conservative semantics for reflected finite-action hypotheses.
|
|
2
|
+
|
|
3
|
+
Free-text triggers and mechanisms are never parsed. This compiler deliberately
|
|
4
|
+
uses authenticated direct evidence when available to compile a replayable
|
|
5
|
+
parent-local transition claim. Legacy or foreign evidence retains the older
|
|
6
|
+
all-parent interpretation so existing non-identifiable workflows remain
|
|
7
|
+
explicitly backward compatible. A workload may inject a narrower semantic
|
|
8
|
+
compiler and matcher, but this implementation provides one shared default for
|
|
9
|
+
BOiLS, Heat, Timeloop, and other finite catalogs.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import hashlib
|
|
15
|
+
from dataclasses import dataclass
|
|
16
|
+
|
|
17
|
+
from agent_evolve.application.finite_action_transition import (
|
|
18
|
+
EmpiricalFiniteActionTransition,
|
|
19
|
+
empirical_finite_action_transitions_for_insight,
|
|
20
|
+
)
|
|
21
|
+
from agent_evolve.application.campaign_learning_runtime import (
|
|
22
|
+
CampaignInsightSemanticCompiler,
|
|
23
|
+
CompiledCampaignInsightSemantics,
|
|
24
|
+
)
|
|
25
|
+
from agent_evolve.domain.typed_json import FrozenJsonObject, freeze_json, thaw_json
|
|
26
|
+
from agent_evolve.policies.memory.global_falsification import (
|
|
27
|
+
AuthenticatedHypothesisObservation,
|
|
28
|
+
GlobalHypothesisAuditRequest,
|
|
29
|
+
HypothesisEvidenceMatchReceipt,
|
|
30
|
+
InterventionIdentifiability,
|
|
31
|
+
InterventionMatch,
|
|
32
|
+
TriggerMatch,
|
|
33
|
+
TypedEvidencePredicate,
|
|
34
|
+
)
|
|
35
|
+
from agent_evolve.ports.agentic_generator import (
|
|
36
|
+
InsightDraft,
|
|
37
|
+
ReflectionInsightContract,
|
|
38
|
+
)
|
|
39
|
+
from agent_evolve.application.insight_memory import InsightEvidenceLineage
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
PORTABLE_FINITE_ACTION_MATCHER_ID = "portable_finite_action_hypothesis_matcher"
|
|
43
|
+
PORTABLE_FINITE_ACTION_MATCHER_VERSION = 2
|
|
44
|
+
PORTABLE_FINITE_ACTION_MATCHER_DEFINITION_SHA256 = hashlib.sha256(
|
|
45
|
+
b"agent-evolve:portable-finite-action-hypothesis-matcher:v2:"
|
|
46
|
+
b"authenticated-parent-local-transition-when-available:"
|
|
47
|
+
b"stable-action-id-family-path-and-compiler:typed-old-new-values:"
|
|
48
|
+
b"legacy-all-parent-schema-compatible"
|
|
49
|
+
).hexdigest()
|
|
50
|
+
PORTABLE_FINITE_ACTION_COMPILER_ID = "portable_finite_action_insight_compiler"
|
|
51
|
+
PORTABLE_FINITE_ACTION_COMPILER_VERSION = 2
|
|
52
|
+
PORTABLE_FINITE_ACTION_COMPILER_DEFINITION_SHA256 = hashlib.sha256(
|
|
53
|
+
b"agent-evolve:portable-finite-action-insight-compiler:v2:"
|
|
54
|
+
b"no-prose-parsing:authenticated-direct-transition-first:"
|
|
55
|
+
b"foreign-evidence-legacy-fallback"
|
|
56
|
+
).hexdigest()
|
|
57
|
+
|
|
58
|
+
_TRIGGER_SCHEMA = "finite_action_all_parent_trigger"
|
|
59
|
+
_OLD_VALUE_SCHEMA = "finite_action_parent_value_scope"
|
|
60
|
+
_NEW_ACTION_SCHEMA = "finite_action_declared_intervention"
|
|
61
|
+
_TRIGGER_SCHEMA_SHA256 = hashlib.sha256(
|
|
62
|
+
b"agent-evolve:finite-action-all-parent-trigger-schema:v1"
|
|
63
|
+
).hexdigest()
|
|
64
|
+
_OLD_VALUE_SCHEMA_SHA256 = hashlib.sha256(
|
|
65
|
+
b"agent-evolve:finite-action-parent-value-scope-schema:v1"
|
|
66
|
+
).hexdigest()
|
|
67
|
+
_NEW_ACTION_SCHEMA_SHA256 = hashlib.sha256(
|
|
68
|
+
b"agent-evolve:finite-action-declared-intervention-schema:v1"
|
|
69
|
+
).hexdigest()
|
|
70
|
+
|
|
71
|
+
_EMPIRICAL_TRIGGER_SCHEMA = "finite_action_empirical_parent_trigger"
|
|
72
|
+
_EMPIRICAL_OLD_VALUE_SCHEMA = "finite_action_empirical_parent_values"
|
|
73
|
+
_EMPIRICAL_NEW_ACTION_SCHEMA = "finite_action_empirical_transition"
|
|
74
|
+
_EMPIRICAL_TRIGGER_SCHEMA_SHA256 = hashlib.sha256(
|
|
75
|
+
b"agent-evolve:finite-action-empirical-parent-trigger-schema:v1"
|
|
76
|
+
).hexdigest()
|
|
77
|
+
_EMPIRICAL_OLD_VALUE_SCHEMA_SHA256 = hashlib.sha256(
|
|
78
|
+
b"agent-evolve:finite-action-empirical-parent-values-schema:v1"
|
|
79
|
+
).hexdigest()
|
|
80
|
+
_EMPIRICAL_NEW_ACTION_SCHEMA_SHA256 = hashlib.sha256(
|
|
81
|
+
b"agent-evolve:finite-action-empirical-transition-schema:v1"
|
|
82
|
+
).hexdigest()
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _object(value: dict[str, object]) -> FrozenJsonObject:
|
|
86
|
+
frozen = freeze_json(value)
|
|
87
|
+
if type(frozen) is not FrozenJsonObject: # pragma: no cover - closed root.
|
|
88
|
+
raise AssertionError("portable semantics payload did not freeze to an object")
|
|
89
|
+
return frozen
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _paths_overlap(first: str, second: str) -> bool:
|
|
93
|
+
return (
|
|
94
|
+
first == second
|
|
95
|
+
or first.startswith(second + ".")
|
|
96
|
+
or first.startswith(second + "[")
|
|
97
|
+
or second.startswith(first + ".")
|
|
98
|
+
or second.startswith(first + "[")
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _exact_path_cover(
|
|
103
|
+
declared: tuple[str, ...],
|
|
104
|
+
observed: tuple[str, ...],
|
|
105
|
+
) -> bool:
|
|
106
|
+
return all(
|
|
107
|
+
any(_paths_overlap(path, value) for value in observed) for path in declared
|
|
108
|
+
) and all(
|
|
109
|
+
any(_paths_overlap(value, path) for path in declared) for value in observed
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
@dataclass(frozen=True, slots=True)
|
|
114
|
+
class PortableFiniteActionInsightSemanticCompiler(CampaignInsightSemanticCompiler):
|
|
115
|
+
"""Compile structured card fields into a strong portable local claim."""
|
|
116
|
+
|
|
117
|
+
policy_id: str = PORTABLE_FINITE_ACTION_COMPILER_ID
|
|
118
|
+
policy_version: int = PORTABLE_FINITE_ACTION_COMPILER_VERSION
|
|
119
|
+
definition_sha256: str = PORTABLE_FINITE_ACTION_COMPILER_DEFINITION_SHA256
|
|
120
|
+
|
|
121
|
+
def compile(
|
|
122
|
+
self,
|
|
123
|
+
*,
|
|
124
|
+
draft: InsightDraft,
|
|
125
|
+
insight_contract: ReflectionInsightContract,
|
|
126
|
+
evidence_lineage: InsightEvidenceLineage,
|
|
127
|
+
) -> CompiledCampaignInsightSemantics:
|
|
128
|
+
if type(draft) is not InsightDraft:
|
|
129
|
+
raise TypeError("draft must be exact")
|
|
130
|
+
if type(insight_contract) is not ReflectionInsightContract:
|
|
131
|
+
raise TypeError("insight_contract must be exact")
|
|
132
|
+
if type(evidence_lineage) is not InsightEvidenceLineage:
|
|
133
|
+
raise TypeError("evidence_lineage must be exact")
|
|
134
|
+
InsightDraft.__post_init__(draft)
|
|
135
|
+
ReflectionInsightContract.__post_init__(insight_contract)
|
|
136
|
+
InsightEvidenceLineage.__post_init__(evidence_lineage)
|
|
137
|
+
transitions = empirical_finite_action_transitions_for_insight(
|
|
138
|
+
draft,
|
|
139
|
+
evidence_lineage,
|
|
140
|
+
)
|
|
141
|
+
if transitions:
|
|
142
|
+
transition_records = [value.to_record() for value in transitions]
|
|
143
|
+
trigger = TypedEvidencePredicate(
|
|
144
|
+
schema_id=_EMPIRICAL_TRIGGER_SCHEMA,
|
|
145
|
+
schema_version=1,
|
|
146
|
+
schema_definition_sha256=_EMPIRICAL_TRIGGER_SCHEMA_SHA256,
|
|
147
|
+
payload=_object(
|
|
148
|
+
{
|
|
149
|
+
"scope": "authenticated_parent_local_value_alternatives",
|
|
150
|
+
"transitions": transition_records,
|
|
151
|
+
}
|
|
152
|
+
),
|
|
153
|
+
)
|
|
154
|
+
old_value_predicate = TypedEvidencePredicate(
|
|
155
|
+
schema_id=_EMPIRICAL_OLD_VALUE_SCHEMA,
|
|
156
|
+
schema_version=1,
|
|
157
|
+
schema_definition_sha256=_EMPIRICAL_OLD_VALUE_SCHEMA_SHA256,
|
|
158
|
+
payload=_object(
|
|
159
|
+
{
|
|
160
|
+
"affected_paths": list(draft.affected_paths),
|
|
161
|
+
"value_constraint": (
|
|
162
|
+
"one_of_authenticated_parent_local_values"
|
|
163
|
+
),
|
|
164
|
+
"transitions": transition_records,
|
|
165
|
+
}
|
|
166
|
+
),
|
|
167
|
+
)
|
|
168
|
+
new_action = TypedEvidencePredicate(
|
|
169
|
+
schema_id=_EMPIRICAL_NEW_ACTION_SCHEMA,
|
|
170
|
+
schema_version=1,
|
|
171
|
+
schema_definition_sha256=_EMPIRICAL_NEW_ACTION_SCHEMA_SHA256,
|
|
172
|
+
payload=_object(
|
|
173
|
+
{
|
|
174
|
+
"affected_paths": list(draft.affected_paths),
|
|
175
|
+
"recommended_option_families": list(
|
|
176
|
+
draft.recommended_option_families
|
|
177
|
+
),
|
|
178
|
+
"recommended_option_ids": list(
|
|
179
|
+
draft.recommended_option_ids
|
|
180
|
+
),
|
|
181
|
+
"factor_capabilities": list(draft.factor_capabilities),
|
|
182
|
+
"matching_law": (
|
|
183
|
+
"stable_action_and_compiler_with_exact_local_child_value"
|
|
184
|
+
),
|
|
185
|
+
"transitions": transition_records,
|
|
186
|
+
}
|
|
187
|
+
),
|
|
188
|
+
)
|
|
189
|
+
else:
|
|
190
|
+
trigger = TypedEvidencePredicate(
|
|
191
|
+
schema_id=_TRIGGER_SCHEMA,
|
|
192
|
+
schema_version=1,
|
|
193
|
+
schema_definition_sha256=_TRIGGER_SCHEMA_SHA256,
|
|
194
|
+
payload=_object(
|
|
195
|
+
{
|
|
196
|
+
"scope": "every_parent_in_registered_audit_scope",
|
|
197
|
+
"prose_trigger_used_for_matching": False,
|
|
198
|
+
}
|
|
199
|
+
),
|
|
200
|
+
)
|
|
201
|
+
old_value_predicate = TypedEvidencePredicate(
|
|
202
|
+
schema_id=_OLD_VALUE_SCHEMA,
|
|
203
|
+
schema_version=1,
|
|
204
|
+
schema_definition_sha256=_OLD_VALUE_SCHEMA_SHA256,
|
|
205
|
+
payload=_object(
|
|
206
|
+
{
|
|
207
|
+
"affected_paths": list(draft.affected_paths),
|
|
208
|
+
"value_constraint": "any_pre_intervention_value",
|
|
209
|
+
}
|
|
210
|
+
),
|
|
211
|
+
)
|
|
212
|
+
new_action = TypedEvidencePredicate(
|
|
213
|
+
schema_id=_NEW_ACTION_SCHEMA,
|
|
214
|
+
schema_version=1,
|
|
215
|
+
schema_definition_sha256=_NEW_ACTION_SCHEMA_SHA256,
|
|
216
|
+
payload=_object(
|
|
217
|
+
{
|
|
218
|
+
"affected_paths": list(draft.affected_paths),
|
|
219
|
+
"recommended_option_families": list(
|
|
220
|
+
draft.recommended_option_families
|
|
221
|
+
),
|
|
222
|
+
"recommended_option_ids": list(
|
|
223
|
+
draft.recommended_option_ids
|
|
224
|
+
),
|
|
225
|
+
"factor_capabilities": list(draft.factor_capabilities),
|
|
226
|
+
"matching_law": (
|
|
227
|
+
"exact_bidirectional_path_cover_and_declared_family_id"
|
|
228
|
+
),
|
|
229
|
+
}
|
|
230
|
+
),
|
|
231
|
+
)
|
|
232
|
+
return CompiledCampaignInsightSemantics(
|
|
233
|
+
draft_content_sha256=draft.content_sha256,
|
|
234
|
+
insight_contract_identity_sha256=insight_contract.identity_sha256,
|
|
235
|
+
evidence_lineage_sha256=evidence_lineage.identity_sha256,
|
|
236
|
+
trigger=trigger,
|
|
237
|
+
old_value_predicate=old_value_predicate,
|
|
238
|
+
new_action=new_action,
|
|
239
|
+
matcher_definition_sha256=(
|
|
240
|
+
PORTABLE_FINITE_ACTION_MATCHER_DEFINITION_SHA256
|
|
241
|
+
),
|
|
242
|
+
compiler_policy_id=self.policy_id,
|
|
243
|
+
compiler_policy_version=self.policy_version,
|
|
244
|
+
compiler_definition_sha256=self.definition_sha256,
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
@dataclass(frozen=True, slots=True)
|
|
249
|
+
class PortableFiniteActionHypothesisMatcher:
|
|
250
|
+
"""Match compiled finite-action claims to authenticated action records."""
|
|
251
|
+
|
|
252
|
+
policy_id: str = PORTABLE_FINITE_ACTION_MATCHER_ID
|
|
253
|
+
policy_version: int = PORTABLE_FINITE_ACTION_MATCHER_VERSION
|
|
254
|
+
definition_sha256: str = PORTABLE_FINITE_ACTION_MATCHER_DEFINITION_SHA256
|
|
255
|
+
|
|
256
|
+
@staticmethod
|
|
257
|
+
def _predicate_payload(
|
|
258
|
+
request: GlobalHypothesisAuditRequest,
|
|
259
|
+
) -> tuple[dict[str, object], tuple[EmpiricalFiniteActionTransition, ...]]:
|
|
260
|
+
trigger = request.trigger
|
|
261
|
+
old_value = request.intervention.old_value_predicate
|
|
262
|
+
new_action = request.intervention.new_action
|
|
263
|
+
expected = (
|
|
264
|
+
(
|
|
265
|
+
trigger.schema_id,
|
|
266
|
+
trigger.schema_version,
|
|
267
|
+
trigger.schema_definition_sha256,
|
|
268
|
+
),
|
|
269
|
+
(
|
|
270
|
+
old_value.schema_id,
|
|
271
|
+
old_value.schema_version,
|
|
272
|
+
old_value.schema_definition_sha256,
|
|
273
|
+
),
|
|
274
|
+
(
|
|
275
|
+
new_action.schema_id,
|
|
276
|
+
new_action.schema_version,
|
|
277
|
+
new_action.schema_definition_sha256,
|
|
278
|
+
),
|
|
279
|
+
)
|
|
280
|
+
required = (
|
|
281
|
+
(_TRIGGER_SCHEMA, 1, _TRIGGER_SCHEMA_SHA256),
|
|
282
|
+
(_OLD_VALUE_SCHEMA, 1, _OLD_VALUE_SCHEMA_SHA256),
|
|
283
|
+
(_NEW_ACTION_SCHEMA, 1, _NEW_ACTION_SCHEMA_SHA256),
|
|
284
|
+
)
|
|
285
|
+
if expected == required:
|
|
286
|
+
payload = thaw_json(new_action.payload)
|
|
287
|
+
if type(payload) is not dict: # pragma: no cover - closed root.
|
|
288
|
+
raise AssertionError("new-action predicate thawed to a non-object")
|
|
289
|
+
return payload, ()
|
|
290
|
+
empirical_required = (
|
|
291
|
+
(
|
|
292
|
+
_EMPIRICAL_TRIGGER_SCHEMA,
|
|
293
|
+
1,
|
|
294
|
+
_EMPIRICAL_TRIGGER_SCHEMA_SHA256,
|
|
295
|
+
),
|
|
296
|
+
(
|
|
297
|
+
_EMPIRICAL_OLD_VALUE_SCHEMA,
|
|
298
|
+
1,
|
|
299
|
+
_EMPIRICAL_OLD_VALUE_SCHEMA_SHA256,
|
|
300
|
+
),
|
|
301
|
+
(
|
|
302
|
+
_EMPIRICAL_NEW_ACTION_SCHEMA,
|
|
303
|
+
1,
|
|
304
|
+
_EMPIRICAL_NEW_ACTION_SCHEMA_SHA256,
|
|
305
|
+
),
|
|
306
|
+
)
|
|
307
|
+
if expected != empirical_required:
|
|
308
|
+
raise ValueError("audit request uses a foreign finite-action schema")
|
|
309
|
+
payloads = tuple(
|
|
310
|
+
thaw_json(value.payload) for value in (trigger, old_value, new_action)
|
|
311
|
+
)
|
|
312
|
+
if any(type(value) is not dict for value in payloads):
|
|
313
|
+
raise ValueError("empirical finite-action predicates must be objects")
|
|
314
|
+
trigger_payload, old_payload, action_payload = payloads
|
|
315
|
+
transition_records = action_payload.get("transitions")
|
|
316
|
+
if (
|
|
317
|
+
type(transition_records) is not list
|
|
318
|
+
or not transition_records
|
|
319
|
+
or trigger_payload.get("transitions") != transition_records
|
|
320
|
+
or old_payload.get("transitions") != transition_records
|
|
321
|
+
):
|
|
322
|
+
raise ValueError("empirical finite-action predicates lost their join")
|
|
323
|
+
transitions = tuple(
|
|
324
|
+
EmpiricalFiniteActionTransition.from_record(value)
|
|
325
|
+
for value in transition_records
|
|
326
|
+
)
|
|
327
|
+
if transitions != tuple(
|
|
328
|
+
sorted(transitions, key=lambda value: value.transition_sha256)
|
|
329
|
+
):
|
|
330
|
+
raise ValueError("empirical finite-action transitions are not canonical")
|
|
331
|
+
return action_payload, transitions
|
|
332
|
+
|
|
333
|
+
def classify(
|
|
334
|
+
self,
|
|
335
|
+
request: GlobalHypothesisAuditRequest,
|
|
336
|
+
observation: AuthenticatedHypothesisObservation,
|
|
337
|
+
) -> HypothesisEvidenceMatchReceipt:
|
|
338
|
+
if type(request) is not GlobalHypothesisAuditRequest:
|
|
339
|
+
raise TypeError("request must be exact")
|
|
340
|
+
if type(observation) is not AuthenticatedHypothesisObservation:
|
|
341
|
+
raise TypeError("observation must be exact")
|
|
342
|
+
GlobalHypothesisAuditRequest.__post_init__(request)
|
|
343
|
+
AuthenticatedHypothesisObservation.__post_init__(observation)
|
|
344
|
+
payload, transitions = self._predicate_payload(request)
|
|
345
|
+
action = thaw_json(observation.observed_action)
|
|
346
|
+
if type(action) is not dict:
|
|
347
|
+
raise ValueError("observed action must be an object")
|
|
348
|
+
required_action_fields = {
|
|
349
|
+
"option_id",
|
|
350
|
+
"option_family",
|
|
351
|
+
"operator_family",
|
|
352
|
+
"changed_paths",
|
|
353
|
+
}
|
|
354
|
+
if not required_action_fields.issubset(action):
|
|
355
|
+
raise ValueError("observed action omits finite-action identity fields")
|
|
356
|
+
declared_paths = tuple(payload.get("affected_paths", ()))
|
|
357
|
+
declared_families = tuple(payload.get("recommended_option_families", ()))
|
|
358
|
+
declared_ids = tuple(payload.get("recommended_option_ids", ()))
|
|
359
|
+
observed_paths = tuple(action["changed_paths"])
|
|
360
|
+
path_exact = _exact_path_cover(declared_paths, observed_paths)
|
|
361
|
+
family_exact = (
|
|
362
|
+
not declared_families or action["option_family"] in declared_families
|
|
363
|
+
)
|
|
364
|
+
option_exact = not declared_ids or action["option_id"] in declared_ids
|
|
365
|
+
operator_exact = action["operator_family"] in (
|
|
366
|
+
request.intervention.admissible_operator_families
|
|
367
|
+
)
|
|
368
|
+
trigger_match = TriggerMatch.EXACT
|
|
369
|
+
if transitions:
|
|
370
|
+
try:
|
|
371
|
+
trigger_match = (
|
|
372
|
+
TriggerMatch.EXACT
|
|
373
|
+
if any(
|
|
374
|
+
transition.parent_matches(observation.parent_configuration)
|
|
375
|
+
for transition in transitions
|
|
376
|
+
)
|
|
377
|
+
else TriggerMatch.OFF_TRIGGER
|
|
378
|
+
)
|
|
379
|
+
except ValueError:
|
|
380
|
+
trigger_match = TriggerMatch.AMBIGUOUS
|
|
381
|
+
action_transition_exact = False
|
|
382
|
+
if path_exact and operator_exact:
|
|
383
|
+
for transition in transitions:
|
|
384
|
+
if (
|
|
385
|
+
action["option_id"] == transition.option_id
|
|
386
|
+
and action["option_family"] == transition.option_family
|
|
387
|
+
and observation.action_semantics_compiler_id
|
|
388
|
+
== transition.action_semantics_compiler_id
|
|
389
|
+
and observation.action_semantics_compiler_version
|
|
390
|
+
== transition.action_semantics_compiler_version
|
|
391
|
+
and observation.action_semantics_definition_sha256
|
|
392
|
+
== transition.action_semantics_definition_sha256
|
|
393
|
+
and transition.affected_path in observed_paths
|
|
394
|
+
):
|
|
395
|
+
try:
|
|
396
|
+
if transition.child_matches(
|
|
397
|
+
observation.child_configuration
|
|
398
|
+
):
|
|
399
|
+
action_transition_exact = True
|
|
400
|
+
break
|
|
401
|
+
except ValueError:
|
|
402
|
+
continue
|
|
403
|
+
family_exact = family_exact and any(
|
|
404
|
+
action["option_family"] == value.option_family
|
|
405
|
+
for value in transitions
|
|
406
|
+
)
|
|
407
|
+
option_exact = option_exact and any(
|
|
408
|
+
action["option_id"] == value.option_id for value in transitions
|
|
409
|
+
)
|
|
410
|
+
else:
|
|
411
|
+
action_transition_exact = path_exact and family_exact and option_exact
|
|
412
|
+
if observation.intervention_identifiability is not (
|
|
413
|
+
InterventionIdentifiability.EXACT_SINGLE
|
|
414
|
+
):
|
|
415
|
+
intervention_match = InterventionMatch.NON_IDENTIFIABLE
|
|
416
|
+
elif action_transition_exact and operator_exact:
|
|
417
|
+
intervention_match = InterventionMatch.EXACT
|
|
418
|
+
elif any(
|
|
419
|
+
_paths_overlap(declared, observed)
|
|
420
|
+
for declared in declared_paths
|
|
421
|
+
for observed in observed_paths
|
|
422
|
+
):
|
|
423
|
+
intervention_match = InterventionMatch.NEAR
|
|
424
|
+
else:
|
|
425
|
+
intervention_match = InterventionMatch.DIFFERENT
|
|
426
|
+
return HypothesisEvidenceMatchReceipt(
|
|
427
|
+
request_sha256=request.request_sha256,
|
|
428
|
+
observation_sha256=observation.observation_sha256,
|
|
429
|
+
trigger_match=trigger_match,
|
|
430
|
+
intervention_match=intervention_match,
|
|
431
|
+
matcher_policy_id=self.policy_id,
|
|
432
|
+
matcher_policy_version=self.policy_version,
|
|
433
|
+
matcher_definition_sha256=self.definition_sha256,
|
|
434
|
+
)
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
__all__ = [
|
|
438
|
+
"PORTABLE_FINITE_ACTION_COMPILER_DEFINITION_SHA256",
|
|
439
|
+
"PORTABLE_FINITE_ACTION_COMPILER_ID",
|
|
440
|
+
"PORTABLE_FINITE_ACTION_COMPILER_VERSION",
|
|
441
|
+
"PORTABLE_FINITE_ACTION_MATCHER_DEFINITION_SHA256",
|
|
442
|
+
"PORTABLE_FINITE_ACTION_MATCHER_ID",
|
|
443
|
+
"PORTABLE_FINITE_ACTION_MATCHER_VERSION",
|
|
444
|
+
"PortableFiniteActionHypothesisMatcher",
|
|
445
|
+
"PortableFiniteActionInsightSemanticCompiler",
|
|
446
|
+
]
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"""Trusted sealing of model choices from matched finite action sets.
|
|
2
|
+
|
|
3
|
+
The provider-facing generator already returns an opaque finite-option ID. This
|
|
4
|
+
service joins that untrusted draft to the exact Stage-B authority, logical call,
|
|
5
|
+
semantic prompt, and provider telemetry before an evaluator may use the choice.
|
|
6
|
+
It deliberately has no evaluator or outcome dependency.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import hashlib
|
|
12
|
+
import json
|
|
13
|
+
from decimal import Decimal
|
|
14
|
+
|
|
15
|
+
from agent_evolve.domain.finite_action_set import FiniteActionSetAuthority
|
|
16
|
+
from agent_evolve.domain.ids import LLMCallId
|
|
17
|
+
from agent_evolve.domain.patch import require_sha256
|
|
18
|
+
from agent_evolve.ports.agentic_generator import (
|
|
19
|
+
AgenticCallTelemetry,
|
|
20
|
+
FiniteVariationSelectionDraft,
|
|
21
|
+
resolve_finite_variation_selection,
|
|
22
|
+
)
|
|
23
|
+
from agent_evolve.ports.finite_action_selection import (
|
|
24
|
+
FiniteActionDecision,
|
|
25
|
+
FiniteActionSelectorKind,
|
|
26
|
+
validate_finite_action_decision,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
MODEL_FINITE_ACTION_SELECTOR_POLICY_ID = "literal_id_model_finite_action"
|
|
31
|
+
MODEL_FINITE_ACTION_SELECTOR_POLICY_VERSION = 1
|
|
32
|
+
_MODEL_SELECTOR_DEFINITION_DOMAIN = (
|
|
33
|
+
b"agent-evolve:literal-id-model-finite-action:def:v1\x00"
|
|
34
|
+
)
|
|
35
|
+
_MODEL_TELEMETRY_DOMAIN = (
|
|
36
|
+
b"agent-evolve:model-finite-action-call-telemetry:v1\x00"
|
|
37
|
+
)
|
|
38
|
+
_MODEL_SELECTOR_DEFINITION = {
|
|
39
|
+
"choice_authority": "one presealed finite action set",
|
|
40
|
+
"model_output": "one opaque option ID plus non-authoritative rationale",
|
|
41
|
+
"materialization": "engine-owned full child",
|
|
42
|
+
"propensity": "unknown",
|
|
43
|
+
"current_outcome_access": False,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _canonical_json(value: object) -> bytes:
|
|
48
|
+
return json.dumps(
|
|
49
|
+
value,
|
|
50
|
+
ensure_ascii=True,
|
|
51
|
+
allow_nan=False,
|
|
52
|
+
separators=(",", ":"),
|
|
53
|
+
sort_keys=True,
|
|
54
|
+
).encode("ascii")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
MODEL_FINITE_ACTION_SELECTOR_DEFINITION_SHA256 = hashlib.sha256(
|
|
58
|
+
_MODEL_SELECTOR_DEFINITION_DOMAIN
|
|
59
|
+
+ _canonical_json(_MODEL_SELECTOR_DEFINITION)
|
|
60
|
+
).hexdigest()
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _telemetry_record(telemetry: AgenticCallTelemetry) -> dict[str, object]:
|
|
64
|
+
if type(telemetry) is not AgenticCallTelemetry:
|
|
65
|
+
raise TypeError("telemetry must be an exact AgenticCallTelemetry")
|
|
66
|
+
AgenticCallTelemetry.__post_init__(telemetry)
|
|
67
|
+
for name in ("provider_response_id", "finish_reason"):
|
|
68
|
+
value = getattr(telemetry, name)
|
|
69
|
+
if value is not None and type(value) is not str:
|
|
70
|
+
raise TypeError(f"telemetry {name} must be an exact string or None")
|
|
71
|
+
if telemetry.cost_usd is None:
|
|
72
|
+
cost_usd: str | None = None
|
|
73
|
+
else:
|
|
74
|
+
if type(telemetry.cost_usd) is not Decimal:
|
|
75
|
+
raise TypeError("telemetry cost_usd must be an exact Decimal or None")
|
|
76
|
+
if not telemetry.cost_usd.is_finite() or telemetry.cost_usd < 0:
|
|
77
|
+
raise ValueError("telemetry cost_usd must be finite and non-negative")
|
|
78
|
+
cost_usd = str(telemetry.cost_usd)
|
|
79
|
+
return {
|
|
80
|
+
"requested_model": telemetry.requested_model,
|
|
81
|
+
"resolved_model": telemetry.resolved_model,
|
|
82
|
+
"resolved_provider": telemetry.resolved_provider,
|
|
83
|
+
"provider_response_id": telemetry.provider_response_id,
|
|
84
|
+
"finish_reason": telemetry.finish_reason,
|
|
85
|
+
"input_tokens": telemetry.input_tokens,
|
|
86
|
+
"output_tokens": telemetry.output_tokens,
|
|
87
|
+
"reasoning_tokens": telemetry.reasoning_tokens,
|
|
88
|
+
"cache_read_tokens": telemetry.cache_read_tokens,
|
|
89
|
+
"cache_write_tokens": telemetry.cache_write_tokens,
|
|
90
|
+
"cost_usd": cost_usd,
|
|
91
|
+
"latency_ns": telemetry.latency_ns,
|
|
92
|
+
"attempt_count": telemetry.attempt_count,
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def model_finite_action_telemetry_sha256(
|
|
97
|
+
telemetry: AgenticCallTelemetry,
|
|
98
|
+
) -> str:
|
|
99
|
+
"""Hash exact call telemetry without lossy Decimal conversion."""
|
|
100
|
+
|
|
101
|
+
return hashlib.sha256(
|
|
102
|
+
_MODEL_TELEMETRY_DOMAIN + _canonical_json(_telemetry_record(telemetry))
|
|
103
|
+
).hexdigest()
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def seal_model_finite_action_decision(
|
|
107
|
+
*,
|
|
108
|
+
authority: FiniteActionSetAuthority,
|
|
109
|
+
call_id: LLMCallId,
|
|
110
|
+
prompt_sha256: str,
|
|
111
|
+
draft: FiniteVariationSelectionDraft,
|
|
112
|
+
telemetry: AgenticCallTelemetry,
|
|
113
|
+
) -> FiniteActionDecision:
|
|
114
|
+
"""Bind one model-selected ID to its exact K-option authority.
|
|
115
|
+
|
|
116
|
+
The option ordinal is derived from the authority's provider-visible order;
|
|
117
|
+
it is never accepted from the model. All validation and sealing happen
|
|
118
|
+
without current candidate outcomes.
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
if type(authority) is not FiniteActionSetAuthority:
|
|
122
|
+
raise TypeError("authority must be an exact FiniteActionSetAuthority")
|
|
123
|
+
FiniteActionSetAuthority.__post_init__(authority)
|
|
124
|
+
if type(call_id) is not LLMCallId:
|
|
125
|
+
raise TypeError("call_id must be an exact LLMCallId")
|
|
126
|
+
LLMCallId.__post_init__(call_id)
|
|
127
|
+
require_sha256(prompt_sha256, "prompt_sha256")
|
|
128
|
+
if type(draft) is not FiniteVariationSelectionDraft:
|
|
129
|
+
raise TypeError("draft must be an exact FiniteVariationSelectionDraft")
|
|
130
|
+
FiniteVariationSelectionDraft.__post_init__(draft)
|
|
131
|
+
if type(telemetry) is not AgenticCallTelemetry:
|
|
132
|
+
raise TypeError("telemetry must be an exact AgenticCallTelemetry")
|
|
133
|
+
AgenticCallTelemetry.__post_init__(telemetry)
|
|
134
|
+
|
|
135
|
+
authority_sha256_before = authority.authority_sha256
|
|
136
|
+
support_sha256_before = authority.support.support_sha256
|
|
137
|
+
support_contract = authority.support.support_contract
|
|
138
|
+
option = resolve_finite_variation_selection(support_contract, draft)
|
|
139
|
+
matching_ordinals = tuple(
|
|
140
|
+
ordinal
|
|
141
|
+
for ordinal, row in enumerate(authority.support.options)
|
|
142
|
+
if (
|
|
143
|
+
row.option.option_id == option.option_id
|
|
144
|
+
and row.option.identity_sha256 == option.identity_sha256
|
|
145
|
+
)
|
|
146
|
+
)
|
|
147
|
+
if len(matching_ordinals) != 1:
|
|
148
|
+
raise ValueError("selected option has no unique authority ordinal")
|
|
149
|
+
selected_ordinal = matching_ordinals[0]
|
|
150
|
+
row = authority.support.options[selected_ordinal]
|
|
151
|
+
decision = FiniteActionDecision(
|
|
152
|
+
authority_sha256=authority.authority_sha256,
|
|
153
|
+
support_sha256=authority.support.support_sha256,
|
|
154
|
+
selector_kind=FiniteActionSelectorKind.MODEL,
|
|
155
|
+
selected_ordinal=selected_ordinal,
|
|
156
|
+
option_id=row.option.option_id,
|
|
157
|
+
option_identity_sha256=row.option.identity_sha256,
|
|
158
|
+
child_configuration_sha256=row.option.child_configuration_sha256,
|
|
159
|
+
phenotype_identity_sha256=row.phenotype_identity_sha256,
|
|
160
|
+
selector_policy_id=MODEL_FINITE_ACTION_SELECTOR_POLICY_ID,
|
|
161
|
+
selector_policy_version=MODEL_FINITE_ACTION_SELECTOR_POLICY_VERSION,
|
|
162
|
+
selector_definition_sha256=(
|
|
163
|
+
MODEL_FINITE_ACTION_SELECTOR_DEFINITION_SHA256
|
|
164
|
+
),
|
|
165
|
+
prospective_token_sha256=None,
|
|
166
|
+
model_call_id=call_id,
|
|
167
|
+
model_prompt_sha256=prompt_sha256,
|
|
168
|
+
model_telemetry_sha256=model_finite_action_telemetry_sha256(telemetry),
|
|
169
|
+
propensity_numerator=None,
|
|
170
|
+
propensity_denominator=None,
|
|
171
|
+
current_outcome_access=False,
|
|
172
|
+
)
|
|
173
|
+
if (
|
|
174
|
+
authority.authority_sha256 != authority_sha256_before
|
|
175
|
+
or authority.support.support_sha256 != support_sha256_before
|
|
176
|
+
):
|
|
177
|
+
raise ValueError("finite action authority changed during model sealing")
|
|
178
|
+
validate_finite_action_decision(authority, decision)
|
|
179
|
+
return decision
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
__all__ = [
|
|
183
|
+
"MODEL_FINITE_ACTION_SELECTOR_DEFINITION_SHA256",
|
|
184
|
+
"MODEL_FINITE_ACTION_SELECTOR_POLICY_ID",
|
|
185
|
+
"MODEL_FINITE_ACTION_SELECTOR_POLICY_VERSION",
|
|
186
|
+
"model_finite_action_telemetry_sha256",
|
|
187
|
+
"seal_model_finite_action_decision",
|
|
188
|
+
]
|