traigent 0.16.0.dev0__tar.gz → 0.17.0__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 (637) hide show
  1. {traigent-0.16.0.dev0 → traigent-0.17.0}/CHANGELOG.md +34 -0
  2. {traigent-0.16.0.dev0/traigent.egg-info → traigent-0.17.0}/PKG-INFO +1 -2
  3. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/README.md +1 -1
  4. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/api-reference/telemetry.md +8 -83
  5. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/examples/QUICK_REFERENCE.md +1 -1
  6. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/getting-started/installation.md +1 -1
  7. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/user-guide/README.md +2 -2
  8. traigent-0.17.0/docs/user-guide/smart_optimization.md +65 -0
  9. {traigent-0.16.0.dev0 → traigent-0.17.0}/pyproject.toml +1 -3
  10. {traigent-0.16.0.dev0 → traigent-0.17.0}/requirements/requirements-all.txt +4 -4
  11. traigent-0.17.0/requirements/requirements-bayesian.txt +2 -0
  12. {traigent-0.16.0.dev0 → traigent-0.17.0}/requirements/requirements-dev.txt +4 -4
  13. {traigent-0.16.0.dev0 → traigent-0.17.0}/requirements/requirements-test.txt +8 -8
  14. {traigent-0.16.0.dev0 → traigent-0.17.0}/requirements/requirements.txt +0 -1
  15. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/analytics/__init__.py +2 -0
  16. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/analytics/example_insights.py +3 -2
  17. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/analytics/next_steps.py +3 -2
  18. traigent-0.17.0/traigent/analytics/optimization_plan.py +212 -0
  19. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/types.py +9 -0
  20. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/main.py +4 -0
  21. traigent-0.17.0/traigent/cli/plan_command.py +225 -0
  22. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/sync_commands.py +10 -0
  23. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/auth.py +14 -5
  24. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/session_operations.py +3 -0
  25. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/sync_manager.py +202 -17
  26. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/trial_operations.py +20 -1
  27. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/backend_config.py +62 -0
  28. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/feature_flags.py +9 -9
  29. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/seamless_injection.py +5 -5
  30. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/backend_session_manager.py +3 -9
  31. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/execution_policy_runtime.py +12 -3
  32. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/objectives.py +12 -5
  33. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/optimized_function.py +121 -3
  34. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/orchestrator.py +18 -3
  35. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/trial_lifecycle.py +112 -63
  36. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/trial_result_factory.py +45 -0
  37. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/metrics_tracker.py +68 -0
  38. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/quickstart/__main__.py +51 -13
  39. traigent-0.17.0/traigent/generation/skill_train/_deterministic_indices.py +33 -0
  40. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/slow_update.py +2 -3
  41. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/splits.py +3 -5
  42. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/mcp/server.py +32 -0
  43. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/mcp/tools.py +31 -0
  44. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/__init__.py +0 -11
  45. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/grid.py +1 -2
  46. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/registry.py +0 -17
  47. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/input_validation.py +7 -5
  48. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/cost_calculator.py +127 -14
  49. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/insights.py +31 -9
  50. {traigent-0.16.0.dev0 → traigent-0.17.0/traigent.egg-info}/PKG-INFO +1 -2
  51. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent.egg-info/SOURCES.txt +4 -15
  52. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent.egg-info/requires.txt +0 -1
  53. traigent-0.16.0.dev0/docs/user-guide/optuna_integration.md +0 -93
  54. traigent-0.16.0.dev0/requirements/requirements-bayesian.txt +0 -9
  55. traigent-0.16.0.dev0/traigent/cloud/event_manager.py +0 -551
  56. traigent-0.16.0.dev0/traigent/config/seamless_optuna_adapter.py +0 -295
  57. traigent-0.16.0.dev0/traigent/core/config_builder.py +0 -565
  58. traigent-0.16.0.dev0/traigent/core/llm_processor.py +0 -357
  59. traigent-0.16.0.dev0/traigent/core/pruning_progress_tracker.py +0 -365
  60. traigent-0.16.0.dev0/traigent/core/refactoring_utils.py +0 -263
  61. traigent-0.16.0.dev0/traigent/integrations/llms/langchain/discovery.py +0 -311
  62. traigent-0.16.0.dev0/traigent/optimizers/benchmarking.py +0 -149
  63. traigent-0.16.0.dev0/traigent/optimizers/optuna_checkpoint.py +0 -341
  64. traigent-0.16.0.dev0/traigent/optimizers/optuna_utils.py +0 -496
  65. traigent-0.16.0.dev0/traigent/optimizers/pruners.py +0 -335
  66. traigent-0.16.0.dev0/traigent/optimizers/service_registry.py +0 -924
  67. traigent-0.16.0.dev0/traigent/telemetry/__init__.py +0 -7
  68. traigent-0.16.0.dev0/traigent/telemetry/optuna_metrics.py +0 -87
  69. {traigent-0.16.0.dev0 → traigent-0.17.0}/COMMERCIAL-LICENSE.md +0 -0
  70. {traigent-0.16.0.dev0 → traigent-0.17.0}/CONTRIBUTING.md +0 -0
  71. {traigent-0.16.0.dev0 → traigent-0.17.0}/CONTRIBUTOR-LICENSING.md +0 -0
  72. {traigent-0.16.0.dev0 → traigent-0.17.0}/DISCLAIMER.md +0 -0
  73. {traigent-0.16.0.dev0 → traigent-0.17.0}/LICENSE +0 -0
  74. {traigent-0.16.0.dev0 → traigent-0.17.0}/MANIFEST.in +0 -0
  75. {traigent-0.16.0.dev0 → traigent-0.17.0}/NOTICE +0 -0
  76. {traigent-0.16.0.dev0 → traigent-0.17.0}/README.md +0 -0
  77. {traigent-0.16.0.dev0 → traigent-0.17.0}/SECURITY.md +0 -0
  78. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/LOCAL_CI_GATE.md +0 -0
  79. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/SYNC_MAP.md +0 -0
  80. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/agent-skill.md +0 -0
  81. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/api-reference/complete-function-specification.md +0 -0
  82. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/api-reference/decorator-reference.md +0 -0
  83. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/api-reference/enterprise-beta-api.md +0 -0
  84. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/api-reference/interactive_optimizer.md +0 -0
  85. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/api-reference/thread-pool-examples.md +0 -0
  86. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/architecture/ARCHITECTURE.md +0 -0
  87. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/architecture/cost-architecture-validation.md +0 -0
  88. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/architecture/execution_mode_follow_up.md +0 -0
  89. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/architecture/integrations-inventory.md +0 -0
  90. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/architecture/plugin_architecture.md +0 -0
  91. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/architecture/project-structure.md +0 -0
  92. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/architecture/stop_conditions.md +0 -0
  93. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/concepts/composite-knob-ir.md +0 -0
  94. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/concepts/composite-knobs.md +0 -0
  95. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/concepts/guided-generation.md +0 -0
  96. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
  97. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
  98. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/contributing/CONTRIBUTING.md +0 -0
  99. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
  100. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/contributing/README.md +0 -0
  101. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/contributing/SECURITY.md +0 -0
  102. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/contributing/aikido_triage.md +0 -0
  103. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/contributing/code_review_instructions.md +0 -0
  104. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/contributing/test-quality-guide.md +0 -0
  105. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
  106. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/demos/README.md +0 -0
  107. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/examples/API_PATTERNS.md +0 -0
  108. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/examples/LEARNING_ROADMAP.md +0 -0
  109. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/examples/README.md +0 -0
  110. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/examples/START_HERE.md +0 -0
  111. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/examples/TROUBLESHOOTING.md +0 -0
  112. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/fake-completion-tracking.md +0 -0
  113. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/feature_matrices/README.md +0 -0
  114. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/README.md +0 -0
  115. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/authentication.md +0 -0
  116. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/constraint-dsl.md +0 -0
  117. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/dataflow-detection.md +0 -0
  118. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/framework_override_enhanced_features.md +0 -0
  119. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/mcp-server.md +0 -0
  120. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/observability-spans.md +0 -0
  121. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/onboarding.md +0 -0
  122. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/prompt_management.md +0 -0
  123. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/recommendations.md +0 -0
  124. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/safety-gates.md +0 -0
  125. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/seamless_injection.md +0 -0
  126. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/strategy-presets.md +0 -0
  127. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/features/strict_metrics_nulls.md +0 -0
  128. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/getting-started/GETTING_STARTED.md +0 -0
  129. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/getting-started/README.md +0 -0
  130. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/getting-started/minimal-integration.md +0 -0
  131. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
  132. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/getting-started/testing.md +0 -0
  133. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
  134. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/guides/evaluation.md +0 -0
  135. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/guides/execution-mode-migration.md +0 -0
  136. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/guides/execution-modes.md +0 -0
  137. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/guides/js-bridge.md +0 -0
  138. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/guides/llm_plugin_migration_guide.md +0 -0
  139. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/guides/parallel-configuration.md +0 -0
  140. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/guides/secrets_management.md +0 -0
  141. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/hybrid-mode-api-contract.md +0 -0
  142. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/hybrid-mode-client-guide.md +0 -0
  143. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/operations/azure_openai.md +0 -0
  144. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/operations/bedrock.md +0 -0
  145. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/operations/google_gemini.md +0 -0
  146. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/security/trust_model.md +0 -0
  147. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
  148. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/traceability/concepts/composite-knob-ir.md +0 -0
  149. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/traceability/concepts/composite-knobs.md +0 -0
  150. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/traceability/concepts/guided-generation.md +0 -0
  151. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/traceability/schema.md +0 -0
  152. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/traceability/tagging_tracking.md +0 -0
  153. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/traceability/taxonomy_reference.md +0 -0
  154. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
  155. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/user-guide/agent_optimization.md +0 -0
  156. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/user-guide/choosing_optimization_model.md +0 -0
  157. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/user-guide/configuration-spaces.md +0 -0
  158. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/user-guide/evaluation_guide.md +0 -0
  159. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/user-guide/injection_modes.md +0 -0
  160. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/user-guide/interactive_optimization.md +0 -0
  161. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/user-guide/tuned_variables.md +0 -0
  162. {traigent-0.16.0.dev0 → traigent-0.17.0}/docs/walkthrough.md +0 -0
  163. {traigent-0.16.0.dev0 → traigent-0.17.0}/requirements/requirements-analytics.txt +0 -0
  164. {traigent-0.16.0.dev0 → traigent-0.17.0}/requirements/requirements-chroma.txt +0 -0
  165. {traigent-0.16.0.dev0 → traigent-0.17.0}/requirements/requirements-hybrid.txt +0 -0
  166. {traigent-0.16.0.dev0 → traigent-0.17.0}/requirements/requirements-integrations.txt +0 -0
  167. {traigent-0.16.0.dev0 → traigent-0.17.0}/requirements/requirements-security.txt +0 -0
  168. {traigent-0.16.0.dev0 → traigent-0.17.0}/setup.cfg +0 -0
  169. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/__init__.py +0 -0
  170. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/_version.py +0 -0
  171. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/adapters/execution_adapter.py +0 -0
  172. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/admin/__init__.py +0 -0
  173. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/admin/client.py +0 -0
  174. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/admin/config.py +0 -0
  175. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/admin/dtos.py +0 -0
  176. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/agents/__init__.py +0 -0
  177. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/agents/config_mapper.py +0 -0
  178. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/agents/executor.py +0 -0
  179. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/agents/platforms.py +0 -0
  180. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/agents/specification_generator.py +0 -0
  181. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/analytics/anomaly.py +0 -0
  182. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/analytics/cost_optimization.py +0 -0
  183. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/analytics/intelligence.py +0 -0
  184. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/analytics/meta_learning.py +0 -0
  185. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/analytics/predictive.py +0 -0
  186. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/analytics/scheduling.py +0 -0
  187. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/__init__.py +0 -0
  188. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/agent_inference.py +0 -0
  189. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/config_builder.py +0 -0
  190. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/config_space.py +0 -0
  191. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/constraint_builders.py +0 -0
  192. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/constraints.py +0 -0
  193. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/decorators.py +0 -0
  194. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/functions.py +0 -0
  195. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/parameter_ranges.py +0 -0
  196. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/parameter_validator.py +0 -0
  197. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/safety.py +0 -0
  198. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/strategy_presets.py +0 -0
  199. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/api/validation_protocol.py +0 -0
  200. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/__init__.py +0 -0
  201. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/auth_commands.py +0 -0
  202. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/detect_tvars_command.py +0 -0
  203. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/function_discovery.py +0 -0
  204. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/generate_config_command.py +0 -0
  205. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/hooks_commands.py +0 -0
  206. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/local_commands.py +0 -0
  207. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/next_steps_command.py +0 -0
  208. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/onboard_commands.py +0 -0
  209. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/optimization_validator.py +0 -0
  210. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/playbook_commands.py +0 -0
  211. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cli/validation_types.py +0 -0
  212. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/__init__.py +0 -0
  213. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/_aiohttp_compat.py +0 -0
  214. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/agent_dtos.py +0 -0
  215. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/api_key_manager.py +0 -0
  216. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/api_operations.py +0 -0
  217. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/async_batch_transport.py +0 -0
  218. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/backend_bridges.py +0 -0
  219. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/backend_client.py +0 -0
  220. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/backend_components.py +0 -0
  221. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/backend_synchronizer.py +0 -0
  222. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/benchmark_client.py +0 -0
  223. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/billing.py +0 -0
  224. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/client.py +0 -0
  225. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/cloud_operations.py +0 -0
  226. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/credential_manager.py +0 -0
  227. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/credential_resolver.py +0 -0
  228. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/dataset_converter.py +0 -0
  229. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/dtos.py +0 -0
  230. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/governance.py +0 -0
  231. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/integration_manager.py +0 -0
  232. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/models.py +0 -0
  233. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/optimizer_client.py +0 -0
  234. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/password_auth_handler.py +0 -0
  235. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/privacy_operations.py +0 -0
  236. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/production_mcp_client.py +0 -0
  237. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/remote_guidance.py +0 -0
  238. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/resilient_client.py +0 -0
  239. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/service.py +0 -0
  240. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/session_types.py +0 -0
  241. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/sessions.py +0 -0
  242. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/subset_selection.py +0 -0
  243. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/token_manager.py +0 -0
  244. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/trial_tracker.py +0 -0
  245. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/url_security.py +0 -0
  246. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/cloud/validators.py +0 -0
  247. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/__init__.py +0 -0
  248. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/api_keys.py +0 -0
  249. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/ast_transformer.py +0 -0
  250. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/context.py +0 -0
  251. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/models.yaml +0 -0
  252. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/parallel.py +0 -0
  253. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/project.py +0 -0
  254. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/providers.py +0 -0
  255. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/runtime_injector.py +0 -0
  256. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/tenant.py +0 -0
  257. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config/types.py +0 -0
  258. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/__init__.py +0 -0
  259. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/agent_classifier.py +0 -0
  260. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/apply.py +0 -0
  261. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
  262. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
  263. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
  264. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
  265. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/catalog.py +0 -0
  266. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/llm_backend.py +0 -0
  267. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/pipeline.py +0 -0
  268. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/presets/__init__.py +0 -0
  269. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
  270. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
  271. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/presets/constraint_templates.py +0 -0
  272. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/presets/range_presets.py +0 -0
  273. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/recommendations.py +0 -0
  274. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/subsystems/__init__.py +0 -0
  275. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/subsystems/benchmarks.py +0 -0
  276. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/subsystems/objectives.py +0 -0
  277. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
  278. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
  279. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
  280. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
  281. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/config_generator/types.py +0 -0
  282. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/__init__.py +0 -0
  283. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/best_config_runtime.py +0 -0
  284. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/cache_policy.py +0 -0
  285. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/ci_approval.py +0 -0
  286. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/config_state_manager.py +0 -0
  287. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/constants.py +0 -0
  288. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/cost_enforcement.py +0 -0
  289. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/cost_estimator.py +0 -0
  290. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/evaluator_wrapper.py +0 -0
  291. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/exception_handler.py +0 -0
  292. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/license.py +0 -0
  293. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/logger_facade.py +0 -0
  294. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/mandatory_metrics.py +0 -0
  295. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/meta_types.py +0 -0
  296. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/metadata_helpers.py +0 -0
  297. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/metric_registry.py +0 -0
  298. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/metrics_aggregator.py +0 -0
  299. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/namespace.py +0 -0
  300. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/optimization_pipeline.py +0 -0
  301. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/orchestrator_helpers.py +0 -0
  302. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/parallel_execution_manager.py +0 -0
  303. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/progress_manager.py +0 -0
  304. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/result_selection.py +0 -0
  305. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/sample_budget.py +0 -0
  306. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/samplers/__init__.py +0 -0
  307. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/samplers/random_sampler.py +0 -0
  308. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/session_context.py +0 -0
  309. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/session_types.py +0 -0
  310. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/stat_significance.py +0 -0
  311. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/stop_condition_manager.py +0 -0
  312. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/stop_conditions.py +0 -0
  313. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/trace_env.py +0 -0
  314. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/tracing.py +0 -0
  315. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/trial_context.py +0 -0
  316. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/types.py +0 -0
  317. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/types_ext.py +0 -0
  318. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/utils.py +0 -0
  319. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core/workflow_trace_manager.py +0 -0
  320. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core_metrics/__init__.py +0 -0
  321. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core_metrics/client.py +0 -0
  322. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core_metrics/config.py +0 -0
  323. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/core_metrics/dtos.py +0 -0
  324. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/effectuation/__init__.py +0 -0
  325. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/effectuation/contracts.py +0 -0
  326. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/effectuation/strategies/__init__.py +0 -0
  327. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/effectuation/strategies/framework_param.py +0 -0
  328. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/effectuation/strategies/self_consistency.py +0 -0
  329. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluation/__init__.py +0 -0
  330. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluation/client.py +0 -0
  331. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluation/config.py +0 -0
  332. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluation/dtos.py +0 -0
  333. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/__init__.py +0 -0
  334. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/base.py +0 -0
  335. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
  336. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
  337. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/catalog_loader.py +0 -0
  338. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/dataset_registry.py +0 -0
  339. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/hybrid_api.py +0 -0
  340. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/local.py +0 -0
  341. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/metrics.py +0 -0
  342. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/evaluators/recommendations.py +0 -0
  343. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/__init__.py +0 -0
  344. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/__init__.py +0 -0
  345. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/_bootstrap.py +0 -0
  346. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/_demo.py +0 -0
  347. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/anthropic.py +0 -0
  348. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/aws.py +0 -0
  349. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/azure.py +0 -0
  350. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/gcp.py +0 -0
  351. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/gemini.py +0 -0
  352. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/groq.py +0 -0
  353. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/litellm_any.py +0 -0
  354. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/manifest.json +0 -0
  355. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/openai.py +0 -0
  356. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/openrouter.py +0 -0
  357. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/providers/qa_samples.jsonl +0 -0
  358. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/quickstart/__init__.py +0 -0
  359. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/quickstart/_env.py +0 -0
  360. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
  361. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/examples/tutorial_bootstrap.py +0 -0
  362. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/__init__.py +0 -0
  363. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/backend_provider.py +0 -0
  364. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/example_synth.py +0 -0
  365. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/llm_provider.py +0 -0
  366. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/loop.py +0 -0
  367. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/models.py +0 -0
  368. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/options.py +0 -0
  369. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/prompt_rewriter.py +0 -0
  370. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/__init__.py +0 -0
  371. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/artifacts.py +0 -0
  372. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/buffer.py +0 -0
  373. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/document.py +0 -0
  374. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/edits.py +0 -0
  375. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/prompts.py +0 -0
  376. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/reflection.py +0 -0
  377. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/schedule.py +0 -0
  378. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/trainer.py +0 -0
  379. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/skill_train/trainer_result.py +0 -0
  380. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/generation/validators.py +0 -0
  381. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/guaranteed_modes.py +0 -0
  382. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hooks/__init__.py +0 -0
  383. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hooks/config.py +0 -0
  384. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hooks/installer.py +0 -0
  385. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hooks/validator.py +0 -0
  386. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hybrid/__init__.py +0 -0
  387. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hybrid/discovery.py +0 -0
  388. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hybrid/http_transport.py +0 -0
  389. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hybrid/lifecycle.py +0 -0
  390. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hybrid/mcp_transport.py +0 -0
  391. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hybrid/protocol.py +0 -0
  392. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/hybrid/transport.py +0 -0
  393. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/__init__.py +0 -0
  394. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/activation.py +0 -0
  395. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/base.py +0 -0
  396. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/base_plugin.py +0 -0
  397. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/batch_wrapper.py +0 -0
  398. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/bedrock_client.py +0 -0
  399. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/config.py +0 -0
  400. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/dspy_adapter.py +0 -0
  401. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/framework_override.py +0 -0
  402. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/langchain/__init__.py +0 -0
  403. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/langchain/handler.py +0 -0
  404. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/langfuse/__init__.py +0 -0
  405. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/langfuse/callback.py +0 -0
  406. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/langfuse/client.py +0 -0
  407. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/langfuse/tracker.py +0 -0
  408. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/__init__.py +0 -0
  409. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/anthropic_plugin.py +0 -0
  410. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
  411. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/base_llm_plugin.py +0 -0
  412. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/bedrock_plugin.py +0 -0
  413. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/cohere_plugin.py +0 -0
  414. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/gemini_plugin.py +0 -0
  415. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/huggingface_plugin.py +0 -0
  416. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/langchain/__init__.py +0 -0
  417. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/langchain/base.py +0 -0
  418. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/langchain_plugin.py +0 -0
  419. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/litellm_plugin.py +0 -0
  420. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
  421. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/mistral_plugin.py +0 -0
  422. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/openai.py +0 -0
  423. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/llms/openai_plugin.py +0 -0
  424. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/mappings.py +0 -0
  425. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/model_discovery/__init__.py +0 -0
  426. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
  427. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
  428. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/model_discovery/base.py +0 -0
  429. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/model_discovery/cache.py +0 -0
  430. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
  431. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
  432. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
  433. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/model_discovery/registry.py +0 -0
  434. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/observability/__init__.py +0 -0
  435. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/observability/mlflow.py +0 -0
  436. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/observability/wandb.py +0 -0
  437. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/observability/workflow_traces.py +0 -0
  438. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/plugin_registry.py +0 -0
  439. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/providers.py +0 -0
  440. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/pydantic_ai/__init__.py +0 -0
  441. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/pydantic_ai/_types.py +0 -0
  442. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/pydantic_ai/handler.py +0 -0
  443. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/pydantic_ai/plugin.py +0 -0
  444. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/utils/__init__.py +0 -0
  445. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/utils/discovery.py +0 -0
  446. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/utils/message_coercion.py +0 -0
  447. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/utils/mock_adapter.py +0 -0
  448. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/utils/parameter_normalizer.py +0 -0
  449. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/utils/response_wrapper.py +0 -0
  450. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/utils/validation.py +0 -0
  451. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/utils/version_compat.py +0 -0
  452. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/vector_stores/__init__.py +0 -0
  453. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/vector_stores/base.py +0 -0
  454. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
  455. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
  456. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
  457. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/integrations/wrappers.py +0 -0
  458. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/invokers/__init__.py +0 -0
  459. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/invokers/base.py +0 -0
  460. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/invokers/batch.py +0 -0
  461. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/invokers/local.py +0 -0
  462. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/invokers/streaming.py +0 -0
  463. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/__init__.py +0 -0
  464. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/adapters.py +0 -0
  465. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/bindings.py +0 -0
  466. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/canonical.py +0 -0
  467. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/cascade.py +0 -0
  468. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/certificates.py +0 -0
  469. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/composites.py +0 -0
  470. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/kinds.py +0 -0
  471. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/patterns.py +0 -0
  472. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/resolution.py +0 -0
  473. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/resolver.py +0 -0
  474. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/runtime.py +0 -0
  475. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/signals.py +0 -0
  476. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/knobs/telemetry.py +0 -0
  477. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/mcp/__init__.py +0 -0
  478. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/metrics/__init__.py +0 -0
  479. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/metrics/agent_metrics.py +0 -0
  480. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/metrics/content_features.py +0 -0
  481. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/metrics/deepeval_metrics.py +0 -0
  482. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/metrics/ragas_metrics.py +0 -0
  483. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/metrics/registry.py +0 -0
  484. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/observability/__init__.py +0 -0
  485. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/observability/agent_spans.py +0 -0
  486. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/observability/client.py +0 -0
  487. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/observability/config.py +0 -0
  488. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/observability/decorators.py +0 -0
  489. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/observability/dtos.py +0 -0
  490. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/base.py +0 -0
  491. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/batch_optimizers.py +0 -0
  492. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/cloud_optimizer.py +0 -0
  493. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/interactive_optimizer.py +0 -0
  494. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/random.py +0 -0
  495. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/remote.py +0 -0
  496. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/remote_services.py +0 -0
  497. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/optimizers/results.py +0 -0
  498. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/playbook/__init__.py +0 -0
  499. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/playbook/loader.py +0 -0
  500. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/playbook/model.py +0 -0
  501. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/playbook/scaffold.py +0 -0
  502. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
  503. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/playbook/staleness.py +0 -0
  504. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/playbook/validator.py +0 -0
  505. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/plugins/__init__.py +0 -0
  506. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/plugins/registry.py +0 -0
  507. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/projects/__init__.py +0 -0
  508. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/projects/client.py +0 -0
  509. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/projects/config.py +0 -0
  510. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/projects/dtos.py +0 -0
  511. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/prompts/__init__.py +0 -0
  512. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/prompts/client.py +0 -0
  513. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/prompts/config.py +0 -0
  514. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/prompts/dtos.py +0 -0
  515. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/providers/__init__.py +0 -0
  516. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/providers/validation.py +0 -0
  517. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/py.typed +0 -0
  518. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/reporting/__init__.py +0 -0
  519. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/reporting/example_map.py +0 -0
  520. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/__init__.py +0 -0
  521. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/audit.py +0 -0
  522. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/auth/__init__.py +0 -0
  523. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/auth/helpers.py +0 -0
  524. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/auth/mfa.py +0 -0
  525. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/auth/models.py +0 -0
  526. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/auth/oidc.py +0 -0
  527. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/auth/saml.py +0 -0
  528. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/auth/sms.py +0 -0
  529. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/auth/totp.py +0 -0
  530. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/config.py +0 -0
  531. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/credentials.py +0 -0
  532. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/crypto_utils.py +0 -0
  533. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/deployment.py +0 -0
  534. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/encryption.py +0 -0
  535. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/enterprise.py +0 -0
  536. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/headers.py +0 -0
  537. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/jwt_validator.py +0 -0
  538. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/rate_limiter.py +0 -0
  539. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/redaction.py +0 -0
  540. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/session_manager.py +0 -0
  541. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/security/tenant.py +0 -0
  542. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
  543. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
  544. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
  545. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
  546. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
  547. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
  548. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-debugging/SKILL.md +0 -0
  549. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-debugging/references/error-reference.md +0 -0
  550. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
  551. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
  552. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
  553. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
  554. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
  555. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
  556. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-integrations/SKILL.md +0 -0
  557. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
  558. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
  559. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
  560. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
  561. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-quickstart/references/environment-variables.md +0 -0
  562. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
  563. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-run-optimization/SKILL.md +0 -0
  564. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
  565. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-run-optimization/references/cost-management.md +0 -0
  566. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
  567. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/storage/__init__.py +0 -0
  568. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/storage/local_storage.py +0 -0
  569. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/testing/__init__.py +0 -0
  570. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/traigent_client.py +0 -0
  571. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/traigent_integration.py +0 -0
  572. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tuned_variables/__init__.py +0 -0
  573. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tuned_variables/dataflow_strategy.py +0 -0
  574. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tuned_variables/detection_strategies.py +0 -0
  575. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tuned_variables/detection_types.py +0 -0
  576. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tuned_variables/detector.py +0 -0
  577. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tuned_variables/discovery.py +0 -0
  578. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tuned_variables/observation.py +0 -0
  579. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tuned_variables/py.typed +0 -0
  580. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tvl/__init__.py +0 -0
  581. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tvl/__main__.py +0 -0
  582. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tvl/models.py +0 -0
  583. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tvl/objectives.py +0 -0
  584. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tvl/options.py +0 -0
  585. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tvl/promotion_gate.py +0 -0
  586. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tvl/registry.py +0 -0
  587. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tvl/spec_loader.py +0 -0
  588. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tvl/spec_validator.py +0 -0
  589. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/tvl/statistics.py +0 -0
  590. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/__init__.py +0 -0
  591. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/batch_optimizer_utils.py +0 -0
  592. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/batch_processing.py +0 -0
  593. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/callbacks.py +0 -0
  594. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/console.py +0 -0
  595. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/constraints.py +0 -0
  596. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/diagnostics.py +0 -0
  597. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/env_config.py +0 -0
  598. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/error_handler.py +0 -0
  599. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/example_id.py +0 -0
  600. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/exceptions.py +0 -0
  601. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/file_versioning.py +0 -0
  602. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/function_identity.py +0 -0
  603. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/hashing.py +0 -0
  604. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/importance.py +0 -0
  605. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/incentives.py +0 -0
  606. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/langchain_interceptor.py +0 -0
  607. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/litellm_interceptor.py +0 -0
  608. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/llm_response_parsing.py +0 -0
  609. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/local_analytics.py +0 -0
  610. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/logging.py +0 -0
  611. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/multi_objective.py +0 -0
  612. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/numpy_compat.py +0 -0
  613. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/objectives.py +0 -0
  614. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/optimization_analyzer.py +0 -0
  615. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/optimization_logger.py +0 -0
  616. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/persistence.py +0 -0
  617. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/reproducibility.py +0 -0
  618. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/results_table.py +0 -0
  619. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/retry.py +0 -0
  620. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/secure_path.py +0 -0
  621. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/url_security.py +0 -0
  622. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/user_prompts.py +0 -0
  623. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/utils/validation.py +0 -0
  624. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/visualization/__init__.py +0 -0
  625. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/visualization/plots.py +0 -0
  626. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/wrapper/__init__.py +0 -0
  627. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/wrapper/errors.py +0 -0
  628. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/wrapper/server.py +0 -0
  629. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent/wrapper/service.py +0 -0
  630. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent.egg-info/dependency_links.txt +0 -0
  631. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent.egg-info/entry_points.txt +0 -0
  632. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent.egg-info/top_level.txt +0 -0
  633. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent_validation/__init__.py +0 -0
  634. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent_validation/base.py +0 -0
  635. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent_validation/plugins.py +0 -0
  636. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent_validation/py.typed +0 -0
  637. {traigent-0.16.0.dev0 → traigent-0.17.0}/traigent_validation/validators.py +0 -0
