traigent 0.21.0.dev2__tar.gz → 0.21.1.dev0__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 (635) hide show
  1. {traigent-0.21.0.dev2/traigent.egg-info → traigent-0.21.1.dev0}/PKG-INFO +1 -1
  2. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/pyproject.toml +1 -1
  3. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/api_operations.py +14 -2
  4. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/backend_client.py +30 -3
  5. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/client.py +34 -26
  6. traigent-0.21.1.dev0/traigent/cloud/session_budgets.py +82 -0
  7. traigent-0.21.1.dev0/traigent/cloud/session_objectives.py +78 -0
  8. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/session_operations.py +50 -0
  9. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/sync_manager.py +48 -19
  10. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/trial_operations.py +22 -0
  11. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/backend_session_manager.py +344 -89
  12. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/orchestrator.py +32 -16
  13. traigent-0.21.1.dev0/traigent/utils/trial_costs.py +63 -0
  14. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0/traigent.egg-info}/PKG-INFO +1 -1
  15. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent.egg-info/SOURCES.txt +3 -0
  16. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/CHANGELOG.md +0 -0
  17. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/COMMERCIAL-LICENSE.md +0 -0
  18. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/CONTRIBUTING.md +0 -0
  19. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/CONTRIBUTOR-LICENSING.md +0 -0
  20. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/DISCLAIMER.md +0 -0
  21. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/LICENSE +0 -0
  22. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/MANIFEST.in +0 -0
  23. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/NOTICE +0 -0
  24. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/README.md +0 -0
  25. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/SECURITY.md +0 -0
  26. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/LOCAL_CI_GATE.md +0 -0
  27. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/README.md +0 -0
  28. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/SYNC_MAP.md +0 -0
  29. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/agent-skill.md +0 -0
  30. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/complete-function-specification.md +0 -0
  31. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/decorator-reference.md +0 -0
  32. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/enterprise-beta-api.md +0 -0
  33. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/interactive_optimizer.md +0 -0
  34. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/telemetry.md +0 -0
  35. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/thread-pool-examples.md +0 -0
  36. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/ARCHITECTURE.md +0 -0
  37. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/cost-architecture-validation.md +0 -0
  38. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/execution_mode_follow_up.md +0 -0
  39. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/integrations-inventory.md +0 -0
  40. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/plugin_architecture.md +0 -0
  41. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/project-structure.md +0 -0
  42. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/stop_conditions.md +0 -0
  43. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/concepts/composite-knob-ir.md +0 -0
  44. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/concepts/composite-knobs.md +0 -0
  45. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/concepts/guided-generation.md +0 -0
  46. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
  47. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
  48. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/CONTRIBUTING.md +0 -0
  49. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
  50. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/README.md +0 -0
  51. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/SECURITY.md +0 -0
  52. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/aikido_triage.md +0 -0
  53. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/code_review_instructions.md +0 -0
  54. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/test-quality-guide.md +0 -0
  55. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
  56. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/demos/README.md +0 -0
  57. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/API_PATTERNS.md +0 -0
  58. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/LEARNING_ROADMAP.md +0 -0
  59. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/QUICK_REFERENCE.md +0 -0
  60. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/README.md +0 -0
  61. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/START_HERE.md +0 -0
  62. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/TROUBLESHOOTING.md +0 -0
  63. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/fake-completion-tracking.md +0 -0
  64. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/feature_matrices/README.md +0 -0
  65. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/README.md +0 -0
  66. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/authentication.md +0 -0
  67. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/constraint-dsl.md +0 -0
  68. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/dataflow-detection.md +0 -0
  69. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/framework_override_enhanced_features.md +0 -0
  70. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/mcp-server.md +0 -0
  71. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/observability-spans.md +0 -0
  72. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/onboarding.md +0 -0
  73. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/prompt_management.md +0 -0
  74. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/recommendations.md +0 -0
  75. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/safety-gates.md +0 -0
  76. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/seamless_injection.md +0 -0
  77. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/strategy-presets.md +0 -0
  78. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/strict_metrics_nulls.md +0 -0
  79. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/GETTING_STARTED.md +0 -0
  80. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/README.md +0 -0
  81. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/installation.md +0 -0
  82. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/minimal-integration.md +0 -0
  83. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
  84. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/testing.md +0 -0
  85. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
  86. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/evaluation.md +0 -0
  87. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/execution-mode-migration.md +0 -0
  88. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/execution-modes.md +0 -0
  89. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/js-bridge.md +0 -0
  90. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/llm_plugin_migration_guide.md +0 -0
  91. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/parallel-configuration.md +0 -0
  92. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/secrets_management.md +0 -0
  93. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/hybrid-mode-api-contract.md +0 -0
  94. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/hybrid-mode-client-guide.md +0 -0
  95. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/operations/azure_openai.md +0 -0
  96. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/operations/bedrock.md +0 -0
  97. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/operations/google_gemini.md +0 -0
  98. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/security/trust_model.md +0 -0
  99. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
  100. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/concepts/composite-knob-ir.md +0 -0
  101. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/concepts/composite-knobs.md +0 -0
  102. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/concepts/guided-generation.md +0 -0
  103. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/schema.md +0 -0
  104. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/tagging_tracking.md +0 -0
  105. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/taxonomy_reference.md +0 -0
  106. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
  107. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/README.md +0 -0
  108. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/agent_optimization.md +0 -0
  109. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/choosing_optimization_model.md +0 -0
  110. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/configuration-spaces.md +0 -0
  111. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/evaluation_guide.md +0 -0
  112. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/injection_modes.md +0 -0
  113. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/interactive_optimization.md +0 -0
  114. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/smart_optimization.md +0 -0
  115. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/tuned_variables.md +0 -0
  116. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/walkthrough.md +0 -0
  117. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-all.txt +0 -0
  118. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-analytics.txt +0 -0
  119. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-bayesian.txt +0 -0
  120. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-chroma.txt +0 -0
  121. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-dev.txt +0 -0
  122. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-hybrid.txt +0 -0
  123. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-integrations.txt +0 -0
  124. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-security.txt +0 -0
  125. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-test.txt +0 -0
  126. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements.txt +0 -0
  127. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/setup.cfg +0 -0
  128. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/__init__.py +0 -0
  129. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/_version.py +0 -0
  130. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/adapters/execution_adapter.py +0 -0
  131. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/admin/__init__.py +0 -0
  132. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/admin/client.py +0 -0
  133. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/admin/config.py +0 -0
  134. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/admin/dtos.py +0 -0
  135. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/agents/__init__.py +0 -0
  136. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/agents/config_mapper.py +0 -0
  137. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/agents/executor.py +0 -0
  138. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/agents/platforms.py +0 -0
  139. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/agents/specification_generator.py +0 -0
  140. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/__init__.py +0 -0
  141. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/anomaly.py +0 -0
  142. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/cost_optimization.py +0 -0
  143. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/example_insights.py +0 -0
  144. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/intelligence.py +0 -0
  145. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/meta_learning.py +0 -0
  146. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/next_steps.py +0 -0
  147. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/optimization_plan.py +0 -0
  148. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/predictive.py +0 -0
  149. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/render.py +0 -0
  150. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/scheduling.py +0 -0
  151. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics_mcp/__init__.py +0 -0
  152. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics_mcp/server.py +0 -0
  153. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics_mcp/tools.py +0 -0
  154. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/__init__.py +0 -0
  155. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/agent_inference.py +0 -0
  156. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/config_builder.py +0 -0
  157. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/config_space.py +0 -0
  158. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/constraint_builders.py +0 -0
  159. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/constraints.py +0 -0
  160. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/decorators.py +0 -0
  161. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/functions.py +0 -0
  162. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/parameter_ranges.py +0 -0
  163. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/parameter_validator.py +0 -0
  164. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/safety.py +0 -0
  165. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/strategy_presets.py +0 -0
  166. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/types.py +0 -0
  167. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/validation_protocol.py +0 -0
  168. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/__init__.py +0 -0
  169. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/auth_commands.py +0 -0
  170. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/detect_tvars_command.py +0 -0
  171. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/function_discovery.py +0 -0
  172. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/generate_config_command.py +0 -0
  173. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/hooks_commands.py +0 -0
  174. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/local_commands.py +0 -0
  175. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/main.py +0 -0
  176. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/next_steps_command.py +0 -0
  177. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/onboard_commands.py +0 -0
  178. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/optimization_validator.py +0 -0
  179. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/plan_command.py +0 -0
  180. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/playbook_commands.py +0 -0
  181. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/sync_commands.py +0 -0
  182. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/validation_types.py +0 -0
  183. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/__init__.py +0 -0
  184. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/_aiohttp_compat.py +0 -0
  185. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/agent_dtos.py +0 -0
  186. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/analytics_auth.py +0 -0
  187. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/analytics_client.py +0 -0
  188. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/api_key_manager.py +0 -0
  189. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/async_batch_transport.py +0 -0
  190. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/auth.py +0 -0
  191. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/backend_bridges.py +0 -0
  192. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/backend_components.py +0 -0
  193. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/backend_synchronizer.py +0 -0
  194. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/benchmark_client.py +0 -0
  195. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/billing.py +0 -0
  196. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/cloud_operations.py +0 -0
  197. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/credential_manager.py +0 -0
  198. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/credential_resolver.py +0 -0
  199. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/dataset_converter.py +0 -0
  200. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/dtos.py +0 -0
  201. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/governance.py +0 -0
  202. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/integration_manager.py +0 -0
  203. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/models.py +0 -0
  204. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/optimizer_client.py +0 -0
  205. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/password_auth_handler.py +0 -0
  206. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/privacy_operations.py +0 -0
  207. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/production_mcp_client.py +0 -0
  208. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/remote_guidance.py +0 -0
  209. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/resilient_client.py +0 -0
  210. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/service.py +0 -0
  211. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/session_types.py +0 -0
  212. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/sessions.py +0 -0
  213. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/smart_pruning.py +0 -0
  214. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/subset_selection.py +0 -0
  215. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/token_manager.py +0 -0
  216. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/trial_tracker.py +0 -0
  217. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/url_security.py +0 -0
  218. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/user_agent.py +0 -0
  219. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/validators.py +0 -0
  220. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/__init__.py +0 -0
  221. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/api_keys.py +0 -0
  222. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/ast_transformer.py +0 -0
  223. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/backend_config.py +0 -0
  224. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/context.py +0 -0
  225. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/feature_flags.py +0 -0
  226. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/models.yaml +0 -0
  227. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/parallel.py +0 -0
  228. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/project.py +0 -0
  229. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/provider_support.py +0 -0
  230. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/providers.py +0 -0
  231. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/runtime_injector.py +0 -0
  232. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/tenant.py +0 -0
  233. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/types.py +0 -0
  234. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/__init__.py +0 -0
  235. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/agent_classifier.py +0 -0
  236. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/apply.py +0 -0
  237. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
  238. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
  239. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
  240. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
  241. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/catalog.py +0 -0
  242. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/llm_backend.py +0 -0
  243. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/pipeline.py +0 -0
  244. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/presets/__init__.py +0 -0
  245. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
  246. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
  247. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/presets/constraint_templates.py +0 -0
  248. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/presets/range_presets.py +0 -0
  249. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/recommendations.py +0 -0
  250. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/__init__.py +0 -0
  251. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/benchmarks.py +0 -0
  252. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/objectives.py +0 -0
  253. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
  254. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
  255. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
  256. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
  257. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/types.py +0 -0
  258. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/__init__.py +0 -0
  259. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/best_config_runtime.py +0 -0
  260. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/cache_policy.py +0 -0
  261. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/ci_approval.py +0 -0
  262. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/config_state_manager.py +0 -0
  263. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/constants.py +0 -0
  264. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/cost_enforcement.py +0 -0
  265. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/cost_estimator.py +0 -0
  266. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/evaluator_wrapper.py +0 -0
  267. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/exception_handler.py +0 -0
  268. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/execution_policy_runtime.py +0 -0
  269. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/license.py +0 -0
  270. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/logger_facade.py +0 -0
  271. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/mandatory_metrics.py +0 -0
  272. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/meta_types.py +0 -0
  273. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/metadata_helpers.py +0 -0
  274. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/metric_registry.py +0 -0
  275. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/metrics_aggregator.py +0 -0
  276. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/namespace.py +0 -0
  277. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/objectives.py +0 -0
  278. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/optimization_pipeline.py +0 -0
  279. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/optimized_function.py +0 -0
  280. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/orchestrator_helpers.py +0 -0
  281. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/parallel_execution_manager.py +0 -0
  282. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/progress_manager.py +0 -0
  283. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/result_selection.py +0 -0
  284. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/sample_budget.py +0 -0
  285. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/samplers/__init__.py +0 -0
  286. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/samplers/random_sampler.py +0 -0
  287. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/session_context.py +0 -0
  288. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/session_types.py +0 -0
  289. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/stat_significance.py +0 -0
  290. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/stop_condition_manager.py +0 -0
  291. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/stop_conditions.py +0 -0
  292. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/trace_env.py +0 -0
  293. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/tracing.py +0 -0
  294. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/trial_context.py +0 -0
  295. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/trial_lifecycle.py +0 -0
  296. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/trial_result_factory.py +0 -0
  297. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/types.py +0 -0
  298. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/types_ext.py +0 -0
  299. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/utils.py +0 -0
  300. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/workflow_trace_manager.py +0 -0
  301. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core_metrics/__init__.py +0 -0
  302. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core_metrics/client.py +0 -0
  303. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core_metrics/config.py +0 -0
  304. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core_metrics/dtos.py +0 -0
  305. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/defaults.py +0 -0
  306. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/effectuation/__init__.py +0 -0
  307. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/effectuation/contracts.py +0 -0
  308. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/effectuation/strategies/__init__.py +0 -0
  309. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/effectuation/strategies/framework_param.py +0 -0
  310. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/effectuation/strategies/self_consistency.py +0 -0
  311. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluation/__init__.py +0 -0
  312. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluation/client.py +0 -0
  313. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluation/config.py +0 -0
  314. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluation/dtos.py +0 -0
  315. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/__init__.py +0 -0
  316. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/base.py +0 -0
  317. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
  318. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
  319. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/catalog_loader.py +0 -0
  320. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/dataset_registry.py +0 -0
  321. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/hybrid_api.py +0 -0
  322. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/local.py +0 -0
  323. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/metrics.py +0 -0
  324. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/metrics_tracker.py +0 -0
  325. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/recommendations.py +0 -0
  326. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/__init__.py +0 -0
  327. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/_portal.py +0 -0
  328. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/__init__.py +0 -0
  329. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/_bootstrap.py +0 -0
  330. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/_demo.py +0 -0
  331. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/anthropic.py +0 -0
  332. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/aws.py +0 -0
  333. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/azure.py +0 -0
  334. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/gcp.py +0 -0
  335. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/gemini.py +0 -0
  336. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/groq.py +0 -0
  337. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/litellm_any.py +0 -0
  338. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/manifest.json +0 -0
  339. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/openai.py +0 -0
  340. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/openrouter.py +0 -0
  341. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/qa_samples.jsonl +0 -0
  342. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/quickstart/__init__.py +0 -0
  343. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/quickstart/__main__.py +0 -0
  344. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/quickstart/_env.py +0 -0
  345. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/quickstart/publish_and_verify.py +0 -0
  346. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
  347. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/tutorial_bootstrap.py +0 -0
  348. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/__init__.py +0 -0
  349. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/backend_provider.py +0 -0
  350. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/example_synth.py +0 -0
  351. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/llm_provider.py +0 -0
  352. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/loop.py +0 -0
  353. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/models.py +0 -0
  354. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/options.py +0 -0
  355. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/prompt_rewriter.py +0 -0
  356. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/__init__.py +0 -0
  357. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/_deterministic_indices.py +0 -0
  358. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/artifacts.py +0 -0
  359. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/buffer.py +0 -0
  360. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/document.py +0 -0
  361. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/edits.py +0 -0
  362. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/prompts.py +0 -0
  363. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/reflection.py +0 -0
  364. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/schedule.py +0 -0
  365. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/slow_update.py +0 -0
  366. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/splits.py +0 -0
  367. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/trainer.py +0 -0
  368. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/trainer_result.py +0 -0
  369. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/validators.py +0 -0
  370. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/guaranteed_modes.py +0 -0
  371. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hooks/__init__.py +0 -0
  372. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hooks/config.py +0 -0
  373. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hooks/installer.py +0 -0
  374. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hooks/validator.py +0 -0
  375. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/__init__.py +0 -0
  376. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/discovery.py +0 -0
  377. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/http_transport.py +0 -0
  378. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/lifecycle.py +0 -0
  379. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/mcp_transport.py +0 -0
  380. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/protocol.py +0 -0
  381. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/transport.py +0 -0
  382. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/__init__.py +0 -0
  383. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/activation.py +0 -0
  384. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/base.py +0 -0
  385. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/base_plugin.py +0 -0
  386. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/bedrock_client.py +0 -0
  387. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/config.py +0 -0
  388. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/dspy_adapter.py +0 -0
  389. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/framework_override.py +0 -0
  390. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langchain/__init__.py +0 -0
  391. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langchain/handler.py +0 -0
  392. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langfuse/__init__.py +0 -0
  393. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langfuse/callback.py +0 -0
  394. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langfuse/client.py +0 -0
  395. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langfuse/tracker.py +0 -0
  396. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/__init__.py +0 -0
  397. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/anthropic_plugin.py +0 -0
  398. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
  399. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/base_llm_plugin.py +0 -0
  400. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/bedrock_plugin.py +0 -0
  401. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/cohere_plugin.py +0 -0
  402. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/gemini_plugin.py +0 -0
  403. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/huggingface_plugin.py +0 -0
  404. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/langchain/__init__.py +0 -0
  405. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/langchain/base.py +0 -0
  406. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/langchain_plugin.py +0 -0
  407. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/litellm_plugin.py +0 -0
  408. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
  409. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/mistral_plugin.py +0 -0
  410. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/openai.py +0 -0
  411. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/openai_plugin.py +0 -0
  412. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/mappings.py +0 -0
  413. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/__init__.py +0 -0
  414. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
  415. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
  416. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/base.py +0 -0
  417. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/cache.py +0 -0
  418. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
  419. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
  420. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
  421. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/registry.py +0 -0
  422. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/observability/__init__.py +0 -0
  423. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/observability/mlflow.py +0 -0
  424. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/observability/wandb.py +0 -0
  425. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/observability/workflow_traces.py +0 -0
  426. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/plugin_registry.py +0 -0
  427. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/providers.py +0 -0
  428. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/pydantic_ai/__init__.py +0 -0
  429. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/pydantic_ai/_types.py +0 -0
  430. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/pydantic_ai/handler.py +0 -0
  431. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/pydantic_ai/plugin.py +0 -0
  432. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/__init__.py +0 -0
  433. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/discovery.py +0 -0
  434. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/message_coercion.py +0 -0
  435. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/mock_adapter.py +0 -0
  436. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/parameter_normalizer.py +0 -0
  437. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/response_wrapper.py +0 -0
  438. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/validation.py +0 -0
  439. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/version_compat.py +0 -0
  440. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/vector_stores/__init__.py +0 -0
  441. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/vector_stores/base.py +0 -0
  442. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
  443. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
  444. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
  445. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/wrappers.py +0 -0
  446. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/invokers/__init__.py +0 -0
  447. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/invokers/base.py +0 -0
  448. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/invokers/batch.py +0 -0
  449. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/invokers/local.py +0 -0
  450. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/invokers/streaming.py +0 -0
  451. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/__init__.py +0 -0
  452. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/adapters.py +0 -0
  453. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/bindings.py +0 -0
  454. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/canonical.py +0 -0
  455. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/cascade.py +0 -0
  456. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/certificates.py +0 -0
  457. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/composites.py +0 -0
  458. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/kinds.py +0 -0
  459. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/patterns.py +0 -0
  460. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/resolution.py +0 -0
  461. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/resolver.py +0 -0
  462. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/runtime.py +0 -0
  463. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/signals.py +0 -0
  464. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/telemetry.py +0 -0
  465. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/mcp/__init__.py +0 -0
  466. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/mcp/server.py +0 -0
  467. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/mcp/tools.py +0 -0
  468. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/__init__.py +0 -0
  469. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/agent_metrics.py +0 -0
  470. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/content_features.py +0 -0
  471. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/deepeval_metrics.py +0 -0
  472. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/ragas_metrics.py +0 -0
  473. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/registry.py +0 -0
  474. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/__init__.py +0 -0
  475. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/agent_spans.py +0 -0
  476. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/client.py +0 -0
  477. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/config.py +0 -0
  478. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/decorators.py +0 -0
  479. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/dtos.py +0 -0
  480. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/__init__.py +0 -0
  481. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/base.py +0 -0
  482. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/batch_optimizers.py +0 -0
  483. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/cloud_optimizer.py +0 -0
  484. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/grid.py +0 -0
  485. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/interactive_optimizer.py +0 -0
  486. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/random.py +0 -0
  487. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/registry.py +0 -0
  488. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/remote.py +0 -0
  489. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/remote_services.py +0 -0
  490. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/results.py +0 -0
  491. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/__init__.py +0 -0
  492. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/loader.py +0 -0
  493. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/model.py +0 -0
  494. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/scaffold.py +0 -0
  495. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
  496. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/staleness.py +0 -0
  497. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/validator.py +0 -0
  498. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/plugins/__init__.py +0 -0
  499. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/plugins/registry.py +0 -0
  500. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/projects/__init__.py +0 -0
  501. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/projects/client.py +0 -0
  502. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/projects/config.py +0 -0
  503. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/projects/dtos.py +0 -0
  504. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/prompts/__init__.py +0 -0
  505. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/prompts/client.py +0 -0
  506. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/prompts/config.py +0 -0
  507. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/prompts/dtos.py +0 -0
  508. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/providers/__init__.py +0 -0
  509. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/providers/validation.py +0 -0
  510. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/py.typed +0 -0
  511. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/reporting/__init__.py +0 -0
  512. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/reporting/example_map.py +0 -0
  513. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/__init__.py +0 -0
  514. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/audit.py +0 -0
  515. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/__init__.py +0 -0
  516. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/helpers.py +0 -0
  517. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/mfa.py +0 -0
  518. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/models.py +0 -0
  519. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/oidc.py +0 -0
  520. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/saml.py +0 -0
  521. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/sms.py +0 -0
  522. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/totp.py +0 -0
  523. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/config.py +0 -0
  524. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/credentials.py +0 -0
  525. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/crypto_utils.py +0 -0
  526. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/deployment.py +0 -0
  527. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/encryption.py +0 -0
  528. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/enterprise.py +0 -0
  529. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/headers.py +0 -0
  530. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/input_validation.py +0 -0
  531. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/jwt_validator.py +0 -0
  532. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/rate_limiter.py +0 -0
  533. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/redaction.py +0 -0
  534. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/session_manager.py +0 -0
  535. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/tenant.py +0 -0
  536. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
  537. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
  538. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
  539. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
  540. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
  541. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
  542. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-debugging/SKILL.md +0 -0
  543. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-debugging/references/error-reference.md +0 -0
  544. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
  545. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
  546. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
  547. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
  548. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
  549. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
  550. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-integrations/SKILL.md +0 -0
  551. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
  552. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
  553. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
  554. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
  555. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-quickstart/references/environment-variables.md +0 -0
  556. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
  557. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-run-optimization/SKILL.md +0 -0
  558. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
  559. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-run-optimization/references/cost-management.md +0 -0
  560. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
  561. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/storage/__init__.py +0 -0
  562. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/storage/local_storage.py +0 -0
  563. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/testing/__init__.py +0 -0
  564. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/traigent_client.py +0 -0
  565. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/traigent_integration.py +0 -0
  566. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/__init__.py +0 -0
  567. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/dataflow_strategy.py +0 -0
  568. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/detection_strategies.py +0 -0
  569. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/detection_types.py +0 -0
  570. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/detector.py +0 -0
  571. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/discovery.py +0 -0
  572. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/observation.py +0 -0
  573. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/py.typed +0 -0
  574. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/__init__.py +0 -0
  575. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/__main__.py +0 -0
  576. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/models.py +0 -0
  577. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/objectives.py +0 -0
  578. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/options.py +0 -0
  579. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/promotion_gate.py +0 -0
  580. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/registry.py +0 -0
  581. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/spec_loader.py +0 -0
  582. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/spec_validator.py +0 -0
  583. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/statistics.py +0 -0
  584. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/__init__.py +0 -0
  585. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/artifact_fingerprints.py +0 -0
  586. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/batch_optimizer_utils.py +0 -0
  587. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/batch_processing.py +0 -0
  588. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/callbacks.py +0 -0
  589. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/console.py +0 -0
  590. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/constraints.py +0 -0
  591. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/cost_calculator.py +0 -0
  592. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/diagnostics.py +0 -0
  593. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/discrete_domains.py +0 -0
  594. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/env_config.py +0 -0
  595. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/error_handler.py +0 -0
  596. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/example_id.py +0 -0
  597. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/exceptions.py +0 -0
  598. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/file_versioning.py +0 -0
  599. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/function_identity.py +0 -0
  600. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/hashing.py +0 -0
  601. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/importance.py +0 -0
  602. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/incentives.py +0 -0
  603. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/insights.py +0 -0
  604. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/langchain_interceptor.py +0 -0
  605. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/litellm_interceptor.py +0 -0
  606. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/llm_response_parsing.py +0 -0
  607. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/local_analytics.py +0 -0
  608. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/logging.py +0 -0
  609. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/multi_objective.py +0 -0
  610. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/numpy_compat.py +0 -0
  611. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/objectives.py +0 -0
  612. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/optimization_analyzer.py +0 -0
  613. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/optimization_logger.py +0 -0
  614. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/pagination.py +0 -0
  615. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/persistence.py +0 -0
  616. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/results_table.py +0 -0
  617. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/retry.py +0 -0
  618. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/secure_path.py +0 -0
  619. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/url_security.py +0 -0
  620. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/validation.py +0 -0
  621. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/visualization/__init__.py +0 -0
  622. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/visualization/plots.py +0 -0
  623. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/wrapper/__init__.py +0 -0
  624. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/wrapper/errors.py +0 -0
  625. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/wrapper/server.py +0 -0
  626. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/wrapper/service.py +0 -0
  627. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent.egg-info/dependency_links.txt +0 -0
  628. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent.egg-info/entry_points.txt +0 -0
  629. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent.egg-info/requires.txt +0 -0
  630. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent.egg-info/top_level.txt +0 -0
  631. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent_validation/__init__.py +0 -0
  632. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent_validation/base.py +0 -0
  633. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent_validation/plugins.py +0 -0
  634. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent_validation/py.typed +0 -0
  635. {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent_validation/validators.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: traigent
3
- Version: 0.21.0.dev2
3
+ Version: 0.21.1.dev0
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.21.0.dev2"
7
+ version = "0.21.1.dev0"
8
8
  authors = [
9
9
  {name = "Traigent Team", email = "opensource@traigent.ai"},
10
10
  ]
@@ -30,6 +30,8 @@ from traigent.cloud.models import (
30
30
  SessionCreationResponse,
31
31
  TrialResultSubmission,
32
32
  )
33
+ from traigent.cloud.session_budgets import remember_cost_budget_armed_session
34
+ from traigent.cloud.session_objectives import normalize_typed_objectives
33
35
  from traigent.cloud.smart_pruning import (
34
36
  normalize_intermediate_report_payload,
35
37
  normalize_smart_pruning_options,
@@ -523,9 +525,13 @@ class ApiOperations:
523
525
  {"Content-Type": _JSON_CONTENT_TYPE}
524
526
  )
525
527
  try:
526
- return await self._post_session_creation(
528
+ result = await self._post_session_creation(
527
529
  session_payload, headers, connector
528
530
  )
531
+ remember_cost_budget_armed_session(
532
+ self.client, result[0], session_payload.get("budget")
533
+ )
534
+ return result
529
535
  except CloudServiceError as typed_exc:
530
536
  # auto-contract fallback: a failed TYPED create may retry the
531
537
  # legacy shape ONCE — and only for NON-governed sessions
@@ -675,6 +681,12 @@ class ApiOperations:
675
681
  strategy = getattr(session_request, "optimization_strategy", None)
676
682
  return dict(strategy) if isinstance(strategy, dict) and strategy else None
677
683
 
684
+ @staticmethod
685
+ def _normalize_typed_objectives(objectives: Any) -> list[Any]:
686
+ """Compatibility wrapper around the shared typed objective normalizer."""
687
+
688
+ return normalize_typed_objectives(objectives)
689
+
678
690
  def _build_typed_session_payload(
679
691
  self, session_request: SessionCreationRequest, max_trials: int
680
692
  ) -> dict[str, Any]:
@@ -695,7 +707,7 @@ class ApiOperations:
695
707
  "configuration_space": _typed_configuration_space(
696
708
  session_request.configuration_space
697
709
  ),
698
- "objectives": list(session_request.objectives or []),
710
+ "objectives": self._normalize_typed_objectives(session_request.objectives),
699
711
  "dataset_metadata": dataset_metadata,
700
712
  "max_trials": max_trials,
701
713
  "metadata": {
@@ -58,6 +58,10 @@ from traigent.cloud.models import (
58
58
  TrialResultSubmission,
59
59
  TrialSuggestion,
60
60
  )
61
+ from traigent.cloud.session_budgets import (
62
+ is_cost_budget_armed_session,
63
+ remember_cost_budget_armed_session,
64
+ )
61
65
 
62
66
  # Import refactored sub-modules
63
67
  from traigent.cloud.privacy_operations import PrivacyOperations
@@ -765,6 +769,7 @@ class BackendIntegratedClient:
765
769
  self._session = None
766
770
  self._active_sessions: dict[str, OptimizationSession] = {}
767
771
  self._active_sessions_lock = Lock()
772
+ self._cost_budget_armed_sessions: set[str] = set()
768
773
 
769
774
  # Memory bounds to prevent unbounded growth
770
775
  self._max_active_sessions = 100 # Maximum concurrent sessions
@@ -826,6 +831,18 @@ class BackendIntegratedClient:
826
831
  logger.info("using local interaction policy")
827
832
  self._interaction_policy_fallback_logged = True
828
833
 
834
+ def _remember_cost_budget_armed_session(
835
+ self, session_id: str, budget: Mapping[str, Any] | None
836
+ ) -> None:
837
+ """Track sessions whose typed create armed a positive cost budget."""
838
+
839
+ remember_cost_budget_armed_session(self, session_id, budget)
840
+
841
+ def _is_cost_budget_armed_session(self, session_id: str) -> bool:
842
+ """Return whether this client created the session with a positive budget."""
843
+
844
+ return is_cost_budget_armed_session(self, session_id)
845
+
829
846
  def _static_interaction_policy(self) -> dict[str, Any]:
830
847
  self._log_local_interaction_policy_once()
831
848
  return {
@@ -1568,12 +1585,18 @@ class BackendIntegratedClient:
1568
1585
  session_id: str,
1569
1586
  include_full_history: bool = False,
1570
1587
  certified_selection: dict[str, Any] | None = None,
1588
+ session_aggregation: dict[str, Any] | None = None,
1571
1589
  ) -> OptimizationFinalizationResponse:
1572
1590
  """Finalize optimization session and get results.
1573
1591
  Delegates to session_operations module. Phase 8: an optional
1574
- client-attested certified-selection report (content-free)."""
1592
+ client-attested certified-selection report (content-free).
1593
+ Traigent#1720/#1724 (g2:agg-summary): an optional content-free
1594
+ session-level rollup, threaded the same way."""
1575
1595
  return await self._session_ops.finalize_session(
1576
- session_id, include_full_history, certified_selection=certified_selection
1596
+ session_id,
1597
+ include_full_history,
1598
+ certified_selection=certified_selection,
1599
+ session_aggregation=session_aggregation,
1577
1600
  )
1578
1601
 
1579
1602
  async def delete_session(self, session_id: str, cascade: bool = True) -> bool:
@@ -1586,11 +1609,15 @@ class BackendIntegratedClient:
1586
1609
  session_id: str,
1587
1610
  include_full_history: bool = False,
1588
1611
  certified_selection: dict[str, Any] | None = None,
1612
+ session_aggregation: dict[str, Any] | None = None,
1589
1613
  ) -> OptimizationFinalizationResponse | None:
1590
1614
  """Synchronous wrapper for finalize_session.
1591
1615
  Delegates to session_operations module."""
1592
1616
  return self._session_ops.finalize_session_sync(
1593
- session_id, include_full_history, certified_selection=certified_selection
1617
+ session_id,
1618
+ include_full_history,
1619
+ certified_selection=certified_selection,
1620
+ session_aggregation=session_aggregation,
1594
1621
  )
1595
1622
 
1596
1623
  def delete_session_sync(self, session_id: str, cascade: bool = True) -> bool:
@@ -66,6 +66,12 @@ from .models import (
66
66
  TrialResultSubmission,
67
67
  TrialSuggestion,
68
68
  )
69
+ from .session_budgets import (
70
+ ensure_cost_metric_for_budgeted_completed_submission,
71
+ is_cost_budget_armed_session,
72
+ remember_cost_budget_armed_session,
73
+ )
74
+ from .session_objectives import normalize_typed_objectives, session_objective_to_wire
69
75
  from .smart_pruning import normalize_smart_pruning_options
70
76
  from .subset_selection import SmartSubsetSelector
71
77
  from .url_security import validate_cloud_base_url
@@ -813,6 +819,7 @@ class TraigentCloudClient(BaseTraigentClient):
813
819
  self._session_finalizer: weakref.finalize | None = None
814
820
  # Track session ownership fingerprints for clearer error reporting
815
821
  self._session_owners: dict[str, dict[str, Any]] = {}
822
+ self._cost_budget_armed_sessions: set[str] = set()
816
823
 
817
824
  @property
818
825
  def _session(self) -> aiohttp.ClientSession | None:
@@ -1055,6 +1062,18 @@ class TraigentCloudClient(BaseTraigentClient):
1055
1062
  if owner_info:
1056
1063
  self._session_owners[session_id] = owner_info
1057
1064
 
1065
+ def _remember_cost_budget_armed_session(
1066
+ self, session_id: str, budget: dict[str, Any] | None
1067
+ ) -> None:
1068
+ """Track sessions whose typed create armed a positive cost budget."""
1069
+
1070
+ remember_cost_budget_armed_session(self, session_id, budget)
1071
+
1072
+ def _is_cost_budget_armed_session(self, session_id: str) -> bool:
1073
+ """Return whether this client created the session with a positive budget."""
1074
+
1075
+ return is_cost_budget_armed_session(self, session_id)
1076
+
1058
1077
  @staticmethod
1059
1078
  def _summarize_actor(info: dict[str, Any] | None) -> str:
1060
1079
  """Create a human-readable summary of a session owner or caller."""
@@ -1715,6 +1734,9 @@ class TraigentCloudClient(BaseTraigentClient):
1715
1734
  dict(request.metadata or {}),
1716
1735
  data.get("metadata", {}),
1717
1736
  )
1737
+ self._remember_cost_budget_armed_session(
1738
+ result.session_id, request_data.get("budget")
1739
+ )
1718
1740
  return result
1719
1741
  else:
1720
1742
  error_text = await response.text()
@@ -1832,6 +1854,15 @@ class TraigentCloudClient(BaseTraigentClient):
1832
1854
  try:
1833
1855
  url = f"{self.api_base_url}/sessions/{session_id}/results"
1834
1856
  request_data = self._serialize_trial_result(result)
1857
+ request_data["metrics"] = dict(request_data.get("metrics") or {})
1858
+ ensure_cost_metric_for_budgeted_completed_submission(
1859
+ client=self,
1860
+ session_id=session_id,
1861
+ metrics=request_data["metrics"],
1862
+ status=request_data.get("status"),
1863
+ telemetry_sources=(result.metadata, request_data.get("metadata")),
1864
+ logger=logger,
1865
+ )
1835
1866
 
1836
1867
  async with self._aio_session.post(
1837
1868
  url, json=request_data, headers=await self._get_headers()
@@ -1917,13 +1948,11 @@ class TraigentCloudClient(BaseTraigentClient):
1917
1948
  """Serialize session creation request."""
1918
1949
  metadata = self._ensure_owner_metadata(request.metadata)
1919
1950
  request.metadata = metadata
1951
+ objectives_payload = normalize_typed_objectives(request.objectives)
1920
1952
  payload: dict[str, Any] = {
1921
1953
  "function_name": request.function_name,
1922
1954
  "configuration_space": request.configuration_space,
1923
- "objectives": [
1924
- self._serialize_session_objective(objective)
1925
- for objective in (request.objectives or [])
1926
- ],
1955
+ "objectives": objectives_payload,
1927
1956
  "dataset_metadata": request.dataset_metadata,
1928
1957
  "max_trials": request.max_trials,
1929
1958
  "optimization_strategy": request.optimization_strategy,
@@ -1962,28 +1991,7 @@ class TraigentCloudClient(BaseTraigentClient):
1962
1991
  objective: str | SessionObjectiveDefinition | dict[str, Any],
1963
1992
  ) -> str | dict[str, Any]:
1964
1993
  """Serialize a typed objective while preserving string shorthand."""
1965
- if isinstance(objective, str):
1966
- return objective
1967
- if isinstance(objective, SessionObjectiveDefinition):
1968
- payload: dict[str, Any] = {
1969
- "metric": objective.metric,
1970
- }
1971
- if objective.band is not None:
1972
- payload["band"] = dict(objective.band)
1973
- if objective.test is not None:
1974
- payload["test"] = objective.test
1975
- if objective.alpha is not None:
1976
- payload["alpha"] = objective.alpha
1977
- elif objective.direction is not None:
1978
- payload["direction"] = objective.direction
1979
- if objective.weight is not None:
1980
- payload["weight"] = objective.weight
1981
- return payload
1982
- if isinstance(objective, dict):
1983
- return dict(objective)
1984
- raise TypeError(
1985
- "Session objectives must be strings, dicts, or SessionObjectiveDefinition objects"
1986
- )
1994
+ return session_objective_to_wire(objective)
1987
1995
 
1988
1996
  def _deserialize_session_response(
1989
1997
  self, data: dict[str, Any]
@@ -0,0 +1,82 @@
1
+ """Session budget tracking and result cost guarantees."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Mapping
6
+ from typing import Any
7
+
8
+ from traigent.utils.trial_costs import (
9
+ coerce_finite_cost,
10
+ extract_trial_cost_metric,
11
+ is_finite_numeric_cost,
12
+ )
13
+
14
+
15
+ def cost_budget_is_armed(budget: Any) -> bool:
16
+ """Return True when a session-create budget carries a positive cost cap."""
17
+
18
+ if not isinstance(budget, Mapping):
19
+ return False
20
+ max_cost = coerce_finite_cost(budget.get("max_cost_usd"))
21
+ return max_cost is not None and max_cost > 0
22
+
23
+
24
+ def remember_cost_budget_armed_session(
25
+ client: Any, session_id: str, budget: Any
26
+ ) -> None:
27
+ """Record a successfully created budget-armed session on a client instance."""
28
+
29
+ sessions = getattr(client, "__dict__", {}).get("_cost_budget_armed_sessions")
30
+ if not isinstance(sessions, set):
31
+ sessions = set()
32
+ client._cost_budget_armed_sessions = sessions
33
+ if cost_budget_is_armed(budget):
34
+ sessions.add(session_id)
35
+ else:
36
+ sessions.discard(session_id)
37
+
38
+
39
+ def is_cost_budget_armed_session(client: Any, session_id: str) -> bool:
40
+ """Return whether the client remembers a positive cost budget for a session."""
41
+
42
+ sessions = getattr(client, "__dict__", {}).get("_cost_budget_armed_sessions")
43
+ return isinstance(sessions, set) and session_id in sessions
44
+
45
+
46
+ def is_completed_status(status: Any) -> bool:
47
+ """Return True for SDK or backend completed status tokens."""
48
+
49
+ raw_status = getattr(status, "value", status)
50
+ return str(raw_status or "").strip().upper() == "COMPLETED"
51
+
52
+
53
+ def ensure_cost_metric_for_budgeted_completed_submission(
54
+ *,
55
+ client: Any,
56
+ session_id: str,
57
+ metrics: dict[str, Any],
58
+ status: Any,
59
+ telemetry_sources: tuple[Any, ...] = (),
60
+ logger: Any | None = None,
61
+ ) -> bool:
62
+ """Guarantee metrics.cost for completed submissions on budgeted sessions.
63
+
64
+ Returns True when the metrics mapping was mutated.
65
+ """
66
+
67
+ if not is_completed_status(status):
68
+ return False
69
+ if not is_cost_budget_armed_session(client, session_id):
70
+ return False
71
+ if is_finite_numeric_cost(metrics.get("cost")):
72
+ return False
73
+
74
+ cost = extract_trial_cost_metric(metrics, *telemetry_sources)
75
+ if cost is not None:
76
+ metrics["cost"] = cost
77
+ return True
78
+
79
+ metrics["cost"] = 0.0
80
+ if logger is not None:
81
+ logger.debug("no cost telemetry; backfilling 0.0 for budget accounting")
82
+ return True
@@ -0,0 +1,78 @@
1
+ """Typed session objective normalization helpers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ from traigent.cloud.models import SessionObjectiveDefinition
8
+
9
+ _DIRECTION_OBJECTIVES = frozenset({"maximize", "minimize"})
10
+
11
+
12
+ def session_objective_to_wire(
13
+ objective: str | SessionObjectiveDefinition | dict[str, Any],
14
+ ) -> str | dict[str, Any]:
15
+ """Serialize one typed objective to the session-create wire shape."""
16
+
17
+ if isinstance(objective, str):
18
+ return objective
19
+ if isinstance(objective, SessionObjectiveDefinition):
20
+ payload: dict[str, Any] = {"metric": objective.metric}
21
+ if objective.band is not None:
22
+ payload["band"] = dict(objective.band)
23
+ if objective.test is not None:
24
+ payload["test"] = objective.test
25
+ if objective.alpha is not None:
26
+ payload["alpha"] = objective.alpha
27
+ elif objective.direction is not None:
28
+ payload["direction"] = objective.direction
29
+ if objective.weight is not None:
30
+ payload["weight"] = objective.weight
31
+ return payload
32
+ if isinstance(objective, dict):
33
+ return dict(objective)
34
+ raise TypeError(
35
+ "Session objectives must be strings, dicts, or SessionObjectiveDefinition objects"
36
+ )
37
+
38
+
39
+ def normalize_typed_objectives(objectives: Any) -> list[Any]:
40
+ """Normalize typed objective shorthands without changing legacy semantics.
41
+
42
+ Bare direction words are legacy optimization-goal placeholders, not metric
43
+ names. The typed session contract uses "score" for that fallback because
44
+ BackendSessionManager backfills the score metric before result submission.
45
+ """
46
+
47
+ normalized: list[Any] = []
48
+ seen_score_directions: set[str] = set()
49
+ raw_objectives = list(objectives or ["maximize"])
50
+
51
+ for raw_objective in raw_objectives:
52
+ objective = session_objective_to_wire(raw_objective)
53
+ if isinstance(objective, str):
54
+ direction = objective.strip().lower()
55
+ if direction in _DIRECTION_OBJECTIVES:
56
+ objective = {"metric": "score", "direction": direction}
57
+
58
+ score_direction = None
59
+ if isinstance(objective, dict):
60
+ metric = objective.get("metric")
61
+ direction = objective.get("direction")
62
+ if (
63
+ isinstance(metric, str)
64
+ and metric == "score"
65
+ and isinstance(direction, str)
66
+ and direction.lower() in _DIRECTION_OBJECTIVES
67
+ ):
68
+ score_direction = direction.lower()
69
+
70
+ if score_direction is not None:
71
+ if score_direction in seen_score_directions:
72
+ continue
73
+ seen_score_directions.add(score_direction)
74
+ objective["direction"] = score_direction
75
+
76
+ normalized.append(objective)
77
+
78
+ return normalized
@@ -1167,6 +1167,7 @@ class SessionOperations:
1167
1167
  session_id: str,
1168
1168
  include_full_history: bool = False,
1169
1169
  certified_selection: dict[str, Any] | None = None,
1170
+ session_aggregation: dict[str, Any] | None = None,
1170
1171
  ) -> OptimizationFinalizationResponse:
1171
1172
  """Finalize optimization session and get results.
1172
1173
 
@@ -1176,6 +1177,10 @@ class SessionOperations:
1176
1177
  Args:
1177
1178
  session_id: Session ID to finalize
1178
1179
  include_full_history: Whether to include full trial history in response
1180
+ certified_selection: Client-attested certified-selection report.
1181
+ session_aggregation: Content-free session-level rollup payload
1182
+ (Traigent#1720/#1724, g2:agg-summary), threaded to the
1183
+ finalize endpoint exactly like ``certified_selection``.
1179
1184
 
1180
1185
  Returns:
1181
1186
  OptimizationFinalizationResponse with session summary
@@ -1227,6 +1232,7 @@ class SessionOperations:
1227
1232
  session_id,
1228
1233
  mapping.experiment_run_id,
1229
1234
  certified_selection=certified_selection,
1235
+ session_aggregation=session_aggregation,
1230
1236
  )
1231
1237
  except CloudServiceError:
1232
1238
  raise
@@ -1294,6 +1300,14 @@ class SessionOperations:
1294
1300
  backend_convergence_history = backend_summary.get("convergence_history")
1295
1301
  backend_full_history = backend_summary.get("full_history")
1296
1302
  backend_metadata = backend_summary.get("metadata")
1303
+ # Traigent#1720/#1724 (g2:agg-summary): the backend echoes the
1304
+ # allowlist-normalized session_aggregation rollup back as a
1305
+ # top-level finalize-response property (mirrors the request shape).
1306
+ # Only surface it when it round-tripped as a dict — the SDK
1307
+ # orchestrator uses its presence here as the honest "was this
1308
+ # actually persisted" signal, so a malformed/missing echo must not
1309
+ # be synthesized.
1310
+ backend_session_aggregation = backend_summary.get("session_aggregation")
1297
1311
  backend_warm_start_transfer = (
1298
1312
  backend_metadata.get("warm_start_transfer")
1299
1313
  if isinstance(backend_metadata, dict)
@@ -1427,6 +1441,15 @@ class SessionOperations:
1427
1441
  if isinstance(effective_warm_start_transfer, dict)
1428
1442
  else {}
1429
1443
  ),
1444
+ # Traigent#1720/#1724 (g2:agg-summary): echo the backend's
1445
+ # acknowledged session_aggregation rollup so the orchestrator
1446
+ # can derive an honest "was this actually persisted" signal.
1447
+ # Absent/malformed echo => key omitted (never synthesized).
1448
+ **(
1449
+ {"session_aggregation": dict(backend_session_aggregation)}
1450
+ if isinstance(backend_session_aggregation, dict)
1451
+ else {}
1452
+ ),
1430
1453
  },
1431
1454
  )
1432
1455
 
@@ -1437,12 +1460,16 @@ class SessionOperations:
1437
1460
  session_id: str,
1438
1461
  experiment_run_id: str,
1439
1462
  certified_selection: dict[str, Any] | None = None,
1463
+ session_aggregation: dict[str, Any] | None = None,
1440
1464
  ) -> dict[str, Any] | None:
