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,398 @@
|
|
|
1
|
+
"""Provenance-bound optional workload prompting and ablation views.
|
|
2
|
+
|
|
3
|
+
AgentEvolve's behavioral workflow remains workload-neutral. A benchmark may,
|
|
4
|
+
however, publish static domain semantics that were frozen before an optimization
|
|
5
|
+
campaign: metric meanings, candidate-field semantics, legal invariants, action
|
|
6
|
+
semantics, or general reasoning guidance. These facts are context, not measured
|
|
7
|
+
search evidence, and must never be assembled from evaluator outcomes or prior
|
|
8
|
+
campaign traces.
|
|
9
|
+
|
|
10
|
+
The extension is deliberately a typed-JSON view rather than a free callback.
|
|
11
|
+
This makes its exact bytes precommittable, keeps it inside the existing request
|
|
12
|
+
and prompt hashes, and supports three explicit experimental arms:
|
|
13
|
+
|
|
14
|
+
``SCHEMA_ONLY``
|
|
15
|
+
Omit the extension entirely.
|
|
16
|
+
``SEMANTIC``
|
|
17
|
+
Render the workload-authored semantic payload.
|
|
18
|
+
``MATCHED_CONTROL``
|
|
19
|
+
Render an optional workload-authored structure-matched control payload,
|
|
20
|
+
typically with stable opaque labels or neutral wording.
|
|
21
|
+
|
|
22
|
+
The API can enforce provenance declarations and structural matching. It
|
|
23
|
+
cannot prove that prose was written honestly; confirmatory experiments must
|
|
24
|
+
still freeze source artifacts and prompt bytes before optimizer outcomes.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from __future__ import annotations
|
|
28
|
+
|
|
29
|
+
import hashlib
|
|
30
|
+
import json
|
|
31
|
+
import re
|
|
32
|
+
from dataclasses import dataclass, field
|
|
33
|
+
from enum import Enum
|
|
34
|
+
|
|
35
|
+
from agent_evolve.domain.typed_json import (
|
|
36
|
+
FrozenJsonArray,
|
|
37
|
+
FrozenJsonObject,
|
|
38
|
+
freeze_json,
|
|
39
|
+
thaw_json,
|
|
40
|
+
typed_json_sha256,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
WORKLOAD_PROMPT_EXTENSION_CONTEXT_KEY = "workload_prompt_extension"
|
|
45
|
+
|
|
46
|
+
_TOKEN = re.compile(r"^[a-z][a-z0-9_.-]{0,127}$")
|
|
47
|
+
_LOWER_SHA256 = frozenset("0123456789abcdef")
|
|
48
|
+
_MAX_PAYLOAD_BYTES = 65_536
|
|
49
|
+
_PROVENANCE_DOMAIN = b"agent-evolve:workload-prompt-provenance:v1\x00"
|
|
50
|
+
_EXTENSION_DOMAIN = b"agent-evolve:workload-prompt-extension:v1\x00"
|
|
51
|
+
_VIEW_DOMAIN = b"agent-evolve:workload-prompt-extension-view:v1\x00"
|
|
52
|
+
|
|
53
|
+
_ALLOWED_PAYLOAD_KEYS = frozenset(
|
|
54
|
+
{
|
|
55
|
+
"action_semantics",
|
|
56
|
+
"candidate_semantics",
|
|
57
|
+
"constraints_and_invariants",
|
|
58
|
+
"domain_context",
|
|
59
|
+
"metric_semantics",
|
|
60
|
+
"reasoning_guidance",
|
|
61
|
+
"reference_facts",
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _canonical_bytes(value: object) -> bytes:
|
|
67
|
+
return json.dumps(
|
|
68
|
+
value,
|
|
69
|
+
allow_nan=False,
|
|
70
|
+
ensure_ascii=True,
|
|
71
|
+
separators=(",", ":"),
|
|
72
|
+
sort_keys=True,
|
|
73
|
+
).encode("ascii", errors="strict")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _sha256(domain: bytes, value: object) -> str:
|
|
77
|
+
return hashlib.sha256(domain + _canonical_bytes(value)).hexdigest()
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _require_sha256(value: object, *, name: str) -> str:
|
|
81
|
+
if (
|
|
82
|
+
type(value) is not str
|
|
83
|
+
or len(value) != 64
|
|
84
|
+
or any(character not in _LOWER_SHA256 for character in value)
|
|
85
|
+
):
|
|
86
|
+
raise ValueError(f"{name} must be a lowercase SHA-256 digest")
|
|
87
|
+
return value
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _require_token(value: object, *, name: str) -> str:
|
|
91
|
+
if type(value) is not str or _TOKEN.fullmatch(value) is None:
|
|
92
|
+
raise ValueError(f"{name} must use the closed lowercase token grammar")
|
|
93
|
+
return value
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _payload_shape(value: object) -> object:
|
|
97
|
+
"""Return a value-free recursive shape for a matched prompt control."""
|
|
98
|
+
|
|
99
|
+
if type(value) is FrozenJsonObject:
|
|
100
|
+
return {
|
|
101
|
+
key: _payload_shape(child)
|
|
102
|
+
for key, child in value.items
|
|
103
|
+
}
|
|
104
|
+
if type(value) is FrozenJsonArray:
|
|
105
|
+
return [_payload_shape(child) for child in value.items]
|
|
106
|
+
if value is None:
|
|
107
|
+
return "null"
|
|
108
|
+
if type(value) is bool:
|
|
109
|
+
return "bool"
|
|
110
|
+
if type(value) is int:
|
|
111
|
+
return "int"
|
|
112
|
+
if type(value) is float:
|
|
113
|
+
return "float"
|
|
114
|
+
if type(value) is str:
|
|
115
|
+
return "string"
|
|
116
|
+
raise TypeError("prompt payload escaped frozen typed JSON")
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def _validate_payload(value: object, *, name: str) -> FrozenJsonObject:
|
|
120
|
+
if type(value) is not FrozenJsonObject or freeze_json(value) is not value:
|
|
121
|
+
raise TypeError(f"{name} must be an exact frozen typed-JSON object")
|
|
122
|
+
if not value.items:
|
|
123
|
+
raise ValueError(f"{name} must not be empty")
|
|
124
|
+
unknown = {key for key, _ in value.items} - _ALLOWED_PAYLOAD_KEYS
|
|
125
|
+
if unknown:
|
|
126
|
+
raise ValueError(
|
|
127
|
+
f"{name} contains unsupported top-level keys: "
|
|
128
|
+
+ ",".join(sorted(unknown))
|
|
129
|
+
)
|
|
130
|
+
size = len(_canonical_bytes(thaw_json(value)))
|
|
131
|
+
if size > _MAX_PAYLOAD_BYTES:
|
|
132
|
+
raise ValueError(
|
|
133
|
+
f"{name} exceeds the {_MAX_PAYLOAD_BYTES}-byte static prompt limit"
|
|
134
|
+
)
|
|
135
|
+
return value
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class WorkloadPromptSourceKind(str, Enum):
|
|
139
|
+
"""Closed provenance classes that predate campaign outcomes."""
|
|
140
|
+
|
|
141
|
+
BENCHMARK_SPECIFICATION = "benchmark_specification"
|
|
142
|
+
PREEXISTING_DOMAIN_KNOWLEDGE = "preexisting_domain_knowledge"
|
|
143
|
+
PUBLIC_REFERENCE = "public_reference"
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class WorkloadPromptArm(str, Enum):
|
|
147
|
+
"""Prospective arms for the workload-semantics ablation."""
|
|
148
|
+
|
|
149
|
+
SCHEMA_ONLY = "schema_only"
|
|
150
|
+
SEMANTIC = "semantic"
|
|
151
|
+
MATCHED_CONTROL = "matched_control"
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
@dataclass(frozen=True, slots=True)
|
|
155
|
+
class WorkloadPromptProvenance:
|
|
156
|
+
"""Fail-closed declaration for static, outcome-free prompt knowledge."""
|
|
157
|
+
|
|
158
|
+
source_kind: WorkloadPromptSourceKind
|
|
159
|
+
source_artifact_sha256s: tuple[str, ...]
|
|
160
|
+
frozen_before_campaign: bool = True
|
|
161
|
+
evaluator_outcomes_accessed: bool = False
|
|
162
|
+
campaign_traces_accessed: bool = False
|
|
163
|
+
tuned_on_benchmark_outcomes: bool = False
|
|
164
|
+
|
|
165
|
+
def __post_init__(self) -> None:
|
|
166
|
+
if type(self.source_kind) is not WorkloadPromptSourceKind:
|
|
167
|
+
raise TypeError("source_kind must be an exact WorkloadPromptSourceKind")
|
|
168
|
+
if (
|
|
169
|
+
type(self.source_artifact_sha256s) is not tuple
|
|
170
|
+
or not self.source_artifact_sha256s
|
|
171
|
+
):
|
|
172
|
+
raise ValueError("source_artifact_sha256s must be a non-empty tuple")
|
|
173
|
+
for value in self.source_artifact_sha256s:
|
|
174
|
+
_require_sha256(value, name="source_artifact_sha256")
|
|
175
|
+
if self.source_artifact_sha256s != tuple(
|
|
176
|
+
sorted(set(self.source_artifact_sha256s))
|
|
177
|
+
):
|
|
178
|
+
raise ValueError("source artifact hashes must be unique and canonical")
|
|
179
|
+
for name in (
|
|
180
|
+
"frozen_before_campaign",
|
|
181
|
+
"evaluator_outcomes_accessed",
|
|
182
|
+
"campaign_traces_accessed",
|
|
183
|
+
"tuned_on_benchmark_outcomes",
|
|
184
|
+
):
|
|
185
|
+
if type(getattr(self, name)) is not bool:
|
|
186
|
+
raise TypeError(f"{name} must be an exact bool")
|
|
187
|
+
if not self.frozen_before_campaign:
|
|
188
|
+
raise ValueError("workload prompt knowledge must be frozen before campaign")
|
|
189
|
+
if self.evaluator_outcomes_accessed:
|
|
190
|
+
raise ValueError("workload prompt knowledge cannot access evaluator outcomes")
|
|
191
|
+
if self.campaign_traces_accessed:
|
|
192
|
+
raise ValueError("workload prompt knowledge cannot access campaign traces")
|
|
193
|
+
if self.tuned_on_benchmark_outcomes:
|
|
194
|
+
raise ValueError("workload prompt knowledge cannot be outcome-tuned")
|
|
195
|
+
|
|
196
|
+
def to_record(self) -> dict[str, object]:
|
|
197
|
+
self.__post_init__()
|
|
198
|
+
return {
|
|
199
|
+
"schema_version": 1,
|
|
200
|
+
"source_kind": self.source_kind.value,
|
|
201
|
+
"source_artifact_sha256s": list(self.source_artifact_sha256s),
|
|
202
|
+
"frozen_before_campaign": self.frozen_before_campaign,
|
|
203
|
+
"evaluator_outcomes_accessed": self.evaluator_outcomes_accessed,
|
|
204
|
+
"campaign_traces_accessed": self.campaign_traces_accessed,
|
|
205
|
+
"tuned_on_benchmark_outcomes": self.tuned_on_benchmark_outcomes,
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
@property
|
|
209
|
+
def provenance_sha256(self) -> str:
|
|
210
|
+
return _sha256(_PROVENANCE_DOMAIN, self.to_record())
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
@dataclass(frozen=True, slots=True)
|
|
214
|
+
class WorkloadPromptExtensionView:
|
|
215
|
+
"""One immutable model-visible arm derived from a complete extension."""
|
|
216
|
+
|
|
217
|
+
extension_id: str
|
|
218
|
+
extension_version: int
|
|
219
|
+
extension_definition_sha256: str
|
|
220
|
+
arm: WorkloadPromptArm
|
|
221
|
+
payload: FrozenJsonObject
|
|
222
|
+
provenance: WorkloadPromptProvenance
|
|
223
|
+
payload_sha256: str = field(init=False)
|
|
224
|
+
view_sha256: str = field(init=False)
|
|
225
|
+
|
|
226
|
+
def __post_init__(self) -> None:
|
|
227
|
+
_require_token(self.extension_id, name="extension_id")
|
|
228
|
+
if type(self.extension_version) is not int or self.extension_version <= 0:
|
|
229
|
+
raise ValueError("extension_version must be a positive exact integer")
|
|
230
|
+
_require_sha256(
|
|
231
|
+
self.extension_definition_sha256,
|
|
232
|
+
name="extension_definition_sha256",
|
|
233
|
+
)
|
|
234
|
+
if self.arm not in {
|
|
235
|
+
WorkloadPromptArm.SEMANTIC,
|
|
236
|
+
WorkloadPromptArm.MATCHED_CONTROL,
|
|
237
|
+
}:
|
|
238
|
+
raise ValueError("a rendered extension view must use a visible arm")
|
|
239
|
+
_validate_payload(self.payload, name="payload")
|
|
240
|
+
if type(self.provenance) is not WorkloadPromptProvenance:
|
|
241
|
+
raise TypeError("provenance must be exact WorkloadPromptProvenance")
|
|
242
|
+
WorkloadPromptProvenance.__post_init__(self.provenance)
|
|
243
|
+
payload_sha256 = typed_json_sha256(self.payload)
|
|
244
|
+
object.__setattr__(self, "payload_sha256", payload_sha256)
|
|
245
|
+
object.__setattr__(
|
|
246
|
+
self,
|
|
247
|
+
"view_sha256",
|
|
248
|
+
_sha256(_VIEW_DOMAIN, self._unsigned_binding_record()),
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
def _unsigned_binding_record(self) -> dict[str, object]:
|
|
252
|
+
return {
|
|
253
|
+
"schema_version": 1,
|
|
254
|
+
"extension_id": self.extension_id,
|
|
255
|
+
"extension_version": self.extension_version,
|
|
256
|
+
"extension_definition_sha256": self.extension_definition_sha256,
|
|
257
|
+
"arm": self.arm.value,
|
|
258
|
+
"payload_sha256": typed_json_sha256(self.payload),
|
|
259
|
+
"provenance_sha256": self.provenance.provenance_sha256,
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
def to_binding_record(self) -> dict[str, object]:
|
|
263
|
+
self.__post_init__()
|
|
264
|
+
return {
|
|
265
|
+
**self._unsigned_binding_record(),
|
|
266
|
+
"provenance": self.provenance.to_record(),
|
|
267
|
+
"view_sha256": self.view_sha256,
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
def to_prompt_record(self) -> dict[str, object]:
|
|
271
|
+
"""Return the explicit static-context record rendered to the model."""
|
|
272
|
+
|
|
273
|
+
self.__post_init__()
|
|
274
|
+
return {
|
|
275
|
+
"schema_version": 1,
|
|
276
|
+
"extension_id": self.extension_id,
|
|
277
|
+
"extension_version": self.extension_version,
|
|
278
|
+
"extension_definition_sha256": self.extension_definition_sha256,
|
|
279
|
+
"arm": self.arm.value,
|
|
280
|
+
"view_sha256": self.view_sha256,
|
|
281
|
+
"payload": thaw_json(self.payload),
|
|
282
|
+
"evidence_status": (
|
|
283
|
+
"static_preoptimization_context_not_measured_search_evidence"
|
|
284
|
+
),
|
|
285
|
+
"provenance": {
|
|
286
|
+
"source_kind": self.provenance.source_kind.value,
|
|
287
|
+
"source_artifact_sha256s": list(
|
|
288
|
+
self.provenance.source_artifact_sha256s
|
|
289
|
+
),
|
|
290
|
+
"frozen_before_campaign": True,
|
|
291
|
+
"evaluator_outcomes_accessed": False,
|
|
292
|
+
"campaign_traces_accessed": False,
|
|
293
|
+
"tuned_on_benchmark_outcomes": False,
|
|
294
|
+
},
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
@dataclass(frozen=True, slots=True)
|
|
299
|
+
class WorkloadPromptExtension:
|
|
300
|
+
"""Static semantic prompt plus an optional structure-matched control."""
|
|
301
|
+
|
|
302
|
+
extension_id: str
|
|
303
|
+
extension_version: int
|
|
304
|
+
semantic_payload: FrozenJsonObject
|
|
305
|
+
provenance: WorkloadPromptProvenance
|
|
306
|
+
matched_control_payload: FrozenJsonObject | None = None
|
|
307
|
+
definition_sha256: str = field(init=False)
|
|
308
|
+
|
|
309
|
+
def __post_init__(self) -> None:
|
|
310
|
+
_require_token(self.extension_id, name="extension_id")
|
|
311
|
+
if type(self.extension_version) is not int or self.extension_version <= 0:
|
|
312
|
+
raise ValueError("extension_version must be a positive exact integer")
|
|
313
|
+
_validate_payload(self.semantic_payload, name="semantic_payload")
|
|
314
|
+
if type(self.provenance) is not WorkloadPromptProvenance:
|
|
315
|
+
raise TypeError("provenance must be exact WorkloadPromptProvenance")
|
|
316
|
+
WorkloadPromptProvenance.__post_init__(self.provenance)
|
|
317
|
+
matched = self.matched_control_payload
|
|
318
|
+
if matched is not None:
|
|
319
|
+
_validate_payload(matched, name="matched_control_payload")
|
|
320
|
+
if _payload_shape(matched) != _payload_shape(self.semantic_payload):
|
|
321
|
+
raise ValueError(
|
|
322
|
+
"matched control payload must preserve the semantic payload shape"
|
|
323
|
+
)
|
|
324
|
+
if typed_json_sha256(matched) == typed_json_sha256(
|
|
325
|
+
self.semantic_payload
|
|
326
|
+
):
|
|
327
|
+
raise ValueError("matched control must differ from semantic payload")
|
|
328
|
+
definition = {
|
|
329
|
+
"schema_version": 1,
|
|
330
|
+
"extension_id": self.extension_id,
|
|
331
|
+
"extension_version": self.extension_version,
|
|
332
|
+
"semantic_payload_sha256": typed_json_sha256(self.semantic_payload),
|
|
333
|
+
"matched_control_payload_sha256": (
|
|
334
|
+
None if matched is None else typed_json_sha256(matched)
|
|
335
|
+
),
|
|
336
|
+
"provenance": self.provenance.to_record(),
|
|
337
|
+
"allowed_payload_keys": sorted(_ALLOWED_PAYLOAD_KEYS),
|
|
338
|
+
"outcome_access": False,
|
|
339
|
+
}
|
|
340
|
+
object.__setattr__(
|
|
341
|
+
self,
|
|
342
|
+
"definition_sha256",
|
|
343
|
+
_sha256(_EXTENSION_DOMAIN, definition),
|
|
344
|
+
)
|
|
345
|
+
|
|
346
|
+
def view(
|
|
347
|
+
self,
|
|
348
|
+
arm: WorkloadPromptArm,
|
|
349
|
+
) -> WorkloadPromptExtensionView | None:
|
|
350
|
+
"""Resolve one prospective ablation arm without inspecting outcomes."""
|
|
351
|
+
|
|
352
|
+
self.__post_init__()
|
|
353
|
+
if type(arm) is not WorkloadPromptArm:
|
|
354
|
+
raise TypeError("arm must be an exact WorkloadPromptArm")
|
|
355
|
+
if arm is WorkloadPromptArm.SCHEMA_ONLY:
|
|
356
|
+
return None
|
|
357
|
+
if arm is WorkloadPromptArm.SEMANTIC:
|
|
358
|
+
payload = self.semantic_payload
|
|
359
|
+
else:
|
|
360
|
+
payload = self.matched_control_payload
|
|
361
|
+
if payload is None:
|
|
362
|
+
raise ValueError(
|
|
363
|
+
"matched-control arm requires matched_control_payload"
|
|
364
|
+
)
|
|
365
|
+
return WorkloadPromptExtensionView(
|
|
366
|
+
extension_id=self.extension_id,
|
|
367
|
+
extension_version=self.extension_version,
|
|
368
|
+
extension_definition_sha256=self.definition_sha256,
|
|
369
|
+
arm=arm,
|
|
370
|
+
payload=payload,
|
|
371
|
+
provenance=self.provenance,
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
def to_record(self) -> dict[str, object]:
|
|
375
|
+
self.__post_init__()
|
|
376
|
+
return {
|
|
377
|
+
"schema_version": 1,
|
|
378
|
+
"extension_id": self.extension_id,
|
|
379
|
+
"extension_version": self.extension_version,
|
|
380
|
+
"definition_sha256": self.definition_sha256,
|
|
381
|
+
"semantic_payload_sha256": typed_json_sha256(self.semantic_payload),
|
|
382
|
+
"matched_control_payload_sha256": (
|
|
383
|
+
None
|
|
384
|
+
if self.matched_control_payload is None
|
|
385
|
+
else typed_json_sha256(self.matched_control_payload)
|
|
386
|
+
),
|
|
387
|
+
"provenance": self.provenance.to_record(),
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
__all__ = [
|
|
392
|
+
"WORKLOAD_PROMPT_EXTENSION_CONTEXT_KEY",
|
|
393
|
+
"WorkloadPromptArm",
|
|
394
|
+
"WorkloadPromptExtension",
|
|
395
|
+
"WorkloadPromptExtensionView",
|
|
396
|
+
"WorkloadPromptProvenance",
|
|
397
|
+
"WorkloadPromptSourceKind",
|
|
398
|
+
]
|