@@ -6,6 +6,8 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.17.0] - 2026-06-23
10
+
9
11
  ### Added
10
12
  - Added a no-content-egress cloud-brain canary test that captures serialized
11
13
  session, next-trial, metrics, and finalize payloads and asserts dataset
@@ -16,6 +18,38 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
16
18
  `auto`, explicit local `grid`/`random`, zero-egress offline mode, result
17
19
  provenance, and legacy selector deprecations.
18
20
 
21
+ ### Removed
22
+ - Removed public pruner exports: `CeilingPruner`, `CeilingPrunerConfig`,
23
+ `StatisticalInferiorityPruner`, and `StatisticalInferiorityPrunerConfig`.
24
+ - Dropped the `optuna` runtime dependency.
25
+ - Removed `register_optuna_optimizers` and the legacy Optuna feature flag/env
26
+ var (`OPTUNA_ROLLOUT`, renamed during the managed-routing migration).
27
+ - Smart algorithms (`bayesian` and the Optuna family) now route to the Traigent
28
+ cloud; the local SDK supports `grid` and `random` only.
29
+ - Removed 7 production-dead internal modules (`config_builder`,
30
+ `llm_processor`, `refactoring_utils`, `service_registry`, `event_manager`,
31
+ `langchain/discovery`, empty `telemetry` package) and their tests.
32
+
33
+ ### Fixed
34
+ - Per-config `cost` metric is now wired to the authoritative `total_cost`, so
35
+ the `minimize cost` objective is no longer inert and the portal no longer
36
+ shows `$0` per config on a real paid run; a model unpriced at runtime is
37
+ surfaced on the result (and fails closed under
38
+ `TRAIGENT_STRICT_COST_ACCOUNTING`).
39
+ - `traigent sync` / `traigent local sync` no longer fail every completed
40
+ session with `409 EXPERIMENT_HAS_NO_RUNS`; sync now creates the experiment
41
+ `PENDING`, uploads runs, finalizes to `COMPLETED`, resumes idempotently, and
42
+ returns a non-zero exit on failure.
43
+ - Runtime `optimize(algorithm="grid"|"random")` with a portal key now stays
44
+ local and exhaustive instead of routing to the cloud sampler.
45
+ - `traigent quickstart` runs on a bare install (uses base `litellm`, not the
46
+ `integrations` LangChain extra) and fails closed when no trial succeeds.
47
+ - `ObjectiveDefinition` fails closed on unimplemented normalization strategies
48
+ (`z_score`/`robust`) instead of silently behaving like `min_max`.
49
+
50
+ ### Dependencies
51
+ - Bumped `langsmith` 0.8.3 → 0.8.18 and `pydantic-settings` 2.14.1 → 2.14.2.
52
+
19
53
  ## [0.14.1] - 2026-06-19