1441
1465
  """Call backend session finalization endpoint.
1442
1466
 
1443
1467
  Args:
1444
1468
  session_id: Session ID to finalize
1445
1469
  experiment_run_id: Associated experiment run ID
1470
+ certified_selection: Client-attested certified-selection report.
1471
+ session_aggregation: Content-free session-level rollup payload
1472
+ (Traigent#1720/#1724, g2:agg-summary).
1446
1473
 
1447
1474
  Returns:
1448
1475
  Parsed backend response payload (may be ``{}`` if the backend
@@ -1484,6 +1511,27 @@ class SessionOperations:
1484
1511
  # selection report — TOP-LEVEL key only (the backend
1485
1512
  # rejects metadata-tunneled reports).
1486
1513
  finalize_body["certified_selection"] = certified_selection
1514
+ if session_aggregation is not None:
1515
+ # Traigent#1720/#1724 (g2:agg-summary): the content-free
1516
+ # session-level rollup — TOP-LEVEL key only, mirroring
1517
+ # certified_selection immediately above (the backend
1518
+ # rejects metadata-tunneled payloads).
1519
+ #
1520
+ # EGRESS GUARD (Codex round 6): re-sanitize here, at the
1521
+ # true wire boundary, so a caller-supplied dict passed to
1522
+ # finalize_session(..., session_aggregation=...) that
1523
+ # bypassed the builder cannot leak unbounded content. The
1524
+ # builder's output is already bounded, so this is a no-op
1525
+ # on the normal path. Lazy import avoids an import cycle.
1526
+ from traigent.core.backend_session_manager import (
1527
+ sanitize_session_aggregation_payload,
1528
+ )
1529
+
1530
+ sanitized_aggregation = sanitize_session_aggregation_payload(
1531
+ session_aggregation
1532
+ )
1533
+ if sanitized_aggregation is not None:
1534
+ finalize_body["session_aggregation"] = sanitized_aggregation
1487
1535
  async with session.post(
1488
1536
  url,
1489
1537
  json=finalize_body,
@@ -1631,6 +1679,7 @@ class SessionOperations:
1631
1679
  session_id: str,
1632
1680
  include_full_history: bool = False,
1633
1681
  certified_selection: dict[str, Any] | None = None,
1682
+ session_aggregation: dict[str, Any] | None = None,
1634
1683
  ) -> OptimizationFinalizationResponse | None:
1635
1684
  """Synchronous wrapper for finalize_session."""
1636
1685
  import concurrent.futures
@@ -1647,6 +1696,7 @@ class SessionOperations:
1647
1696
  session_id,
1648
1697
  include_full_history,
1649
1698
  certified_selection=certified_selection,
1699
+ session_aggregation=session_aggregation,
1650
1700
  )
1651
1701
  )
1652
1702
  finally:
@@ -320,6 +320,12 @@ class SyncManager:
320
320
  session.trials or []
321
321
  )
322
322
  objectives = self._derive_objectives(opt_config, configuration_runs)
323
+ # Guard: the backend rejects a COMPLETED trial whose metrics lack any
324
+ # declared objective. Backfill each completed trial's measures so every
325
+ # objective is present as a number (prefer its own ``score``, else 0.0),
326
+ # so a real user-declared objective missing from one trial can't 400 the
327
+ # whole sync.
328
+ self._backfill_objective_measures(configuration_runs, objectives)
323
329
 
324
330
  # Content-free dataset label: name + size only, never example content.
325
331
  # The typed path validates dataset_metadata.size as a positive int
@@ -377,18 +383,54 @@ class SyncManager:
377
383
  def _derive_objectives(
378
384
  opt_config: dict[str, Any], configuration_runs: list[dict[str, Any]]
379
385
  ) -> list[str]:
380
- """Derive objective names for the typed session create payload.
381
-
382
- Prefer the objectives recorded on the local optimization config; fall
383
- back to the measure names present on the trials (``["score"]`` at
384
- minimum). Content-free: only measure/objective *names* are emitted.
386
+ """Derive the session's objective names for the typed create payload.
387
+
388
+ The backend requires EVERY declared objective to be present as a numeric
389
+ metric on EVERY completed trial (an Optuna objective must be a scalar it
390
+ can ``tell()``). So the objective set must be MINIMAL and universally
391
+ present, NOT the union of every incidental per-trial measure — declaring
392
+ the union makes run-level overlays (``run_trials_completed``,
393
+ ``duration``, tokens, cost, ...) "required objectives" that not every
394
+ trial reports, and each such trial's /results then 400s
395
+ ("Completed trial is missing numeric metric ...").
396
+
397
+ Prefer the run's real optimization objectives; otherwise fall back to
398
+ ``["score"]`` — ``score`` is written on every trial by
399
+ ``_convert_trials_to_results``, so it is guaranteed present. The caller
400
+ additionally backfills any declared objective missing from a completed
401
+ trial (see ``convert_session_to_traigent_format``). Content-free: only
402
+ objective *names* are emitted.
385
403
  """
