traigent 0.18.1.dev8__tar.gz → 0.18.1.dev10__tar.gz

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 (630) hide show
  1. {traigent-0.18.1.dev8/traigent.egg-info → traigent-0.18.1.dev10}/PKG-INFO +1 -1
  2. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/pyproject.toml +1 -1
  3. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/backend_client.py +5 -6
  4. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/trial_operations.py +56 -16
  5. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/backend_session_manager.py +77 -26
  6. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/orchestrator.py +26 -2
  7. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/trial_lifecycle.py +16 -5
  8. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/base.py +177 -8
  9. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/interactive_optimizer.py +64 -33
  10. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10/traigent.egg-info}/PKG-INFO +1 -1
  11. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/CHANGELOG.md +0 -0
  12. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/COMMERCIAL-LICENSE.md +0 -0
  13. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/CONTRIBUTING.md +0 -0
  14. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/CONTRIBUTOR-LICENSING.md +0 -0
  15. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/DISCLAIMER.md +0 -0
  16. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/LICENSE +0 -0
  17. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/MANIFEST.in +0 -0
  18. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/NOTICE +0 -0
  19. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/README.md +0 -0
  20. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/SECURITY.md +0 -0
  21. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/LOCAL_CI_GATE.md +0 -0
  22. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/README.md +0 -0
  23. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/SYNC_MAP.md +0 -0
  24. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/agent-skill.md +0 -0
  25. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/complete-function-specification.md +0 -0
  26. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/decorator-reference.md +0 -0
  27. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/enterprise-beta-api.md +0 -0
  28. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/interactive_optimizer.md +0 -0
  29. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/telemetry.md +0 -0
  30. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/thread-pool-examples.md +0 -0
  31. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/ARCHITECTURE.md +0 -0
  32. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/cost-architecture-validation.md +0 -0
  33. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/execution_mode_follow_up.md +0 -0
  34. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/integrations-inventory.md +0 -0
  35. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/plugin_architecture.md +0 -0
  36. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/project-structure.md +0 -0
  37. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/stop_conditions.md +0 -0
  38. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/concepts/composite-knob-ir.md +0 -0
  39. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/concepts/composite-knobs.md +0 -0
  40. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/concepts/guided-generation.md +0 -0
  41. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
  42. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
  43. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/CONTRIBUTING.md +0 -0
  44. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
  45. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/README.md +0 -0
  46. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/SECURITY.md +0 -0
  47. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/aikido_triage.md +0 -0
  48. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/code_review_instructions.md +0 -0
  49. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/test-quality-guide.md +0 -0
  50. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
  51. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/demos/README.md +0 -0
  52. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/API_PATTERNS.md +0 -0
  53. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/LEARNING_ROADMAP.md +0 -0
  54. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/QUICK_REFERENCE.md +0 -0
  55. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/README.md +0 -0
  56. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/START_HERE.md +0 -0
  57. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/TROUBLESHOOTING.md +0 -0
  58. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/fake-completion-tracking.md +0 -0
  59. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/feature_matrices/README.md +0 -0
  60. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/README.md +0 -0
  61. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/authentication.md +0 -0
  62. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/constraint-dsl.md +0 -0
  63. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/dataflow-detection.md +0 -0
  64. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/framework_override_enhanced_features.md +0 -0
  65. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/mcp-server.md +0 -0
  66. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/observability-spans.md +0 -0
  67. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/onboarding.md +0 -0
  68. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/prompt_management.md +0 -0
  69. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/recommendations.md +0 -0
  70. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/safety-gates.md +0 -0
  71. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/seamless_injection.md +0 -0
  72. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/strategy-presets.md +0 -0
  73. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/strict_metrics_nulls.md +0 -0
  74. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/GETTING_STARTED.md +0 -0
  75. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/README.md +0 -0
  76. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/installation.md +0 -0
  77. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/minimal-integration.md +0 -0
  78. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
  79. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/testing.md +0 -0
  80. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
  81. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/evaluation.md +0 -0
  82. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/execution-mode-migration.md +0 -0
  83. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/execution-modes.md +0 -0
  84. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/js-bridge.md +0 -0
  85. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/llm_plugin_migration_guide.md +0 -0
  86. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/parallel-configuration.md +0 -0
  87. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/secrets_management.md +0 -0
  88. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/hybrid-mode-api-contract.md +0 -0
  89. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/hybrid-mode-client-guide.md +0 -0
  90. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/operations/azure_openai.md +0 -0
  91. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/operations/bedrock.md +0 -0
  92. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/operations/google_gemini.md +0 -0
  93. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/security/trust_model.md +0 -0
  94. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
  95. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/concepts/composite-knob-ir.md +0 -0
  96. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/concepts/composite-knobs.md +0 -0
  97. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/concepts/guided-generation.md +0 -0
  98. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/schema.md +0 -0
  99. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/tagging_tracking.md +0 -0
  100. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/taxonomy_reference.md +0 -0
  101. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
  102. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/README.md +0 -0
  103. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/agent_optimization.md +0 -0
  104. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/choosing_optimization_model.md +0 -0
  105. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/configuration-spaces.md +0 -0
  106. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/evaluation_guide.md +0 -0
  107. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/injection_modes.md +0 -0
  108. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/interactive_optimization.md +0 -0
  109. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/smart_optimization.md +0 -0
  110. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/tuned_variables.md +0 -0
  111. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/walkthrough.md +0 -0
  112. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-all.txt +0 -0
  113. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-analytics.txt +0 -0
  114. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-bayesian.txt +0 -0
  115. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-chroma.txt +0 -0
  116. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-dev.txt +0 -0
  117. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-hybrid.txt +0 -0
  118. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-integrations.txt +0 -0
  119. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-security.txt +0 -0
  120. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-test.txt +0 -0
  121. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements.txt +0 -0
  122. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/setup.cfg +0 -0
  123. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/__init__.py +0 -0
  124. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/_version.py +0 -0
  125. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/adapters/execution_adapter.py +0 -0
  126. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/admin/__init__.py +0 -0
  127. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/admin/client.py +0 -0
  128. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/admin/config.py +0 -0
  129. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/admin/dtos.py +0 -0
  130. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/agents/__init__.py +0 -0
  131. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/agents/config_mapper.py +0 -0
  132. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/agents/executor.py +0 -0
  133. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/agents/platforms.py +0 -0
  134. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/agents/specification_generator.py +0 -0
  135. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/__init__.py +0 -0
  136. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/anomaly.py +0 -0
  137. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/cost_optimization.py +0 -0
  138. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/example_insights.py +0 -0
  139. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/intelligence.py +0 -0
  140. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/meta_learning.py +0 -0
  141. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/next_steps.py +0 -0
  142. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/optimization_plan.py +0 -0
  143. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/predictive.py +0 -0
  144. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/render.py +0 -0
  145. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/scheduling.py +0 -0
  146. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics_mcp/__init__.py +0 -0
  147. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics_mcp/server.py +0 -0
  148. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics_mcp/tools.py +0 -0
  149. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/__init__.py +0 -0
  150. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/agent_inference.py +0 -0
  151. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/config_builder.py +0 -0
  152. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/config_space.py +0 -0
  153. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/constraint_builders.py +0 -0
  154. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/constraints.py +0 -0
  155. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/decorators.py +0 -0
  156. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/functions.py +0 -0
  157. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/parameter_ranges.py +0 -0
  158. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/parameter_validator.py +0 -0
  159. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/safety.py +0 -0
  160. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/strategy_presets.py +0 -0
  161. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/types.py +0 -0
  162. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/validation_protocol.py +0 -0
  163. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/__init__.py +0 -0
  164. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/auth_commands.py +0 -0
  165. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/detect_tvars_command.py +0 -0
  166. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/function_discovery.py +0 -0
  167. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/generate_config_command.py +0 -0
  168. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/hooks_commands.py +0 -0
  169. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/local_commands.py +0 -0
  170. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/main.py +0 -0
  171. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/next_steps_command.py +0 -0
  172. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/onboard_commands.py +0 -0
  173. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/optimization_validator.py +0 -0
  174. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/plan_command.py +0 -0
  175. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/playbook_commands.py +0 -0
  176. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/sync_commands.py +0 -0
  177. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/validation_types.py +0 -0
  178. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/__init__.py +0 -0
  179. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/_aiohttp_compat.py +0 -0
  180. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/agent_dtos.py +0 -0
  181. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/analytics_auth.py +0 -0
  182. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/analytics_client.py +0 -0
  183. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/api_key_manager.py +0 -0
  184. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/api_operations.py +0 -0
  185. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/async_batch_transport.py +0 -0
  186. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/auth.py +0 -0
  187. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/backend_bridges.py +0 -0
  188. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/backend_components.py +0 -0
  189. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/backend_synchronizer.py +0 -0
  190. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/benchmark_client.py +0 -0
  191. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/billing.py +0 -0
  192. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/client.py +0 -0
  193. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/cloud_operations.py +0 -0
  194. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/credential_manager.py +0 -0
  195. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/credential_resolver.py +0 -0
  196. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/dataset_converter.py +0 -0
  197. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/dtos.py +0 -0
  198. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/governance.py +0 -0
  199. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/integration_manager.py +0 -0
  200. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/models.py +0 -0
  201. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/optimizer_client.py +0 -0
  202. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/password_auth_handler.py +0 -0
  203. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/privacy_operations.py +0 -0
  204. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/production_mcp_client.py +0 -0
  205. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/remote_guidance.py +0 -0
  206. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/resilient_client.py +0 -0
  207. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/service.py +0 -0
  208. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/session_operations.py +0 -0
  209. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/session_types.py +0 -0
  210. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/sessions.py +0 -0
  211. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/smart_pruning.py +0 -0
  212. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/subset_selection.py +0 -0
  213. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/sync_manager.py +0 -0
  214. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/token_manager.py +0 -0
  215. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/trial_tracker.py +0 -0
  216. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/url_security.py +0 -0
  217. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/user_agent.py +0 -0
  218. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/validators.py +0 -0
  219. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/__init__.py +0 -0
  220. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/api_keys.py +0 -0
  221. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/ast_transformer.py +0 -0
  222. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/backend_config.py +0 -0
  223. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/context.py +0 -0
  224. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/feature_flags.py +0 -0
  225. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/models.yaml +0 -0
  226. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/parallel.py +0 -0
  227. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/project.py +0 -0
  228. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/provider_support.py +0 -0
  229. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/providers.py +0 -0
  230. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/runtime_injector.py +0 -0
  231. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/tenant.py +0 -0
  232. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/types.py +0 -0
  233. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/__init__.py +0 -0
  234. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/agent_classifier.py +0 -0
  235. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/apply.py +0 -0
  236. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
  237. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
  238. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
  239. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
  240. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/catalog.py +0 -0
  241. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/llm_backend.py +0 -0
  242. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/pipeline.py +0 -0
  243. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/presets/__init__.py +0 -0
  244. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
  245. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
  246. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/presets/constraint_templates.py +0 -0
  247. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/presets/range_presets.py +0 -0
  248. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/recommendations.py +0 -0
  249. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/__init__.py +0 -0
  250. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/benchmarks.py +0 -0
  251. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/objectives.py +0 -0
  252. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
  253. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
  254. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
  255. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
  256. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/types.py +0 -0
  257. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/__init__.py +0 -0
  258. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/best_config_runtime.py +0 -0
  259. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/cache_policy.py +0 -0
  260. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/ci_approval.py +0 -0
  261. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/config_state_manager.py +0 -0
  262. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/constants.py +0 -0
  263. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/cost_enforcement.py +0 -0
  264. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/cost_estimator.py +0 -0
  265. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/evaluator_wrapper.py +0 -0
  266. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/exception_handler.py +0 -0
  267. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/execution_policy_runtime.py +0 -0
  268. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/license.py +0 -0
  269. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/logger_facade.py +0 -0
  270. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/mandatory_metrics.py +0 -0
  271. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/meta_types.py +0 -0
  272. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/metadata_helpers.py +0 -0
  273. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/metric_registry.py +0 -0
  274. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/metrics_aggregator.py +0 -0
  275. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/namespace.py +0 -0
  276. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/objectives.py +0 -0
  277. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/optimization_pipeline.py +0 -0
  278. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/optimized_function.py +0 -0
  279. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/orchestrator_helpers.py +0 -0
  280. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/parallel_execution_manager.py +0 -0
  281. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/progress_manager.py +0 -0
  282. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/result_selection.py +0 -0
  283. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/sample_budget.py +0 -0
  284. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/samplers/__init__.py +0 -0
  285. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/samplers/random_sampler.py +0 -0
  286. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/session_context.py +0 -0
  287. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/session_types.py +0 -0
  288. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/stat_significance.py +0 -0
  289. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/stop_condition_manager.py +0 -0
  290. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/stop_conditions.py +0 -0
  291. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/trace_env.py +0 -0
  292. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/tracing.py +0 -0
  293. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/trial_context.py +0 -0
  294. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/trial_result_factory.py +0 -0
  295. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/types.py +0 -0
  296. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/types_ext.py +0 -0
  297. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/utils.py +0 -0
  298. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/workflow_trace_manager.py +0 -0
  299. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core_metrics/__init__.py +0 -0
  300. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core_metrics/client.py +0 -0
  301. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core_metrics/config.py +0 -0
  302. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core_metrics/dtos.py +0 -0
  303. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/defaults.py +0 -0
  304. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/effectuation/__init__.py +0 -0
  305. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/effectuation/contracts.py +0 -0
  306. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/effectuation/strategies/__init__.py +0 -0
  307. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/effectuation/strategies/framework_param.py +0 -0
  308. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/effectuation/strategies/self_consistency.py +0 -0
  309. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluation/__init__.py +0 -0
  310. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluation/client.py +0 -0
  311. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluation/config.py +0 -0
  312. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluation/dtos.py +0 -0
  313. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/__init__.py +0 -0
  314. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
  315. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
  316. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/catalog_loader.py +0 -0
  317. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/dataset_registry.py +0 -0
  318. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/hybrid_api.py +0 -0
  319. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/local.py +0 -0
  320. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/metrics.py +0 -0
  321. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/metrics_tracker.py +0 -0
  322. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/recommendations.py +0 -0
  323. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/__init__.py +0 -0
  324. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/__init__.py +0 -0
  325. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/_bootstrap.py +0 -0
  326. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/_demo.py +0 -0
  327. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/anthropic.py +0 -0
  328. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/aws.py +0 -0
  329. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/azure.py +0 -0
  330. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/gcp.py +0 -0
  331. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/gemini.py +0 -0
  332. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/groq.py +0 -0
  333. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/litellm_any.py +0 -0
  334. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/manifest.json +0 -0
  335. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/openai.py +0 -0
  336. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/openrouter.py +0 -0
  337. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/qa_samples.jsonl +0 -0
  338. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/quickstart/__init__.py +0 -0
  339. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/quickstart/__main__.py +0 -0
  340. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/quickstart/_env.py +0 -0
  341. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/quickstart/publish_and_verify.py +0 -0
  342. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
  343. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/tutorial_bootstrap.py +0 -0
  344. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/__init__.py +0 -0
  345. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/backend_provider.py +0 -0
  346. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/example_synth.py +0 -0
  347. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/llm_provider.py +0 -0
  348. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/loop.py +0 -0
  349. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/models.py +0 -0
  350. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/options.py +0 -0
  351. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/prompt_rewriter.py +0 -0
  352. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/__init__.py +0 -0
  353. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/artifacts.py +0 -0
  354. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/buffer.py +0 -0
  355. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/document.py +0 -0
  356. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/edits.py +0 -0
  357. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/prompts.py +0 -0
  358. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/reflection.py +0 -0
  359. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/schedule.py +0 -0
  360. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/slow_update.py +0 -0
  361. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/splits.py +0 -0
  362. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/trainer.py +0 -0
  363. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/trainer_result.py +0 -0
  364. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/validators.py +0 -0
  365. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/guaranteed_modes.py +0 -0
  366. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hooks/__init__.py +0 -0
  367. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hooks/config.py +0 -0
  368. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hooks/installer.py +0 -0
  369. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hooks/validator.py +0 -0
  370. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/__init__.py +0 -0
  371. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/discovery.py +0 -0
  372. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/http_transport.py +0 -0
  373. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/lifecycle.py +0 -0
  374. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/mcp_transport.py +0 -0
  375. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/protocol.py +0 -0
  376. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/transport.py +0 -0
  377. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/__init__.py +0 -0
  378. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/activation.py +0 -0
  379. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/base.py +0 -0
  380. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/base_plugin.py +0 -0
  381. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/bedrock_client.py +0 -0
  382. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/config.py +0 -0
  383. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/dspy_adapter.py +0 -0
  384. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/framework_override.py +0 -0
  385. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langchain/__init__.py +0 -0
  386. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langchain/handler.py +0 -0
  387. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langfuse/__init__.py +0 -0
  388. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langfuse/callback.py +0 -0
  389. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langfuse/client.py +0 -0
  390. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langfuse/tracker.py +0 -0
  391. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/__init__.py +0 -0
  392. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/anthropic_plugin.py +0 -0
  393. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
  394. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/base_llm_plugin.py +0 -0
  395. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/bedrock_plugin.py +0 -0
  396. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/cohere_plugin.py +0 -0
  397. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/gemini_plugin.py +0 -0
  398. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/huggingface_plugin.py +0 -0
  399. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/langchain/__init__.py +0 -0
  400. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/langchain/base.py +0 -0
  401. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/langchain_plugin.py +0 -0
  402. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/litellm_plugin.py +0 -0
  403. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
  404. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/mistral_plugin.py +0 -0
  405. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/openai.py +0 -0
  406. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/openai_plugin.py +0 -0
  407. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/mappings.py +0 -0
  408. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/__init__.py +0 -0
  409. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
  410. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
  411. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/base.py +0 -0
  412. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/cache.py +0 -0
  413. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
  414. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
  415. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
  416. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/registry.py +0 -0
  417. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/observability/__init__.py +0 -0
  418. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/observability/mlflow.py +0 -0
  419. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/observability/wandb.py +0 -0
  420. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/observability/workflow_traces.py +0 -0
  421. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/plugin_registry.py +0 -0
  422. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/providers.py +0 -0
  423. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/pydantic_ai/__init__.py +0 -0
  424. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/pydantic_ai/_types.py +0 -0
  425. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/pydantic_ai/handler.py +0 -0
  426. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/pydantic_ai/plugin.py +0 -0
  427. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/__init__.py +0 -0
  428. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/discovery.py +0 -0
  429. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/message_coercion.py +0 -0
  430. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/mock_adapter.py +0 -0
  431. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/parameter_normalizer.py +0 -0
  432. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/response_wrapper.py +0 -0
  433. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/validation.py +0 -0
  434. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/version_compat.py +0 -0
  435. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/vector_stores/__init__.py +0 -0
  436. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/vector_stores/base.py +0 -0
  437. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
  438. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
  439. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
  440. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/wrappers.py +0 -0
  441. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/invokers/__init__.py +0 -0
  442. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/invokers/base.py +0 -0
  443. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/invokers/batch.py +0 -0
  444. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/invokers/local.py +0 -0
  445. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/invokers/streaming.py +0 -0
  446. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/__init__.py +0 -0
  447. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/adapters.py +0 -0
  448. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/bindings.py +0 -0
  449. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/canonical.py +0 -0
  450. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/cascade.py +0 -0
  451. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/certificates.py +0 -0
  452. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/composites.py +0 -0
  453. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/kinds.py +0 -0
  454. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/patterns.py +0 -0
  455. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/resolution.py +0 -0
  456. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/resolver.py +0 -0
  457. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/runtime.py +0 -0
  458. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/signals.py +0 -0
  459. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/telemetry.py +0 -0
  460. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/mcp/__init__.py +0 -0
  461. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/mcp/server.py +0 -0
  462. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/mcp/tools.py +0 -0
  463. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/__init__.py +0 -0
  464. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/agent_metrics.py +0 -0
  465. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/content_features.py +0 -0
  466. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/deepeval_metrics.py +0 -0
  467. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/ragas_metrics.py +0 -0
  468. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/registry.py +0 -0
  469. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/__init__.py +0 -0
  470. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/agent_spans.py +0 -0
  471. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/client.py +0 -0
  472. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/config.py +0 -0
  473. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/decorators.py +0 -0
  474. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/dtos.py +0 -0
  475. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/__init__.py +0 -0
  476. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/base.py +0 -0
  477. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/batch_optimizers.py +0 -0
  478. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/cloud_optimizer.py +0 -0
  479. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/grid.py +0 -0
  480. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/random.py +0 -0
  481. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/registry.py +0 -0
  482. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/remote.py +0 -0
  483. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/remote_services.py +0 -0
  484. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/results.py +0 -0
  485. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/__init__.py +0 -0
  486. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/loader.py +0 -0
  487. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/model.py +0 -0
  488. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/scaffold.py +0 -0
  489. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
  490. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/staleness.py +0 -0
  491. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/validator.py +0 -0
  492. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/plugins/__init__.py +0 -0
  493. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/plugins/registry.py +0 -0
  494. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/projects/__init__.py +0 -0
  495. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/projects/client.py +0 -0
  496. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/projects/config.py +0 -0
  497. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/projects/dtos.py +0 -0
  498. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/prompts/__init__.py +0 -0
  499. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/prompts/client.py +0 -0
  500. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/prompts/config.py +0 -0
  501. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/prompts/dtos.py +0 -0
  502. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/providers/__init__.py +0 -0
  503. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/providers/validation.py +0 -0
  504. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/py.typed +0 -0
  505. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/reporting/__init__.py +0 -0
  506. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/reporting/example_map.py +0 -0
  507. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/__init__.py +0 -0
  508. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/audit.py +0 -0
  509. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/__init__.py +0 -0
  510. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/helpers.py +0 -0
  511. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/mfa.py +0 -0
  512. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/models.py +0 -0
  513. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/oidc.py +0 -0
  514. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/saml.py +0 -0
  515. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/sms.py +0 -0
  516. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/totp.py +0 -0
  517. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/config.py +0 -0
  518. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/credentials.py +0 -0
  519. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/crypto_utils.py +0 -0
  520. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/deployment.py +0 -0
  521. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/encryption.py +0 -0
  522. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/enterprise.py +0 -0
  523. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/headers.py +0 -0
  524. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/input_validation.py +0 -0
  525. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/jwt_validator.py +0 -0
  526. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/rate_limiter.py +0 -0
  527. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/redaction.py +0 -0
  528. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/session_manager.py +0 -0
  529. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/tenant.py +0 -0
  530. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
  531. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
  532. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
  533. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
  534. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
  535. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
  536. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-debugging/SKILL.md +0 -0
  537. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-debugging/references/error-reference.md +0 -0
  538. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
  539. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
  540. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
  541. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
  542. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
  543. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
  544. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-integrations/SKILL.md +0 -0
  545. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
  546. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
  547. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
  548. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
  549. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-quickstart/references/environment-variables.md +0 -0
  550. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
  551. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-run-optimization/SKILL.md +0 -0
  552. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
  553. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-run-optimization/references/cost-management.md +0 -0
  554. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
  555. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/storage/__init__.py +0 -0
  556. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/storage/local_storage.py +0 -0
  557. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/testing/__init__.py +0 -0
  558. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/traigent_client.py +0 -0
  559. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/traigent_integration.py +0 -0
  560. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/__init__.py +0 -0
  561. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/dataflow_strategy.py +0 -0
  562. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/detection_strategies.py +0 -0
  563. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/detection_types.py +0 -0
  564. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/detector.py +0 -0
  565. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/discovery.py +0 -0
  566. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/observation.py +0 -0
  567. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/py.typed +0 -0
  568. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/__init__.py +0 -0
  569. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/__main__.py +0 -0
  570. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/models.py +0 -0
  571. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/objectives.py +0 -0
  572. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/options.py +0 -0
  573. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/promotion_gate.py +0 -0
  574. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/registry.py +0 -0
  575. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/spec_loader.py +0 -0
  576. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/spec_validator.py +0 -0
  577. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/statistics.py +0 -0
  578. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/__init__.py +0 -0
  579. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/artifact_fingerprints.py +0 -0
  580. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/batch_optimizer_utils.py +0 -0
  581. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/batch_processing.py +0 -0
  582. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/callbacks.py +0 -0
  583. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/console.py +0 -0
  584. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/constraints.py +0 -0
  585. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/cost_calculator.py +0 -0
  586. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/diagnostics.py +0 -0
  587. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/discrete_domains.py +0 -0
  588. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/env_config.py +0 -0
  589. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/error_handler.py +0 -0
  590. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/example_id.py +0 -0
  591. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/exceptions.py +0 -0
  592. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/file_versioning.py +0 -0
  593. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/function_identity.py +0 -0
  594. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/hashing.py +0 -0
  595. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/importance.py +0 -0
  596. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/incentives.py +0 -0
  597. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/insights.py +0 -0
  598. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/langchain_interceptor.py +0 -0
  599. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/litellm_interceptor.py +0 -0
  600. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/llm_response_parsing.py +0 -0
  601. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/local_analytics.py +0 -0
  602. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/logging.py +0 -0
  603. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/multi_objective.py +0 -0
  604. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/numpy_compat.py +0 -0
  605. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/objectives.py +0 -0
  606. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/optimization_analyzer.py +0 -0
  607. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/optimization_logger.py +0 -0
  608. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/pagination.py +0 -0
  609. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/persistence.py +0 -0
  610. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/results_table.py +0 -0
  611. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/retry.py +0 -0
  612. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/secure_path.py +0 -0
  613. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/url_security.py +0 -0
  614. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/validation.py +0 -0
  615. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/visualization/__init__.py +0 -0
  616. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/visualization/plots.py +0 -0
  617. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/wrapper/__init__.py +0 -0
  618. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/wrapper/errors.py +0 -0
  619. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/wrapper/server.py +0 -0
  620. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/wrapper/service.py +0 -0
  621. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent.egg-info/SOURCES.txt +0 -0
  622. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent.egg-info/dependency_links.txt +0 -0
  623. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent.egg-info/entry_points.txt +0 -0
  624. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent.egg-info/requires.txt +0 -0
  625. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent.egg-info/top_level.txt +0 -0
  626. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent_validation/__init__.py +0 -0
  627. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent_validation/base.py +0 -0
  628. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent_validation/plugins.py +0 -0
  629. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent_validation/py.typed +0 -0
  630. {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent_validation/validators.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: traigent
3
- Version: 0.18.1.dev8
3
+ Version: 0.18.1.dev10
4
4
  Summary: Enterprise-grade LLM optimization platform with advanced analytics and AI-powered insights
5
5
  Author-email: Traigent Team <opensource@traigent.ai>
6
6
  License-Expression: AGPL-3.0-only OR LicenseRef-Traigent-Commercial
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "traigent"
7
- version = "0.18.1.dev8"
7
+ version = "0.18.1.dev10"
8
8
  authors = [
9
9
  {name = "Traigent Team", email = "opensource@traigent.ai"},
10
10
  ]
@@ -64,7 +64,7 @@ from traigent.cloud.privacy_operations import PrivacyOperations
64
64
  from traigent.cloud.session_operations import SessionOperations
65
65
  from traigent.cloud.session_types import SessionCreationResult
66
66
  from traigent.cloud.subset_selection import SmartSubsetSelector
67
- from traigent.cloud.trial_operations import TrialOperations
67
+ from traigent.cloud.trial_operations import TrialOperations, TrialSlotResult
68
68
  from traigent.cloud.url_security import (
69
69
  CloudUrlUnreachableError,
70
70
  validate_cloud_base_url,
@@ -1879,16 +1879,15 @@ class BackendIntegratedClient:
1879
1879
  self._trial_ops.register_trial_start_sync(session_id, trial_id, config),
1880
1880
  )
1881
1881
 
1882
- async def request_trial_slot(self, session_id: str) -> str | None:
1882
+ async def request_trial_slot(self, session_id: str) -> TrialSlotResult:
1883
1883
  """Acquire a backend-minted trial id (configuration_run) for a session.
1884
1884
  Delegates to trial_operations module.
1885
1885
 
1886
1886
  Returns:
1887
- The backend-minted trial id, or ``None`` when no slot could be
1888
- acquired (offline / transport unavailable / non-2xx / backend
1889
- declined). ``None`` never means "use a client id".
1887
+ A neutral slot result: acquired backend trial id, explicit
1888
+ optimization-complete signal, or unavailable/error.
1890
1889
  """
1891
- return cast(str | None, await self._trial_ops.request_trial_slot(session_id))
1890
+ return await self._trial_ops.request_trial_slot(session_id)
1892
1891
 
1893
1892
  def _generate_trial_id(
1894
1893
  self,
@@ -11,6 +11,7 @@ import concurrent.futures
11
11
  import hashlib
12
12
  import json
13
13
  import re
14
+ from dataclasses import dataclass
14
15
  from datetime import UTC, datetime
15
16
  from typing import TYPE_CHECKING, Any
16
17
 
@@ -42,6 +43,30 @@ if TYPE_CHECKING:
42
43
  logger = get_logger(__name__)
43
44
 
44
45
 
46
+ @dataclass(frozen=True)
47
+ class TrialSlotResult:
48
+ """Neutral result for a backend trial-slot request."""
49
+
50
+ trial_id: str | None = None
51
+ optimization_complete: bool = False
52
+ reason: str | None = None
53
+
54
+ def __bool__(self) -> bool:
55
+ return bool(self.trial_id)
56
+
57
+ @classmethod
58
+ def acquired(cls, trial_id: str) -> "TrialSlotResult":
59
+ return cls(trial_id=trial_id)
60
+
61
+ @classmethod
62
+ def complete(cls, reason: str | None = None) -> "TrialSlotResult":
63
+ return cls(optimization_complete=True, reason=reason)
64
+
65
+ @classmethod
66
+ def unavailable(cls) -> "TrialSlotResult":
67
+ return cls()
68
+
69
+
45
70
  class TrialOperations:
46
71
  """Handles trial management operations."""
47
72
 
@@ -380,7 +405,7 @@ class TrialOperations:
380
405
  async def request_trial_slot(
381
406
  self,
382
407
  session_id: str,
383
- ) -> str | None:
408
+ ) -> TrialSlotResult:
384
409
  """Acquire a BACKEND-minted trial id (configuration_run) for a session.
385
410
 
386
411
  The backend mints configuration_run ids only through its
@@ -392,25 +417,26 @@ class TrialOperations:
392
417
  and the backend's own suggested config is irrelevant to the SDK.
393
418
 
394
419
  Returns:
395
- The backend-minted trial id, or ``None`` when no slot could be
396
- acquired (offline mode, transport unavailable, non-2xx, or the
397
- backend declined to suggest a further trial). ``None`` NEVER means
398
- "use a client id" callers fail closed on it (Rule 2: no fake
399
- trial acknowledgment).
420
+ A neutral slot result. ``trial_id`` means a backend-minted slot was
421
+ acquired. ``optimization_complete`` means a successful next-trial
422
+ response explicitly returned ``should_continue=False`` without a
423
+ trial id. Any other no-slot/error condition returns an unavailable
424
+ result; callers still fail closed on it (Rule 2: no fake trial
425
+ acknowledgment).
400
426
  """
401
- # Skip backend calls in offline mode — None lets callers distinguish
402
- # "skipped" from "acquired" (Rule 2: no fake completion).
427
+ # Skip backend calls in offline mode — an unavailable result lets
428
+ # callers distinguish "skipped" from "acquired" (Rule 2: no fake completion).
403
429
  if is_backend_offline():
404
430
  logger.debug(
405
431
  "Offline mode: skipping trial-slot request for session %s",
406
432
  session_id,
407
433
  )
408
- return None
434
+ return TrialSlotResult.unavailable()
409
435
  self._raise_if_backend_egress_disabled("get next trial")
410
436
 
411
437
  if not AIOHTTP_AVAILABLE:
412
438
  logger.warning("aiohttp not available, skipping trial-slot request")
413
- return None
439
+ return TrialSlotResult.unavailable()
414
440
 
415
441
  try:
416
442
  headers = await self.client.auth_manager.augment_headers(
@@ -446,7 +472,21 @@ class TrialOperations:
446
472
  trial_id,
447
473
  session_id,
448
474
  )
449
- return trial_id
475
+ return TrialSlotResult.acquired(trial_id)
476
+ if (
477
+ isinstance(data, dict)
478
+ and data.get("should_continue") is False
479
+ ):
480
+ reason = data.get("stop_reason") or data.get("reason")
481
+ logger.info(
482
+ "Backend next-trial completed optimization for session %s "
483
+ "(reason=%s)",
484
+ session_id,
485
+ reason,
486
+ )
487
+ return TrialSlotResult.complete(
488
+ str(reason) if reason else None
489
+ )
450
490
  logger.info(
451
491
  "Backend next-trial returned no slot for session %s "
452
492
  "(should_continue=%s)",
@@ -457,7 +497,7 @@ class TrialOperations:
457
497
  else None
458
498
  ),
459
499
  )