20
54
 
21
55
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: traigent
3
- Version: 0.16.0.dev0
3
+ Version: 0.17.0
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
@@ -38,7 +38,6 @@ Requires-Dist: PyJWT[crypto]<3.0.0,>=2.13.0
38
38
  Requires-Dist: backoff>=2.2.0
39
39
  Requires-Dist: litellm==1.87.1
40
40
  Requires-Dist: rank-bm25
41
- Requires-Dist: optuna>=4.5.0
42
41
  Requires-Dist: psutil>=5.8.0
43
42
  Requires-Dist: pydantic>=2.0.0
44
43
  Provides-Extra: analytics
@@ -50,7 +50,7 @@ def answer_question(question: str) -> str:
50
50
  - **[Injection Modes](user-guide/injection_modes.md)** - Different ways to integrate Traigent
51
51
  - **[Interactive Optimization](user-guide/interactive_optimization.md)** - Real-time optimization workflows
52
52
  - **[Evaluation Guide](user-guide/evaluation_guide.md)** - Measure and improve performance
53
- - **[Optuna Integration](user-guide/optuna_integration.md)** - Optuna-backed optimizers, coordinator, and adapter
53
+ - **[Smart Optimization](user-guide/smart_optimization.md)** - Backend-routed smart optimizer strategies
54
54
 