386
404
  raw_objectives = opt_config.get("objectives")
387
405
  if isinstance(raw_objectives, (list, tuple)):
388
406
  names = [str(name) for name in raw_objectives if name]
389
407
  if names:
390
408
  return names
391
- return SyncManager._derive_experiment_measures(configuration_runs)
409
+ return ["score"]
410
+
411
+ @staticmethod
412
+ def _backfill_objective_measures(
413
+ configuration_runs: list[dict[str, Any]], objectives: list[str]
414
+ ) -> None:
415
+ """Ensure every COMPLETED trial reports each declared objective numerically.
416
+
417
+ The backend requires a numeric value for every objective on a completed
418
+ trial (Optuna ``tell``). If a trial's measures omit one (or it is
419
+ non-numeric), backfill it with the trial's ``score`` when available, else
420
+ ``0.0``. Only completed trials are guarded — failed trials skip the
421
+ objective check server-side. Mutates ``configuration_runs`` in place.
422
+ """
423
+ for configuration_run in configuration_runs:
424
+ if str(configuration_run.get("status", "")).upper() != "COMPLETED":
425
+ continue
426
+ measures = configuration_run.setdefault("measures", {})
427
+ fallback = measures.get("score")
428
+ if not isinstance(fallback, (int, float)) or isinstance(fallback, bool):
429
+ fallback = 0.0
430
+ for objective in objectives:
431
+ value = measures.get(objective)
432
+ if not isinstance(value, (int, float)) or isinstance(value, bool):
433
+ measures[objective] = fallback
392
434
 
