traigent 0.17.0.dev0__tar.gz → 0.18.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 (638) hide show
  1. {traigent-0.17.0.dev0 → traigent-0.18.0}/CHANGELOG.md +2 -0
  2. {traigent-0.17.0.dev0/traigent.egg-info → traigent-0.18.0}/PKG-INFO +5 -5
  3. {traigent-0.17.0.dev0 → traigent-0.18.0}/README.md +3 -3
  4. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/complete-function-specification.md +1 -1
  5. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/decorator-reference.md +1 -1
  6. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/GETTING_STARTED.md +12 -6
  7. {traigent-0.17.0.dev0 → traigent-0.18.0}/pyproject.toml +3 -2
  8. {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements.txt +1 -1
  9. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/__init__.py +22 -3
  10. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/_version.py +0 -5
  11. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/adapters/execution_adapter.py +16 -2
  12. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/admin/config.py +5 -1
  13. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/agents/specification_generator.py +2 -2
  14. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/__init__.py +2 -0
  15. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/example_insights.py +8 -3
  16. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/next_steps.py +8 -3
  17. traigent-0.18.0/traigent/analytics/optimization_plan.py +216 -0
  18. traigent-0.18.0/traigent/analytics/render.py +349 -0
  19. traigent-0.18.0/traigent/analytics_mcp/__init__.py +12 -0
  20. traigent-0.18.0/traigent/analytics_mcp/server.py +280 -0
  21. traigent-0.18.0/traigent/analytics_mcp/tools.py +591 -0
  22. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/agent_inference.py +6 -0
  23. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/config_builder.py +9 -0
  24. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/constraint_builders.py +6 -0
  25. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/decorators.py +134 -15
  26. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/functions.py +24 -1
  27. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/parameter_ranges.py +13 -1
  28. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/parameter_validator.py +8 -0
  29. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/strategy_presets.py +18 -0
  30. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/types.py +55 -9
  31. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/auth_commands.py +19 -7
  32. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/main.py +4 -0
  33. traigent-0.18.0/traigent/cli/plan_command.py +225 -0
  34. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/sync_commands.py +10 -0
  35. traigent-0.18.0/traigent/cloud/analytics_auth.py +73 -0
  36. traigent-0.18.0/traigent/cloud/analytics_client.py +572 -0
  37. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/api_operations.py +85 -7
  38. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/auth.py +21 -72
  39. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/backend_client.py +371 -28
  40. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/backend_synchronizer.py +9 -4
  41. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/benchmark_client.py +7 -2
  42. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/client.py +354 -4
  43. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/models.py +1 -0
  44. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/optimizer_client.py +5 -1
  45. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/password_auth_handler.py +3 -4
  46. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/session_operations.py +18 -2
  47. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/sync_manager.py +214 -25
  48. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/token_manager.py +4 -6
  49. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/trial_operations.py +24 -5
  50. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/url_security.py +65 -16
  51. traigent-0.18.0/traigent/cloud/user_agent.py +18 -0
  52. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/backend_config.py +86 -0
  53. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/feature_flags.py +0 -20
  54. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/project.py +6 -0
  55. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/providers.py +21 -12
  56. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/types.py +44 -46
  57. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/backend_session_manager.py +65 -18
  58. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/config_state_manager.py +6 -4
  59. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/cost_enforcement.py +52 -15
  60. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/cost_estimator.py +28 -18
  61. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/execution_policy_runtime.py +24 -3
  62. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/mandatory_metrics.py +7 -1
  63. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/objectives.py +12 -5
  64. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/optimization_pipeline.py +15 -0
  65. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/optimized_function.py +174 -14
  66. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/orchestrator.py +217 -37
  67. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/result_selection.py +30 -22
  68. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/session_types.py +3 -0
  69. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/stop_condition_manager.py +1 -1
  70. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/trial_lifecycle.py +50 -6
  71. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/trial_result_factory.py +74 -0
  72. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core_metrics/config.py +5 -1
  73. traigent-0.18.0/traigent/defaults.py +3 -0
  74. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluation/__init__.py +6 -0
  75. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluation/client.py +175 -17
  76. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluation/config.py +5 -1
  77. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluation/dtos.py +177 -1
  78. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/base.py +116 -2
  79. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/local.py +21 -17
  80. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/metrics.py +4 -1
  81. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/metrics_tracker.py +68 -0
  82. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/quickstart/__main__.py +51 -13
  83. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/quickstart/_env.py +8 -5
  84. traigent-0.18.0/traigent/examples/quickstart/publish_and_verify.py +179 -0
  85. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/http_transport.py +2 -1
  86. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/framework_override.py +141 -16
  87. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langchain/handler.py +146 -17
  88. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/observability/wandb.py +3 -27
  89. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/observability/workflow_traces.py +8 -3
  90. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/invokers/base.py +6 -1
  91. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/mcp/server.py +32 -0
  92. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/mcp/tools.py +31 -0
  93. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/ragas_metrics.py +2 -2
  94. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/client.py +80 -0
  95. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/base.py +20 -34
  96. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/batch_optimizers.py +39 -18
  97. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/grid.py +52 -9
  98. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/random.py +100 -21
  99. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/registry.py +11 -29
  100. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/projects/client.py +27 -0
  101. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/projects/config.py +5 -5
  102. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/projects/dtos.py +1 -1
  103. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/prompts/client.py +30 -0
  104. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/prompts/config.py +5 -1
  105. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-debugging/SKILL.md +18 -4
  106. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-debugging/references/error-reference.md +20 -5
  107. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-quickstart/references/environment-variables.md +2 -0
  108. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-run-optimization/SKILL.md +18 -6
  109. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-run-optimization/references/cost-management.md +20 -22
  110. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/__init__.py +4 -0
  111. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/models.py +23 -3
  112. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/promotion_gate.py +20 -6
  113. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/spec_loader.py +462 -60
  114. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/statistics.py +43 -0
  115. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/cost_calculator.py +141 -16
  116. traigent-0.18.0/traigent/utils/discrete_domains.py +232 -0
  117. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/exceptions.py +33 -4
  118. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/insights.py +31 -9
  119. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/objectives.py +14 -1
  120. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/optimization_logger.py +6 -1
  121. traigent-0.18.0/traigent/utils/pagination.py +89 -0
  122. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/results_table.py +12 -4
  123. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/url_security.py +35 -0
  124. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/visualization/plots.py +5 -2
  125. {traigent-0.17.0.dev0 → traigent-0.18.0/traigent.egg-info}/PKG-INFO +5 -5
  126. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent.egg-info/SOURCES.txt +13 -11
  127. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent.egg-info/entry_points.txt +1 -0
  128. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent.egg-info/requires.txt +1 -1
  129. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent_validation/validators.py +67 -9
  130. traigent-0.17.0.dev0/traigent/cloud/event_manager.py +0 -551
  131. traigent-0.17.0.dev0/traigent/config/seamless_injection.py +0 -143
  132. traigent-0.17.0.dev0/traigent/core/config_builder.py +0 -565
  133. traigent-0.17.0.dev0/traigent/core/llm_processor.py +0 -357
  134. traigent-0.17.0.dev0/traigent/core/refactoring_utils.py +0 -263
  135. traigent-0.17.0.dev0/traigent/integrations/batch_wrapper.py +0 -132
  136. traigent-0.17.0.dev0/traigent/integrations/llms/langchain/discovery.py +0 -311
  137. traigent-0.17.0.dev0/traigent/optimizers/service_registry.py +0 -924
  138. traigent-0.17.0.dev0/traigent/telemetry/__init__.py +0 -5
  139. traigent-0.17.0.dev0/traigent/utils/reproducibility.py +0 -604
  140. traigent-0.17.0.dev0/traigent/utils/user_prompts.py +0 -84
  141. {traigent-0.17.0.dev0 → traigent-0.18.0}/COMMERCIAL-LICENSE.md +0 -0
  142. {traigent-0.17.0.dev0 → traigent-0.18.0}/CONTRIBUTING.md +0 -0
  143. {traigent-0.17.0.dev0 → traigent-0.18.0}/CONTRIBUTOR-LICENSING.md +0 -0
  144. {traigent-0.17.0.dev0 → traigent-0.18.0}/DISCLAIMER.md +0 -0
  145. {traigent-0.17.0.dev0 → traigent-0.18.0}/LICENSE +0 -0
  146. {traigent-0.17.0.dev0 → traigent-0.18.0}/MANIFEST.in +0 -0
  147. {traigent-0.17.0.dev0 → traigent-0.18.0}/NOTICE +0 -0
  148. {traigent-0.17.0.dev0 → traigent-0.18.0}/SECURITY.md +0 -0
  149. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/LOCAL_CI_GATE.md +0 -0
  150. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/README.md +0 -0
  151. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/SYNC_MAP.md +0 -0
  152. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/agent-skill.md +0 -0
  153. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/enterprise-beta-api.md +0 -0
  154. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/interactive_optimizer.md +0 -0
  155. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/telemetry.md +0 -0
  156. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/thread-pool-examples.md +0 -0
  157. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/ARCHITECTURE.md +0 -0
  158. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/cost-architecture-validation.md +0 -0
  159. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/execution_mode_follow_up.md +0 -0
  160. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/integrations-inventory.md +0 -0
  161. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/plugin_architecture.md +0 -0
  162. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/project-structure.md +0 -0
  163. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/stop_conditions.md +0 -0
  164. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/concepts/composite-knob-ir.md +0 -0
  165. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/concepts/composite-knobs.md +0 -0
  166. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/concepts/guided-generation.md +0 -0
  167. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
  168. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
  169. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/CONTRIBUTING.md +0 -0
  170. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
  171. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/README.md +0 -0
  172. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/SECURITY.md +0 -0
  173. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/aikido_triage.md +0 -0
  174. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/code_review_instructions.md +0 -0
  175. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/test-quality-guide.md +0 -0
  176. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
  177. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/demos/README.md +0 -0
  178. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/API_PATTERNS.md +0 -0
  179. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/LEARNING_ROADMAP.md +0 -0
  180. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/QUICK_REFERENCE.md +0 -0
  181. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/README.md +0 -0
  182. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/START_HERE.md +0 -0
  183. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/TROUBLESHOOTING.md +0 -0
  184. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/fake-completion-tracking.md +0 -0
  185. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/feature_matrices/README.md +0 -0
  186. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/README.md +0 -0
  187. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/authentication.md +0 -0
  188. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/constraint-dsl.md +0 -0
  189. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/dataflow-detection.md +0 -0
  190. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/framework_override_enhanced_features.md +0 -0
  191. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/mcp-server.md +0 -0
  192. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/observability-spans.md +0 -0
  193. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/onboarding.md +0 -0
  194. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/prompt_management.md +0 -0
  195. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/recommendations.md +0 -0
  196. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/safety-gates.md +0 -0
  197. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/seamless_injection.md +0 -0
  198. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/strategy-presets.md +0 -0
  199. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/strict_metrics_nulls.md +0 -0
  200. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/README.md +0 -0
  201. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/installation.md +0 -0
  202. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/minimal-integration.md +0 -0
  203. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
  204. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/testing.md +0 -0
  205. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
  206. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/evaluation.md +0 -0
  207. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/execution-mode-migration.md +0 -0
  208. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/execution-modes.md +0 -0
  209. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/js-bridge.md +0 -0
  210. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/llm_plugin_migration_guide.md +0 -0
  211. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/parallel-configuration.md +0 -0
  212. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/secrets_management.md +0 -0
  213. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/hybrid-mode-api-contract.md +0 -0
  214. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/hybrid-mode-client-guide.md +0 -0
  215. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/operations/azure_openai.md +0 -0
  216. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/operations/bedrock.md +0 -0
  217. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/operations/google_gemini.md +0 -0
  218. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/security/trust_model.md +0 -0
  219. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
  220. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/concepts/composite-knob-ir.md +0 -0
  221. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/concepts/composite-knobs.md +0 -0
  222. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/concepts/guided-generation.md +0 -0
  223. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/schema.md +0 -0
  224. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/tagging_tracking.md +0 -0
  225. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/taxonomy_reference.md +0 -0
  226. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
  227. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/README.md +0 -0
  228. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/agent_optimization.md +0 -0
  229. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/choosing_optimization_model.md +0 -0
  230. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/configuration-spaces.md +0 -0
  231. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/evaluation_guide.md +0 -0
  232. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/injection_modes.md +0 -0
  233. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/interactive_optimization.md +0 -0
  234. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/smart_optimization.md +0 -0
  235. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/tuned_variables.md +0 -0
  236. {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/walkthrough.md +0 -0
  237. {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-all.txt +0 -0
  238. {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-analytics.txt +0 -0
  239. {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-bayesian.txt +0 -0
  240. {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-chroma.txt +0 -0
  241. {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-dev.txt +0 -0
  242. {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-hybrid.txt +0 -0
  243. {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-integrations.txt +0 -0
  244. {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-security.txt +0 -0
  245. {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-test.txt +0 -0
  246. {traigent-0.17.0.dev0 → traigent-0.18.0}/setup.cfg +0 -0
  247. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/admin/__init__.py +0 -0
  248. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/admin/client.py +0 -0
  249. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/admin/dtos.py +0 -0
  250. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/agents/__init__.py +0 -0
  251. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/agents/config_mapper.py +0 -0
  252. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/agents/executor.py +0 -0
  253. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/agents/platforms.py +0 -0
  254. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/anomaly.py +0 -0
  255. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/cost_optimization.py +0 -0
  256. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/intelligence.py +0 -0
  257. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/meta_learning.py +0 -0
  258. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/predictive.py +0 -0
  259. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/scheduling.py +0 -0
  260. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/__init__.py +0 -0
  261. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/config_space.py +0 -0
  262. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/constraints.py +0 -0
  263. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/safety.py +0 -0
  264. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/validation_protocol.py +0 -0
  265. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/__init__.py +0 -0
  266. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/detect_tvars_command.py +0 -0
  267. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/function_discovery.py +0 -0
  268. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/generate_config_command.py +0 -0
  269. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/hooks_commands.py +0 -0
  270. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/local_commands.py +0 -0
  271. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/next_steps_command.py +0 -0
  272. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/onboard_commands.py +0 -0
  273. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/optimization_validator.py +0 -0
  274. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/playbook_commands.py +0 -0
  275. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/validation_types.py +0 -0
  276. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/__init__.py +0 -0
  277. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/_aiohttp_compat.py +0 -0
  278. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/agent_dtos.py +0 -0
  279. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/api_key_manager.py +0 -0
  280. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/async_batch_transport.py +0 -0
  281. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/backend_bridges.py +0 -0
  282. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/backend_components.py +0 -0
  283. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/billing.py +0 -0
  284. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/cloud_operations.py +0 -0
  285. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/credential_manager.py +0 -0
  286. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/credential_resolver.py +0 -0
  287. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/dataset_converter.py +0 -0
  288. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/dtos.py +0 -0
  289. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/governance.py +0 -0
  290. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/integration_manager.py +0 -0
  291. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/privacy_operations.py +0 -0
  292. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/production_mcp_client.py +0 -0
  293. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/remote_guidance.py +0 -0
  294. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/resilient_client.py +0 -0
  295. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/service.py +0 -0
  296. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/session_types.py +0 -0
  297. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/sessions.py +0 -0
  298. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/subset_selection.py +0 -0
  299. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/trial_tracker.py +0 -0
  300. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/validators.py +0 -0
  301. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/__init__.py +0 -0
  302. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/api_keys.py +0 -0
  303. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/ast_transformer.py +0 -0
  304. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/context.py +0 -0
  305. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/models.yaml +0 -0
  306. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/parallel.py +0 -0
  307. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/runtime_injector.py +0 -0
  308. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/tenant.py +0 -0
  309. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/__init__.py +0 -0
  310. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/agent_classifier.py +0 -0
  311. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/apply.py +0 -0
  312. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
  313. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
  314. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
  315. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
  316. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/catalog.py +0 -0
  317. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/llm_backend.py +0 -0
  318. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/pipeline.py +0 -0
  319. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/presets/__init__.py +0 -0
  320. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
  321. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
  322. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/presets/constraint_templates.py +0 -0
  323. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/presets/range_presets.py +0 -0
  324. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/recommendations.py +0 -0
  325. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/__init__.py +0 -0
  326. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/benchmarks.py +0 -0
  327. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/objectives.py +0 -0
  328. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
  329. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
  330. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
  331. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
  332. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/types.py +0 -0
  333. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/__init__.py +0 -0
  334. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/best_config_runtime.py +0 -0
  335. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/cache_policy.py +0 -0
  336. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/ci_approval.py +0 -0
  337. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/constants.py +0 -0
  338. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/evaluator_wrapper.py +0 -0
  339. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/exception_handler.py +0 -0
  340. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/license.py +0 -0
  341. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/logger_facade.py +0 -0
  342. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/meta_types.py +0 -0
  343. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/metadata_helpers.py +0 -0
  344. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/metric_registry.py +0 -0
  345. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/metrics_aggregator.py +0 -0
  346. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/namespace.py +0 -0
  347. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/orchestrator_helpers.py +0 -0
  348. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/parallel_execution_manager.py +0 -0
  349. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/progress_manager.py +0 -0
  350. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/sample_budget.py +0 -0
  351. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/samplers/__init__.py +0 -0
  352. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/samplers/random_sampler.py +0 -0
  353. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/session_context.py +0 -0
  354. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/stat_significance.py +0 -0
  355. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/stop_conditions.py +0 -0
  356. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/trace_env.py +0 -0
  357. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/tracing.py +0 -0
  358. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/trial_context.py +0 -0
  359. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/types.py +0 -0
  360. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/types_ext.py +0 -0
  361. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/utils.py +0 -0
  362. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/workflow_trace_manager.py +0 -0
  363. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core_metrics/__init__.py +0 -0
  364. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core_metrics/client.py +0 -0
  365. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core_metrics/dtos.py +0 -0
  366. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/effectuation/__init__.py +0 -0
  367. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/effectuation/contracts.py +0 -0
  368. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/effectuation/strategies/__init__.py +0 -0
  369. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/effectuation/strategies/framework_param.py +0 -0
  370. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/effectuation/strategies/self_consistency.py +0 -0
  371. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/__init__.py +0 -0
  372. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
  373. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
  374. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/catalog_loader.py +0 -0
  375. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/dataset_registry.py +0 -0
  376. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/hybrid_api.py +0 -0
  377. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/recommendations.py +0 -0
  378. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/__init__.py +0 -0
  379. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/__init__.py +0 -0
  380. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/_bootstrap.py +0 -0
  381. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/_demo.py +0 -0
  382. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/anthropic.py +0 -0
  383. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/aws.py +0 -0
  384. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/azure.py +0 -0
  385. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/gcp.py +0 -0
  386. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/gemini.py +0 -0
  387. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/groq.py +0 -0
  388. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/litellm_any.py +0 -0
  389. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/manifest.json +0 -0
  390. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/openai.py +0 -0
  391. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/openrouter.py +0 -0
  392. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/qa_samples.jsonl +0 -0
  393. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/quickstart/__init__.py +0 -0
  394. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
  395. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/tutorial_bootstrap.py +0 -0
  396. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/__init__.py +0 -0
  397. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/backend_provider.py +0 -0
  398. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/example_synth.py +0 -0
  399. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/llm_provider.py +0 -0
  400. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/loop.py +0 -0
  401. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/models.py +0 -0
  402. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/options.py +0 -0
  403. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/prompt_rewriter.py +0 -0
  404. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/__init__.py +0 -0
  405. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/artifacts.py +0 -0
  406. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/buffer.py +0 -0
  407. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/document.py +0 -0
  408. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/edits.py +0 -0
  409. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/prompts.py +0 -0
  410. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/reflection.py +0 -0
  411. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/schedule.py +0 -0
  412. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/slow_update.py +0 -0
  413. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/splits.py +0 -0
  414. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/trainer.py +0 -0
  415. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/trainer_result.py +0 -0
  416. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/validators.py +0 -0
  417. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/guaranteed_modes.py +0 -0
  418. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hooks/__init__.py +0 -0
  419. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hooks/config.py +0 -0
  420. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hooks/installer.py +0 -0
  421. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hooks/validator.py +0 -0
  422. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/__init__.py +0 -0
  423. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/discovery.py +0 -0
  424. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/lifecycle.py +0 -0
  425. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/mcp_transport.py +0 -0
  426. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/protocol.py +0 -0
  427. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/transport.py +0 -0
  428. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/__init__.py +0 -0
  429. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/activation.py +0 -0
  430. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/base.py +0 -0
  431. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/base_plugin.py +0 -0
  432. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/bedrock_client.py +0 -0
  433. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/config.py +0 -0
  434. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/dspy_adapter.py +0 -0
  435. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langchain/__init__.py +0 -0
  436. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langfuse/__init__.py +0 -0
  437. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langfuse/callback.py +0 -0
  438. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langfuse/client.py +0 -0
  439. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langfuse/tracker.py +0 -0
  440. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/__init__.py +0 -0
  441. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/anthropic_plugin.py +0 -0
  442. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
  443. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/base_llm_plugin.py +0 -0
  444. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/bedrock_plugin.py +0 -0
  445. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/cohere_plugin.py +0 -0
  446. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/gemini_plugin.py +0 -0
  447. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/huggingface_plugin.py +0 -0
  448. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/langchain/__init__.py +0 -0
  449. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/langchain/base.py +0 -0
  450. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/langchain_plugin.py +0 -0
  451. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/litellm_plugin.py +0 -0
  452. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
  453. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/mistral_plugin.py +0 -0
  454. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/openai.py +0 -0
  455. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/openai_plugin.py +0 -0
  456. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/mappings.py +0 -0
  457. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/__init__.py +0 -0
  458. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
  459. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
  460. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/base.py +0 -0
  461. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/cache.py +0 -0
  462. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
  463. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
  464. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
  465. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/registry.py +0 -0
  466. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/observability/__init__.py +0 -0
  467. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/observability/mlflow.py +0 -0
  468. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/plugin_registry.py +0 -0
  469. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/providers.py +0 -0
  470. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/pydantic_ai/__init__.py +0 -0
  471. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/pydantic_ai/_types.py +0 -0
  472. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/pydantic_ai/handler.py +0 -0
  473. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/pydantic_ai/plugin.py +0 -0
  474. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/__init__.py +0 -0
  475. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/discovery.py +0 -0
  476. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/message_coercion.py +0 -0
  477. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/mock_adapter.py +0 -0
  478. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/parameter_normalizer.py +0 -0
  479. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/response_wrapper.py +0 -0
  480. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/validation.py +0 -0
  481. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/version_compat.py +0 -0
  482. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/vector_stores/__init__.py +0 -0
  483. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/vector_stores/base.py +0 -0
  484. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
  485. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
  486. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
  487. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/wrappers.py +0 -0
  488. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/invokers/__init__.py +0 -0
  489. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/invokers/batch.py +0 -0
  490. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/invokers/local.py +0 -0
  491. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/invokers/streaming.py +0 -0
  492. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/__init__.py +0 -0
  493. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/adapters.py +0 -0
  494. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/bindings.py +0 -0
  495. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/canonical.py +0 -0
  496. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/cascade.py +0 -0
  497. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/certificates.py +0 -0
  498. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/composites.py +0 -0
  499. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/kinds.py +0 -0
  500. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/patterns.py +0 -0
  501. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/resolution.py +0 -0
  502. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/resolver.py +0 -0
  503. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/runtime.py +0 -0
  504. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/signals.py +0 -0
  505. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/telemetry.py +0 -0
  506. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/mcp/__init__.py +0 -0
  507. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/__init__.py +0 -0
  508. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/agent_metrics.py +0 -0
  509. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/content_features.py +0 -0
  510. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/deepeval_metrics.py +0 -0
  511. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/registry.py +0 -0
  512. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/__init__.py +0 -0
  513. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/agent_spans.py +0 -0
  514. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/config.py +0 -0
  515. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/decorators.py +0 -0
  516. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/dtos.py +0 -0
  517. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/__init__.py +0 -0
  518. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/cloud_optimizer.py +0 -0
  519. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/interactive_optimizer.py +0 -0
  520. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/remote.py +0 -0
  521. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/remote_services.py +0 -0
  522. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/results.py +0 -0
  523. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/__init__.py +0 -0
  524. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/loader.py +0 -0
  525. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/model.py +0 -0
  526. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/scaffold.py +0 -0
  527. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
  528. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/staleness.py +0 -0
  529. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/validator.py +0 -0
  530. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/plugins/__init__.py +0 -0
  531. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/plugins/registry.py +0 -0
  532. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/projects/__init__.py +0 -0
  533. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/prompts/__init__.py +0 -0
  534. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/prompts/dtos.py +0 -0
  535. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/providers/__init__.py +0 -0
  536. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/providers/validation.py +0 -0
  537. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/py.typed +0 -0
  538. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/reporting/__init__.py +0 -0
  539. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/reporting/example_map.py +0 -0
  540. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/__init__.py +0 -0
  541. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/audit.py +0 -0
  542. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/__init__.py +0 -0
  543. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/helpers.py +0 -0
  544. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/mfa.py +0 -0
  545. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/models.py +0 -0
  546. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/oidc.py +0 -0
  547. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/saml.py +0 -0
  548. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/sms.py +0 -0
  549. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/totp.py +0 -0
  550. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/config.py +0 -0
  551. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/credentials.py +0 -0
  552. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/crypto_utils.py +0 -0
  553. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/deployment.py +0 -0
  554. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/encryption.py +0 -0
  555. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/enterprise.py +0 -0
  556. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/headers.py +0 -0
  557. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/input_validation.py +0 -0
  558. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/jwt_validator.py +0 -0
  559. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/rate_limiter.py +0 -0
  560. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/redaction.py +0 -0
  561. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/session_manager.py +0 -0
  562. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/tenant.py +0 -0
  563. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
  564. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
  565. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
  566. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
  567. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
  568. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
  569. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
  570. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
  571. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
  572. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
  573. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
  574. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
  575. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-integrations/SKILL.md +0 -0
  576. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
  577. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
  578. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
  579. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
  580. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
  581. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
  582. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
  583. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/storage/__init__.py +0 -0
  584. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/storage/local_storage.py +0 -0
  585. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/testing/__init__.py +0 -0
  586. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/traigent_client.py +0 -0
  587. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/traigent_integration.py +0 -0
  588. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/__init__.py +0 -0
  589. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/dataflow_strategy.py +0 -0
  590. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/detection_strategies.py +0 -0
  591. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/detection_types.py +0 -0
  592. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/detector.py +0 -0
  593. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/discovery.py +0 -0
  594. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/observation.py +0 -0
  595. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/py.typed +0 -0
  596. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/__main__.py +0 -0
  597. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/objectives.py +0 -0
  598. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/options.py +0 -0
  599. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/registry.py +0 -0
  600. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/spec_validator.py +0 -0
  601. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/__init__.py +0 -0
  602. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/batch_optimizer_utils.py +0 -0
  603. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/batch_processing.py +0 -0
  604. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/callbacks.py +0 -0
  605. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/console.py +0 -0
  606. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/constraints.py +0 -0
  607. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/diagnostics.py +0 -0
  608. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/env_config.py +0 -0
  609. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/error_handler.py +0 -0
  610. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/example_id.py +0 -0
  611. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/file_versioning.py +0 -0
  612. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/function_identity.py +0 -0
  613. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/hashing.py +0 -0
  614. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/importance.py +0 -0
  615. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/incentives.py +0 -0
  616. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/langchain_interceptor.py +0 -0
  617. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/litellm_interceptor.py +0 -0
  618. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/llm_response_parsing.py +0 -0
  619. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/local_analytics.py +0 -0
  620. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/logging.py +0 -0
  621. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/multi_objective.py +0 -0
  622. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/numpy_compat.py +0 -0
  623. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/optimization_analyzer.py +0 -0
  624. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/persistence.py +0 -0
  625. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/retry.py +0 -0
  626. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/secure_path.py +0 -0
  627. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/validation.py +0 -0
  628. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/visualization/__init__.py +0 -0
  629. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/wrapper/__init__.py +0 -0
  630. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/wrapper/errors.py +0 -0
  631. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/wrapper/server.py +0 -0
  632. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/wrapper/service.py +0 -0
  633. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent.egg-info/dependency_links.txt +0 -0
  634. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent.egg-info/top_level.txt +0 -0
  635. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent_validation/__init__.py +0 -0
  636. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent_validation/base.py +0 -0
  637. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent_validation/plugins.py +0 -0
  638. {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent_validation/py.typed +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.18.0] - 2026-06-27
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: traigent
3
- Version: 0.17.0.dev0
3
+ Version: 0.18.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
@@ -36,7 +36,7 @@ Requires-Dist: jsonschema>=4.0.0
36
36
  Requires-Dist: cryptography>=46.0.7
37
37
  Requires-Dist: PyJWT[crypto]<3.0.0,>=2.13.0
38
38
  Requires-Dist: backoff>=2.2.0
39
- Requires-Dist: litellm==1.87.1
39
+ Requires-Dist: litellm<2,>=1.87.1
40
40
  Requires-Dist: rank-bm25
41
41
  Requires-Dist: psutil>=5.8.0
42
42
  Requires-Dist: pydantic>=2.0.0
@@ -287,7 +287,7 @@ Works with any LLM provider — [OpenAI](https://platform.openai.com/docs), [Ant
287
287
  | **Get started** | [Installation](docs/getting-started/installation.md) · [5-minute tutorial](docs/getting-started/GETTING_STARTED.md) |
288
288
  | **User guides** | [Injection Modes](docs/user-guide/injection_modes.md) · [Configuration Spaces](docs/user-guide/configuration-spaces.md) · [Evaluation](docs/user-guide/evaluation_guide.md) |
289
289
  | **Tunable Variable Language** | [TVL Guide](docs/user-guide/tuned_variables.md) |
290
- | **Advanced** | [Agent Optimization](docs/user-guide/agent_optimization.md) · [Optuna Integration](docs/user-guide/optuna_integration.md) |
290
+ | **Advanced** | [Agent Optimization](docs/user-guide/agent_optimization.md) |
291
291
  | **API reference** | [Decorator Reference](docs/api-reference/decorator-reference.md) · [Constraint DSL](docs/features/constraint-dsl.md) |
292
292
 
293
293
  </details>
@@ -376,7 +376,7 @@ The default run uses Traigent's smart optimizer when portal credentials are avai
376
376
  ```python
377
377
  @traigent.optimize(
378
378
  configuration_space={
379
- "model": ["gpt-4o-mini", "claude-3-haiku-20240307", "gemini/gemini-pro"],
379
+ "model": ["gpt-4o-mini", "claude-haiku-4-5-20251001", "gemini/gemini-pro"],
380
380
  "temperature": [0.1, 0.5, 0.9],
381
381
  },
382
382
  objectives=["accuracy", "cost"],
@@ -460,7 +460,7 @@ for details.
460
460
 
461
461
  ### Evaluation
462
462
 
463
- Provide a JSONL dataset — Traigent scores outputs using semantic similarity by default:
463
+ Provide a JSONL dataset — Traigent scores outputs by exact / case-insensitive match by default. For semantic scoring (paraphrases, summarization, translation), supply a `scoring_function` (embeddings or LLM-judge) or a `custom_evaluator`:
464
464
 
465
465
  ```jsonl
466
466
  {"input": {"question": "What is AI?"}, "output": "Artificial Intelligence"}
@@ -140,7 +140,7 @@ Works with any LLM provider — [OpenAI](https://platform.openai.com/docs), [Ant
140
140
  | **Get started** | [Installation](docs/getting-started/installation.md) · [5-minute tutorial](docs/getting-started/GETTING_STARTED.md) |
141
141
  | **User guides** | [Injection Modes](docs/user-guide/injection_modes.md) · [Configuration Spaces](docs/user-guide/configuration-spaces.md) · [Evaluation](docs/user-guide/evaluation_guide.md) |
142
142
  | **Tunable Variable Language** | [TVL Guide](docs/user-guide/tuned_variables.md) |
143
- | **Advanced** | [Agent Optimization](docs/user-guide/agent_optimization.md) · [Optuna Integration](docs/user-guide/optuna_integration.md) |
143
+ | **Advanced** | [Agent Optimization](docs/user-guide/agent_optimization.md) |
144
144
  | **API reference** | [Decorator Reference](docs/api-reference/decorator-reference.md) · [Constraint DSL](docs/features/constraint-dsl.md) |
145
145
 
146
146
  </details>
@@ -229,7 +229,7 @@ The default run uses Traigent's smart optimizer when portal credentials are avai
229
229
  ```python
230
230
  @traigent.optimize(
231
231
  configuration_space={
232
- "model": ["gpt-4o-mini", "claude-3-haiku-20240307", "gemini/gemini-pro"],
232
+ "model": ["gpt-4o-mini", "claude-haiku-4-5-20251001", "gemini/gemini-pro"],
233
233
  "temperature": [0.1, 0.5, 0.9],
234
234
  },
235
235
  objectives=["accuracy", "cost"],
@@ -313,7 +313,7 @@ for details.
313
313
 
314
314
  ### Evaluation
315
315
 
316
- Provide a JSONL dataset — Traigent scores outputs using semantic similarity by default:
316
+ Provide a JSONL dataset — Traigent scores outputs by exact / case-insensitive match by default. For semantic scoring (paraphrases, summarization, translation), supply a `scoring_function` (embeddings or LLM-judge) or a `custom_evaluator`:
317
317
 
318
318
  ```jsonl
319
319
  {"input": {"question": "What is AI?"}, "output": "Artificial Intelligence"}
@@ -255,7 +255,7 @@ Unknown keys are forwarded to the optimizer and may raise errors when unsupporte
255
255
  **Example:**
256
256
  ```python
257
257
  # Run optimization with the default smart optimizer
258
- result = await my_agent.optimize(max_trials=50)
258
+ result = await my_agent.optimize()
259
259
 
260
260
  # Save results
261
261
  await my_agent.save_optimization_results("results.json")
@@ -570,7 +570,7 @@ Legacy `execution_mode=` inputs are deprecated compatibility shims. Use
570
570
  Run controls such as `max_trials` and `timeout` are passed to `.optimize()`:
571
571
 
572
572
  ```python
573
- result = await my_agent.optimize(max_trials=50, timeout=3600)
573
+ result = await my_agent.optimize(max_trials=10, timeout=3600)
574
574
  ```
575
575
 
576
576
  **Cost Controls**:
@@ -47,6 +47,7 @@ import asyncio
47
47
  from langchain_openai import ChatOpenAI
48
48
  import traigent
49
49
 
50
+
50
51
  @traigent.optimize(
51
52
  configuration_space={
52
53
  "model": ["gpt-4o-mini", "gpt-4o"],
@@ -60,6 +61,7 @@ def answer(question: str) -> str:
60
61
  llm = ChatOpenAI(model=cfg["model"], temperature=cfg["temperature"])
61
62
  return llm.invoke(question).content
62
63
 
64
+
63
65
  # Run optimization
64
66
  result = asyncio.run(answer.optimize(max_trials=6))
65
67
  print(f"Best config: {result.best_config}")
@@ -78,6 +80,10 @@ print(f"Best score: {result.best_score:.2%}")
78
80
  ## 🧪 Datasets
79
81
 
80
82
  - Format: JSONL with `input` and optional `output`/`expected_output`
83
+ - Beginner examples use the flat `eval_dataset=` keyword. The bundled
84
+ `evaluation=EvaluationOptions(...)` form is also supported when you want to
85
+ group evaluation settings, but `eval_dataset=` is the recommended minimal-call
86
+ shape in this guide.
81
87
  - Minimal example:
82
88
 
83
89
  ```jsonl
@@ -88,15 +94,12 @@ print(f"Best score: {result.best_score:.2%}")
88
94
  ## 🎛️ Multiple Objectives
89
95
 
90
96
  ```python
91
- from traigent.api.decorators import EvaluationOptions
92
-
93
97
  @traigent.optimize(
94
98
  objectives=["accuracy", "cost", "latency"],
95
- evaluation=EvaluationOptions(eval_dataset="data.jsonl"),
99
+ eval_dataset="data.jsonl",
96
100
  configuration_space={"temperature": (0.0, 1.0), "model": ["gpt-4o-mini", "gpt-4o"]},
97
101
  )
98
- def classify(text: str) -> str:
99
- ...
102
+ def classify(text: str) -> str: ...
100
103
  ```
101
104
 
102
105
  ## 🧪 Examples
@@ -129,6 +132,7 @@ pip install litellm
129
132
  ```python
130
133
  from litellm import completion
131
134
 
135
+
132
136
  @traigent.optimize(
133
137
  configuration_space={
134
138
  "model": ["gpt-4o-mini", "claude-3-haiku-20240307", "gemini/gemini-pro"],
@@ -138,7 +142,9 @@ from litellm import completion
138
142
  )
139
143
  def my_agent(query: str) -> str:
140
144
  config = traigent.get_config()
141
- response = completion(model=config.get("model"), messages=[{"role": "user", "content": query}])
145
+ response = completion(
146
+ model=config.get("model"), messages=[{"role": "user", "content": query}]
147
+ )
142
148
  return str(response.choices[0].message.content)
143
149
  ```
144
150
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "traigent"
7
- version = "0.17.0.dev0"
7
+ version = "0.18.0"
8
8
  authors = [
9
9
  {name = "Traigent Team", email = "opensource@traigent.ai"},
10
10
  ]
@@ -43,7 +43,7 @@ dependencies = [
43
43
  "cryptography>=46.0.7", # CVE-2026-26007 + 3 more fixed in 46.0.7 (see #709)
44
44
  "PyJWT[crypto]>=2.13.0,<3.0.0", # >=2.13.0: Dependabot alerts — DoS, SSRF via JWKClient, HS256 forgery, alg bypass, kid DoS
45
45
  "backoff>=2.2.0",
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.
46
+ "litellm>=1.87.1,<2", # Floor: 1.84+ escaped the 1.83.x python-dotenv==1.0.1 and openai==2.24.0 exact sub-pins; 1.87.1 is the first stable release verified against this SDK. Upper bound <2 guards against a future breaking major. The demo (TraigentDemo) requires 1.88.0; this range admits it. Only the public API surface (completion, acompletion, cost_per_token, token_counter, model_cost, ModelResponse) is used — stable across the 1.x line.
47
47
  "rank-bm25",
48
48
  "psutil>=5.8.0",
49
49
  # Required by API decorators and config validation
@@ -239,6 +239,7 @@ Changelog = "https://github.com/Traigent/Traigent/blob/main/CHANGELOG.md"
239
239
 
240
240
  [project.scripts]
241
241
  traigent = "traigent.cli.main:cli"
242
+ traigent-analytics-mcp = "traigent.analytics_mcp.server:main"
242
243
 
243
244
  [project.entry-points."traigent.validators"]
244
245
  python = "traigent_validation.validators:PythonConstraintValidator"
@@ -10,6 +10,6 @@ typing-extensions>=4.0.0; python_version<"3.11"
10
10
  claude-code-sdk>=0.0.14
11
11
  mcp>=1.27.0
12
12
  backoff>=2.2.0
13
- litellm==1.87.1
13
+ litellm>=1.87.1,<2
14
14
  rank-bm25
15
15
  psutil>=5.8.0
@@ -64,9 +64,16 @@ def _is_quickstart_invocation() -> bool:
64
64
  if not sys.argv:
65
65
  return False
66
66
  argv0 = sys.argv[0] or ""
67
- # ``python -m traigent.examples.quickstart`` argv[0] is the path
68
- # to the quickstart's __main__.py
69
- if argv0.endswith(("quickstart/__main__.py", "quickstart\\__main__.py")):
67
+ # ``python -m traigent.examples.quickstart`` and quickstart companion
68
+ # modules — argv[0] is the path to the module's .py file.
69
+ if argv0.endswith(
70
+ (
71
+ "quickstart/__main__.py",
72
+ "quickstart\\__main__.py",
73
+ "quickstart/publish_and_verify.py",
74
+ "quickstart\\publish_and_verify.py",
75
+ )
76
+ ):
70
77
  return True
71
78
  # ``traigent quickstart`` — argv[0] is the venv's bin/traigent script
72
79
  # and argv[1] is the subcommand name. Gate on argv[0] basename being
@@ -310,6 +317,14 @@ _LAZY_EXPORTS: dict[str, tuple[str, str]] = {
310
317
  "TenantSSOConfigDTO": ("traigent.admin", "TenantSSOConfigDTO"),
311
318
  # Evaluation DTOs
312
319
  "AnnotationQueueDTO": ("traigent.evaluation", "AnnotationQueueDTO"),
320
+ "AnnotationQueueItemCompleteResultDTO": (
321
+ "traigent.evaluation",
322
+ "AnnotationQueueItemCompleteResultDTO",
323
+ ),
324
+ "AnnotationQueueItemCreateResultDTO": (
325
+ "traigent.evaluation",
326
+ "AnnotationQueueItemCreateResultDTO",
327
+ ),
313
328
  "AnnotationQueueItemDTO": ("traigent.evaluation", "AnnotationQueueItemDTO"),
314
329
  "AnnotationQueueItemListResponse": (
315
330
  "traigent.evaluation",
@@ -339,6 +354,7 @@ _LAZY_EXPORTS: dict[str, tuple[str, str]] = {
339
354
  "ScoreRecordDTO": ("traigent.evaluation", "ScoreRecordDTO"),
340
355
  "ScoreRecordListResponse": ("traigent.evaluation", "ScoreRecordListResponse"),
341
356
  "ScoreSource": ("traigent.evaluation", "ScoreSource"),
357
+ "TypedMeasureDTO": ("traigent.evaluation", "TypedMeasureDTO"),
342
358
  # Observability DTOs and helpers
343
359
  "CorrelationIds": ("traigent.observability", "CorrelationIds"),
344
360
  "ObserveContext": ("traigent.observability", "ObserveContext"),
@@ -560,6 +576,8 @@ __all__ = [
560
576
  "TenantMembershipStatus",
561
577
  "TenantSSOConfigDTO",
562
578
  "AnnotationQueueDTO",
579
+ "AnnotationQueueItemCompleteResultDTO",
580
+ "AnnotationQueueItemCreateResultDTO",
563
581
  "AnnotationQueueItemDTO",
564
582
  "AnnotationQueueItemListResponse",
565
583
  "AnnotationQueueItemStatus",
@@ -578,6 +596,7 @@ __all__ = [
578
596
  "ScoreRecordDTO",
579
597
  "ScoreRecordListResponse",
580
598
  "ScoreSource",
599
+ "TypedMeasureDTO",
581
600
  "CorrelationIds",
582
601
  "ObserveContext",
583
602
  "ObservationDTO",
@@ -68,11 +68,6 @@ def get_version() -> str:
68
68
  "installed package metadata"
69
69
  ) from None
70
70
 
71
- raise RuntimeError(
72
- "Unable to resolve Traigent SDK version from pyproject.toml or "
73
- "installed package metadata"
74
- )
75
-
76
71
 
77
72
  def get_version_info() -> dict[str, str]:
78
73
  """Get detailed version information.
@@ -9,6 +9,7 @@ from abc import ABC, abstractmethod
9
9
  from typing import Any, cast
10
10
 
11
11
  from traigent.config.types import ExecutionMode
12
+ from traigent.evaluators.base import _accuracy_values_match
12
13
 
13
14
  logger = logging.getLogger(__name__)
14
15
 
@@ -192,7 +193,7 @@ class LocalExecutionAdapter(ExecutionAdapter):
192
193
  # Exact / case-insensitive match — must stay aligned with
193
194
  # LocalEvaluator and the public docs (the tracked fix). Diverging
194
195
  # here was how "Paris" vs "paris" silently scored 0.0.
195
- is_correct = str(output).strip().lower() == str(expected).strip().lower()
196
+ is_correct = _accuracy_values_match(output, expected)
196
197
  result["correct"] = is_correct
197
198
 
198
199
  elif eval_type == "contains":
@@ -245,8 +246,21 @@ class LocalExecutionAdapter(ExecutionAdapter):
245
246
 
246
247
  else:
247
248
  # Unknown evaluation type
248
- result["correct"] = None
249
+ result["success"] = False
249
250
  result["unknown_eval_type"] = eval_type
251
+ result["error"] = (
252
+ f"Unsupported evaluation_type '{eval_type}'. "
253
+ "Use exact_match, contains, numeric, semantic with a custom evaluator, "
254
+ "or provide a scoring_function."
255
+ )
256
+ logger.error(
257
+ "Unsupported evaluation_type %r for LocalExecutionAdapter; marking "
258
+ "example as failed and excluding it from accuracy. "
259
+ "trial_id=%s example_index=%s",
260
+ eval_type,
261
+ trial_id or "<unknown>",
262
+ example_index if example_index is not None else "<unknown>",
263
+ )
250
264
 
251
265
  return result
252
266
 
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from dataclasses import dataclass, field
6
6
 
7
+ from traigent.cloud.url_security import validate_cloud_base_url
7
8
  from traigent.config.backend_config import BackendConfig
8
9
  from traigent.config.tenant import TENANT_ENV_VAR, TENANT_HEADER_NAME, read_optional_env
9
10
 
@@ -22,7 +23,10 @@ class EnterpriseAdminConfig:
22
23
  extra_headers: dict[str, str] = field(default_factory=dict)
23
24
 
24
25
  def __post_init__(self) -> None:
25
- self.backend_origin = self.backend_origin.rstrip("/")
26
+ backend_origin = self.backend_origin.rstrip("/")
27
+ self.backend_origin = validate_cloud_base_url(
28
+ backend_origin, purpose="enterprise admin request"
29
+ )
26
30
  self.tenant_id = (
27
31
  self.tenant_id.strip() or None if self.tenant_id is not None else None
28
32
  )
@@ -443,8 +443,8 @@ class SpecificationGenerator:
443
443
  )
444
444
 
445
445
  # Update model parameters with best configuration
446
- if "best_config" in optimization_results:
447
- best_config = optimization_results["best_config"]
446
+ best_config = optimization_results.get("best_config")
447
+ if isinstance(best_config, dict):
448
448
  updated_params = (agent_spec.model_parameters or {}).copy()
449
449
 
450
450
  # Update with optimized parameters
@@ -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,8 @@ 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
34
+ from traigent.cloud.url_security import validate_cloud_base_url
33
35
  from traigent.config.backend_config import DEFAULT_LOCAL_URL
34
36
  from traigent.utils.logging import get_logger
35
37
 
@@ -72,7 +74,10 @@ class ExampleInsightsClient:
72
74
  "Install with: pip install traigent[analytics]"
73
75
  )
74
76
 
75
- self.backend_url = backend_url.rstrip("/")
77
+ backend_url = backend_url.rstrip("/")
78
+ self.backend_url = validate_cloud_base_url(
79
+ backend_url, purpose="analytics request"
80
+ )
76
81
  self.timeout = timeout
77
82
 
78
83
  # Import here to avoid circular dependency
@@ -100,9 +105,9 @@ class ExampleInsightsClient:
100
105
 
101
106
  raise_if_backend_offline("ExampleInsightsClient request")
102
107
  if self._client is None:
103
- headers = {}
108
+ headers: dict[str, str] = {}
104
109
  if self.api_key:
105
- headers["Authorization"] = f"Bearer {self.api_key}"
110
+ headers.update(_build_api_key_auth_headers(self.api_key))
106
111
 
107
112
  self._client = httpx.AsyncClient(
108
113
  base_url=self.backend_url,
@@ -23,6 +23,8 @@ 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
27
+ from traigent.cloud.url_security import validate_cloud_base_url
26
28
  from traigent.config.backend_config import DEFAULT_LOCAL_URL
27
29
  from traigent.utils.logging import get_logger
28
30
 
@@ -76,7 +78,10 @@ class NextStepsClient:
76
78
  "Install with: pip install traigent[analytics]"
77
79
  )
78
80
 
79
- self.backend_url = backend_url.rstrip("/")
81
+ backend_url = backend_url.rstrip("/")
82
+ self.backend_url = validate_cloud_base_url(
83
+ backend_url, purpose="analytics request"
84
+ )
80
85
  self.timeout = timeout
81
86
 
82
87
  # Import here to avoid circular dependency
@@ -102,9 +107,9 @@ class NextStepsClient:
102
107
 
103
108
  raise_if_backend_offline("NextStepsClient request")
104
109
  if self._client is None:
105
- headers = {}
110
+ headers: dict[str, str] = {}
106
111
  if self.api_key:
107
- headers["Authorization"] = f"Bearer {self.api_key}"
112
+ headers.update(_build_api_key_auth_headers(self.api_key))
108
113
 
109
114
  self._client = httpx.AsyncClient(
110
115
  base_url=self.backend_url,
@@ -0,0 +1,216 @@
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.cloud.url_security import validate_cloud_base_url
17
+ from traigent.config.backend_config import DEFAULT_LOCAL_URL
18
+ from traigent.utils.logging import get_logger
19
+
20
+ logger = get_logger(__name__)
21
+
22
+ try:
23
+ import httpx
24
+
25
+ HTTPX_AVAILABLE = True
26
+ except ImportError:
27
+ HTTPX_AVAILABLE = False
28
+ httpx = None # type: ignore
29
+
30
+
31
+ _REQUIRED_RESPONSE_KEYS = {
32
+ "schema_version",
33
+ "phase",
34
+ "plan",
35
+ "steps",
36
+ "evidence_level",
37
+ "caveat",
38
+ "advisory",
39
+ }
40
+
41
+
42
+ def _build_auth_headers(credential: str | None) -> dict[str, str]:
43
+ """Return optimization-plan auth headers for an API-key credential."""
44
+ from traigent.cloud.auth import _build_api_key_auth_headers
45
+
46
+ # OptimizationPlanClient accepts API-key credentials only. Reuse the same
47
+ # X-API-Key-only construction as AuthManager._get_api_key_headers
48
+ # (cloud/auth.py) and do not infer JWT mode from string shape.
49
+ return _build_api_key_auth_headers(credential)
50
+
51
+
52
+ class OptimizationPlanClient:
53
+ """Client for retrieving allowlisted pre-run optimization plans.
54
+
55
+ Thread Safety: Safe for concurrent use (httpx.AsyncClient is thread-safe).
56
+ """
57
+
58
+ def __init__(
59
+ self,
60
+ backend_url: str = DEFAULT_LOCAL_URL,
61
+ api_key: str | None = None,
62
+ timeout: float = 30.0,
63
+ ):
64
+ """Initialize OptimizationPlanClient.
65
+
66
+ Args:
67
+ backend_url: Backend API base URL. The backend must expose the
68
+ optimization plan endpoint.
69
+ api_key: API key for authentication (None uses env var
70
+ TRAIGENT_API_KEY)
71
+ timeout: Default timeout for HTTP requests in seconds
72
+
73
+ Raises:
74
+ ImportError: If httpx is not installed
75
+ """
76
+ if not HTTPX_AVAILABLE:
77
+ raise ImportError(
78
+ "httpx is required for OptimizationPlanClient. "
79
+ "Install with: pip install traigent[hybrid]"
80
+ )
81
+
82
+ backend_url = backend_url.rstrip("/")
83
+ self.backend_url = validate_cloud_base_url(
84
+ backend_url, purpose="optimization plan request"
85
+ )
86
+ self.timeout = timeout
87
+
88
+ # Import here to avoid circular dependency
89
+ from traigent.config.backend_config import get_no_credentials_hint
90
+ from traigent.utils.env_config import get_api_key
91
+
92
+ self.api_key = get_api_key("traigent") if api_key is None else api_key
93
+ if not self.api_key:
94
+ logger.warning(
95
+ "No API key found for OptimizationPlanClient. %s",
96
+ get_no_credentials_hint(),
97
+ )
98
+
99
+ self._client: httpx.AsyncClient | None = None
100
+
101
+ def _get_client(self) -> httpx.AsyncClient:
102
+ """Get or create async HTTP client.
103
+
104
+ Returns:
105
+ Configured httpx.AsyncClient instance
106
+ """
107
+ from traigent.utils.env_config import raise_if_backend_offline
108
+
109
+ raise_if_backend_offline("OptimizationPlanClient request")
110
+ if self._client is None:
111
+ headers: dict[str, str] = {}
112
+ if self.api_key:
113
+ headers.update(_build_auth_headers(self.api_key))
114
+
115
+ self._client = httpx.AsyncClient(
116
+ base_url=self.backend_url,
117
+ headers=headers,
118
+ timeout=self.timeout,
119
+ )
120
+
121
+ return self._client
122
+
123
+ async def close(self) -> None:
124
+ """Close HTTP client and release resources."""
125
+ if self._client is not None:
126
+ await self._client.aclose()
127
+ self._client = None
128
+
129
+ async def __aenter__(self) -> OptimizationPlanClient:
130
+ """Async context manager entry."""
131
+ return self
132
+
133
+ async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
134
+ """Async context manager exit."""
135
+ await self.close()
136
+
137
+ async def get_optimization_plan(
138
+ self,
139
+ *,
140
+ task_description: str,
141
+ dataset_size: int,
142
+ dataset_has_holdout: bool,
143
+ objectives: Sequence[str],
144
+ max_trials: int,
145
+ cost_limit_usd: float,
146
+ task_type: str | None = None,
147
+ agent_shape: str | None = None,
148
+ weights: dict[str, float] | None = None,
149
+ offline: bool | None = None,
150
+ ) -> dict[str, Any]:
151
+ """Retrieve a backend-provided pre-run optimization plan.
152
+
153
+ The backend must expose ``POST /api/v1/optimization/plan`` and returns
154
+ the bare allowlisted optimization plan contract payload.
155
+
156
+ Args:
157
+ task_description: Natural-language description of the optimization
158
+ task.
159
+ dataset_size: Number of available examples.
160
+ dataset_has_holdout: Whether the dataset already has a holdout split.
161
+ objectives: Objective metric names to plan against.
162
+ max_trials: Maximum trial count requested for the planned run.
163
+ cost_limit_usd: Maximum approved spend for the planned run, in USD.
164
+ task_type: Optional safe task category.
165
+ agent_shape: Optional safe label for the agent shape.
166
+ weights: Optional objective-name to relative-weight map.
167
+ offline: Optional request for a fully offline plan.
168
+
169
+ Returns:
170
+ Dict with the backend optimization plan contract payload.
171
+
172
+ Raises:
173
+ httpx.HTTPError: If request fails.
174
+ ValueError: If the backend returns a non-object JSON payload or an
175
+ object missing required optimization-plan contract keys.
176
+ """
177
+ body: dict[str, Any] = {
178
+ "task_description": task_description,
179
+ "dataset": {
180
+ "size": dataset_size,
181
+ "has_holdout": dataset_has_holdout,
182
+ },
183
+ "objectives": list(objectives),
184
+ "budget": {
185
+ "max_trials": max_trials,
186
+ "cost_limit_usd": cost_limit_usd,
187
+ },
188
+ }
189
+ if task_type is not None:
190
+ body["task_type"] = task_type
191
+ if agent_shape is not None:
192
+ body["agent_shape"] = agent_shape
193
+ if weights is not None:
194
+ body["weights"] = dict(weights)
195
+ if offline is not None:
196
+ body["offline"] = offline
197
+
198
+ client = self._get_client()
199
+ response = await client.post("/api/v1/optimization/plan", json=body)
200
+ response.raise_for_status()
201
+
202
+ payload = response.json()
203
+ if not isinstance(payload, dict):
204
+ raise ValueError(
205
+ "Malformed optimization-plan response: expected a JSON object "
206
+ "matching the optimization-plan contract."
207
+ )
208
+
209
+ missing = sorted(_REQUIRED_RESPONSE_KEYS - payload.keys())
210
+ if missing:
211
+ raise ValueError(
212
+ "Malformed optimization-plan response: missing required key(s): "
213
+ f"{', '.join(missing)}."
214
+ )
215
+
216
+ return cast(dict[str, Any], payload)