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,254 @@
|
|
|
1
|
+
"""Generic campaign boundary for filling an under-realized candidate stage."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import hashlib
|
|
6
|
+
import json
|
|
7
|
+
import re
|
|
8
|
+
from dataclasses import dataclass, field
|
|
9
|
+
from typing import Protocol, runtime_checkable
|
|
10
|
+
|
|
11
|
+
from agent_evolve.application.agentic_evolution import EvolutionCandidate
|
|
12
|
+
from agent_evolve.application.budgeted_optimizer import OptimizerState
|
|
13
|
+
from agent_evolve.domain.patch import require_sha256
|
|
14
|
+
from agent_evolve.domain.typed_json import (
|
|
15
|
+
FrozenJsonObject,
|
|
16
|
+
freeze_json,
|
|
17
|
+
thaw_json,
|
|
18
|
+
typed_json_sha256,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
_TOKEN = re.compile(r"^[a-z][a-z0-9_.:-]{0,127}$")
|
|
23
|
+
_REQUEST_DOMAIN = b"agent-evolve:campaign-capacity-recourse-request:v1\x00"
|
|
24
|
+
_RESULT_DOMAIN = b"agent-evolve:campaign-capacity-recourse-result:v1\x00"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _canonical_json(value: object) -> bytes:
|
|
28
|
+
return json.dumps(
|
|
29
|
+
value,
|
|
30
|
+
allow_nan=False,
|
|
31
|
+
ensure_ascii=True,
|
|
32
|
+
separators=(",", ":"),
|
|
33
|
+
sort_keys=True,
|
|
34
|
+
).encode("ascii", errors="strict")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _candidate_record(candidate: EvolutionCandidate) -> dict[str, object]:
|
|
38
|
+
EvolutionCandidate.__post_init__(candidate)
|
|
39
|
+
return {
|
|
40
|
+
"candidate_id": candidate.candidate_id.value,
|
|
41
|
+
"configuration_sha256": candidate.occurrence.configuration_hash,
|
|
42
|
+
"generation": candidate.generation,
|
|
43
|
+
"valid": candidate.valid,
|
|
44
|
+
"objectives": [
|
|
45
|
+
{"metric_id": key, "value_hex": value.hex()}
|
|
46
|
+
for key, value in candidate.objectives
|
|
47
|
+
],
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _policy_identity(
|
|
52
|
+
port: "CampaignCapacityRecoursePort",
|
|
53
|
+
) -> tuple[str, int, str]:
|
|
54
|
+
if not isinstance(port, CampaignCapacityRecoursePort):
|
|
55
|
+
raise TypeError("capacity recourse must implement its port")
|
|
56
|
+
values = (
|
|
57
|
+
getattr(port, "policy_id", None),
|
|
58
|
+
getattr(port, "policy_version", None),
|
|
59
|
+
getattr(port, "definition_sha256", None),
|
|
60
|
+
)
|
|
61
|
+
if type(values[0]) is not str or _TOKEN.fullmatch(values[0]) is None:
|
|
62
|
+
raise ValueError("capacity recourse policy_id has invalid syntax")
|
|
63
|
+
if type(values[1]) is not int or values[1] <= 0:
|
|
64
|
+
raise ValueError("capacity recourse policy_version must be positive")
|
|
65
|
+
require_sha256(values[2], "capacity recourse definition_sha256")
|
|
66
|
+
return values # type: ignore[return-value]
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@dataclass(frozen=True, slots=True)
|
|
70
|
+
class CampaignCapacityRecourseRequest:
|
|
71
|
+
campaign_scope_sha256: str
|
|
72
|
+
preparation_sha256: str
|
|
73
|
+
stage_request_sha256: str
|
|
74
|
+
generation: int
|
|
75
|
+
planned_candidate_occurrences: int
|
|
76
|
+
realized_candidate_occurrences: int
|
|
77
|
+
state: OptimizerState
|
|
78
|
+
request_sha256: str = field(init=False, default="")
|
|
79
|
+
|
|
80
|
+
def __post_init__(self) -> None:
|
|
81
|
+
require_sha256(self.campaign_scope_sha256, "campaign_scope_sha256")
|
|
82
|
+
require_sha256(self.preparation_sha256, "preparation_sha256")
|
|
83
|
+
require_sha256(self.stage_request_sha256, "stage_request_sha256")
|
|
84
|
+
if type(self.generation) is not int or self.generation <= 0:
|
|
85
|
+
raise ValueError("generation must be positive")
|
|
86
|
+
for name in (
|
|
87
|
+
"planned_candidate_occurrences",
|
|
88
|
+
"realized_candidate_occurrences",
|
|
89
|
+
):
|
|
90
|
+
value = getattr(self, name)
|
|
91
|
+
if type(value) is not int or value < 0:
|
|
92
|
+
raise ValueError(f"{name} must be non-negative")
|
|
93
|
+
if self.realized_candidate_occurrences >= self.planned_candidate_occurrences:
|
|
94
|
+
raise ValueError("capacity recourse requires a strictly underfilled stage")
|
|
95
|
+
if type(self.state) is not OptimizerState:
|
|
96
|
+
raise TypeError("state must be an exact OptimizerState")
|
|
97
|
+
OptimizerState.__post_init__(self.state)
|
|
98
|
+
if self.state.generation != self.generation:
|
|
99
|
+
raise ValueError("optimizer state generation differs from recourse stage")
|
|
100
|
+
computed = hashlib.sha256(
|
|
101
|
+
_REQUEST_DOMAIN + _canonical_json(self._unsigned_record())
|
|
102
|
+
).hexdigest()
|
|
103
|
+
if self.request_sha256 not in ("", computed):
|
|
104
|
+
raise ValueError("request_sha256 does not authenticate the request")
|
|
105
|
+
object.__setattr__(self, "request_sha256", computed)
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def missing_candidate_occurrences(self) -> int:
|
|
109
|
+
return self.planned_candidate_occurrences - self.realized_candidate_occurrences
|
|
110
|
+
|
|
111
|
+
def _unsigned_record(self) -> dict[str, object]:
|
|
112
|
+
return {
|
|
113
|
+
"schema_version": 1,
|
|
114
|
+
"campaign_scope_sha256": self.campaign_scope_sha256,
|
|
115
|
+
"preparation_sha256": self.preparation_sha256,
|
|
116
|
+
"stage_request_sha256": self.stage_request_sha256,
|
|
117
|
+
"generation": self.generation,
|
|
118
|
+
"planned_candidate_occurrences": self.planned_candidate_occurrences,
|
|
119
|
+
"realized_candidate_occurrences": self.realized_candidate_occurrences,
|
|
120
|
+
"missing_candidate_occurrences": self.missing_candidate_occurrences,
|
|
121
|
+
"state": {
|
|
122
|
+
"archive_snapshot_hash": self.state.archive_snapshot_hash,
|
|
123
|
+
"unique_evaluations": self.state.unique_evaluations,
|
|
124
|
+
"logical_llm_calls": self.state.logical_llm_calls,
|
|
125
|
+
"candidates": [_candidate_record(value) for value in self.state.candidates],
|
|
126
|
+
},
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
def to_record(self) -> dict[str, object]:
|
|
130
|
+
self.__post_init__()
|
|
131
|
+
return {**self._unsigned_record(), "request_sha256": self.request_sha256}
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
@dataclass(frozen=True, slots=True)
|
|
135
|
+
class CampaignCapacityRecourseResult:
|
|
136
|
+
request_sha256: str
|
|
137
|
+
policy_id: str
|
|
138
|
+
policy_version: int
|
|
139
|
+
policy_definition_sha256: str
|
|
140
|
+
candidates: tuple[EvolutionCandidate, ...]
|
|
141
|
+
evidence: FrozenJsonObject
|
|
142
|
+
result_sha256: str = field(init=False, default="")
|
|
143
|
+
|
|
144
|
+
def __post_init__(self) -> None:
|
|
145
|
+
require_sha256(self.request_sha256, "request_sha256")
|
|
146
|
+
if type(self.policy_id) is not str or _TOKEN.fullmatch(self.policy_id) is None:
|
|
147
|
+
raise ValueError("policy_id has invalid syntax")
|
|
148
|
+
if type(self.policy_version) is not int or self.policy_version <= 0:
|
|
149
|
+
raise ValueError("policy_version must be positive")
|
|
150
|
+
require_sha256(self.policy_definition_sha256, "policy_definition_sha256")
|
|
151
|
+
if type(self.candidates) is not tuple or not self.candidates:
|
|
152
|
+
raise ValueError("capacity recourse must return a non-empty exact tuple")
|
|
153
|
+
if any(type(value) is not EvolutionCandidate for value in self.candidates):
|
|
154
|
+
raise TypeError("capacity recourse candidates must be exact")
|
|
155
|
+
for value in self.candidates:
|
|
156
|
+
EvolutionCandidate.__post_init__(value)
|
|
157
|
+
if len({value.candidate_id for value in self.candidates}) != len(self.candidates):
|
|
158
|
+
raise ValueError("capacity recourse candidate IDs must be unique")
|
|
159
|
+
if len({value.occurrence.configuration_hash for value in self.candidates}) != len(
|
|
160
|
+
self.candidates
|
|
161
|
+
):
|
|
162
|
+
raise ValueError("capacity recourse configurations must be unique")
|
|
163
|
+
if type(self.evidence) is not FrozenJsonObject or freeze_json(self.evidence) is not self.evidence:
|
|
164
|
+
raise TypeError("evidence must be a frozen typed-JSON object")
|
|
165
|
+
computed = hashlib.sha256(
|
|
166
|
+
_RESULT_DOMAIN + _canonical_json(self._unsigned_record())
|
|
167
|
+
).hexdigest()
|
|
168
|
+
if self.result_sha256 not in ("", computed):
|
|
169
|
+
raise ValueError("result_sha256 does not authenticate the result")
|
|
170
|
+
object.__setattr__(self, "result_sha256", computed)
|
|
171
|
+
|
|
172
|
+
def _unsigned_record(self) -> dict[str, object]:
|
|
173
|
+
return {
|
|
174
|
+
"schema_version": 1,
|
|
175
|
+
"request_sha256": self.request_sha256,
|
|
176
|
+
"policy": {
|
|
177
|
+
"policy_id": self.policy_id,
|
|
178
|
+
"policy_version": self.policy_version,
|
|
179
|
+
"definition_sha256": self.policy_definition_sha256,
|
|
180
|
+
},
|
|
181
|
+
"candidates": [_candidate_record(value) for value in self.candidates],
|
|
182
|
+
"evidence": thaw_json(self.evidence),
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
def to_record(self) -> dict[str, object]:
|
|
186
|
+
self.__post_init__()
|
|
187
|
+
return {**self._unsigned_record(), "result_sha256": self.result_sha256}
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
@runtime_checkable
|
|
191
|
+
class CampaignCapacityRecoursePort(Protocol):
|
|
192
|
+
"""Fill every requested stage occurrence from the current optimizer state."""
|
|
193
|
+
|
|
194
|
+
policy_id: str
|
|
195
|
+
policy_version: int
|
|
196
|
+
definition_sha256: str
|
|
197
|
+
|
|
198
|
+
async def fill(
|
|
199
|
+
self,
|
|
200
|
+
request: CampaignCapacityRecourseRequest,
|
|
201
|
+
) -> CampaignCapacityRecourseResult: ...
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def validate_campaign_capacity_recourse_result(
|
|
205
|
+
*,
|
|
206
|
+
port: CampaignCapacityRecoursePort,
|
|
207
|
+
request: CampaignCapacityRecourseRequest,
|
|
208
|
+
result: CampaignCapacityRecourseResult,
|
|
209
|
+
) -> None:
|
|
210
|
+
identity = _policy_identity(port)
|
|
211
|
+
if type(request) is not CampaignCapacityRecourseRequest:
|
|
212
|
+
raise TypeError("request must be exact")
|
|
213
|
+
request.__post_init__()
|
|
214
|
+
if type(result) is not CampaignCapacityRecourseResult:
|
|
215
|
+
raise TypeError("capacity recourse returned a foreign result")
|
|
216
|
+
result.__post_init__()
|
|
217
|
+
if result.request_sha256 != request.request_sha256:
|
|
218
|
+
raise ValueError("capacity recourse result targets another request")
|
|
219
|
+
if (
|
|
220
|
+
result.policy_id,
|
|
221
|
+
result.policy_version,
|
|
222
|
+
result.policy_definition_sha256,
|
|
223
|
+
) != identity:
|
|
224
|
+
raise ValueError("capacity recourse result has a foreign policy identity")
|
|
225
|
+
if len(result.candidates) != request.missing_candidate_occurrences:
|
|
226
|
+
raise ValueError("capacity recourse did not fill every missing occurrence")
|
|
227
|
+
if any(value.generation != request.generation for value in result.candidates):
|
|
228
|
+
raise ValueError("capacity recourse candidate has the wrong generation")
|
|
229
|
+
known_ids = {value.candidate_id for value in request.state.candidates}
|
|
230
|
+
known_configurations = {
|
|
231
|
+
value.occurrence.configuration_hash for value in request.state.candidates
|
|
232
|
+
}
|
|
233
|
+
if any(value.candidate_id in known_ids for value in result.candidates):
|
|
234
|
+
raise ValueError("capacity recourse repeated a known candidate occurrence")
|
|
235
|
+
if any(
|
|
236
|
+
value.occurrence.configuration_hash in known_configurations
|
|
237
|
+
for value in result.candidates
|
|
238
|
+
):
|
|
239
|
+
raise ValueError("capacity recourse repeated an evaluated configuration")
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def validate_campaign_capacity_recourse_port(
|
|
243
|
+
port: CampaignCapacityRecoursePort,
|
|
244
|
+
) -> tuple[str, int, str]:
|
|
245
|
+
return _policy_identity(port)
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
__all__ = [
|
|
249
|
+
"CampaignCapacityRecoursePort",
|
|
250
|
+
"CampaignCapacityRecourseRequest",
|
|
251
|
+
"CampaignCapacityRecourseResult",
|
|
252
|
+
"validate_campaign_capacity_recourse_port",
|
|
253
|
+
"validate_campaign_capacity_recourse_result",
|
|
254
|
+
]
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"""Campaign adapter for parent-aware empirical outcome history.
|
|
2
|
+
|
|
3
|
+
The outcome ledger is deliberately independent from campaign execution. This
|
|
4
|
+
adapter joins the two at the last safe point before a selector request is
|
|
5
|
+
built: it derives lineage and currently available action families from the
|
|
6
|
+
authenticated campaign context, performs a prior-only query, and returns the
|
|
7
|
+
bounded prompt projection expected by ``CampaignPortfolioContextEnricher``.
|
|
8
|
+
|
|
9
|
+
No objective name, workload, model, or provider is encoded here. Workloads
|
|
10
|
+
with a stronger structural similarity notion may inject an exact relevance
|
|
11
|
+
resolver without replacing the retrieval or audit boundary.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from dataclasses import dataclass
|
|
17
|
+
from typing import Protocol, runtime_checkable
|
|
18
|
+
|
|
19
|
+
from agent_evolve.application.portfolio_campaign_runtime import (
|
|
20
|
+
CampaignPortfolioWaveContext,
|
|
21
|
+
)
|
|
22
|
+
from agent_evolve.application.portfolio_outcome_feedback import (
|
|
23
|
+
ContextualOutcomeQuery,
|
|
24
|
+
PortfolioOutcomeFeedbackLedger,
|
|
25
|
+
)
|
|
26
|
+
from agent_evolve.domain.typed_json import FrozenJsonObject
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@runtime_checkable
|
|
30
|
+
class CampaignOutcomeRelevanceResolver(Protocol):
|
|
31
|
+
"""Return canonical family/path filters for one prospective wave."""
|
|
32
|
+
|
|
33
|
+
def resolve(
|
|
34
|
+
self,
|
|
35
|
+
context: CampaignPortfolioWaveContext,
|
|
36
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]: ...
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@dataclass(frozen=True, slots=True)
|
|
40
|
+
class AvailableFamilyOutcomeRelevance:
|
|
41
|
+
"""Portable default: compare actions from families available to this parent."""
|
|
42
|
+
|
|
43
|
+
def resolve(
|
|
44
|
+
self,
|
|
45
|
+
context: CampaignPortfolioWaveContext,
|
|
46
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
47
|
+
if type(context) is not CampaignPortfolioWaveContext:
|
|
48
|
+
raise TypeError("context must be an exact CampaignPortfolioWaveContext")
|
|
49
|
+
CampaignPortfolioWaveContext.__post_init__(context)
|
|
50
|
+
families = tuple(
|
|
51
|
+
sorted({option.family for option in context.variation.contract.options})
|
|
52
|
+
)
|
|
53
|
+
if not families:
|
|
54
|
+
raise ValueError("eligible variation contract contains no action family")
|
|
55
|
+
return families, ()
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@dataclass(slots=True)
|
|
59
|
+
class ContextualOutcomeCampaignEnricher:
|
|
60
|
+
"""Expose bounded prior outcomes with explicit transfer distance.
|
|
61
|
+
|
|
62
|
+
The returned object contains no card identity or model rationale. Exact
|
|
63
|
+
same-parent evidence is ranked first, then direct-lineage evidence. When
|
|
64
|
+
explicitly enabled, clearly labelled cross-lineage analogies rank last.
|
|
65
|
+
The campaign runtime attaches it under its reserved contextual-history key.
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
ledger: PortfolioOutcomeFeedbackLedger
|
|
69
|
+
max_actions: int = 24
|
|
70
|
+
include_cross_lineage_analogies: bool = False
|
|
71
|
+
relevance: CampaignOutcomeRelevanceResolver = AvailableFamilyOutcomeRelevance()
|
|
72
|
+
|
|
73
|
+
def __post_init__(self) -> None:
|
|
74
|
+
if type(self.ledger) is not PortfolioOutcomeFeedbackLedger:
|
|
75
|
+
raise TypeError("ledger must be an exact PortfolioOutcomeFeedbackLedger")
|
|
76
|
+
if type(self.max_actions) is not int or self.max_actions <= 0:
|
|
77
|
+
raise ValueError("max_actions must be a positive exact integer")
|
|
78
|
+
if type(self.include_cross_lineage_analogies) is not bool:
|
|
79
|
+
raise TypeError("include_cross_lineage_analogies must be an exact boolean")
|
|
80
|
+
if not isinstance(self.relevance, CampaignOutcomeRelevanceResolver):
|
|
81
|
+
raise TypeError("relevance must implement CampaignOutcomeRelevanceResolver")
|
|
82
|
+
|
|
83
|
+
@staticmethod
|
|
84
|
+
def _lineage(context: CampaignPortfolioWaveContext) -> tuple[str, ...]:
|
|
85
|
+
parent = context.parent
|
|
86
|
+
values = {value.value for value in parent.parent_ids}
|
|
87
|
+
if parent.common_ancestor_id is not None:
|
|
88
|
+
values.add(parent.common_ancestor_id.value)
|
|
89
|
+
return tuple(sorted(values))
|
|
90
|
+
|
|
91
|
+
def enrich(
|
|
92
|
+
self,
|
|
93
|
+
context: CampaignPortfolioWaveContext,
|
|
94
|
+
) -> FrozenJsonObject:
|
|
95
|
+
self.__post_init__()
|
|
96
|
+
if type(context) is not CampaignPortfolioWaveContext:
|
|
97
|
+
raise TypeError("context must be an exact CampaignPortfolioWaveContext")
|
|
98
|
+
CampaignPortfolioWaveContext.__post_init__(context)
|
|
99
|
+
families, changed_paths = self.relevance.resolve(context)
|
|
100
|
+
query = ContextualOutcomeQuery(
|
|
101
|
+
current_parent_candidate_id=context.parent.candidate_id.value,
|
|
102
|
+
current_parent_configuration_sha256=(
|
|
103
|
+
context.parent.occurrence.configuration_hash
|
|
104
|
+
),
|
|
105
|
+
cutoff_wave_index_exclusive=context.stage_request.step.generation,
|
|
106
|
+
lineage_candidate_ids=self._lineage(context),
|
|
107
|
+
families=families,
|
|
108
|
+
changed_paths=changed_paths,
|
|
109
|
+
max_actions=self.max_actions,
|
|
110
|
+
include_cross_lineage_analogies=(self.include_cross_lineage_analogies),
|
|
111
|
+
)
|
|
112
|
+
return self.ledger.contextual_history(query).to_prompt_record()
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
__all__ = [
|
|
116
|
+
"AvailableFamilyOutcomeRelevance",
|
|
117
|
+
"CampaignOutcomeRelevanceResolver",
|
|
118
|
+
"ContextualOutcomeCampaignEnricher",
|
|
119
|
+
]
|