55
55
  ### 🧭 [Guides](guides/)
56
56
  - **[Optimization Routing](guides/execution-modes.md)** - Default smart optimization, local search, portal sync, and no-egress runs
@@ -164,61 +164,23 @@ Any other value (including unset) means telemetry is enabled.
164
164
 
165
165
  When `TRAIGENT_DISABLE_TELEMETRY` is set:
166
166
 
167
- 1. **No telemetry events are emitted** - The `OptunaMetricsEmitter` immediately returns without recording
167
+ 1. **No telemetry events are emitted** - SDK telemetry collectors return without recording
168
168
  2. **No metrics are sent to collectors** - MetricsCollector calls are skipped
169
169
  3. **Optimization still works normally** - Only telemetry is disabled, not functionality
170
170
  4. **Local results are still saved** - Optimization results are still persisted locally for your use
171
171
 
172
172
  ## Telemetry Implementation
173
173
 
174
- ### OptunaMetricsEmitter
175
-
176
- The main telemetry component is `OptunaMetricsEmitter` in `traigent/telemetry/optuna_metrics.py`:
177
-
178
- ```python
179
- from traigent.telemetry.optuna_metrics import OptunaMetricsEmitter
180
-
181
- # Telemetry is automatically disabled when env var is set
182
- emitter = OptunaMetricsEmitter(
183
- metrics_collector=collector,
184
- listeners=[my_listener],
185
- )
186
-
187
- # This call does nothing if TRAIGENT_DISABLE_TELEMETRY is set
188
- emitter.emit_trial_update(
189
- event="trial_completed",
190
- trial_id=123,
191
- study_name="my_optimization",
192
- payload={"metrics": {"accuracy": 0.95}},
193
- )
194
- ```
195
-
196
- ### Implementation Details
197
-
198
- The `OptunaMetricsEmitter` checks the environment variable on initialization:
199
-
200
- ```python
201
- class OptunaMetricsEmitter:
202
- def __init__(self, ...):
203
- self._disabled = os.getenv("TRAIGENT_DISABLE_TELEMETRY", "").lower() in (
204
- "1",
205
- "true",
206
- "yes",
207
- )
208
-
209
- def emit_trial_update(self, ...):
210
- if self._disabled:
211
- return {} # No-op when disabled
212
-
213
- # Normal telemetry emission
214
- ...
215
- ```
174
+ Telemetry is routed through optimization storage, observability clients, and
175
+ workflow tracing. The previous SDK-local Optuna telemetry emitter has been
176
+ removed with the local Optuna dependency; smart optimizer telemetry is now a
177
+ backend concern.
216
178
 