460
- return None
500
+ return TrialSlotResult.unavailable()
461
501
  if response.status == 403:
462
502
  error_msg = await response.text()
463
503
  self._log_ownership_forbidden(
@@ -466,26 +506,26 @@ class TrialOperations:
466
506
  response.status,
467
507
  error_msg,
468
508
  )
469
- return None
509
+ return TrialSlotResult.unavailable()
470
510
  logger.warning(
471
511
  "Failed to acquire trial slot for session %s: HTTP %s",
472
512
  session_id,
473
513
  response.status,
474
514
  )
475
- return None
515
+ return TrialSlotResult.unavailable()
476
516
  except Exception as exc:
477
517
  if is_backend_offline():
478
518
  logger.debug(
479
519
  "Offline mode: trial-slot request encountered %s; skipping",
480
520
  exc,
481
521
  )
482
- return None
522
+ return TrialSlotResult.unavailable()
483
523
  logger.exception(
484
524
  "Error requesting trial slot for session %s (%s)",
485
525
  session_id,
486
526
  self._describe_backend(),
487
527
  )
488
- return None
528
+ return TrialSlotResult.unavailable()
489
529
 
490
530
  def _extract_measures_from_metrics(
491
531
  self, metrics: dict[str, Any]
@@ -8,6 +8,7 @@ import asyncio
8
8
  import inspect
9
9
  import threading
10
10
  from collections.abc import Callable, Coroutine
11
+ from dataclasses import dataclass
11
12
  from typing import TYPE_CHECKING, Any, cast
12
13
 
13
14
  from traigent._version import get_version
@@ -133,6 +134,27 @@ def _backend_disabled_label(reason: SessionCreationFailureReason | None) -> str:
133
134
  return "unknown"
134
135
 
135
136
 
137
+ @dataclass(frozen=True)
138
+ class BackendTrialSlotAcquisition:
139
+ """Core-local interpretation of a backend trial-slot request."""
140
+
141
+ trial_id: str | None = None
142
+ optimization_complete: bool = False
143
+ reason: str | None = None
144
+
145
+
146
+ @dataclass(frozen=True)
147
+ class BackendTrialSubmissionOutcome:
148
+ """Terminal submission outcome consumed by the orchestrator."""
149
+
150
+ optimization_complete: bool = False
151
+ reason: str | None = None
152
+
153
+ @classmethod
154
+ def complete(cls, reason: str | None = None) -> BackendTrialSubmissionOutcome:
155
+ return cls(optimization_complete=True, reason=reason)
156
+
157
+
136
158
  def _format_untracked_warning_block(
137
159
  result: SessionCreationResult,
138
160
  classification: SessionCreationFailureClassification,
@@ -940,7 +962,7 @@ class BackendSessionManager:
940
962
  session_id: str | None,
941
963
  dataset_name: str = "dataset",
942
964
  content_scores: dict[str, dict[int, float]] | None = None,
943
- ) -> bool:
965
+ ) -> bool | BackendTrialSubmissionOutcome:
944
966
  """Submit trial to backend.
945
967
 
946
968
  Args:
@@ -951,7 +973,9 @@ class BackendSessionManager:
951
973
  per-run features once at session creation.
952
974
 
953
975
  Returns:
954
- True if submission succeeded
976
+ True if submission succeeded, False if skipped, or a terminal
977
+ optimization-complete outcome when the backend gracefully closed the
978
+ cloud run.
955
979
  """
