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.
Files changed (414) hide show
  1. agent_evolve/__init__.py +722 -0
  2. agent_evolve/agentic.py +2800 -0
  3. agent_evolve/api.py +767 -0
  4. agent_evolve/application/__init__.py +1580 -0
  5. agent_evolve/application/action_allocation.py +744 -0
  6. agent_evolve/application/action_allocation_frame.py +347 -0
  7. agent_evolve/application/action_allocation_frame_commit.py +185 -0
  8. agent_evolve/application/action_allocation_frame_commit_v3.py +184 -0
  9. agent_evolve/application/action_allocation_frame_v3.py +338 -0
  10. agent_evolve/application/action_archive_value.py +497 -0
  11. agent_evolve/application/action_evidence_consistency.py +455 -0
  12. agent_evolve/application/action_forecast_partitioning.py +1471 -0
  13. agent_evolve/application/action_metric_projection.py +211 -0
  14. agent_evolve/application/action_role_value.py +680 -0
  15. agent_evolve/application/action_score_authorities.py +363 -0
  16. agent_evolve/application/action_structural_signature.py +116 -0
  17. agent_evolve/application/action_target_realization.py +402 -0
  18. agent_evolve/application/agentic_evolution.py +7734 -0
  19. agent_evolve/application/agentic_portfolio_residual_expert.py +835 -0
  20. agent_evolve/application/anchor_residual_identification.py +463 -0
  21. agent_evolve/application/archive_conditioned_action_target.py +208 -0
  22. agent_evolve/application/artifact_journal.py +246 -0
  23. agent_evolve/application/artifact_replay.py +347 -0
  24. agent_evolve/application/budgeted_optimizer.py +1828 -0
  25. agent_evolve/application/calibrated_campaign.py +485 -0
  26. agent_evolve/application/calibrated_current_prefix_forecast_opportunity.py +322 -0
  27. agent_evolve/application/calibrated_positive_gain_opportunity.py +1581 -0
  28. agent_evolve/application/campaign_capacity_recourse.py +254 -0
  29. agent_evolve/application/campaign_contextual_outcomes.py +119 -0
  30. agent_evolve/application/campaign_diagnostic_blocks.py +930 -0
  31. agent_evolve/application/campaign_evidence_registry.py +262 -0
  32. agent_evolve/application/campaign_execution.py +2537 -0
  33. agent_evolve/application/campaign_generation_audit.py +942 -0
  34. agent_evolve/application/campaign_learning.py +1812 -0
  35. agent_evolve/application/campaign_learning_runtime.py +1977 -0
  36. agent_evolve/application/campaign_search_phase.py +227 -0
  37. agent_evolve/application/campaign_selector_context_extension.py +220 -0
  38. agent_evolve/application/campaign_variation_envelope.py +649 -0
  39. agent_evolve/application/campaign_variation_trace.py +451 -0
  40. agent_evolve/application/candidate_archive_consequence.py +128 -0
  41. agent_evolve/application/causal_opportunity_portfolio_gate.py +385 -0
  42. agent_evolve/application/composite_outcome_updater.py +145 -0
  43. agent_evolve/application/composition_portfolio_selection.py +363 -0
  44. agent_evolve/application/concurrent_stage.py +144 -0
  45. agent_evolve/application/contextual_action_allocation.py +181 -0
  46. agent_evolve/application/contextual_campaign_outcomes.py +267 -0
  47. agent_evolve/application/contextual_campaign_planning.py +1366 -0
  48. agent_evolve/application/contextual_delayed_credit.py +651 -0
  49. agent_evolve/application/contextual_search_controller.py +2374 -0
  50. agent_evolve/application/current_prefix_forecast_opportunity.py +714 -0
  51. agent_evolve/application/decision_metric_projection.py +112 -0
  52. agent_evolve/application/derived_action_semantics.py +129 -0
  53. agent_evolve/application/detailed_evaluation.py +449 -0
  54. agent_evolve/application/earned_lineage.py +1011 -0
  55. agent_evolve/application/effective_choice_audit.py +484 -0
  56. agent_evolve/application/empirical_consequence_calibration.py +908 -0
  57. agent_evolve/application/evaluation_accounting.py +325 -0
  58. agent_evolve/application/evaluation_cache.py +199 -0
  59. agent_evolve/application/evaluation_escrow.py +547 -0
  60. agent_evolve/application/evaluation_recourse.py +253 -0
  61. agent_evolve/application/event_recorder.py +151 -0
  62. agent_evolve/application/evolution_campaign.py +1840 -0
  63. agent_evolve/application/executable_hypothesis.py +323 -0
  64. agent_evolve/application/factorial_branch_pilot.py +772 -0
  65. agent_evolve/application/finite_acquisition_capacity_recourse.py +672 -0
  66. agent_evolve/application/finite_acquisition_residual_expert.py +373 -0
  67. agent_evolve/application/finite_acquisition_variation_envelope.py +802 -0
  68. agent_evolve/application/finite_action_hypothesis_semantics.py +446 -0
  69. agent_evolve/application/finite_action_selection.py +188 -0
  70. agent_evolve/application/finite_action_set.py +306 -0
  71. agent_evolve/application/finite_action_transition.py +537 -0
  72. agent_evolve/application/finite_variation_eligibility.py +296 -0
  73. agent_evolve/application/forecast_geometry_portfolio.py +799 -0
  74. agent_evolve/application/forecast_opportunity_shadow_calibration.py +316 -0
  75. agent_evolve/application/front_proximity_admission.py +311 -0
  76. agent_evolve/application/front_proximity_parent_basis.py +458 -0
  77. agent_evolve/application/frozen_hurdle_score.py +659 -0
  78. agent_evolve/application/g3_causal_screen.py +2257 -0
  79. agent_evolve/application/g3_causal_validation.py +1046 -0
  80. agent_evolve/application/g3_postseal_curation.py +818 -0
  81. agent_evolve/application/gated_agentic_generator.py +205 -0
  82. agent_evolve/application/generation_feedback.py +293 -0
  83. agent_evolve/application/generative_proposal_journal.py +185 -0
  84. agent_evolve/application/geometry_conditional_elasticity.py +453 -0
  85. agent_evolve/application/global_wave_action_allocation.py +1151 -0
  86. agent_evolve/application/head_mass_conditional_seat.py +268 -0
  87. agent_evolve/application/identifiable_reflection_evidence.py +1147 -0
  88. agent_evolve/application/identifiable_reflection_learning.py +395 -0
  89. agent_evolve/application/identifiable_reflection_request.py +364 -0
  90. agent_evolve/application/in_memory_residual_archive.py +341 -0
  91. agent_evolve/application/insight_memory.py +1804 -0
  92. agent_evolve/application/live_runtime_manifest.py +758 -0
  93. agent_evolve/application/llm_task_queue.py +769 -0
  94. agent_evolve/application/matched_finite_action_block.py +409 -0
  95. agent_evolve/application/materialized_action_broker.py +2328 -0
  96. agent_evolve/application/materialized_action_constraints.py +83 -0
  97. agent_evolve/application/materialized_variation.py +211 -0
  98. agent_evolve/application/multi_option_evolution.py +1536 -0
  99. agent_evolve/application/outcome_adaptive_action_racing.py +2827 -0
  100. agent_evolve/application/outcome_adaptive_residual_campaign_runtime.py +580 -0
  101. agent_evolve/application/outcome_adaptive_residual_portfolio_evolution.py +3671 -0
  102. agent_evolve/application/outcome_conditioned_portfolio_selection.py +1374 -0
  103. agent_evolve/application/outcome_relation.py +193 -0
  104. agent_evolve/application/paired_allocation_comparison.py +241 -0
  105. agent_evolve/application/paired_block_schedule.py +127 -0
  106. agent_evolve/application/parent_measurement.py +226 -0
  107. agent_evolve/application/pareto_archive.py +811 -0
  108. agent_evolve/application/portfolio_campaign_runtime.py +4739 -0
  109. agent_evolve/application/portfolio_evolution.py +2950 -0
  110. agent_evolve/application/portfolio_hypothesis_observations.py +814 -0
  111. agent_evolve/application/portfolio_memory_attribution.py +581 -0
  112. agent_evolve/application/portfolio_memory_dose.py +788 -0
  113. agent_evolve/application/portfolio_memory_matched_control.py +938 -0
  114. agent_evolve/application/portfolio_memory_transfer.py +297 -0
  115. agent_evolve/application/portfolio_optimization_memory.py +363 -0
  116. agent_evolve/application/portfolio_outcome_feedback.py +1613 -0
  117. agent_evolve/application/portfolio_projection.py +335 -0
  118. agent_evolve/application/portfolio_recombination.py +2032 -0
  119. agent_evolve/application/post_evolution_reflection.py +834 -0
  120. agent_evolve/application/postcommit_rank_authority.py +245 -0
  121. agent_evolve/application/precommitted_portfolio_racing.py +2762 -0
  122. agent_evolve/application/prequential_archive_opportunity_calibration.py +1154 -0
  123. agent_evolve/application/prequential_residual_exploration.py +343 -0
  124. agent_evolve/application/prequential_score_portfolio.py +954 -0
  125. agent_evolve/application/projections.py +292 -0
  126. agent_evolve/application/protected_action_committee.py +1027 -0
  127. agent_evolve/application/protected_branch_pilot.py +376 -0
  128. agent_evolve/application/protected_current_prefix_forecast_opportunity.py +552 -0
  129. agent_evolve/application/provider_replay.py +910 -0
  130. agent_evolve/application/rank_balanced_causal_pilot.py +1372 -0
  131. agent_evolve/application/recombination_residual_expert.py +403 -0
  132. agent_evolve/application/reflection_workflow.py +571 -0
  133. agent_evolve/application/region_conditional_credit.py +911 -0
  134. agent_evolve/application/residual_campaign_runtime.py +531 -0
  135. agent_evolve/application/residual_headroom_campaign_runtime.py +459 -0
  136. agent_evolve/application/residual_headroom_ledger.py +1544 -0
  137. agent_evolve/application/residual_learning_transaction.py +396 -0
  138. agent_evolve/application/residual_portfolio_evolution.py +1228 -0
  139. agent_evolve/application/residual_reachability.py +749 -0
  140. agent_evolve/application/residual_stage_credit.py +499 -0
  141. agent_evolve/application/same_prefix_paired_audit.py +1580 -0
  142. agent_evolve/application/semantic_coverage_score_portfolio.py +838 -0
  143. agent_evolve/application/sequential_lineage_allocation.py +1017 -0
  144. agent_evolve/application/sequential_market_replay.py +1395 -0
  145. agent_evolve/application/sequential_residual_campaign_runtime.py +305 -0
  146. agent_evolve/application/sequential_residual_portfolio_evolution.py +940 -0
  147. agent_evolve/application/single_score_action_allocation.py +299 -0
  148. agent_evolve/application/source_exposure_allocation.py +906 -0
  149. agent_evolve/application/staged_memory.py +210 -0
  150. agent_evolve/application/stratified_cold_start_allocation.py +732 -0
  151. agent_evolve/application/support_guarded_hurdle_score.py +549 -0
  152. agent_evolve/application/target_conditioned_action_forecast.py +595 -0
  153. agent_evolve/application/target_conditioned_campaign.py +566 -0
  154. agent_evolve/application/treatment_assignment.py +201 -0
  155. agent_evolve/application/trusted_objective_evidence.py +217 -0
  156. agent_evolve/application/two_stage_action_evolution.py +1131 -0
  157. agent_evolve/application/v8lite_allocation_policy.py +1083 -0
  158. agent_evolve/application/v9_candidate_policy.py +1303 -0
  159. agent_evolve/bootstrap.py +108 -0
  160. agent_evolve/campaign_presets.py +517 -0
  161. agent_evolve/campaign_profiles.py +452 -0
  162. agent_evolve/campaign_variation_topology.py +288 -0
  163. agent_evolve/campaign_workload.py +950 -0
  164. agent_evolve/cli.py +797 -0
  165. agent_evolve/contract.py +241 -0
  166. agent_evolve/core/__init__.py +91 -0
  167. agent_evolve/core/action_semantics.py +411 -0
  168. agent_evolve/core/authored.py +105 -0
  169. agent_evolve/core/formatting.py +286 -0
  170. agent_evolve/core/optimization_semantics.py +324 -0
  171. agent_evolve/core/problem.py +167 -0
  172. agent_evolve/core/results.py +323 -0
  173. agent_evolve/core/stats.py +70 -0
  174. agent_evolve/core/telemetry.py +100 -0
  175. agent_evolve/domain/__init__.py +89 -0
  176. agent_evolve/domain/artifact.py +162 -0
  177. agent_evolve/domain/durable_text.py +68 -0
  178. agent_evolve/domain/event.py +1454 -0
  179. agent_evolve/domain/finite_action_set.py +426 -0
  180. agent_evolve/domain/finite_variation.py +526 -0
  181. agent_evolve/domain/generative_emission.py +559 -0
  182. agent_evolve/domain/ids.py +163 -0
  183. agent_evolve/domain/inline_text.py +106 -0
  184. agent_evolve/domain/insight.py +27 -0
  185. agent_evolve/domain/lineage.py +737 -0
  186. agent_evolve/domain/llm_task_queue.py +960 -0
  187. agent_evolve/domain/outcome.py +96 -0
  188. agent_evolve/domain/patch.py +854 -0
  189. agent_evolve/domain/typed_json.py +542 -0
  190. agent_evolve/domain/variation_space.py +158 -0
  191. agent_evolve/driver.py +1014 -0
  192. agent_evolve/harness/__init__.py +29 -0
  193. agent_evolve/harness/base.py +242 -0
  194. agent_evolve/harness/directives.py +163 -0
  195. agent_evolve/harness/generative_seal.py +479 -0
  196. agent_evolve/harness/registry.py +41 -0
  197. agent_evolve/infrastructure/__init__.py +39 -0
  198. agent_evolve/infrastructure/artifacts/__init__.py +6 -0
  199. agent_evolve/infrastructure/artifacts/_verification.py +67 -0
  200. agent_evolve/infrastructure/artifacts/filesystem.py +343 -0
  201. agent_evolve/infrastructure/artifacts/in_memory.py +73 -0
  202. agent_evolve/infrastructure/asyncio_runtime.py +109 -0
  203. agent_evolve/infrastructure/authored_runtime.py +188 -0
  204. agent_evolve/infrastructure/authored_worker.py +171 -0
  205. agent_evolve/infrastructure/clock.py +53 -0
  206. agent_evolve/infrastructure/events/__init__.py +6 -0
  207. agent_evolve/infrastructure/events/_validation.py +89 -0
  208. agent_evolve/infrastructure/events/in_memory.py +56 -0
  209. agent_evolve/infrastructure/events/jsonl.py +193 -0
  210. agent_evolve/infrastructure/exception_provenance.py +215 -0
  211. agent_evolve/infrastructure/ids.py +118 -0
  212. agent_evolve/infrastructure/lineage_codec.py +1836 -0
  213. agent_evolve/infrastructure/outcome_adaptive_phase_journal.py +170 -0
  214. agent_evolve/infrastructure/residual_headroom_journal.py +221 -0
  215. agent_evolve/infrastructure/resource_lease.py +370 -0
  216. agent_evolve/infrastructure/sanitization/__init__.py +8 -0
  217. agent_evolve/infrastructure/sanitization/strict_json.py +484 -0
  218. agent_evolve/infrastructure/sequential_phase_journal.py +170 -0
  219. agent_evolve/infrastructure/stream_liveness.py +383 -0
  220. agent_evolve/infrastructure/subprocess_boundary.py +136 -0
  221. agent_evolve/integrations/__init__.py +1 -0
  222. agent_evolve/integrations/botorch/__init__.py +28 -0
  223. agent_evolve/integrations/botorch/finite_qlognehvi.py +190 -0
  224. agent_evolve/integrations/botorch/finite_qlognehvi_batch.py +155 -0
  225. agent_evolve/integrations/botorch/finite_qlognehvi_batch_identity.py +20 -0
  226. agent_evolve/integrations/botorch/finite_qlognehvi_batch_worker.py +55 -0
  227. agent_evolve/integrations/botorch/finite_qlognehvi_identity.py +22 -0
  228. agent_evolve/integrations/botorch/finite_qlognehvi_worker.py +55 -0
  229. agent_evolve/integrations/botorch/subprocess_qlognehvi.py +261 -0
  230. agent_evolve/integrations/botorch/subprocess_qlognehvi_batch.py +273 -0
  231. agent_evolve/integrations/completion.py +242 -0
  232. agent_evolve/integrations/pydantic_ai/__init__.py +441 -0
  233. agent_evolve/integrations/pydantic_ai/action_forecast.py +1068 -0
  234. agent_evolve/integrations/pydantic_ai/agentic_generator.py +2308 -0
  235. agent_evolve/integrations/pydantic_ai/async_generator.py +1604 -0
  236. agent_evolve/integrations/pydantic_ai/boundary_codec.py +1526 -0
  237. agent_evolve/integrations/pydantic_ai/calibrated_portfolio_campaign.py +756 -0
  238. agent_evolve/integrations/pydantic_ai/calibrated_portfolio_selection.py +7537 -0
  239. agent_evolve/integrations/pydantic_ai/campaign_acquisition.py +609 -0
  240. agent_evolve/integrations/pydantic_ai/execution_binding.py +138 -0
  241. agent_evolve/integrations/pydantic_ai/forecast_geometry_action_committee.py +217 -0
  242. agent_evolve/integrations/pydantic_ai/harness.py +159 -0
  243. agent_evolve/integrations/pydantic_ai/heterogeneous_model_execution.py +306 -0
  244. agent_evolve/integrations/pydantic_ai/hierarchical_residual_adaptive_semantic_view.py +179 -0
  245. agent_evolve/integrations/pydantic_ai/json_schema_dialect.py +108 -0
  246. agent_evolve/integrations/pydantic_ai/materialized_hierarchical_residual_expert.py +952 -0
  247. agent_evolve/integrations/pydantic_ai/materialized_portfolio_judge.py +520 -0
  248. agent_evolve/integrations/pydantic_ai/model_execution_profile.py +659 -0
  249. agent_evolve/integrations/pydantic_ai/outbound_request_manifest.py +1170 -0
  250. agent_evolve/integrations/pydantic_ai/portable_residual_consequence_features.py +575 -0
  251. agent_evolve/integrations/pydantic_ai/portfolio_selection.py +422 -0
  252. agent_evolve/integrations/pydantic_ai/progress_aware_openrouter.py +416 -0
  253. agent_evolve/integrations/pydantic_ai/provider_attempt_join.py +1523 -0
  254. agent_evolve/integrations/pydantic_ai/provider_free_calibrated_runner.py +607 -0
  255. agent_evolve/integrations/pydantic_ai/queued_runner.py +2634 -0
  256. agent_evolve/integrations/pydantic_ai/reconciled_residual_reachability.py +1417 -0
  257. agent_evolve/integrations/pydantic_ai/residual_forecast_geometry.py +445 -0
  258. agent_evolve/integrations/pydantic_ai/residual_reachability.py +674 -0
  259. agent_evolve/integrations/pydantic_ai/residual_semantic_cells.py +239 -0
  260. agent_evolve/integrations/pydantic_ai/sealed_output_replay.py +1068 -0
  261. agent_evolve/integrations/pydantic_ai/semantic_coverage_residual_portfolio.py +770 -0
  262. agent_evolve/integrations/pydantic_ai/semantic_decision_replay.py +383 -0
  263. agent_evolve/integrations/pydantic_ai/support_adaptive_residual_portfolio.py +135 -0
  264. agent_evolve/integrations/pydantic_ai/trusted_residual_prompt_context.py +143 -0
  265. agent_evolve/integrations/pydantic_ai/validated_openrouter_model.py +107 -0
  266. agent_evolve/integrations/pymoo_adapter.py +242 -0
  267. agent_evolve/policies/__init__.py +17 -0
  268. agent_evolve/policies/check.py +469 -0
  269. agent_evolve/policies/emit_scaffold.py +451 -0
  270. agent_evolve/policies/feedback/__init__.py +37 -0
  271. agent_evolve/policies/feedback/held_out_asn.py +1325 -0
  272. agent_evolve/policies/genetic.py +607 -0
  273. agent_evolve/policies/llm_backoff.py +183 -0
  274. agent_evolve/policies/llm_chooser.py +226 -0
  275. agent_evolve/policies/llm_generator.py +1760 -0
  276. agent_evolve/policies/llm_init.py +267 -0
  277. agent_evolve/policies/llm_operator.py +109 -0
  278. agent_evolve/policies/llm_prior.py +194 -0
  279. agent_evolve/policies/llm_surrogate.py +334 -0
  280. agent_evolve/policies/measurement_evidence.py +704 -0
  281. agent_evolve/policies/memory/__init__.py +223 -0
  282. agent_evolve/policies/memory/balanced_subset_blocks.py +707 -0
  283. agent_evolve/policies/memory/compatibility_matching.py +593 -0
  284. agent_evolve/policies/memory/global_falsification.py +1841 -0
  285. agent_evolve/policies/memory/prompt_shape.py +503 -0
  286. agent_evolve/policies/memory/randomized_subset.py +714 -0
  287. agent_evolve/policies/memory/staged_causal.py +1270 -0
  288. agent_evolve/policies/memory/treatment_compliance.py +759 -0
  289. agent_evolve/policies/objective_resolution/__init__.py +17 -0
  290. agent_evolve/policies/objective_resolution/fixed_grid.py +364 -0
  291. agent_evolve/policies/operator_portfolio.py +407 -0
  292. agent_evolve/policies/reguidance.py +1133 -0
  293. agent_evolve/policies/reward/__init__.py +83 -0
  294. agent_evolve/policies/reward/affine_candidate_consequence.py +156 -0
  295. agent_evolve/policies/reward/affine_candidate_consequence_3d.py +159 -0
  296. agent_evolve/policies/reward/affine_hypervolume.py +490 -0
  297. agent_evolve/policies/reward/affine_hypervolume_3d.py +567 -0
  298. agent_evolve/policies/reward/contextual_marginal_utility.py +318 -0
  299. agent_evolve/policies/reward/frozen_archive.py +360 -0
  300. agent_evolve/policies/reward/frozen_wave_archive.py +368 -0
  301. agent_evolve/policies/search_state.py +208 -0
  302. agent_evolve/policies/selection/__init__.py +345 -0
  303. agent_evolve/policies/selection/acquisition_certified_slate.py +684 -0
  304. agent_evolve/policies/selection/affine_frontier_context.py +330 -0
  305. agent_evolve/policies/selection/affine_frontier_target.py +473 -0
  306. agent_evolve/policies/selection/archive_elite.py +1346 -0
  307. agent_evolve/policies/selection/calibrated_portfolio_binding.py +640 -0
  308. agent_evolve/policies/selection/calibrated_slate.py +1394 -0
  309. agent_evolve/policies/selection/calibrated_slate_codec.py +579 -0
  310. agent_evolve/policies/selection/common_candidate_pool.py +685 -0
  311. agent_evolve/policies/selection/diagnostic_sampling.py +319 -0
  312. agent_evolve/policies/selection/disjoint_pairs.py +479 -0
  313. agent_evolve/policies/selection/elite_explorer.py +719 -0
  314. agent_evolve/policies/selection/finite_action.py +187 -0
  315. agent_evolve/policies/selection/finite_option_prompt_projection.py +377 -0
  316. agent_evolve/policies/selection/finite_palette_evidence.py +247 -0
  317. agent_evolve/policies/selection/forecast_calibration.py +922 -0
  318. agent_evolve/policies/selection/frontier_probe_slate.py +814 -0
  319. agent_evolve/policies/selection/frozen_archive_pairs.py +762 -0
  320. agent_evolve/policies/selection/full_support_slate.py +91 -0
  321. agent_evolve/policies/selection/meaningful_direction.py +240 -0
  322. agent_evolve/policies/selection/memory_dose_feasibility.py +259 -0
  323. agent_evolve/policies/selection/model_anchored_slate.py +826 -0
  324. agent_evolve/policies/selection/phenotype_recourse.py +979 -0
  325. agent_evolve/policies/selection/proposal_support.py +368 -0
  326. agent_evolve/policies/selection/random_portfolio.py +254 -0
  327. agent_evolve/policies/selection/regret_bounded_slate.py +1084 -0
  328. agent_evolve/policies/selection/residual_frontier.py +463 -0
  329. agent_evolve/policies/selection/residual_frontier_target.py +605 -0
  330. agent_evolve/policies/selection/structural_posterior_slate.py +1571 -0
  331. agent_evolve/policies/selection/target_conditioned_allocator.py +648 -0
  332. agent_evolve/policies/selection/target_conditioned_features.py +812 -0
  333. agent_evolve/policies/selection/target_conditioned_prequential.py +1527 -0
  334. agent_evolve/policies/selection/task_keyed_palette.py +906 -0
  335. agent_evolve/policies/semantics.py +147 -0
  336. agent_evolve/policies/structure.py +362 -0
  337. agent_evolve/policies/structured_output_budget.py +62 -0
  338. agent_evolve/policies/surrogate.py +696 -0
  339. agent_evolve/policies/variation/__init__.py +1 -0
  340. agent_evolve/policies/variation/compositional_finite_catalog.py +426 -0
  341. agent_evolve/policies/variation/crossover_inheritance.py +575 -0
  342. agent_evolve/policies/variation/disjoint_recombination.py +611 -0
  343. agent_evolve/policies/variation/exact_composition_capacity.py +214 -0
  344. agent_evolve/policies/variation/exact_parent_crossover.py +950 -0
  345. agent_evolve/policies/variation/multiscale_restart_catalog.py +372 -0
  346. agent_evolve/policies/variation/source_union_finite_catalog.py +403 -0
  347. agent_evolve/policies/variation/typed_patch.py +1981 -0
  348. agent_evolve/policies/weighted_prior.py +394 -0
  349. agent_evolve/ports/__init__.py +383 -0
  350. agent_evolve/ports/action_allocation.py +733 -0
  351. agent_evolve/ports/action_allocation_frame.py +1153 -0
  352. agent_evolve/ports/action_allocation_frame_commit.py +294 -0
  353. agent_evolve/ports/action_allocation_frame_commit_v3.py +432 -0
  354. agent_evolve/ports/action_allocation_frame_v3.py +995 -0
  355. agent_evolve/ports/action_forecast.py +1568 -0
  356. agent_evolve/ports/action_metric_projection.py +165 -0
  357. agent_evolve/ports/agentic_generator.py +1561 -0
  358. agent_evolve/ports/archive_context.py +136 -0
  359. agent_evolve/ports/artifact_sanitizer.py +44 -0
  360. agent_evolve/ports/artifact_store.py +225 -0
  361. agent_evolve/ports/clock.py +13 -0
  362. agent_evolve/ports/contextual_search_allocation.py +827 -0
  363. agent_evolve/ports/decision_metric_projection.py +258 -0
  364. agent_evolve/ports/event_store.py +55 -0
  365. agent_evolve/ports/executable_hypothesis.py +557 -0
  366. agent_evolve/ports/finite_acquisition.py +377 -0
  367. agent_evolve/ports/finite_acquisition_batch.py +296 -0
  368. agent_evolve/ports/finite_acquisition_batch_json.py +164 -0
  369. agent_evolve/ports/finite_acquisition_json.py +247 -0
  370. agent_evolve/ports/finite_acquisition_space.py +168 -0
  371. agent_evolve/ports/finite_action_selection.py +348 -0
  372. agent_evolve/ports/finite_action_set.py +256 -0
  373. agent_evolve/ports/frontier_target.py +396 -0
  374. agent_evolve/ports/generation_failure.py +43 -0
  375. agent_evolve/ports/hard_feasibility.py +233 -0
  376. agent_evolve/ports/id_factory.py +34 -0
  377. agent_evolve/ports/llm_task_queue.py +93 -0
  378. agent_evolve/ports/objective_resolution.py +419 -0
  379. agent_evolve/ports/paired_allocation_comparison.py +401 -0
  380. agent_evolve/ports/paired_block_schedule.py +475 -0
  381. agent_evolve/ports/parent_measurement.py +336 -0
  382. agent_evolve/ports/portfolio_memory_dose.py +643 -0
  383. agent_evolve/ports/portfolio_selection.py +3169 -0
  384. agent_evolve/ports/postcommit_rank_authority.py +467 -0
  385. agent_evolve/ports/presented_action_evidence.py +794 -0
  386. agent_evolve/ports/resource_lease.py +162 -0
  387. agent_evolve/ports/structured_generator.py +734 -0
  388. agent_evolve/ports/structured_output_budget.py +120 -0
  389. agent_evolve/ports/subprocess_boundary.py +138 -0
  390. agent_evolve/ports/treatment_assignment.py +466 -0
  391. agent_evolve/ports/variation_catalog.py +76 -0
  392. agent_evolve/ports/variation_source.py +226 -0
  393. agent_evolve/proposal_mode.py +157 -0
  394. agent_evolve/proposers/__init__.py +10 -0
  395. agent_evolve/proposers/random_proposer.py +188 -0
  396. agent_evolve/provider_accounting.py +163 -0
  397. agent_evolve/py.typed +0 -0
  398. agent_evolve/reference_method.py +1570 -0
  399. agent_evolve/session/__init__.py +11 -0
  400. agent_evolve/session/authorship.py +864 -0
  401. agent_evolve/session/evaluate.py +236 -0
  402. agent_evolve/session/fidelity.py +237 -0
  403. agent_evolve/session/genetic_loop.py +742 -0
  404. agent_evolve/session/loop.py +803 -0
  405. agent_evolve/session/screening.py +671 -0
  406. agent_evolve/settings.py +376 -0
  407. agent_evolve/workload_kit.py +368 -0
  408. agent_evolve/workload_prompt.py +398 -0
  409. agentevolve_optimizer-0.5.0.dist-info/METADATA +599 -0
  410. agentevolve_optimizer-0.5.0.dist-info/RECORD +414 -0
  411. agentevolve_optimizer-0.5.0.dist-info/WHEEL +5 -0
  412. agentevolve_optimizer-0.5.0.dist-info/entry_points.txt +2 -0
  413. agentevolve_optimizer-0.5.0.dist-info/licenses/LICENSE +21 -0
  414. 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
+ ]