217
179
  ### Event Types
218
180
 
219
181
  When telemetry is enabled, the following events may be emitted (not exhaustive):
220
182
 
221
- - `trial_suggested` - Optuna proposed a new trial configuration
183
+ - `trial_suggested` - An optimizer proposed a new trial configuration
222
184
  - `trial_intermediate` - Intermediate metric reported (pruning signal)
223
185
  - `trial_completed` - A trial finished successfully
224
186
  - `trial_failed` - A trial encountered an error
@@ -282,49 +244,12 @@ Traigent writes a `.gitignore` (`*`) into the log root so this content is not
282
244
  accidentally committed, but you should still keep `.traigent/` out of version
283
245
  control and CI artifact collection in sensitive projects.
284
246
 
285
- ## Telemetry Listeners
286
-
287
- You can subscribe to telemetry events for your own monitoring:
288
-
289
- ```python
290
- from traigent.telemetry.optuna_metrics import OptunaMetricsEmitter
291
-
292
- def my_listener(event_data: dict):
293
- print(f"Trial event: {event_data['event']}")
294
- print(f"Trial ID: {event_data['trial_id']}")
295
- print(f"Metrics: {event_data.get('payload', {})}")
296
-
297
- emitter = OptunaMetricsEmitter()
298
- emitter.subscribe(my_listener)
299
-
300
- # Your listener will be called for each telemetry event
301
- # (unless TRAIGENT_DISABLE_TELEMETRY is set)
302
- ```
303
-
304
247
  ## Security and Sensitive Data
