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,659 @@
1
+ """Authenticated, workload-neutral OpenRouter model execution profiles.
2
+
3
+ Workload adapters describe candidates and evaluators. They must not decide
4
+ provider routing, reasoning controls, output ceilings, or terminal telemetry
5
+ requirements. This module keeps those model-facing choices in one immutable
6
+ composition object that can be injected into any AgentEvolve campaign.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import hashlib
12
+ import json
13
+ import math
14
+ import re
15
+ from dataclasses import dataclass
16
+
17
+ from agent_evolve.integrations.pydantic_ai.async_generator import (
18
+ OpenRouterReasoningConfig,
19
+ OpenRouterStructuredOutputMode,
20
+ )
21
+ from agent_evolve.integrations.pydantic_ai.json_schema_dialect import (
22
+ OpenRouterJsonSchemaDialect,
23
+ )
24
+ from agent_evolve.ports.agentic_generator import AgenticCallTelemetry
25
+
26
+
27
+ _TOKEN = re.compile(r"^[a-z][a-z0-9_]{0,63}$")
28
+ _MODEL = re.compile(r"^[a-z0-9][a-z0-9_.-]*/[A-Za-z0-9][A-Za-z0-9_.-]*$")
29
+ _PROVIDER_SLUG = re.compile(r"^[a-z0-9][a-z0-9_-]{0,63}$")
30
+ _PROFILE_DOMAIN = b"agent-evolve:openrouter-model-execution-profile:v1\x00"
31
+
32
+
33
+ def _canonical_json(value: object) -> bytes:
34
+ return json.dumps(
35
+ value,
36
+ allow_nan=False,
37
+ ensure_ascii=True,
38
+ separators=(",", ":"),
39
+ sort_keys=True,
40
+ ).encode("ascii", errors="strict")
41
+
42
+
43
+ def _canonical_strings(
44
+ values: tuple[str, ...],
45
+ *,
46
+ name: str,
47
+ pattern: re.Pattern[str] | None = None,
48
+ ) -> None:
49
+ if type(values) is not tuple or not values or any(
50
+ type(value) is not str
51
+ or not value
52
+ or (pattern is not None and pattern.fullmatch(value) is None)
53
+ for value in values
54
+ ):
55
+ raise TypeError(f"{name} must be a non-empty exact string tuple")
56
+ if values != tuple(sorted(set(values))):
57
+ raise ValueError(f"{name} must be unique and canonical")
58
+
59
+
60
+ @dataclass(frozen=True, slots=True, eq=False)
61
+ class OpenRouterModelExecutionProfile:
62
+ """One complete model/provider contract independent of any workload."""
63
+
64
+ profile_id: str
65
+ profile_version: int
66
+ requested_model: str
67
+ accepted_resolved_models: tuple[str, ...]
68
+ provider_only: tuple[str, ...]
69
+ accepted_resolved_providers: tuple[str, ...]
70
+ max_output_tokens: int
71
+ reasoning_effort: str | None
72
+ temperature: float | None
73
+ structured_output_mode: OpenRouterStructuredOutputMode = (
74
+ OpenRouterStructuredOutputMode.TOOL
75
+ )
76
+ structured_output_strict: bool = False
77
+ json_schema_dialect: OpenRouterJsonSchemaDialect = (
78
+ OpenRouterJsonSchemaDialect.PROVIDER_DEFAULT
79
+ )
80
+ require_positive_reasoning_tokens: bool = True
81
+ provider_require_parameters: bool = True
82
+ supports_forced_tool_choice: bool = True
83
+ route_concurrency_cap: int | None = None
84
+ rate_limit_backoff_floor_ns: int = 0
85
+
86
+ def __post_init__(self) -> None:
87
+ if type(self.profile_id) is not str or _TOKEN.fullmatch(self.profile_id) is None:
88
+ raise ValueError("profile_id must use the closed lowercase token grammar")
89
+ if type(self.profile_version) is not int or self.profile_version <= 0:
90
+ raise ValueError("profile_version must be a positive exact integer")
91
+ if (
92
+ type(self.requested_model) is not str
93
+ or _MODEL.fullmatch(self.requested_model) is None
94
+ ):
95
+ raise ValueError("requested_model must be an OpenRouter model slug")
96
+ _canonical_strings(
97
+ self.accepted_resolved_models,
98
+ name="accepted_resolved_models",
99
+ pattern=_MODEL,
100
+ )
101
+ if self.requested_model not in self.accepted_resolved_models:
102
+ raise ValueError("requested_model must be an accepted resolved model")
103
+ _canonical_strings(
104
+ self.provider_only,
105
+ name="provider_only",
106
+ pattern=_PROVIDER_SLUG,
107
+ )
108
+ _canonical_strings(
109
+ self.accepted_resolved_providers,
110
+ name="accepted_resolved_providers",
111
+ )
112
+ if type(self.max_output_tokens) is not int or self.max_output_tokens <= 0:
113
+ raise ValueError("max_output_tokens must be a positive exact integer")
114
+ if self.reasoning_effort is not None:
115
+ if type(self.reasoning_effort) is not str:
116
+ raise TypeError("reasoning_effort must be an exact string or None")
117
+ OpenRouterReasoningConfig(effort=self.reasoning_effort).__post_init__()
118
+ if self.temperature is not None and (
119
+ type(self.temperature) is not float
120
+ or not math.isfinite(self.temperature)
121
+ or not 0.0 <= self.temperature <= 2.0
122
+ ):
123
+ raise ValueError("temperature must be None or a finite float in [0,2]")
124
+ if type(self.structured_output_mode) is not OpenRouterStructuredOutputMode:
125
+ raise TypeError(
126
+ "structured_output_mode must be an exact "
127
+ "OpenRouterStructuredOutputMode"
128
+ )
129
+ if type(self.structured_output_strict) is not bool:
130
+ raise TypeError("structured_output_strict must be an exact bool")
131
+ if type(self.json_schema_dialect) is not OpenRouterJsonSchemaDialect:
132
+ raise TypeError(
133
+ "json_schema_dialect must be an exact "
134
+ "OpenRouterJsonSchemaDialect"
135
+ )
136
+ if type(self.require_positive_reasoning_tokens) is not bool:
137
+ raise TypeError("require_positive_reasoning_tokens must be exact bool")
138
+ if self.reasoning_effort is None and self.require_positive_reasoning_tokens:
139
+ raise ValueError(
140
+ "a non-reasoning profile cannot require positive reasoning tokens"
141
+ )
142
+ if type(self.provider_require_parameters) is not bool:
143
+ raise TypeError("provider_require_parameters must be exact bool")
144
+ if type(self.supports_forced_tool_choice) is not bool:
145
+ raise TypeError("supports_forced_tool_choice must be exact bool")
146
+ if self.route_concurrency_cap is not None and (
147
+ type(self.route_concurrency_cap) is not int
148
+ or self.route_concurrency_cap <= 0
149
+ ):
150
+ raise ValueError(
151
+ "route_concurrency_cap must be a positive exact integer or None"
152
+ )
153
+ if (
154
+ type(self.rate_limit_backoff_floor_ns) is not int
155
+ or self.rate_limit_backoff_floor_ns < 0
156
+ ):
157
+ raise ValueError(
158
+ "rate_limit_backoff_floor_ns must be a non-negative exact integer"
159
+ )
160
+
161
+ @property
162
+ def reasoning_config(self) -> OpenRouterReasoningConfig | None:
163
+ self.__post_init__()
164
+ if self.reasoning_effort is None:
165
+ return None
166
+ return OpenRouterReasoningConfig(effort=self.reasoning_effort)
167
+
168
+ @property
169
+ def outbound_reasoning_setting(self) -> dict[str, object] | None:
170
+ """Return the exact OpenRouter reasoning field expected on the wire."""
171
+
172
+ config = self.reasoning_config
173
+ return None if config is None else config.to_model_setting()
174
+
175
+ def accepts_reasoning_tokens(self, value: object) -> bool:
176
+ """Validate telemetry without assuming that every model reasons."""
177
+
178
+ self.__post_init__()
179
+ return type(value) is int and (
180
+ value > 0 if self.require_positive_reasoning_tokens else value >= 0
181
+ )
182
+
183
+ def effective_max_connections(self, *, default: int) -> int:
184
+ """Resolve the authenticated route cap against a composition default."""
185
+
186
+ self.__post_init__()
187
+ if type(default) is not int or default <= 0:
188
+ raise ValueError("default must be a positive exact integer")
189
+ return (
190
+ default
191
+ if self.route_concurrency_cap is None
192
+ else min(default, self.route_concurrency_cap)
193
+ )
194
+
195
+ @property
196
+ def accepted_finish_reasons(self) -> tuple[str, ...]:
197
+ """Return the closed terminal-reason contract for the wire mode."""
198
+
199
+ self.__post_init__()
200
+ if self.structured_output_mode is OpenRouterStructuredOutputMode.TOOL:
201
+ return ("tool_call",)
202
+ if (
203
+ self.structured_output_mode
204
+ is OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
205
+ ):
206
+ return ("stop",)
207
+ raise AssertionError("unreachable structured output mode")
208
+
209
+ def _unsigned_record(self) -> dict[str, object]:
210
+ self.__post_init__()
211
+ record: dict[str, object] = {
212
+ "schema_version": 2,
213
+ "profile_id": self.profile_id,
214
+ "profile_version": self.profile_version,
215
+ "requested_model": self.requested_model,
216
+ "accepted_resolved_models": list(self.accepted_resolved_models),
217
+ "provider_options": {
218
+ "only": list(self.provider_only),
219
+ "allow_fallbacks": False,
220
+ "require_parameters": self.provider_require_parameters,
221
+ },
222
+ "accepted_resolved_providers": list(
223
+ self.accepted_resolved_providers
224
+ ),
225
+ "max_output_tokens": self.max_output_tokens,
226
+ "reasoning": self.outbound_reasoning_setting,
227
+ "structured_output_mode": self.structured_output_mode.value,
228
+ "structured_output_strict": self.structured_output_strict,
229
+ "json_schema_dialect": self.json_schema_dialect.value,
230
+ "supports_forced_tool_choice": self.supports_forced_tool_choice,
231
+ "temperature_hex": (
232
+ None if self.temperature is None else self.temperature.hex()
233
+ ),
234
+ "terminal_telemetry": {
235
+ "requested_model_exact": True,
236
+ "resolved_model_allowlist": True,
237
+ "resolved_provider_allowlist": True,
238
+ "accepted_finish_reasons": list(self.accepted_finish_reasons),
239
+ "positive_reasoning_tokens_required": (
240
+ self.require_positive_reasoning_tokens
241
+ ),
242
+ },
243
+ "workload_specific_fields": [],
244
+ }
245
+ if self.route_concurrency_cap is not None:
246
+ record["schema_version"] = 3
247
+ record["route_concurrency_cap"] = self.route_concurrency_cap
248
+ if self.rate_limit_backoff_floor_ns:
249
+ record["schema_version"] = 4
250
+ record["rate_limit_backoff_floor_ns"] = (
251
+ self.rate_limit_backoff_floor_ns
252
+ )
253
+ return record
254
+
255
+ @property
256
+ def profile_sha256(self) -> str:
257
+ return hashlib.sha256(
258
+ _PROFILE_DOMAIN + _canonical_json(self._unsigned_record())
259
+ ).hexdigest()
260
+
261
+ def to_record(self) -> dict[str, object]:
262
+ return {**self._unsigned_record(), "profile_sha256": self.profile_sha256}
263
+
264
+ def validate_telemetry(self, telemetry: AgenticCallTelemetry) -> None:
265
+ """Fail closed when a terminal response escapes the frozen route."""
266
+
267
+ self.__post_init__()
268
+ if type(telemetry) is not AgenticCallTelemetry:
269
+ raise TypeError("telemetry must be exact AgenticCallTelemetry")
270
+ AgenticCallTelemetry.__post_init__(telemetry)
271
+ if telemetry.requested_model != self.requested_model:
272
+ raise ValueError("terminal telemetry has a foreign requested model")
273
+ if telemetry.resolved_model not in self.accepted_resolved_models:
274
+ raise ValueError("terminal telemetry has a foreign resolved model")
275
+ if telemetry.resolved_provider not in self.accepted_resolved_providers:
276
+ raise ValueError("terminal telemetry has a foreign resolved provider")
277
+ if telemetry.finish_reason not in self.accepted_finish_reasons:
278
+ raise ValueError("terminal telemetry has a foreign finish reason")
279
+ if not self.accepts_reasoning_tokens(telemetry.reasoning_tokens):
280
+ raise ValueError("terminal telemetry violates the reasoning-token contract")
281
+
282
+ def __eq__(self, other: object) -> bool:
283
+ return (
284
+ type(other) is OpenRouterModelExecutionProfile
285
+ and self.profile_sha256 == other.profile_sha256
286
+ )
287
+
288
+ __hash__ = None
289
+
290
+
291
+ DEEPSEEK_V4_PRO_STREAMLAKE_XHIGH = OpenRouterModelExecutionProfile(
292
+ profile_id="deepseek_v4_pro_streamlake_xhigh",
293
+ profile_version=2,
294
+ requested_model="deepseek/deepseek-v4-pro",
295
+ accepted_resolved_models=("deepseek/deepseek-v4-pro",),
296
+ provider_only=("streamlake",),
297
+ accepted_resolved_providers=("StreamLake",),
298
+ max_output_tokens=384_000,
299
+ reasoning_effort="xhigh",
300
+ temperature=0.2,
301
+ # StreamLake intermittently rejects ``tool_choice=required`` when xhigh
302
+ # thinking is active. The one-tool AgentEvolve contract remains closed,
303
+ # while Pydantic-AI emits ``auto`` and the semantic prompt requires that
304
+ # sole output tool. Terminal typed validation is unchanged.
305
+ supports_forced_tool_choice=False,
306
+ provider_require_parameters=False,
307
+ )
308
+
309
+
310
+ # Prospective transport repair for providers that cannot reliably combine
311
+ # long reasoning with a forced output tool. Keep the legacy tool profile
312
+ # addressable so completed studies remain replayable; promotion of this
313
+ # response-format variant requires its own canary and registry identity.
314
+ DEEPSEEK_V4_PRO_STREAMLAKE_XHIGH_NATIVE_JSON = OpenRouterModelExecutionProfile(
315
+ profile_id="deepseek_v4_pro_streamlake_xhigh_native_json",
316
+ profile_version=1,
317
+ requested_model="deepseek/deepseek-v4-pro",
318
+ accepted_resolved_models=("deepseek/deepseek-v4-pro",),
319
+ provider_only=("streamlake",),
320
+ accepted_resolved_providers=("StreamLake",),
321
+ max_output_tokens=384_000,
322
+ reasoning_effort="xhigh",
323
+ temperature=0.2,
324
+ structured_output_mode=(
325
+ OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
326
+ ),
327
+ structured_output_strict=False,
328
+ json_schema_dialect=OpenRouterJsonSchemaDialect.PROVIDER_DEFAULT,
329
+ provider_require_parameters=False,
330
+ supports_forced_tool_choice=False,
331
+ )
332
+
333
+
334
+ QWEN_3_7_MAX_ALIBABA_XHIGH = OpenRouterModelExecutionProfile(
335
+ profile_id="qwen_3_7_max_alibaba_xhigh",
336
+ profile_version=2,
337
+ requested_model="qwen/qwen3.7-max",
338
+ accepted_resolved_models=("qwen/qwen3.7-max",),
339
+ provider_only=("alibaba",),
340
+ accepted_resolved_providers=("Alibaba",),
341
+ max_output_tokens=65_536,
342
+ reasoning_effort="xhigh",
343
+ temperature=0.2,
344
+ structured_output_mode=(
345
+ OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
346
+ ),
347
+ json_schema_dialect=OpenRouterJsonSchemaDialect.ALIBABA_NATIVE_V1,
348
+ # Alibaba advertises ``max_tokens`` while Pydantic-AI's OpenAI-compatible
349
+ # transport serializes ``max_completion_tokens``. OpenRouter can bridge
350
+ # that spelling only when its capability prefilter is disabled. Routing
351
+ # remains Alibaba-only with fallbacks forbidden, and AgentEvolve still
352
+ # authenticates the exact wire budget and validates the typed response.
353
+ provider_require_parameters=False,
354
+ )
355
+
356
+
357
+ # Prospective provider-systems repair after an otherwise healthy Qwen/BOiLS
358
+ # campaign launched reflection plus two selectors concurrently. Alibaba
359
+ # accepted the earlier two-selector wave but returned repeated HTTP 429s for
360
+ # the three-call wave. The model, provider, reasoning, schema, temperature,
361
+ # and completion budget remain identical. This explicit variant caps the
362
+ # route at the highest observed healthy concurrency and prevents full jitter
363
+ # from reducing an admitted rate-limit retry to a sub-second delay.
364
+ QWEN_3_7_MAX_ALIBABA_XHIGH_RATE_SAFE = OpenRouterModelExecutionProfile(
365
+ profile_id="qwen_3_7_max_alibaba_xhigh_rate_safe",
366
+ profile_version=1,
367
+ requested_model="qwen/qwen3.7-max",
368
+ accepted_resolved_models=("qwen/qwen3.7-max",),
369
+ provider_only=("alibaba",),
370
+ accepted_resolved_providers=("Alibaba",),
371
+ max_output_tokens=65_536,
372
+ reasoning_effort="xhigh",
373
+ temperature=0.2,
374
+ structured_output_mode=(
375
+ OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
376
+ ),
377
+ json_schema_dialect=OpenRouterJsonSchemaDialect.ALIBABA_NATIVE_V1,
378
+ provider_require_parameters=False,
379
+ route_concurrency_cap=2,
380
+ rate_limit_backoff_floor_ns=15_000_000_000,
381
+ )
382
+
383
+
384
+ MISTRAL_LARGE_3_MISTRAL = OpenRouterModelExecutionProfile(
385
+ profile_id="mistral_large_3_mistral",
386
+ profile_version=3,
387
+ requested_model="mistralai/mistral-large-2512",
388
+ accepted_resolved_models=("mistralai/mistral-large-2512",),
389
+ provider_only=("mistral",),
390
+ accepted_resolved_providers=("Mistral",),
391
+ max_output_tokens=131_072,
392
+ reasoning_effort=None,
393
+ temperature=0.2,
394
+ structured_output_mode=(
395
+ OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
396
+ ),
397
+ structured_output_strict=True,
398
+ require_positive_reasoning_tokens=False,
399
+ # Mistral advertises ``max_tokens`` while the maintained OpenAI-compatible
400
+ # transport emits ``max_completion_tokens``. Keep the sole Mistral route
401
+ # pinned and fallbacks forbidden while allowing OpenRouter's field bridge.
402
+ provider_require_parameters=False,
403
+ )
404
+
405
+
406
+ GPT_5_6_SOL_OPENAI_XHIGH = OpenRouterModelExecutionProfile(
407
+ profile_id="gpt_5_6_sol_openai_xhigh",
408
+ profile_version=2,
409
+ requested_model="openai/gpt-5.6-sol",
410
+ accepted_resolved_models=(
411
+ "openai/gpt-5.6-sol",
412
+ "openai/gpt-5.6-sol-20260709",
413
+ ),
414
+ provider_only=("openai",),
415
+ accepted_resolved_providers=("OpenAI",),
416
+ max_output_tokens=128_000,
417
+ reasoning_effort="xhigh",
418
+ # The pinned first-party endpoint does not advertise temperature.
419
+ temperature=None,
420
+ structured_output_mode=(
421
+ OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
422
+ ),
423
+ structured_output_strict=True,
424
+ json_schema_dialect=(
425
+ OpenRouterJsonSchemaDialect.OPENAI_STRICT_BOUNDED_TEXT_V1
426
+ ),
427
+ # The endpoint advertises ``max_tokens`` while the maintained transport
428
+ # emits ``max_completion_tokens``. Routing is still pinned to OpenAI with
429
+ # fallbacks forbidden; this only permits OpenRouter's spelling bridge.
430
+ provider_require_parameters=False,
431
+ )
432
+
433
+
434
+ GPT_5_6_LUNA_OPENAI_XHIGH = OpenRouterModelExecutionProfile(
435
+ profile_id="gpt_5_6_luna_openai_xhigh",
436
+ profile_version=1,
437
+ requested_model="openai/gpt-5.6-luna",
438
+ accepted_resolved_models=("openai/gpt-5.6-luna",),
439
+ provider_only=("openai",),
440
+ accepted_resolved_providers=("OpenAI",),
441
+ max_output_tokens=128_000,
442
+ reasoning_effort="xhigh",
443
+ # The pinned first-party endpoint does not advertise temperature.
444
+ temperature=None,
445
+ structured_output_mode=(
446
+ OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
447
+ ),
448
+ structured_output_strict=True,
449
+ json_schema_dialect=(
450
+ OpenRouterJsonSchemaDialect.OPENAI_STRICT_BOUNDED_TEXT_V1
451
+ ),
452
+ # Same OpenRouter spelling bridge as the sibling OpenAI route: the endpoint
453
+ # advertises ``max_tokens`` while the maintained transport emits
454
+ # ``max_completion_tokens``. Routing stays pinned to OpenAI, fallbacks
455
+ # forbidden.
456
+ provider_require_parameters=False,
457
+ )
458
+
459
+
460
+ # The third tier of the same OpenAI family, and the one the model ladder was
461
+ # missing. Without a profile here `declared_max_output_tokens` returns None for
462
+ # the terra route, so nothing is sent, so the route runs at the provider's
463
+ # undeclared default (~65,536) while its luna and sol siblings run at 128,000 --
464
+ # a silent per-tier ceiling that truncates exactly the longest replies and would
465
+ # have selected against terra at high effort, manufacturing non-monotonicity out
466
+ # of a transport gap. Provenance: OpenRouter model catalog,
467
+ # `top_provider.max_completion_tokens`, fetched 2026-08-20, reads 128000 for all
468
+ # three tiers (luna, terra, sol).
469
+ GPT_5_6_TERRA_OPENAI_XHIGH = OpenRouterModelExecutionProfile(
470
+ profile_id="gpt_5_6_terra_openai_xhigh",
471
+ profile_version=1,
472
+ requested_model="openai/gpt-5.6-terra",
473
+ accepted_resolved_models=("openai/gpt-5.6-terra",),
474
+ provider_only=("openai",),
475
+ accepted_resolved_providers=("OpenAI",),
476
+ max_output_tokens=128_000,
477
+ reasoning_effort="xhigh",
478
+ # The pinned first-party endpoint does not advertise temperature.
479
+ temperature=None,
480
+ structured_output_mode=(
481
+ OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
482
+ ),
483
+ structured_output_strict=True,
484
+ json_schema_dialect=(
485
+ OpenRouterJsonSchemaDialect.OPENAI_STRICT_BOUNDED_TEXT_V1
486
+ ),
487
+ # Same OpenRouter spelling bridge as its luna and sol siblings: the endpoint
488
+ # advertises ``max_tokens`` while the maintained transport emits
489
+ # ``max_completion_tokens``. Routing stays pinned to OpenAI, fallbacks
490
+ # forbidden.
491
+ provider_require_parameters=False,
492
+ )
493
+
494
+
495
+ GPT_OSS_120B_GROQ_HIGH = OpenRouterModelExecutionProfile(
496
+ profile_id="gpt_oss_120b_groq_high",
497
+ profile_version=7,
498
+ requested_model="openai/gpt-oss-120b",
499
+ accepted_resolved_models=("openai/gpt-oss-120b",),
500
+ provider_only=("groq",),
501
+ accepted_resolved_providers=("Groq",),
502
+ # The endpoint's 131,072-token context is shared by input and output. A
503
+ # 65,536-token completion ceiling preserves half the window for evolving
504
+ # prompts, memory, and schemas while remaining far above observed outputs.
505
+ max_output_tokens=65_536,
506
+ reasoning_effort="high",
507
+ temperature=0.2,
508
+ structured_output_mode=(
509
+ OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
510
+ ),
511
+ structured_output_strict=True,
512
+ # Groq accepts native length bounds but rejects the OpenAI-dialect rewrite
513
+ # ``^.{1,16384}$`` because its regex engine caps repeat counts. The base
514
+ # transformer removes unsupported bounds while local Pydantic validation
515
+ # remains authoritative.
516
+ json_schema_dialect=OpenRouterJsonSchemaDialect.PROVIDER_DEFAULT,
517
+ # Groq advertises the OpenAI-compatible ``max_tokens`` capability,
518
+ # while the Pydantic-AI transport emits ``max_completion_tokens``. Keep
519
+ # the route pinned and fallbacks forbidden, but let OpenRouter translate
520
+ # the equivalent field spelling instead of prefiltering the sole route.
521
+ provider_require_parameters=False,
522
+ )
523
+
524
+
525
+ GPT_OSS_20B_GROQ_HIGH = OpenRouterModelExecutionProfile(
526
+ profile_id="gpt_oss_20b_groq_high",
527
+ profile_version=7,
528
+ requested_model="openai/gpt-oss-20b",
529
+ accepted_resolved_models=("openai/gpt-oss-20b",),
530
+ provider_only=("groq",),
531
+ accepted_resolved_providers=("Groq",),
532
+ max_output_tokens=65_536,
533
+ reasoning_effort="high",
534
+ temperature=0.2,
535
+ structured_output_mode=(
536
+ OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
537
+ ),
538
+ structured_output_strict=True,
539
+ json_schema_dialect=OpenRouterJsonSchemaDialect.PROVIDER_DEFAULT,
540
+ provider_require_parameters=False,
541
+ )
542
+
543
+
544
+ # Prospective deployment repair after a two-connection reference cell received
545
+ # two HTTP 429 responses followed by a long-stream HTTP 502 while its sibling
546
+ # occupied the other Groq connection. The requested model, provider, schema,
547
+ # reasoning, and completion budget are unchanged; only queue admission is
548
+ # serialized. Keep the original profile addressable for exact replay.
549
+ GPT_OSS_20B_GROQ_HIGH_SERIAL = OpenRouterModelExecutionProfile(
550
+ profile_id="gpt_oss_20b_groq_high_serial",
551
+ profile_version=1,
552
+ requested_model="openai/gpt-oss-20b",
553
+ accepted_resolved_models=("openai/gpt-oss-20b",),
554
+ provider_only=("groq",),
555
+ accepted_resolved_providers=("Groq",),
556
+ max_output_tokens=65_536,
557
+ reasoning_effort="high",
558
+ temperature=0.2,
559
+ structured_output_mode=(
560
+ OpenRouterStructuredOutputMode.NATIVE_JSON_SCHEMA
561
+ ),
562
+ structured_output_strict=True,
563
+ json_schema_dialect=OpenRouterJsonSchemaDialect.PROVIDER_DEFAULT,
564
+ provider_require_parameters=False,
565
+ route_concurrency_cap=1,
566
+ )
567
+
568
+
569
+ OPENROUTER_MODEL_EXECUTION_PROFILES = {
570
+ "deepseek": DEEPSEEK_V4_PRO_STREAMLAKE_XHIGH,
571
+ "gpt_oss_120b": GPT_OSS_120B_GROQ_HIGH,
572
+ "gpt_oss_20b": GPT_OSS_20B_GROQ_HIGH,
573
+ "gpt_luna": GPT_5_6_LUNA_OPENAI_XHIGH,
574
+ "gpt_sol": GPT_5_6_SOL_OPENAI_XHIGH,
575
+ "gpt_terra": GPT_5_6_TERRA_OPENAI_XHIGH,
576
+ "mistral": MISTRAL_LARGE_3_MISTRAL,
577
+ "qwen": QWEN_3_7_MAX_ALIBABA_XHIGH,
578
+ }
579
+
580
+ # Transport variants are deliberately excluded from the six-model scientific
581
+ # roster above. They are separately named so a registry cannot silently
582
+ # reinterpret an already completed model cell after a route-capability repair.
583
+ OPENROUTER_MODEL_EXECUTION_PROFILE_VARIANTS = {
584
+ "deepseek_json": DEEPSEEK_V4_PRO_STREAMLAKE_XHIGH_NATIVE_JSON,
585
+ "gpt_oss_20b_serial": GPT_OSS_20B_GROQ_HIGH_SERIAL,
586
+ "qwen_rate_safe": QWEN_3_7_MAX_ALIBABA_XHIGH_RATE_SAFE,
587
+ }
588
+
589
+
590
+ def openrouter_model_execution_profile(
591
+ name: str,
592
+ ) -> OpenRouterModelExecutionProfile:
593
+ """Resolve one closed built-in profile without workload-dependent logic."""
594
+
595
+ if type(name) is not str:
596
+ raise TypeError("model profile name must be an exact string")
597
+ matches = tuple(
598
+ registry[name]
599
+ for registry in (
600
+ OPENROUTER_MODEL_EXECUTION_PROFILES,
601
+ OPENROUTER_MODEL_EXECUTION_PROFILE_VARIANTS,
602
+ )
603
+ if name in registry
604
+ )
605
+ if len(matches) != 1:
606
+ raise ValueError(f"unknown OpenRouter model execution profile: {name}")
607
+ return matches[0]
608
+
609
+
610
+ def declared_max_output_tokens(model: str) -> "int | None":
611
+ """The completion ceiling THIS PRODUCT declares for *model*, or ``None``.
612
+
613
+ A route sent no ``max_tokens`` does not run uncapped; it runs at the
614
+ PROVIDER's undeclared default, which on ``openai/gpt-5.6-luna`` is 65,536
615
+ against a route ceiling of 128,000 and against the 128,000 the profile
616
+ above already declares. The declaration was therefore unreachable from
617
+ the lightweight completion seam, and the gap silently truncated exactly
618
+ the calls that reasoned longest. This resolver is the one place that
619
+ turns the declaration into a number a caller can send.
620
+
621
+ Matching is on ``requested_model`` and tolerates a harness prefix
622
+ (``"openrouter:openai/gpt-5.6-luna"``), because that is the form
623
+ ``Settings.model`` carries. ``None`` means "this product declares
624
+ nothing for that route" -- an unknown model, or two profiles that
625
+ disagree -- and an honest ``None`` is returned rather than a guess, so
626
+ the caller keeps the pre-cap body instead of inventing a ceiling.
627
+ """
628
+
629
+ if type(model) is not str:
630
+ raise TypeError("model must be an exact string")
631
+ route = model.split(":", 1)[1] if ":" in model else model
632
+ declared = {
633
+ profile.max_output_tokens
634
+ for registry in (OPENROUTER_MODEL_EXECUTION_PROFILES,
635
+ OPENROUTER_MODEL_EXECUTION_PROFILE_VARIANTS)
636
+ for profile in registry.values()
637
+ if profile.requested_model == route
638
+ }
639
+ return declared.pop() if len(declared) == 1 else None
640
+
641
+
642
+ __all__ = [
643
+ "DEEPSEEK_V4_PRO_STREAMLAKE_XHIGH",
644
+ "DEEPSEEK_V4_PRO_STREAMLAKE_XHIGH_NATIVE_JSON",
645
+ "GPT_5_6_LUNA_OPENAI_XHIGH",
646
+ "GPT_5_6_SOL_OPENAI_XHIGH",
647
+ "GPT_5_6_TERRA_OPENAI_XHIGH",
648
+ "GPT_OSS_120B_GROQ_HIGH",
649
+ "GPT_OSS_20B_GROQ_HIGH",
650
+ "GPT_OSS_20B_GROQ_HIGH_SERIAL",
651
+ "MISTRAL_LARGE_3_MISTRAL",
652
+ "OPENROUTER_MODEL_EXECUTION_PROFILES",
653
+ "OPENROUTER_MODEL_EXECUTION_PROFILE_VARIANTS",
654
+ "OpenRouterModelExecutionProfile",
655
+ "QWEN_3_7_MAX_ALIBABA_XHIGH",
656
+ "QWEN_3_7_MAX_ALIBABA_XHIGH_RATE_SAFE",
657
+ "declared_max_output_tokens",
658
+ "openrouter_model_execution_profile",
659
+ ]