393
435
  def _convert_trials_to_configuration_runs(
394
436
  self, trials: list[Any]
@@ -453,19 +495,6 @@ class SyncManager:
453
495
  """Return True for JSON numeric values while excluding booleans."""
454
496
  return isinstance(value, (int, float)) and not isinstance(value, bool)
455
497
 
456
- @staticmethod
457
- def _derive_experiment_measures(
458
- configuration_runs: list[dict[str, Any]],
459
- ) -> list[str]:
460
- """Derive the experiment-level measure list from trial payloads."""
461
- measures: list[str] = []
462
- for configuration_run in configuration_runs:
463
- for measure_name in configuration_run.get("measures", {}):
464
- if measure_name not in measures:
465
- measures.append(measure_name)
466
-
467
- return measures or ["score"]
468
-
469
498
  def _convert_trials_to_results(self, trials: list[Any]) -> list[dict[str, Any]]:
470
499
  """Convert local trials to Traigent configuration_run format."""
471
500
  results = []
@@ -22,6 +22,9 @@ from traigent.cloud.client import (
22
22
  raise_if_cloud_egress_disabled,
23
23
  )
24
24
  from traigent.cloud.dtos import MeasuresDict
25
+ from traigent.cloud.session_budgets import (
26
+ ensure_cost_metric_for_budgeted_completed_submission,
27
+ )
25
28
  from traigent.cloud.validators import validate_configuration_run_submission
26
29
  from traigent.config.backend_config import BackendConfig
27
30
  from traigent.utils.env_config import is_backend_offline, resolve_environment_label
@@ -989,6 +992,15 @@ class TrialOperations:
989
992
  )