956
980
  if self._egress_disabled() or not self._backend_client or not session_id:
957
981
  return False
@@ -990,12 +1014,14 @@ class BackendSessionManager:
990
1014
  )
991
1015
  return False
992
1016
 
993
- await self._log_trial_to_backend(
1017
+ submission_outcome = await self._log_trial_to_backend(
994
1018
  session_id=session_id,
995
1019
  trial_result=trial_result,
996
1020
  score=score,
997
1021
  metadata=trial_metadata,
998
1022
  )
1023
+ if submission_outcome is not None and submission_outcome.optimization_complete:
1024
+ return submission_outcome
999
1025
 
1000
1026
  return True
1001
1027
 
@@ -1045,36 +1071,53 @@ class BackendSessionManager:
1045
1071
  """
1046
1072
  return (session_id, trial_id) in self._acknowledged_trials
1047
1073
 
1074
+ @staticmethod
1075
+ def _coerce_backend_trial_slot(slot: Any) -> BackendTrialSlotAcquisition:
1076
+ """Normalize legacy string/None and structured slot results."""
1077
+
1078
+ if isinstance(slot, str) and slot:
1079
+ return BackendTrialSlotAcquisition(trial_id=slot)
1080
+ if getattr(slot, "optimization_complete", False) is True:
1081
+ reason = getattr(slot, "reason", None)
1082
+ return BackendTrialSlotAcquisition(
1083
+ optimization_complete=True,
1084
+ reason=str(reason) if reason else None,
1085
+ )
1086
+ trial_id = getattr(slot, "trial_id", None)
1087
+ if isinstance(trial_id, str) and trial_id:
1088
+ return BackendTrialSlotAcquisition(trial_id=trial_id)
1089
+ return BackendTrialSlotAcquisition()
1090
+
1048
1091
  async def _acquire_backend_trial_id(
1049
1092
  self, session_id: str, trial_result: TrialResult
1050
- ) -> str | None:
1093
+ ) -> BackendTrialSlotAcquisition:
1051
1094
  """Acquire (once per started trial) a backend-minted trial id.
1052
1095
 
1053
1096
  Reuses a previously acquired backend id for the same client trial so
1054
- retries of submit_trial don't burn extra slots. Returns ``None`` when
1055
- the backend declined to mint a slot (offline / transport / non-2xx),
1056
- in which case the caller fails closed.
1097
+ retries of submit_trial don't burn extra slots. Returns a structured
1098
+ outcome so graceful backend completion is not collapsed into the genuine
1099
+ no-slot/error path.
1057
1100
  """
1058
1101
  client = self._backend_client
1059
1102
  if self._egress_disabled() or client is None:
1060
- return None
1103
+ return BackendTrialSlotAcquisition()
1061
1104
 
1062
1105
  client_trial_id = str(trial_result.trial_id)
1063
1106
  if (trial_result.metadata or {}).get("backend_trial_id_acquired"):
1064
1107
  self._started_trials.add((session_id, client_trial_id))
1065
- return client_trial_id
1108
+ return BackendTrialSlotAcquisition(trial_id=client_trial_id)
1066
1109
  # If this trial already mapped to an acknowledged backend id, reuse it.
1067
1110
  for sid, bid in self._started_trials:
1068
1111
  if sid == session_id and bid == client_trial_id:
1069
1112
  # client_trial_id already IS a backend id from a prior pass.
1070
- return client_trial_id
1113
+ return BackendTrialSlotAcquisition(trial_id=client_trial_id)
1071
1114
 
1072
1115
  requester = getattr(client, "request_trial_slot", None)
1073
1116
  if not callable(requester):
1074
- return None
1117
+ return BackendTrialSlotAcquisition()
1075
1118
  try:
1076
1119
  slot = requester(session_id)
1077
- backend_trial_id = await slot if inspect.isawaitable(slot) else slot
1120
+ slot_result = await slot if inspect.isawaitable(slot) else slot
1078
1121
  except Exception as exc:
1079
1122
  logger.debug(
1080
1123
  "Backend trial-slot request failed for session %s trial %s: %s",
@@ -1082,12 +1125,12 @@ class BackendSessionManager:
1082
1125
  client_trial_id,
1083
1126
  exc,
1084
1127
  )
1085
- return None
1128
+ return BackendTrialSlotAcquisition()
1086
1129
 
1087
- if isinstance(backend_trial_id, str) and backend_trial_id:
1088
- self._started_trials.add((session_id, backend_trial_id))
1089
- return backend_trial_id
1090
- return None
1130
+ acquisition = self._coerce_backend_trial_slot(slot_result)
1131
+ if acquisition.trial_id:
1132
+ self._started_trials.add((session_id, acquisition.trial_id))
1133
+ return acquisition
1091
1134
 
1092
1135
  async def _log_trial_to_backend(
1093
1136
  self,
@@ -1095,14 +1138,14 @@ class BackendSessionManager:
1095
1138
  trial_result: TrialResult,
1096
1139
  score: float | None,
1097
1140
  metadata: dict[str, Any],
1098
- ) -> None:
1141
+ ) -> BackendTrialSubmissionOutcome | None:
1099
1142
  """Submit trial metrics to backend when possible."""
1100
1143
 
1101
1144
  if self._egress_disabled() or not self._backend_client or not session_id:
1102
- return
1145
+ return None
1103
1146
 
1104
1147
  if not self._backend_tracking_enabled:
1105
- return
1148
+ return None
1106
1149
 
1107
1150
  sanitized_score = float(score) if score is not None else None
1108
1151
  metadata_payload = dict(metadata)
@@ -1122,7 +1165,7 @@ class BackendSessionManager:
1122
1165
  session_id,
1123
1166
  trial_result.trial_id,
1124
1167
  )
1125
- return
1168
+ return None
1126
1169
 
1127
1170
  logger.debug(
1128
1171
  "Submitting trial %s for session %s",
@@ -1151,7 +1194,7 @@ class BackendSessionManager:
1151
1194
  session_id,
1152
1195
  trial_result.trial_id,
1153
1196
  )
1154
- return
1197
+ return None
1155
1198
 
1156
1199
  # Build payload for backend session endpoint.
1157
1200
  metrics_payload: dict[str, Any] = dict(trial_result.metrics or {})
@@ -1194,9 +1237,17 @@ class BackendSessionManager:
1194
1237
  # "Trial ... not found in session". So acquire a backend slot and
1195
1238
  # rebind this trial to it BEFORE submitting. The optimizer still
1196
1239
  # owns the config; the slot is purely the backend's trial handle.
1197
- backend_trial_id = await self._acquire_backend_trial_id(
1198
- session_id, trial_result
1199
- )
1240
+ acquisition = await self._acquire_backend_trial_id(session_id, trial_result)
1241
+ if acquisition.optimization_complete:
1242
+ logger.info(
1243
+ "Backend reported optimization complete for session %s while "
1244
+ "submitting client trial %s (reason=%s)",
1245
+ session_id,
1246
+ trial_result.trial_id,
1247
+ acquisition.reason,
1248
+ )
1249
+ return BackendTrialSubmissionOutcome.complete(acquisition.reason)
1250
+ backend_trial_id = acquisition.trial_id
1200
1251
  if backend_trial_id is None:
1201
1252
  # Fail closed: no acknowledged backend slot ⇒ NO submission and
1202
1253
  # NO acknowledgment. The certified-selection report will then
@@ -1210,7 +1261,7 @@ class BackendSessionManager:
1210
1261
  session_id,
1211
1262
  trial_result.trial_id,
1212
1263
  )
1213
- return
1264
+ return None
1214
1265
  # Rebind in place: _best_trial_cached holds this same object, so the
1215
1266
  # incumbent's trial_id becomes the backend id the report needs.
1216
1267
  trial_result.trial_id = backend_trial_id
@@ -101,6 +101,7 @@ from traigent.core.workflow_trace_manager import WorkflowTraceManager
101
101
  from traigent.evaluators.base import BaseEvaluator, Dataset
102
102
  from traigent.metrics.registry import clone_registry
103
103
  from traigent.optimizers.base import BaseOptimizer
104
+ from traigent.optimizers.interactive_optimizer import CloudBrainOptimizationComplete
104
105
  from traigent.tvl.promotion_gate import PromotionGate
105
106
  from traigent.utils.callbacks import CallbackManager, OptimizationCallback, ProgressInfo
106
107
  from traigent.utils.env_config import ( # noqa: F401
@@ -1378,6 +1379,7 @@ class OptimizationOrchestrator:
1378
1379
  *,
1379
1380
  log_on_success: bool,
1380
1381
  permit: Permit | None = None,
1382
+ submit_to_backend: bool = True,
1381
1383
  ) -> int:
1382
1384
  """Update orchestrator state after a single trial completes.
1383
1385
 
@@ -1443,13 +1445,14 @@ class OptimizationOrchestrator:
1443
1445
  # on _consumed_examples during parallel trial execution
1444
1446
  self._register_examples_attempted(trial_result)
1445
1447
 
1446
- if self.backend_client and session_id:
1448
+ submission_outcome: Any = None
1449
+ if submit_to_backend and self.backend_client and session_id:
1447
1450
  pre_submit_trial_id = (
1448
1451
  str(trial_result.trial_id)
1449
1452
  if getattr(trial_result, "trial_id", None) is not None
1450
1453
  else None
1451
1454
  )
1452
- await self.backend_session_manager.submit_trial(
1455
+ submission_outcome = await self.backend_session_manager.submit_trial(
1453
1456
  trial_result=trial_result,
1454
1457
  session_id=session_id,
1455
1458
  dataset_name=getattr(self, "_dataset_name", "dataset"),
@@ -1487,6 +1490,12 @@ class OptimizationOrchestrator:
1487
1490
  if should_log:
1488
1491
  self._log_progress(new_count)
1489
1492
 
1493
+ if getattr(submission_outcome, "optimization_complete", False) is True:
1494
+ reason = getattr(submission_outcome, "reason", None)
1495
+ raise CloudBrainOptimizationComplete(
1496
+ str(reason) if reason else "cloud brain completed optimization"
1497
+ )
1498
+
1490
1499
  return new_count
1491
1500
 
1492
1501
  def _calculate_parallel_batch_caps(
@@ -1838,6 +1847,9 @@ class OptimizationOrchestrator:
1838
1847
  - Exceptions (due to return_exceptions=True in gather)
1839
1848
  - None for trials cancelled due to cost limit
1840
1849
  """
1850
+ terminal_completion: CloudBrainOptimizationComplete | None = None
1851
+ submit_to_backend = True
1852
+
1841
1853
  for batch_offset, (config, permitted_result, optuna_id) in enumerate(
1842
1854
  zip(scheduled_configs, results, scheduled_optuna_ids, strict=False)
1843
1855
  ):
@@ -1895,7 +1907,13 @@ class OptimizationOrchestrator:
1895
1907
  optuna_trial_id=optuna_id,
1896
1908
  log_on_success=False,
1897
1909
  permit=permit,
1910
+ submit_to_backend=submit_to_backend,
1898
1911
  )
1912
+ except CloudBrainOptimizationComplete as complete:
1913
+ if terminal_completion is None:
1914
+ terminal_completion = complete
1915
+ submit_to_backend = False
1916
+ trial_count = len(self._trials)
1899
1917
  except Exception:
1900
1918
  # Release permit on any exception to prevent stranding
1901
1919
  # (only if permit is still active - wasn't already released)
@@ -1906,6 +1924,8 @@ class OptimizationOrchestrator:
1906
1924
  permit.id,
1907
1925
  )
1908
1926
  raise
1927
+ if terminal_completion is not None:
1928
+ raise terminal_completion
1909
1929
  return trial_count
1910
1930
 
1911
1931
  def _apply_cap_and_prevent_excess(
@@ -2588,6 +2608,10 @@ class OptimizationOrchestrator:
2588
2608
  self._stop_reason = "vendor_error"
2589
2609
  return trial_count, "break"
2590
2610
  return trial_count, "continue" # User chose to resume
2611
+ except CloudBrainOptimizationComplete as complete:
2612
+ self._stop_reason = cast(StopReason, complete.stop_reason)
2613
+ logger.info("Cloud brain completed optimization: %s", complete.reason)
2614
+ return len(self._trials), "break"
2591
2615
 
2592
2616
  @staticmethod
2593
2617
  def _vendor_retry_settings() -> tuple[int, float]:
@@ -431,11 +431,7 @@ class TrialLifecycle:
431
431
  lambda: frozenset(),
432
432
  )(),
433
433
  )
434
- if isinstance(backend_trial_id, str) and backend_trial_id:
435
- metadata = dict(result.metadata or {})
436
- metadata["backend_trial_id_acquired"] = True
437
- metadata["backend_trial_id_source"] = "cloud_brain"
438
- result.metadata = metadata
434
+ self._mark_backend_trial_id_acquired(result, backend_trial_id)
439
435
  self._apply_budget_metadata(result, closure, budget_exhausted)
440
436
  self._apply_effectuation_metadata(result, func)
441
437
 
@@ -463,6 +459,7 @@ class TrialLifecycle:
463
459
  prune_error,
464
460
  is_pruned=True,
465
461
  )
462
+ self._mark_backend_trial_id_acquired(result, backend_trial_id)
466
463
  self._apply_effectuation_metadata(result, func)
467
464
  record_trial_result(span, status="pruned", error=str(prune_error))
468
465
  end_time = time.time()
@@ -479,6 +476,7 @@ class TrialLifecycle:
479
476
  optuna_trial_id,
480
477
  constraint_error,
481
478
  )
479
+ self._mark_backend_trial_id_acquired(result, backend_trial_id)
482
480
  self._apply_effectuation_metadata(result, func)
483
481
  record_trial_result(span, status="failed", error=str(constraint_error))
484
482
  end_time = time.time()
@@ -523,6 +521,7 @@ class TrialLifecycle:
523
521
  optuna_trial_id,
524
522
  exc,
525
523
  )
524
+ self._mark_backend_trial_id_acquired(result, backend_trial_id)
526
525
  self._apply_effectuation_metadata(result, func)
527
526
  record_trial_result(span, status="failed", error=str(exc))
528
527
  end_time = time.time()
@@ -533,6 +532,18 @@ class TrialLifecycle:
533
532
  if lease is not None and closure is None:
534
533
  closure = self._finalize_budget_lease(lease)
535
534
 
535
+ @staticmethod
536
+ def _mark_backend_trial_id_acquired(
537
+ result: TrialResult,
538
+ backend_trial_id: str | None,
539
+ ) -> None:
540
+ if not isinstance(backend_trial_id, str) or not backend_trial_id:
541
+ return
542
+ metadata = dict(result.metadata or {})
543
+ metadata["backend_trial_id_acquired"] = True
544
+ metadata["backend_trial_id_source"] = "cloud_brain"
545
+ result.metadata = metadata
546
+
536
547
  def _apply_effectuation_metadata(
537
548
  self,
538
549
  result: TrialResult,