305
248
 
306
249
  ### Data Sanitization
307
250
 
308
- Configuration data is automatically sanitized before telemetry:
309
-
310
- ```python
311
- from traigent.telemetry.optuna_metrics import sanitize_config
312
-
313
- config = {
314
- "model": "gpt-4",
315
- "temperature": 0.7,
316
- "_internal_key": "should_not_be_logged",
317
- }
318
-
319
- safe_config = sanitize_config(config)
320
- # Returns: {"model": "gpt-4", "temperature": 0.7"}
321
- ```
322
-
323
- Private/internal keys (starting with `_`) are automatically removed.
324
-
325
- ### Thread Safety
326
-
327
- The `OptunaMetricsEmitter` is thread-safe and uses `threading.RLock` to protect listener subscription operations.
251
+ Configuration data is sanitized before telemetry. Private/internal keys
252
+ (starting with `_`) are automatically removed.
328
253
 
329
254
  ### Error Handling
330
255
 
@@ -13,7 +13,7 @@ python examples/core/simple-prompt/run.py
13
13
  # With real LLMs
14
14
  export ANTHROPIC_API_KEY="your-key" # pragma: allowlist secret
15
15
  export OPENAI_API_KEY="your-key" # pragma: allowlist secret
16
- python examples/core/multi-objective-tradeoff/run_openai_optuna.py
16
+ python examples/core/multi-objective-tradeoff/run_openai_backend_smart.py
17
17
  ```
18
18
 
19
19
  ## Core optimize pattern
@@ -36,7 +36,7 @@ License: Traigent SDK is dual-licensed under AGPL-3.0-only OR LicenseRef-Traigen
36
36
  | **`recommended`** | **All user-facing features (integrations + analytics + bayesian + visualization + hybrid + pydanticai)** | **`pip install "traigent[recommended]"`** |
37
37
  | `integrations` | LangChain, OpenAI, Anthropic, MLflow, W&B | `pip install -e ".[integrations]"` |
38
38
  | `analytics` | numpy, pandas, matplotlib | `pip install -e ".[analytics]"` |
39
- | `bayesian` | Optuna + sklearn/scipy | `pip install -e ".[bayesian]"` |
39
+ | `bayesian` | scikit-learn + scipy | `pip install -e ".[bayesian]"` |
40
40
  | `visualization` | matplotlib, plotly | `pip install -e ".[visualization]"` |
41
41
  | `hybrid` | HTTP/2 transport plus MCP-backed hybrid integrations | `pip install -e ".[hybrid]"` |
42
42
  | `cloud` | Reserved dependencies for future remote execution; not required for portal-tracked `hybrid` runs | `pip install -e ".[cloud]"` |
@@ -11,7 +11,7 @@ Comprehensive guides for using Traigent SDK features and capabilities.
11
11
  - **[Injection Modes](injection_modes.md)** - Different ways to integrate Traigent with your code
12
12
  - **[Interactive Optimization](interactive_optimization.md)** - Real-time optimization workflows and monitoring
13
13
  - **[Evaluation Guide](evaluation_guide.md)** - Measure and improve model performance
14
- - **[Optuna Integration](optuna_integration.md)** - Use the Optuna-backed optimizers and distributed coordinator
14
+ - **[Smart Optimization](smart_optimization.md)** - Use backend-routed smart optimizer strategies
15
15
 
16
16
  ## Learning Path
17
17
 
@@ -21,7 +21,7 @@ Comprehensive guides for using Traigent SDK features and capabilities.
21
21
 
22
22
  **Tuned Variables**: Use [Tuned Variables](tuned_variables.md) to auto-detect parameters and discover callables
23
23
 
24
- **Advanced Users**: Explore [Agent Optimization](agent_optimization.md), [Interactive Optimization](interactive_optimization.md), and [Optuna Integration](optuna_integration.md)
24
+ **Advanced Users**: Explore [Agent Optimization](agent_optimization.md), [Interactive Optimization](interactive_optimization.md), and [Smart Optimization](smart_optimization.md)
25
25
 
26
26
  **Evaluation**: Use [Evaluation Guide](evaluation_guide.md) to measure success
27
27
 
@@ -0,0 +1,65 @@
1
+ # Smart Optimization
2
+
3
+ Traigent SDKs expose a small local optimizer surface by default:
4
+
5
+ - `grid`
6
+ - `random`
7
+
8
+ Smart optimization is backend-routed. Use a TraigentBackend typed session or
9
+ hybrid SDK mode when you need guided search beyond the local defaults.
10
+
11
+ ## Public Smart Strategies
12
+
13
+ | Strategy | Runs In | Use Case |
14
+ | ---------------- | --------------- | -------------------------------------------------------- |
15
+ | `bayesian` | TraigentBackend | Public alias for guided TPE-style search |
16
+ | `tpe` | TraigentBackend | Guided search over categorical and continuous spaces |
17
+ | `optuna` | TraigentBackend | Managed Optuna-family routing |
18
+ | `optuna_tpe` | TraigentBackend | Explicit TPE routing |
19
+ | `optuna_random` | TraigentBackend | Managed random-search routing |
20
+ | `optuna_grid` | TraigentBackend | Managed grid-search routing |
21
+ | `optuna_cmaes` | TraigentBackend | Managed CMA-ES routing |
22
+ | `optuna_nsga2` | TraigentBackend | Managed NSGA-II routing |
23
+ | `nsga2` | TraigentBackend | NSGA-II alias |
24
+ | `nsgaii` | TraigentBackend | NSGA-II alias |
25
+ | `nsga_ii` | TraigentBackend | NSGA-II alias |
26
+ | `cmaes` | TraigentBackend | CMA-ES alias |
27
+ | `cma_es` | TraigentBackend | CMA-ES alias |
28
+
29
+ Local SDK runs accept `grid` and `random`. Smart strategies listed above are
30
+ validated by the SDK and routed to TraigentBackend.
31
+
32
+ ## Python Hybrid Session Example
33
+
34
+ ```python
35
+ import traigent
36
+ from traigent import Choices, Range
37
+
38
+
39
+ @traigent.optimize(
40
+ eval_dataset=[
41
+ {"input": "What is the capital of France?", "expected": "Paris"},
42
+ {"input": "What is the capital of Germany?", "expected": "Berlin"},
43
+ ],
44
+ objectives=["accuracy", "cost"],
45
+ model=Choices(["fast", "accurate"]),
46
+ temperature=Range(0.0, 1.0),
47
+ )
48
+ def answer_quality(question: str, model: str, temperature: float) -> str:
49
+ return call_model(question, model=model, temperature=temperature)
50
+
51
+
52
+ result = await answer_quality.optimize(
53
+ max_trials=12,
54
+ algorithm="tpe",
55
+ )
56
+ ```
57
+
58
+ Use `bayesian`, `tpe`, or one of the accepted Optuna-family aliases when you
59
+ want managed smart search through TraigentBackend.
60
+
61
+ ## Local Defaults
62
+
63
+ For offline/local SDK runs, keep using `grid` or `random`. These require no
64
+ backend service and remain deterministic/reproducible under the existing local
65
+ SDK execution path.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "traigent"
7
- version = "0.16.0.dev0"
7
+ version = "0.17.0"
8
8
  authors = [
9
9
  {name = "Traigent Team", email = "opensource@traigent.ai"},
10
10
  ]
@@ -45,8 +45,6 @@ dependencies = [
45
45
  "backoff>=2.2.0",
46
46
  "litellm==1.87.1", # Stable pin: 1.83.x python-dotenv==1.0.1 and 1.83.14 openai==2.24.0 sub-pins are gone from stable 1.84+ (1.87.1 ships openai>=2.20,<3 and python-dotenv>=1.0,<2, compatible with langchain-openai>=1.1.14). Keep pinned + verified on bumps; no need for RC/dev builds anymore.
47
47
  "rank-bm25",
48
- # Required by core optimizer modules
49
- "optuna>=4.5.0",
50
48
  "psutil>=5.8.0",
51
49
  # Required by API decorators and config validation
52
50
  "pydantic>=2.0.0",
@@ -4,10 +4,10 @@
4
4
 
5
5
  -r requirements.txt
6
6
  -r requirements-analytics.txt
7
- -r requirements-bayesian.txt
8
- -r requirements-integrations.txt
9
- -r requirements-security.txt
10
- -r requirements-hybrid.txt
7
+ -r requirements-bayesian.txt
8
+ -r requirements-integrations.txt
9
+ -r requirements-security.txt
10
+ -r requirements-hybrid.txt
11
11
 
12
12
  # Visualization
13
13
  matplotlib>=3.5.0
@@ -0,0 +1,2 @@
1
+ scikit-learn>=1.0.0
2
+ scipy>=1.7.0
@@ -3,10 +3,10 @@
3
3
  # Excludes Chroma until chromadb has a patched release for CVE-2026-45829.
4
4
 
5
5
  -r requirements.txt
6
- -r requirements-analytics.txt
7
- -r requirements-bayesian.txt
8
- -r requirements-integrations.txt
9
- -r requirements-security.txt
6
+ -r requirements-analytics.txt
7
+ -r requirements-bayesian.txt
8
+ -r requirements-integrations.txt
9
+ -r requirements-security.txt
10
10
 
11
11
  # Development and testing
12
12
  pytest>=9.0.3
@@ -12,14 +12,14 @@ rapidfuzz>=3.14.0
12
12
  # Core dependencies needed for tests
13
13
  -r requirements.txt
14
14
 
15
- # Analytics dependencies needed for insights tests
16
- -r requirements-analytics.txt
17
-
18
- # Bayesian dependencies needed for optimization tests
19
- -r requirements-bayesian.txt
20
-
21
- # Security dependencies needed for enterprise tests
22
- -r requirements-security.txt
15
+ # Analytics dependencies needed for insights tests
16
+ -r requirements-analytics.txt
17
+
18
+ # Bayesian dependencies needed for optimization tests
19
+ -r requirements-bayesian.txt
20
+
21
+ # Security dependencies needed for enterprise tests
22
+ -r requirements-security.txt
23
23
 
24
24
  # Integration dependencies needed for framework tests
25
25
  -r requirements-integrations.txt
@@ -12,5 +12,4 @@ mcp>=1.27.0
12
12
  backoff>=2.2.0
13
13
  litellm==1.87.1
14
14
  rank-bm25
15
- optuna>=4.5.0
16
15
  psutil>=5.8.0
@@ -92,6 +92,7 @@ except ImportError:
92
92
  PerformancePredictor,
93
93
  )
94
94
  from .next_steps import NextStepsClient
95
+ from .optimization_plan import OptimizationPlanClient
95
96
 
96
97
  # Predictive analytics
97
98
  from .predictive import (
@@ -130,6 +131,7 @@ __all__ = [
130
131
  # Example Insights
131
132
  "ExampleInsightsClient",
132
133
  "NextStepsClient",
134
+ "OptimizationPlanClient",
133
135
  # Historical analytics
134
136
  "HistoricalAnalyticsEngine",
135
137
  "OptimizationHistory",
@@ -30,6 +30,7 @@ import asyncio
30
30
  import time
31
31
  from typing import Any, cast
32
32
 
33
+ from traigent.cloud.auth import _build_api_key_auth_headers
33
34
  from traigent.config.backend_config import DEFAULT_LOCAL_URL
34
35
  from traigent.utils.logging import get_logger
35
36
 
@@ -100,9 +101,9 @@ class ExampleInsightsClient:
100
101
 
101
102
  raise_if_backend_offline("ExampleInsightsClient request")
102
103
  if self._client is None:
103
- headers = {}
104
+ headers: dict[str, str] = {}
104
105
  if self.api_key:
105
- headers["Authorization"] = f"Bearer {self.api_key}"
106
+ headers.update(_build_api_key_auth_headers(self.api_key))
106
107
 
107
108
  self._client = httpx.AsyncClient(
108
109
  base_url=self.backend_url,
@@ -23,6 +23,7 @@ from __future__ import annotations
23
23
 
24
24
  from typing import Any, cast
25
25
 
26
+ from traigent.cloud.auth import _build_api_key_auth_headers
26
27
  from traigent.config.backend_config import DEFAULT_LOCAL_URL
27
28
  from traigent.utils.logging import get_logger
28
29
 
@@ -102,9 +103,9 @@ class NextStepsClient:
102
103
 
103
104
  raise_if_backend_offline("NextStepsClient request")
104
105
  if self._client is None:
105
- headers = {}
106
+ headers: dict[str, str] = {}
106
107
  if self.api_key:
107
- headers["Authorization"] = f"Bearer {self.api_key}"
108
+ headers.update(_build_api_key_auth_headers(self.api_key))
108
109
 
109
110
  self._client = httpx.AsyncClient(
110
111
  base_url=self.backend_url,
@@ -0,0 +1,212 @@
1
+ """Client for retrieving backend-provided pre-run optimization plans.
2
+
3
+ This module provides an async-first thin client for:
4
+ ``POST /api/v1/optimization/plan``.
5
+
6
+ The backend owns all planning intelligence. The SDK only sends the request
7
+ context, validates the response has the required top-level contract keys, and
8
+ returns the allowlisted payload unchanged.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from collections.abc import Sequence
14
+ from typing import Any, cast
15
+
16
+ from traigent.config.backend_config import DEFAULT_LOCAL_URL
17
+ from traigent.utils.logging import get_logger
18
+
19
+ logger = get_logger(__name__)
20
+
21
+ try:
22
+ import httpx
23
+
24
+ HTTPX_AVAILABLE = True
25
+ except ImportError:
26
+ HTTPX_AVAILABLE = False
27
+ httpx = None # type: ignore
28
+
29
+
30
+ _REQUIRED_RESPONSE_KEYS = {
31
+ "schema_version",
32
+ "phase",
33
+ "plan",
34
+ "steps",
35
+ "evidence_level",
36
+ "caveat",
37
+ "advisory",
38
+ }
39
+
40
+
41
+ def _build_auth_headers(credential: str | None) -> dict[str, str]:
42
+ """Return optimization-plan auth headers for an API-key credential."""
43
+ from traigent.cloud.auth import _build_api_key_auth_headers
44
+
45
+ # OptimizationPlanClient accepts API-key credentials only. Reuse the same
46
+ # X-API-Key-only construction as AuthManager._get_api_key_headers
47
+ # (cloud/auth.py) and do not infer JWT mode from string shape.
48
+ return _build_api_key_auth_headers(credential)
49
+
50
+
51
+ class OptimizationPlanClient:
52
+ """Client for retrieving allowlisted pre-run optimization plans.
53
+
54
+ Thread Safety: Safe for concurrent use (httpx.AsyncClient is thread-safe).
55
+ """
56
+
57
+ def __init__(
58
+ self,
59
+ backend_url: str = DEFAULT_LOCAL_URL,
60
+ api_key: str | None = None,
61
+ timeout: float = 30.0,
62
+ ):
63
+ """Initialize OptimizationPlanClient.
64
+
65
+ Args:
66
+ backend_url: Backend API base URL. The backend must expose the
67
+ optimization plan endpoint.
68
+ api_key: API key for authentication (None uses env var
69
+ TRAIGENT_API_KEY)
70
+ timeout: Default timeout for HTTP requests in seconds
71
+
72
+ Raises:
73
+ ImportError: If httpx is not installed
74
+ """
75
+ if not HTTPX_AVAILABLE:
76
+ raise ImportError(
77
+ "httpx is required for OptimizationPlanClient. "
78
+ "Install with: pip install traigent[hybrid]"
79
+ )
80
+
81
+ self.backend_url = backend_url.rstrip("/")
82
+ self.timeout = timeout
83
+
84
+ # Import here to avoid circular dependency
85
+ from traigent.config.backend_config import get_no_credentials_hint
86
+ from traigent.utils.env_config import get_api_key
87
+
88
+ self.api_key = get_api_key("traigent") if api_key is None else api_key
89
+ if not self.api_key:
90
+ logger.warning(
91
+ "No API key found for OptimizationPlanClient. %s",
92
+ get_no_credentials_hint(),
93
+ )
94
+
95
+ self._client: httpx.AsyncClient | None = None
96
+
97
+ def _get_client(self) -> httpx.AsyncClient:
98
+ """Get or create async HTTP client.
99
+
100
+ Returns:
101
+ Configured httpx.AsyncClient instance
102
+ """
103
+ from traigent.utils.env_config import raise_if_backend_offline
104
+
105
+ raise_if_backend_offline("OptimizationPlanClient request")
106
+ if self._client is None:
107
+ headers: dict[str, str] = {}
108
+ if self.api_key:
109
+ headers.update(_build_auth_headers(self.api_key))
110
+
111
+ self._client = httpx.AsyncClient(
112
+ base_url=self.backend_url,
113
+ headers=headers,
114
+ timeout=self.timeout,
115
+ )
116
+
117
+ return self._client
118
+
119
+ async def close(self) -> None:
120
+ """Close HTTP client and release resources."""
121
+ if self._client is not None:
122
+ await self._client.aclose()
123
+ self._client = None
124
+
125
+ async def __aenter__(self) -> OptimizationPlanClient:
126
+ """Async context manager entry."""
127
+ return self
128
+
129
+ async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
130
+ """Async context manager exit."""
131
+ await self.close()
132
+
133
+ async def get_optimization_plan(
134
+ self,
135
+ *,
136
+ task_description: str,
137
+ dataset_size: int,
138
+ dataset_has_holdout: bool,
139
+ objectives: Sequence[str],
140
+ max_trials: int,
141
+ cost_limit_usd: float,
142
+ task_type: str | None = None,
143
+ agent_shape: str | None = None,
144
+ weights: dict[str, float] | None = None,
145
+ offline: bool | None = None,
146
+ ) -> dict[str, Any]:
147
+ """Retrieve a backend-provided pre-run optimization plan.
148
+
149
+ The backend must expose ``POST /api/v1/optimization/plan`` and returns
150
+ the bare allowlisted optimization plan contract payload.
151
+
152
+ Args:
153
+ task_description: Natural-language description of the optimization
154
+ task.
155
+ dataset_size: Number of available examples.
156
+ dataset_has_holdout: Whether the dataset already has a holdout split.
157
+ objectives: Objective metric names to plan against.
158
+ max_trials: Maximum trial count requested for the planned run.
159
+ cost_limit_usd: Maximum approved spend for the planned run, in USD.
160
+ task_type: Optional safe task category.
161
+ agent_shape: Optional safe label for the agent shape.
162
+ weights: Optional objective-name to relative-weight map.
163
+ offline: Optional request for a fully offline plan.
164
+
165
+ Returns:
166
+ Dict with the backend optimization plan contract payload.
167
+
168
+ Raises:
169
+ httpx.HTTPError: If request fails.
170
+ ValueError: If the backend returns a non-object JSON payload or an
171
+ object missing required optimization-plan contract keys.
172
+ """
173
+ body: dict[str, Any] = {
174
+ "task_description": task_description,
175
+ "dataset": {
176
+ "size": dataset_size,
177
+ "has_holdout": dataset_has_holdout,
178
+ },
179
+ "objectives": list(objectives),
180
+ "budget": {
181
+ "max_trials": max_trials,
182
+ "cost_limit_usd": cost_limit_usd,
183
+ },
184
+ }
185
+ if task_type is not None:
186
+ body["task_type"] = task_type
187
+ if agent_shape is not None:
188
+ body["agent_shape"] = agent_shape
189
+ if weights is not None:
190
+ body["weights"] = dict(weights)
191
+ if offline is not None:
192
+ body["offline"] = offline
193
+
194
+ client = self._get_client()
195
+ response = await client.post("/api/v1/optimization/plan", json=body)
196
+ response.raise_for_status()
197
+
198
+ payload = response.json()
199
+ if not isinstance(payload, dict):
200
+ raise ValueError(
201
+ "Malformed optimization-plan response: expected a JSON object "
202
+ "matching the optimization-plan contract."
203
+ )
204
+
205
+ missing = sorted(_REQUIRED_RESPONSE_KEYS - payload.keys())
206
+ if missing:
207
+ raise ValueError(
208
+ "Malformed optimization-plan response: missing required key(s): "
209
+ f"{', '.join(missing)}."
210
+ )
211
+
212
+ return cast(dict[str, Any], payload)
@@ -693,6 +693,15 @@ class OptimizationResult:
693
693
  cloud_url: str | None = None
694
694
  run_label: str | None = None
695
695
 
696
+ # User-facing, non-fatal warnings about this run (issue #1407). Populated
697
+ # when the run hit a money-correctness gap that the user should see — e.g.
698
+ # one or more models priced to $0 at runtime (a model hard-coded in the
699
+ # optimized function body that no pricing table covers), which silently
700
+ # under-reports spend. Empty by default. Each entry is a human-readable
701
+ # remediation message; structured codes live in ``warning_codes``.
702
+ warnings: list[str] = field(default_factory=list)
703
+ warning_codes: list[str] = field(default_factory=list)
704
+
696
705
  # Provenance of this result (issue #1265): "backend" when the run was
697
706
  # tracked end-to-end on the cloud backend, "local" when it was computed
698
707
  # locally — either an intentionally local mode or a hybrid/cloud run that