990
993
  return False
991
994
 
995
+ ensure_cost_metric_for_budgeted_completed_submission(
996
+ client=self.client,
997
+ session_id=session_id,
998
+ metrics=validated_metrics,
999
+ status=backend_status,
1000
+ telemetry_sources=(metrics, metadata, measures, summary_stats),
1001
+ logger=logger,
1002
+ )
1003
+
992
1004
  # Build result data
993
1005
  result_data = self._build_trial_result_data(
994
1006
  trial_id,
@@ -1169,6 +1181,16 @@ class TrialOperations:
1169
1181
  # Also include summary_stats for backend to detect privacy mode
1170
1182
  "summary_stats": summary_stats,
1171
1183
  }
1184
+ submission_metrics = submission_data["metrics"]
1185
+ if isinstance(submission_metrics, dict):
1186
+ ensure_cost_metric_for_budgeted_completed_submission(
1187
+ client=self.client,
1188
+ session_id=session_id,
1189
+ metrics=submission_metrics,
1190
+ status=backend_status,
1191
+ telemetry_sources=(summary_stats, submission_metadata),
1192
+ logger=logger,
1193
+ )
1172
1194
 
1173
1195
  # Validate the submission data. Schema validation is authoritative;
1174
1196
  # invalid payloads must not be posted to the backend.