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,416 @@
1
+ """Reusable progress-aware OpenRouter queue composition.
2
+
3
+ This integration-layer factory binds the transport semantics that must stay
4
+ identical across benchmark composition roots. It does not read credentials,
5
+ choose a model/provider route, or validate benchmark/scientific results.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import math
11
+ import re
12
+ from dataclasses import dataclass
13
+ from enum import Enum
14
+
15
+ from agent_evolve.domain.llm_task_queue import MAX_ATTEMPTS, PartitionedRetryBudget
16
+
17
+ from agent_evolve.integrations.pydantic_ai.async_generator import (
18
+ OpenRouterReasoningConfig,
19
+ OpenRouterStructuredOutputMode,
20
+ PydanticAIStructuredGenerator,
21
+ )
22
+ from agent_evolve.integrations.pydantic_ai.outbound_request_manifest import (
23
+ OpenRouterOutboundRequestManifestSink,
24
+ )
25
+ from agent_evolve.integrations.pydantic_ai.json_schema_dialect import (
26
+ OpenRouterJsonSchemaDialect,
27
+ )
28
+ from agent_evolve.integrations.pydantic_ai.queued_runner import (
29
+ BoundedPrestreamAndSchemaRepairRetryClassifier,
30
+ ExactPayloadAttemptPolicy,
31
+ ExactTransportSchemaRepairAttemptPolicy,
32
+ FirstEventResilientBoundedSchemaRepairRetryClassifier,
33
+ NonRepeatingStreamTransportRetryClassifier,
34
+ OpaqueHTTP400AndBoundedSchemaRepairRetryClassifier,
35
+ OpaqueHTTP400AndSchemaRepairOnceRetryClassifier,
36
+ OpaqueHTTP400OnceRetryClassifier,
37
+ OutcomePublicationPolicy,
38
+ OutcomeSink,
39
+ QueuedStructuredGenerationRunner,
40
+ SCHEMA_REPAIR_POLICY_MANIFEST,
41
+ StructuredEvidencePublicationPolicy,
42
+ StructuredGenerationRetryClassifier,
43
+ StructuredOutputEvidenceSink,
44
+ StructuredRequestEvidenceSink,
45
+ TransportOnlyStructuredGenerationRetryClassifier,
46
+ create_production_queued_runner,
47
+ )
48
+ from agent_evolve.policies.llm_backoff import DeterministicHashJitter
49
+ from agent_evolve.ports.structured_generator import (
50
+ StructuredStreamLivenessPolicy,
51
+ StructuredStreamProgressSink,
52
+ )
53
+
54
+
55
+ _PROVIDER_SLUG = re.compile(r"^[a-z0-9][a-z0-9_-]{0,63}$")
56
+
57
+
58
+ class ProgressAwareRetryMode(str, Enum):
59
+ """Closed retry semantics selected by a benchmark composition root."""
60
+
61
+ STRUCTURED_GENERATION = "structured_generation"
62
+ TRANSPORT_ONLY = "transport_only"
63
+ NON_REPEATING_STREAM = "non_repeating_stream"
64
+ OPAQUE_HTTP_400_ONCE = "opaque_http_400_once"
65
+ OPAQUE_HTTP_400_AND_SCHEMA_REPAIR_ONCE = "opaque_http_400_and_schema_repair_once"
66
+ OPAQUE_HTTP_400_AND_BOUNDED_SCHEMA_REPAIR = (
67
+ "opaque_http_400_and_bounded_schema_repair"
68
+ )
69
+ FIRST_EVENT_RESILIENT_BOUNDED_SCHEMA_REPAIR = (
70
+ "first_event_resilient_bounded_schema_repair"
71
+ )
72
+ BOUNDED_PRESTREAM_AND_SCHEMA_REPAIR = (
73
+ "bounded_prestream_and_schema_repair"
74
+ )
75
+
76
+
77
+ _SCHEMA_REPAIR_RETRY_MODES = frozenset(
78
+ {
79
+ ProgressAwareRetryMode.OPAQUE_HTTP_400_AND_SCHEMA_REPAIR_ONCE,
80
+ ProgressAwareRetryMode.OPAQUE_HTTP_400_AND_BOUNDED_SCHEMA_REPAIR,
81
+ ProgressAwareRetryMode.FIRST_EVENT_RESILIENT_BOUNDED_SCHEMA_REPAIR,
82
+ ProgressAwareRetryMode.BOUNDED_PRESTREAM_AND_SCHEMA_REPAIR,
83
+ }
84
+ )
85
+
86
+
87
+ @dataclass(frozen=True, slots=True)
88
+ class ProgressAwareOpenRouterConfig:
89
+ """Frozen benchmark-neutral composition parameters."""
90
+
91
+ model_name: str
92
+ provider_only: tuple[str, ...]
93
+ connect_timeout_seconds: float
94
+ stream_liveness_policy: StructuredStreamLivenessPolicy
95
+ max_connections: int
96
+ max_pending: int
97
+ max_attempts: int
98
+ base_backoff_ns: int
99
+ max_backoff_ns: int
100
+ jitter_seed: int
101
+ jitter_domain: str
102
+ rate_limit_backoff_floor_ns: int = 0
103
+ retry_budget: PartitionedRetryBudget | None = None
104
+ app_title: str = "AgentEvolve research"
105
+ reasoning_config: OpenRouterReasoningConfig | None = None
106
+ structured_output_mode: OpenRouterStructuredOutputMode = (
107
+ OpenRouterStructuredOutputMode.TOOL
108
+ )
109
+ structured_output_strict: bool = False
110
+ json_schema_dialect: OpenRouterJsonSchemaDialect = (
111
+ OpenRouterJsonSchemaDialect.PROVIDER_DEFAULT
112
+ )
113
+ provider_require_parameters: bool = False
114
+ supports_forced_tool_choice: bool = True
115
+ retry_mode: ProgressAwareRetryMode = ProgressAwareRetryMode.STRUCTURED_GENERATION
116
+
117
+ def __post_init__(self) -> None:
118
+ if type(self.model_name) is not str or "/" not in self.model_name:
119
+ raise ValueError("model_name must be an OpenRouter model slug")
120
+ if (
121
+ type(self.provider_only) is not tuple
122
+ or not self.provider_only
123
+ or any(
124
+ type(item) is not str or _PROVIDER_SLUG.fullmatch(item) is None
125
+ for item in self.provider_only
126
+ )
127
+ or len(set(self.provider_only)) != len(self.provider_only)
128
+ ):
129
+ raise ValueError("provider_only must be unique closed provider slugs")
130
+ if (
131
+ isinstance(self.connect_timeout_seconds, bool)
132
+ or not isinstance(self.connect_timeout_seconds, (int, float))
133
+ or not math.isfinite(float(self.connect_timeout_seconds))
134
+ or not 1 <= float(self.connect_timeout_seconds) <= 600
135
+ ):
136
+ raise ValueError("connect_timeout_seconds must lie in [1,600]")
137
+ if type(self.stream_liveness_policy) is not StructuredStreamLivenessPolicy:
138
+ raise TypeError(
139
+ "stream_liveness_policy must be a StructuredStreamLivenessPolicy"
140
+ )
141
+ self.stream_liveness_policy.__post_init__()
142
+ if (
143
+ type(self.max_connections) is not int
144
+ or not 1 <= self.max_connections <= 256
145
+ ):
146
+ raise ValueError("max_connections must lie in [1,256]")
147
+ if type(self.max_pending) is not int or self.max_pending < 0:
148
+ raise ValueError("max_pending must be a non-negative exact integer")
149
+ if (
150
+ type(self.max_attempts) is not int
151
+ or not 1 <= self.max_attempts <= MAX_ATTEMPTS
152
+ ):
153
+ raise ValueError(f"max_attempts must lie in [1,{MAX_ATTEMPTS}]")
154
+ if self.retry_budget is not None and (
155
+ type(self.retry_budget) is not PartitionedRetryBudget
156
+ ):
157
+ raise TypeError(
158
+ "retry_budget must be a PartitionedRetryBudget or None"
159
+ )
160
+ if self.retry_budget is not None:
161
+ PartitionedRetryBudget.__post_init__(self.retry_budget)
162
+ for name in (
163
+ "base_backoff_ns",
164
+ "max_backoff_ns",
165
+ "rate_limit_backoff_floor_ns",
166
+ "jitter_seed",
167
+ ):
168
+ value = getattr(self, name)
169
+ if type(value) is not int or value < 0:
170
+ raise ValueError(f"{name} must be a non-negative exact integer")
171
+ if self.base_backoff_ns > self.max_backoff_ns:
172
+ raise ValueError("base_backoff_ns cannot exceed max_backoff_ns")
173
+ if self.rate_limit_backoff_floor_ns > self.max_backoff_ns:
174
+ raise ValueError(
175
+ "rate_limit_backoff_floor_ns cannot exceed max_backoff_ns"
176
+ )
177
+ # Reuse the jitter value object's closed domain validation.
178
+ DeterministicHashJitter(
179
+ seed=self.jitter_seed,
180
+ domain=self.jitter_domain,
181
+ )
182
+ if type(self.app_title) is not str or not self.app_title.strip():
183
+ raise ValueError("app_title must be non-empty")
184
+ if self.reasoning_config is not None and (
185
+ type(self.reasoning_config) is not OpenRouterReasoningConfig
186
+ ):
187
+ raise TypeError(
188
+ "reasoning_config must be an OpenRouterReasoningConfig or None"
189
+ )
190
+ if type(self.structured_output_mode) is not OpenRouterStructuredOutputMode:
191
+ raise TypeError(
192
+ "structured_output_mode must be an exact "
193
+ "OpenRouterStructuredOutputMode"
194
+ )
195
+ if type(self.structured_output_strict) is not bool:
196
+ raise TypeError("structured_output_strict must be an exact bool")
197
+ if type(self.json_schema_dialect) is not OpenRouterJsonSchemaDialect:
198
+ raise TypeError(
199
+ "json_schema_dialect must be an exact "
200
+ "OpenRouterJsonSchemaDialect"
201
+ )
202
+ if type(self.provider_require_parameters) is not bool:
203
+ raise TypeError("provider_require_parameters must be an exact bool")
204
+ if type(self.supports_forced_tool_choice) is not bool:
205
+ raise TypeError("supports_forced_tool_choice must be an exact bool")
206
+ if type(self.retry_mode) is not ProgressAwareRetryMode:
207
+ raise TypeError("retry_mode must be an exact ProgressAwareRetryMode")
208
+
209
+ @property
210
+ def provider_options(self) -> dict[str, object]:
211
+ """Return a fresh StreamLake/provider-only, no-fallback payload."""
212
+
213
+ values: dict[str, object] = {
214
+ "only": list(self.provider_only),
215
+ "allow_fallbacks": False,
216
+ }
217
+ if self.provider_require_parameters:
218
+ values["require_parameters"] = True
219
+ return values
220
+
221
+ def to_manifest_record(self) -> dict[str, object]:
222
+ """Project every frozen composition decision to canonical JSON values."""
223
+
224
+ policy = self.stream_liveness_policy
225
+ return {
226
+ "model_name": self.model_name,
227
+ "provider_options": self.provider_options,
228
+ "connect_timeout_seconds": float(self.connect_timeout_seconds),
229
+ "stream_liveness": {
230
+ "first_event_timeout_ns": policy.first_event_timeout_ns,
231
+ "idle_timeout_ns": policy.idle_timeout_ns,
232
+ "absolute_timeout_ns": policy.absolute_timeout_ns,
233
+ "cleanup": policy.cleanup_policy.to_manifest_record(),
234
+ },
235
+ "queue": {
236
+ "max_in_flight": self.max_connections,
237
+ "max_pending": self.max_pending,
238
+ "max_attempts": self.max_attempts,
239
+ **(
240
+ {
241
+ "retry_budget": {
242
+ "output_invalid_retries": (
243
+ self.retry_budget.output_invalid_retries
244
+ ),
245
+ "transport_retries": (
246
+ self.retry_budget.transport_retries
247
+ ),
248
+ }
249
+ }
250
+ if self.retry_budget is not None
251
+ else {}
252
+ ),
253
+ "attempt_timeout_ns": None,
254
+ "attempt_request_policy": (
255
+ "exact_transport_schema_repair_v4"
256
+ if self.retry_mode in _SCHEMA_REPAIR_RETRY_MODES
257
+ else "exact_payload"
258
+ ),
259
+ **(
260
+ {
261
+ "schema_repair_policy": (
262
+ SCHEMA_REPAIR_POLICY_MANIFEST.to_trace_record()
263
+ )
264
+ }
265
+ if self.retry_mode in _SCHEMA_REPAIR_RETRY_MODES
266
+ else {}
267
+ ),
268
+ "retry_classifier": self.retry_mode.value,
269
+ "backoff": {
270
+ "kind": (
271
+ "exponential_deterministic_task_keyed_full_jitter_"
272
+ "with_rate_limit_floor"
273
+ if self.rate_limit_backoff_floor_ns
274
+ else "exponential_deterministic_task_keyed_full_jitter"
275
+ ),
276
+ "base_backoff_ns": self.base_backoff_ns,
277
+ "max_backoff_ns": self.max_backoff_ns,
278
+ "rate_limit_backoff_floor_ns": (
279
+ self.rate_limit_backoff_floor_ns
280
+ ),
281
+ "jitter_seed": self.jitter_seed,
282
+ "jitter_domain": self.jitter_domain,
283
+ },
284
+ },
285
+ "reasoning": (
286
+ None
287
+ if self.reasoning_config is None
288
+ else self.reasoning_config.to_model_setting()
289
+ ),
290
+ "structured_output_mode": self.structured_output_mode.value,
291
+ "structured_output_strict": self.structured_output_strict,
292
+ "json_schema_dialect": self.json_schema_dialect.value,
293
+ "supports_forced_tool_choice": self.supports_forced_tool_choice,
294
+ "lifecycle": "queued_runner_owns_generator_and_http_client",
295
+ }
296
+
297
+
298
+ def create_progress_aware_openrouter_runner(
299
+ *,
300
+ api_key: str,
301
+ config: ProgressAwareOpenRouterConfig,
302
+ progress_sink: StructuredStreamProgressSink,
303
+ outcome_sink: OutcomeSink,
304
+ request_evidence_sink: StructuredRequestEvidenceSink | None = None,
305
+ output_evidence_sink: StructuredOutputEvidenceSink | None = None,
306
+ outbound_request_manifest_sink: (
307
+ OpenRouterOutboundRequestManifestSink | None
308
+ ) = None,
309
+ evidence_publication_policy: StructuredEvidencePublicationPolicy = (
310
+ StructuredEvidencePublicationPolicy.BEST_EFFORT
311
+ ),
312
+ ) -> QueuedStructuredGenerationRunner:
313
+ """Compose one owned production runner with no competing total timeout.
314
+
315
+ The API key is an explicit composition-root input and is never loaded here.
316
+ Both telemetry sinks are required and fail closed before a successful
317
+ response may escape the runner.
318
+ """
319
+
320
+ if type(config) is not ProgressAwareOpenRouterConfig:
321
+ raise TypeError("config must be a ProgressAwareOpenRouterConfig")
322
+ config.__post_init__()
323
+ if not callable(progress_sink):
324
+ raise TypeError("progress_sink must be callable")
325
+ if not callable(outcome_sink):
326
+ raise TypeError("outcome_sink must be callable")
327
+ for name, sink in (
328
+ ("request_evidence_sink", request_evidence_sink),
329
+ ("output_evidence_sink", output_evidence_sink),
330
+ ("outbound_request_manifest_sink", outbound_request_manifest_sink),
331
+ ):
332
+ if sink is not None and not callable(sink):
333
+ raise TypeError(f"{name} must be callable or None")
334
+ if type(evidence_publication_policy) is not StructuredEvidencePublicationPolicy:
335
+ raise TypeError(
336
+ "evidence_publication_policy must be a StructuredEvidencePublicationPolicy"
337
+ )
338
+ if evidence_publication_policy is StructuredEvidencePublicationPolicy.REQUIRED:
339
+ if request_evidence_sink is None or output_evidence_sink is None:
340
+ raise ValueError("required structured evidence needs both sinks")
341
+
342
+ generator = PydanticAIStructuredGenerator.openrouter(
343
+ api_key=api_key,
344
+ model_name=config.model_name,
345
+ max_connections=config.max_connections,
346
+ timeout_seconds=float(config.connect_timeout_seconds),
347
+ provider_options=config.provider_options,
348
+ reasoning_config=config.reasoning_config,
349
+ structured_output_mode=config.structured_output_mode,
350
+ structured_output_strict=config.structured_output_strict,
351
+ json_schema_dialect=config.json_schema_dialect,
352
+ supports_forced_tool_choice=config.supports_forced_tool_choice,
353
+ app_title=config.app_title,
354
+ stream_liveness_policy=config.stream_liveness_policy,
355
+ stream_progress_sink=progress_sink,
356
+ outbound_request_manifest_sink=outbound_request_manifest_sink,
357
+ )
358
+ return create_production_queued_runner(
359
+ generator=generator,
360
+ max_in_flight=config.max_connections,
361
+ max_pending=config.max_pending,
362
+ max_attempts=config.max_attempts,
363
+ retry_budget=config.retry_budget,
364
+ attempt_timeout_ns=None,
365
+ base_backoff_ns=config.base_backoff_ns,
366
+ max_backoff_ns=config.max_backoff_ns,
367
+ rate_limit_backoff_floor_ns=config.rate_limit_backoff_floor_ns,
368
+ jitter_policy=DeterministicHashJitter(
369
+ seed=config.jitter_seed,
370
+ domain=config.jitter_domain,
371
+ ),
372
+ close_generator=True,
373
+ outcome_sink=outcome_sink,
374
+ outcome_publication_policy=OutcomePublicationPolicy.REQUIRED,
375
+ request_evidence_sink=request_evidence_sink,
376
+ output_evidence_sink=output_evidence_sink,
377
+ evidence_publication_policy=evidence_publication_policy,
378
+ attempt_request_policy=(
379
+ ExactTransportSchemaRepairAttemptPolicy()
380
+ if config.retry_mode in _SCHEMA_REPAIR_RETRY_MODES
381
+ else ExactPayloadAttemptPolicy()
382
+ ),
383
+ retry_classifier={
384
+ ProgressAwareRetryMode.STRUCTURED_GENERATION: (
385
+ StructuredGenerationRetryClassifier
386
+ ),
387
+ ProgressAwareRetryMode.TRANSPORT_ONLY: (
388
+ TransportOnlyStructuredGenerationRetryClassifier
389
+ ),
390
+ ProgressAwareRetryMode.NON_REPEATING_STREAM: (
391
+ NonRepeatingStreamTransportRetryClassifier
392
+ ),
393
+ ProgressAwareRetryMode.OPAQUE_HTTP_400_ONCE: (
394
+ OpaqueHTTP400OnceRetryClassifier
395
+ ),
396
+ ProgressAwareRetryMode.OPAQUE_HTTP_400_AND_SCHEMA_REPAIR_ONCE: (
397
+ OpaqueHTTP400AndSchemaRepairOnceRetryClassifier
398
+ ),
399
+ ProgressAwareRetryMode.OPAQUE_HTTP_400_AND_BOUNDED_SCHEMA_REPAIR: (
400
+ OpaqueHTTP400AndBoundedSchemaRepairRetryClassifier
401
+ ),
402
+ ProgressAwareRetryMode.FIRST_EVENT_RESILIENT_BOUNDED_SCHEMA_REPAIR: (
403
+ FirstEventResilientBoundedSchemaRepairRetryClassifier
404
+ ),
405
+ ProgressAwareRetryMode.BOUNDED_PRESTREAM_AND_SCHEMA_REPAIR: (
406
+ BoundedPrestreamAndSchemaRepairRetryClassifier
407
+ ),
408
+ }[config.retry_mode](),
409
+ )
410
+
411
+
412
+ __all__ = [
413
+ "ProgressAwareOpenRouterConfig",
414
+ "ProgressAwareRetryMode",
415
+ "create_progress_aware_openrouter_runner",
416
+ ]