traigent 0.18.1.dev10__tar.gz → 0.19.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 (633) hide show
  1. {traigent-0.18.1.dev10 → traigent-0.19.0}/CHANGELOG.md +71 -0
  2. {traigent-0.18.1.dev10/traigent.egg-info → traigent-0.19.0}/PKG-INFO +2 -2
  3. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/api-reference/complete-function-specification.md +1 -0
  4. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/api-reference/telemetry.md +40 -14
  5. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/architecture/stop_conditions.md +37 -0
  6. {traigent-0.18.1.dev10 → traigent-0.19.0}/pyproject.toml +5 -3
  7. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/adapters/execution_adapter.py +2 -2
  8. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/predictive.py +0 -15
  9. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/render.py +2 -1
  10. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/decorators.py +122 -23
  11. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/functions.py +12 -9
  12. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/types.py +3 -0
  13. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/auth_commands.py +47 -0
  14. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/local_commands.py +5 -2
  15. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/playbook_commands.py +32 -8
  16. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/sync_commands.py +17 -0
  17. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/__init__.py +35 -0
  18. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/analytics_client.py +68 -0
  19. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/api_operations.py +25 -1
  20. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/async_batch_transport.py +1 -1
  21. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/backend_client.py +138 -0
  22. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/client.py +1 -1
  23. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/dtos.py +674 -5
  24. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/integration_manager.py +17 -10
  25. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/optimizer_client.py +4 -2
  26. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/privacy_operations.py +4 -1
  27. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/session_operations.py +83 -5
  28. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/subset_selection.py +1 -1
  29. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/sync_manager.py +95 -4
  30. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/trial_operations.py +106 -34
  31. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/types.py +182 -88
  32. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/subsystems/tvar_recommendations.py +2 -2
  33. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/backend_session_manager.py +17 -5
  34. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/best_config_runtime.py +10 -1
  35. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/ci_approval.py +42 -20
  36. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/config_state_manager.py +5 -0
  37. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/constants.py +3 -2
  38. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/cost_enforcement.py +5 -1
  39. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/evaluator_wrapper.py +2 -1
  40. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/exception_handler.py +60 -0
  41. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/logger_facade.py +2 -2
  42. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/metadata_helpers.py +17 -3
  43. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/optimization_pipeline.py +218 -20
  44. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/optimized_function.py +46 -8
  45. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/orchestrator.py +112 -9
  46. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/stop_condition_manager.py +20 -0
  47. traigent-0.19.0/traigent/core/stop_conditions.py +1354 -0
  48. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/trial_lifecycle.py +216 -0
  49. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/trial_result_factory.py +53 -0
  50. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/types_ext.py +1 -1
  51. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/base.py +4 -3
  52. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/local.py +28 -6
  53. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/metrics_tracker.py +138 -28
  54. traigent-0.19.0/traigent/examples/_portal.py +8 -0
  55. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/quickstart/_env.py +2 -2
  56. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/quickstart/publish_and_verify.py +9 -4
  57. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/tutorial_bootstrap.py +2 -2
  58. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/options.py +1 -1
  59. traigent-0.19.0/traigent/generation/skill_train/_deterministic_indices.py +33 -0
  60. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/artifacts.py +22 -8
  61. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/slow_update.py +2 -3
  62. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/splits.py +3 -5
  63. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/invokers/base.py +8 -3
  64. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/invokers/local.py +4 -2
  65. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/invokers/streaming.py +112 -8
  66. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/metrics/deepeval_metrics.py +126 -2
  67. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/interactive_optimizer.py +61 -2
  68. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/audit.py +31 -8
  69. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/input_validation.py +7 -5
  70. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-decorator-setup/SKILL.md +3 -3
  71. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +3 -3
  72. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-run-optimization/SKILL.md +1 -1
  73. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/storage/local_storage.py +3 -2
  74. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/traigent_client.py +8 -10
  75. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/artifact_fingerprints.py +20 -0
  76. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/diagnostics.py +3 -2
  77. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/env_config.py +7 -4
  78. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/function_identity.py +45 -6
  79. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/incentives.py +2 -2
  80. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/local_analytics.py +2 -2
  81. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/persistence.py +37 -20
  82. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/retry.py +4 -3
  83. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/secure_path.py +1 -19
  84. {traigent-0.18.1.dev10 → traigent-0.19.0/traigent.egg-info}/PKG-INFO +2 -2
  85. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent.egg-info/SOURCES.txt +2 -0
  86. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent.egg-info/requires.txt +1 -1
  87. traigent-0.18.1.dev10/traigent/core/stop_conditions.py +0 -662
  88. {traigent-0.18.1.dev10 → traigent-0.19.0}/COMMERCIAL-LICENSE.md +0 -0
  89. {traigent-0.18.1.dev10 → traigent-0.19.0}/CONTRIBUTING.md +0 -0
  90. {traigent-0.18.1.dev10 → traigent-0.19.0}/CONTRIBUTOR-LICENSING.md +0 -0
  91. {traigent-0.18.1.dev10 → traigent-0.19.0}/DISCLAIMER.md +0 -0
  92. {traigent-0.18.1.dev10 → traigent-0.19.0}/LICENSE +0 -0
  93. {traigent-0.18.1.dev10 → traigent-0.19.0}/MANIFEST.in +0 -0
  94. {traigent-0.18.1.dev10 → traigent-0.19.0}/NOTICE +0 -0
  95. {traigent-0.18.1.dev10 → traigent-0.19.0}/README.md +0 -0
  96. {traigent-0.18.1.dev10 → traigent-0.19.0}/SECURITY.md +0 -0
  97. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/LOCAL_CI_GATE.md +0 -0
  98. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/README.md +0 -0
  99. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/SYNC_MAP.md +0 -0
  100. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/agent-skill.md +0 -0
  101. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/api-reference/decorator-reference.md +0 -0
  102. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/api-reference/enterprise-beta-api.md +0 -0
  103. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/api-reference/interactive_optimizer.md +0 -0
  104. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/api-reference/thread-pool-examples.md +0 -0
  105. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/architecture/ARCHITECTURE.md +0 -0
  106. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/architecture/cost-architecture-validation.md +0 -0
  107. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/architecture/execution_mode_follow_up.md +0 -0
  108. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/architecture/integrations-inventory.md +0 -0
  109. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/architecture/plugin_architecture.md +0 -0
  110. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/architecture/project-structure.md +0 -0
  111. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/concepts/composite-knob-ir.md +0 -0
  112. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/concepts/composite-knobs.md +0 -0
  113. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/concepts/guided-generation.md +0 -0
  114. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
  115. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
  116. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/contributing/CONTRIBUTING.md +0 -0
  117. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
  118. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/contributing/README.md +0 -0
  119. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/contributing/SECURITY.md +0 -0
  120. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/contributing/aikido_triage.md +0 -0
  121. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/contributing/code_review_instructions.md +0 -0
  122. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/contributing/test-quality-guide.md +0 -0
  123. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
  124. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/demos/README.md +0 -0
  125. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/examples/API_PATTERNS.md +0 -0
  126. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/examples/LEARNING_ROADMAP.md +0 -0
  127. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/examples/QUICK_REFERENCE.md +0 -0
  128. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/examples/README.md +0 -0
  129. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/examples/START_HERE.md +0 -0
  130. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/examples/TROUBLESHOOTING.md +0 -0
  131. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/fake-completion-tracking.md +0 -0
  132. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/feature_matrices/README.md +0 -0
  133. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/README.md +0 -0
  134. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/authentication.md +0 -0
  135. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/constraint-dsl.md +0 -0
  136. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/dataflow-detection.md +0 -0
  137. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/framework_override_enhanced_features.md +0 -0
  138. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/mcp-server.md +0 -0
  139. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/observability-spans.md +0 -0
  140. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/onboarding.md +0 -0
  141. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/prompt_management.md +0 -0
  142. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/recommendations.md +0 -0
  143. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/safety-gates.md +0 -0
  144. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/seamless_injection.md +0 -0
  145. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/strategy-presets.md +0 -0
  146. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/features/strict_metrics_nulls.md +0 -0
  147. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/getting-started/GETTING_STARTED.md +0 -0
  148. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/getting-started/README.md +0 -0
  149. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/getting-started/installation.md +0 -0
  150. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/getting-started/minimal-integration.md +0 -0
  151. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
  152. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/getting-started/testing.md +0 -0
  153. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
  154. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/guides/evaluation.md +0 -0
  155. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/guides/execution-mode-migration.md +0 -0
  156. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/guides/execution-modes.md +0 -0
  157. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/guides/js-bridge.md +0 -0
  158. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/guides/llm_plugin_migration_guide.md +0 -0
  159. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/guides/parallel-configuration.md +0 -0
  160. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/guides/secrets_management.md +0 -0
  161. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/hybrid-mode-api-contract.md +0 -0
  162. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/hybrid-mode-client-guide.md +0 -0
  163. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/operations/azure_openai.md +0 -0
  164. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/operations/bedrock.md +0 -0
  165. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/operations/google_gemini.md +0 -0
  166. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/security/trust_model.md +0 -0
  167. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
  168. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/traceability/concepts/composite-knob-ir.md +0 -0
  169. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/traceability/concepts/composite-knobs.md +0 -0
  170. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/traceability/concepts/guided-generation.md +0 -0
  171. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/traceability/schema.md +0 -0
  172. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/traceability/tagging_tracking.md +0 -0
  173. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/traceability/taxonomy_reference.md +0 -0
  174. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
  175. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/user-guide/README.md +0 -0
  176. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/user-guide/agent_optimization.md +0 -0
  177. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/user-guide/choosing_optimization_model.md +0 -0
  178. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/user-guide/configuration-spaces.md +0 -0
  179. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/user-guide/evaluation_guide.md +0 -0
  180. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/user-guide/injection_modes.md +0 -0
  181. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/user-guide/interactive_optimization.md +0 -0
  182. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/user-guide/smart_optimization.md +0 -0
  183. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/user-guide/tuned_variables.md +0 -0
  184. {traigent-0.18.1.dev10 → traigent-0.19.0}/docs/walkthrough.md +0 -0
  185. {traigent-0.18.1.dev10 → traigent-0.19.0}/requirements/requirements-all.txt +0 -0
  186. {traigent-0.18.1.dev10 → traigent-0.19.0}/requirements/requirements-analytics.txt +0 -0
  187. {traigent-0.18.1.dev10 → traigent-0.19.0}/requirements/requirements-bayesian.txt +0 -0
  188. {traigent-0.18.1.dev10 → traigent-0.19.0}/requirements/requirements-chroma.txt +0 -0
  189. {traigent-0.18.1.dev10 → traigent-0.19.0}/requirements/requirements-dev.txt +0 -0
  190. {traigent-0.18.1.dev10 → traigent-0.19.0}/requirements/requirements-hybrid.txt +0 -0
  191. {traigent-0.18.1.dev10 → traigent-0.19.0}/requirements/requirements-integrations.txt +0 -0
  192. {traigent-0.18.1.dev10 → traigent-0.19.0}/requirements/requirements-security.txt +0 -0
  193. {traigent-0.18.1.dev10 → traigent-0.19.0}/requirements/requirements-test.txt +0 -0
  194. {traigent-0.18.1.dev10 → traigent-0.19.0}/requirements/requirements.txt +0 -0
  195. {traigent-0.18.1.dev10 → traigent-0.19.0}/setup.cfg +0 -0
  196. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/__init__.py +0 -0
  197. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/_version.py +0 -0
  198. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/admin/__init__.py +0 -0
  199. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/admin/client.py +0 -0
  200. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/admin/config.py +0 -0
  201. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/admin/dtos.py +0 -0
  202. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/agents/__init__.py +0 -0
  203. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/agents/config_mapper.py +0 -0
  204. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/agents/executor.py +0 -0
  205. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/agents/platforms.py +0 -0
  206. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/agents/specification_generator.py +0 -0
  207. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/__init__.py +0 -0
  208. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/anomaly.py +0 -0
  209. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/cost_optimization.py +0 -0
  210. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/example_insights.py +0 -0
  211. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/intelligence.py +0 -0
  212. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/meta_learning.py +0 -0
  213. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/next_steps.py +0 -0
  214. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/optimization_plan.py +0 -0
  215. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics/scheduling.py +0 -0
  216. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics_mcp/__init__.py +0 -0
  217. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics_mcp/server.py +0 -0
  218. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/analytics_mcp/tools.py +0 -0
  219. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/__init__.py +0 -0
  220. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/agent_inference.py +0 -0
  221. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/config_builder.py +0 -0
  222. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/config_space.py +0 -0
  223. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/constraint_builders.py +0 -0
  224. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/constraints.py +0 -0
  225. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/parameter_ranges.py +0 -0
  226. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/parameter_validator.py +0 -0
  227. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/safety.py +0 -0
  228. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/strategy_presets.py +0 -0
  229. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/api/validation_protocol.py +0 -0
  230. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/__init__.py +0 -0
  231. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/detect_tvars_command.py +0 -0
  232. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/function_discovery.py +0 -0
  233. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/generate_config_command.py +0 -0
  234. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/hooks_commands.py +0 -0
  235. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/main.py +0 -0
  236. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/next_steps_command.py +0 -0
  237. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/onboard_commands.py +0 -0
  238. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/optimization_validator.py +0 -0
  239. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/plan_command.py +0 -0
  240. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cli/validation_types.py +0 -0
  241. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/_aiohttp_compat.py +0 -0
  242. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/agent_dtos.py +0 -0
  243. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/analytics_auth.py +0 -0
  244. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/api_key_manager.py +0 -0
  245. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/auth.py +0 -0
  246. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/backend_bridges.py +0 -0
  247. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/backend_components.py +0 -0
  248. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/backend_synchronizer.py +0 -0
  249. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/benchmark_client.py +0 -0
  250. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/billing.py +0 -0
  251. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/cloud_operations.py +0 -0
  252. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/credential_manager.py +0 -0
  253. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/credential_resolver.py +0 -0
  254. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/dataset_converter.py +0 -0
  255. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/governance.py +0 -0
  256. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/models.py +0 -0
  257. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/password_auth_handler.py +0 -0
  258. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/production_mcp_client.py +0 -0
  259. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/remote_guidance.py +0 -0
  260. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/resilient_client.py +0 -0
  261. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/service.py +0 -0
  262. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/session_types.py +0 -0
  263. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/sessions.py +0 -0
  264. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/smart_pruning.py +0 -0
  265. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/token_manager.py +0 -0
  266. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/trial_tracker.py +0 -0
  267. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/url_security.py +0 -0
  268. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/user_agent.py +0 -0
  269. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/cloud/validators.py +0 -0
  270. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/__init__.py +0 -0
  271. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/api_keys.py +0 -0
  272. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/ast_transformer.py +0 -0
  273. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/backend_config.py +0 -0
  274. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/context.py +0 -0
  275. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/feature_flags.py +0 -0
  276. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/models.yaml +0 -0
  277. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/parallel.py +0 -0
  278. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/project.py +0 -0
  279. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/provider_support.py +0 -0
  280. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/providers.py +0 -0
  281. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/runtime_injector.py +0 -0
  282. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config/tenant.py +0 -0
  283. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/__init__.py +0 -0
  284. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/agent_classifier.py +0 -0
  285. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/apply.py +0 -0
  286. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
  287. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
  288. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
  289. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
  290. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/catalog.py +0 -0
  291. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/llm_backend.py +0 -0
  292. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/pipeline.py +0 -0
  293. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/presets/__init__.py +0 -0
  294. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
  295. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
  296. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/presets/constraint_templates.py +0 -0
  297. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/presets/range_presets.py +0 -0
  298. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/recommendations.py +0 -0
  299. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/subsystems/__init__.py +0 -0
  300. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/subsystems/benchmarks.py +0 -0
  301. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/subsystems/objectives.py +0 -0
  302. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
  303. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
  304. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
  305. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/config_generator/types.py +0 -0
  306. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/__init__.py +0 -0
  307. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/cache_policy.py +0 -0
  308. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/cost_estimator.py +0 -0
  309. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/execution_policy_runtime.py +0 -0
  310. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/license.py +0 -0
  311. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/mandatory_metrics.py +0 -0
  312. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/meta_types.py +0 -0
  313. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/metric_registry.py +0 -0
  314. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/metrics_aggregator.py +0 -0
  315. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/namespace.py +0 -0
  316. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/objectives.py +0 -0
  317. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/orchestrator_helpers.py +0 -0
  318. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/parallel_execution_manager.py +0 -0
  319. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/progress_manager.py +0 -0
  320. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/result_selection.py +0 -0
  321. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/sample_budget.py +0 -0
  322. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/samplers/__init__.py +0 -0
  323. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/samplers/random_sampler.py +0 -0
  324. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/session_context.py +0 -0
  325. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/session_types.py +0 -0
  326. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/stat_significance.py +0 -0
  327. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/trace_env.py +0 -0
  328. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/tracing.py +0 -0
  329. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/trial_context.py +0 -0
  330. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/types.py +0 -0
  331. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/utils.py +0 -0
  332. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core/workflow_trace_manager.py +0 -0
  333. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core_metrics/__init__.py +0 -0
  334. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core_metrics/client.py +0 -0
  335. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core_metrics/config.py +0 -0
  336. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/core_metrics/dtos.py +0 -0
  337. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/defaults.py +0 -0
  338. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/effectuation/__init__.py +0 -0
  339. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/effectuation/contracts.py +0 -0
  340. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/effectuation/strategies/__init__.py +0 -0
  341. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/effectuation/strategies/framework_param.py +0 -0
  342. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/effectuation/strategies/self_consistency.py +0 -0
  343. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluation/__init__.py +0 -0
  344. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluation/client.py +0 -0
  345. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluation/config.py +0 -0
  346. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluation/dtos.py +0 -0
  347. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/__init__.py +0 -0
  348. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
  349. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
  350. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/catalog_loader.py +0 -0
  351. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/dataset_registry.py +0 -0
  352. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/hybrid_api.py +0 -0
  353. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/metrics.py +0 -0
  354. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/evaluators/recommendations.py +0 -0
  355. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/__init__.py +0 -0
  356. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/__init__.py +0 -0
  357. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/_bootstrap.py +0 -0
  358. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/_demo.py +0 -0
  359. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/anthropic.py +0 -0
  360. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/aws.py +0 -0
  361. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/azure.py +0 -0
  362. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/gcp.py +0 -0
  363. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/gemini.py +0 -0
  364. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/groq.py +0 -0
  365. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/litellm_any.py +0 -0
  366. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/manifest.json +0 -0
  367. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/openai.py +0 -0
  368. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/openrouter.py +0 -0
  369. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/providers/qa_samples.jsonl +0 -0
  370. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/quickstart/__init__.py +0 -0
  371. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/quickstart/__main__.py +0 -0
  372. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
  373. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/__init__.py +0 -0
  374. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/backend_provider.py +0 -0
  375. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/example_synth.py +0 -0
  376. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/llm_provider.py +0 -0
  377. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/loop.py +0 -0
  378. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/models.py +0 -0
  379. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/prompt_rewriter.py +0 -0
  380. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/__init__.py +0 -0
  381. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/buffer.py +0 -0
  382. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/document.py +0 -0
  383. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/edits.py +0 -0
  384. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/prompts.py +0 -0
  385. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/reflection.py +0 -0
  386. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/schedule.py +0 -0
  387. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/trainer.py +0 -0
  388. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/skill_train/trainer_result.py +0 -0
  389. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/generation/validators.py +0 -0
  390. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/guaranteed_modes.py +0 -0
  391. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hooks/__init__.py +0 -0
  392. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hooks/config.py +0 -0
  393. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hooks/installer.py +0 -0
  394. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hooks/validator.py +0 -0
  395. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hybrid/__init__.py +0 -0
  396. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hybrid/discovery.py +0 -0
  397. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hybrid/http_transport.py +0 -0
  398. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hybrid/lifecycle.py +0 -0
  399. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hybrid/mcp_transport.py +0 -0
  400. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hybrid/protocol.py +0 -0
  401. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/hybrid/transport.py +0 -0
  402. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/__init__.py +0 -0
  403. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/activation.py +0 -0
  404. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/base.py +0 -0
  405. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/base_plugin.py +0 -0
  406. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/bedrock_client.py +0 -0
  407. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/config.py +0 -0
  408. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/dspy_adapter.py +0 -0
  409. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/framework_override.py +0 -0
  410. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/langchain/__init__.py +0 -0
  411. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/langchain/handler.py +0 -0
  412. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/langfuse/__init__.py +0 -0
  413. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/langfuse/callback.py +0 -0
  414. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/langfuse/client.py +0 -0
  415. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/langfuse/tracker.py +0 -0
  416. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/__init__.py +0 -0
  417. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/anthropic_plugin.py +0 -0
  418. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
  419. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/base_llm_plugin.py +0 -0
  420. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/bedrock_plugin.py +0 -0
  421. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/cohere_plugin.py +0 -0
  422. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/gemini_plugin.py +0 -0
  423. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/huggingface_plugin.py +0 -0
  424. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/langchain/__init__.py +0 -0
  425. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/langchain/base.py +0 -0
  426. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/langchain_plugin.py +0 -0
  427. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/litellm_plugin.py +0 -0
  428. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
  429. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/mistral_plugin.py +0 -0
  430. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/openai.py +0 -0
  431. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/llms/openai_plugin.py +0 -0
  432. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/mappings.py +0 -0
  433. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/model_discovery/__init__.py +0 -0
  434. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
  435. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
  436. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/model_discovery/base.py +0 -0
  437. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/model_discovery/cache.py +0 -0
  438. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
  439. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
  440. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
  441. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/model_discovery/registry.py +0 -0
  442. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/observability/__init__.py +0 -0
  443. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/observability/mlflow.py +0 -0
  444. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/observability/wandb.py +0 -0
  445. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/observability/workflow_traces.py +0 -0
  446. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/plugin_registry.py +0 -0
  447. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/providers.py +0 -0
  448. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/pydantic_ai/__init__.py +0 -0
  449. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/pydantic_ai/_types.py +0 -0
  450. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/pydantic_ai/handler.py +0 -0
  451. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/pydantic_ai/plugin.py +0 -0
  452. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/utils/__init__.py +0 -0
  453. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/utils/discovery.py +0 -0
  454. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/utils/message_coercion.py +0 -0
  455. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/utils/mock_adapter.py +0 -0
  456. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/utils/parameter_normalizer.py +0 -0
  457. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/utils/response_wrapper.py +0 -0
  458. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/utils/validation.py +0 -0
  459. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/utils/version_compat.py +0 -0
  460. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/vector_stores/__init__.py +0 -0
  461. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/vector_stores/base.py +0 -0
  462. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
  463. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
  464. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
  465. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/integrations/wrappers.py +0 -0
  466. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/invokers/__init__.py +0 -0
  467. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/invokers/batch.py +0 -0
  468. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/__init__.py +0 -0
  469. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/adapters.py +0 -0
  470. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/bindings.py +0 -0
  471. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/canonical.py +0 -0
  472. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/cascade.py +0 -0
  473. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/certificates.py +0 -0
  474. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/composites.py +0 -0
  475. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/kinds.py +0 -0
  476. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/patterns.py +0 -0
  477. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/resolution.py +0 -0
  478. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/resolver.py +0 -0
  479. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/runtime.py +0 -0
  480. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/signals.py +0 -0
  481. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/knobs/telemetry.py +0 -0
  482. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/mcp/__init__.py +0 -0
  483. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/mcp/server.py +0 -0
  484. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/mcp/tools.py +0 -0
  485. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/metrics/__init__.py +0 -0
  486. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/metrics/agent_metrics.py +0 -0
  487. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/metrics/content_features.py +0 -0
  488. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/metrics/ragas_metrics.py +0 -0
  489. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/metrics/registry.py +0 -0
  490. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/observability/__init__.py +0 -0
  491. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/observability/agent_spans.py +0 -0
  492. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/observability/client.py +0 -0
  493. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/observability/config.py +0 -0
  494. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/observability/decorators.py +0 -0
  495. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/observability/dtos.py +0 -0
  496. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/__init__.py +0 -0
  497. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/base.py +0 -0
  498. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/batch_optimizers.py +0 -0
  499. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/cloud_optimizer.py +0 -0
  500. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/grid.py +0 -0
  501. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/random.py +0 -0
  502. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/registry.py +0 -0
  503. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/remote.py +0 -0
  504. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/remote_services.py +0 -0
  505. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/optimizers/results.py +0 -0
  506. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/playbook/__init__.py +0 -0
  507. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/playbook/loader.py +0 -0
  508. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/playbook/model.py +0 -0
  509. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/playbook/scaffold.py +0 -0
  510. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
  511. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/playbook/staleness.py +0 -0
  512. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/playbook/validator.py +0 -0
  513. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/plugins/__init__.py +0 -0
  514. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/plugins/registry.py +0 -0
  515. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/projects/__init__.py +0 -0
  516. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/projects/client.py +0 -0
  517. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/projects/config.py +0 -0
  518. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/projects/dtos.py +0 -0
  519. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/prompts/__init__.py +0 -0
  520. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/prompts/client.py +0 -0
  521. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/prompts/config.py +0 -0
  522. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/prompts/dtos.py +0 -0
  523. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/providers/__init__.py +0 -0
  524. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/providers/validation.py +0 -0
  525. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/py.typed +0 -0
  526. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/reporting/__init__.py +0 -0
  527. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/reporting/example_map.py +0 -0
  528. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/__init__.py +0 -0
  529. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/auth/__init__.py +0 -0
  530. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/auth/helpers.py +0 -0
  531. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/auth/mfa.py +0 -0
  532. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/auth/models.py +0 -0
  533. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/auth/oidc.py +0 -0
  534. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/auth/saml.py +0 -0
  535. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/auth/sms.py +0 -0
  536. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/auth/totp.py +0 -0
  537. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/config.py +0 -0
  538. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/credentials.py +0 -0
  539. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/crypto_utils.py +0 -0
  540. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/deployment.py +0 -0
  541. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/encryption.py +0 -0
  542. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/enterprise.py +0 -0
  543. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/headers.py +0 -0
  544. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/jwt_validator.py +0 -0
  545. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/rate_limiter.py +0 -0
  546. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/redaction.py +0 -0
  547. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/session_manager.py +0 -0
  548. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/security/tenant.py +0 -0
  549. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
  550. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
  551. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
  552. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
  553. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
  554. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
  555. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-debugging/SKILL.md +0 -0
  556. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-debugging/references/error-reference.md +0 -0
  557. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
  558. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
  559. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
  560. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
  561. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-integrations/SKILL.md +0 -0
  562. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
  563. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
  564. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
  565. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
  566. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-quickstart/references/environment-variables.md +0 -0
  567. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
  568. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
  569. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-run-optimization/references/cost-management.md +0 -0
  570. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
  571. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/storage/__init__.py +0 -0
  572. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/testing/__init__.py +0 -0
  573. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/traigent_integration.py +0 -0
  574. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tuned_variables/__init__.py +0 -0
  575. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tuned_variables/dataflow_strategy.py +0 -0
  576. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tuned_variables/detection_strategies.py +0 -0
  577. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tuned_variables/detection_types.py +0 -0
  578. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tuned_variables/detector.py +0 -0
  579. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tuned_variables/discovery.py +0 -0
  580. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tuned_variables/observation.py +0 -0
  581. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tuned_variables/py.typed +0 -0
  582. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tvl/__init__.py +0 -0
  583. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tvl/__main__.py +0 -0
  584. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tvl/models.py +0 -0
  585. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tvl/objectives.py +0 -0
  586. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tvl/options.py +0 -0
  587. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tvl/promotion_gate.py +0 -0
  588. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tvl/registry.py +0 -0
  589. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tvl/spec_loader.py +0 -0
  590. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tvl/spec_validator.py +0 -0
  591. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/tvl/statistics.py +0 -0
  592. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/__init__.py +0 -0
  593. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/batch_optimizer_utils.py +0 -0
  594. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/batch_processing.py +0 -0
  595. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/callbacks.py +0 -0
  596. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/console.py +0 -0
  597. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/constraints.py +0 -0
  598. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/cost_calculator.py +0 -0
  599. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/discrete_domains.py +0 -0
  600. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/error_handler.py +0 -0
  601. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/example_id.py +0 -0
  602. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/exceptions.py +0 -0
  603. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/file_versioning.py +0 -0
  604. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/hashing.py +0 -0
  605. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/importance.py +0 -0
  606. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/insights.py +0 -0
  607. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/langchain_interceptor.py +0 -0
  608. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/litellm_interceptor.py +0 -0
  609. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/llm_response_parsing.py +0 -0
  610. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/logging.py +0 -0
  611. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/multi_objective.py +0 -0
  612. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/numpy_compat.py +0 -0
  613. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/objectives.py +0 -0
  614. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/optimization_analyzer.py +0 -0
  615. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/optimization_logger.py +0 -0
  616. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/pagination.py +0 -0
  617. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/results_table.py +0 -0
  618. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/url_security.py +0 -0
  619. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/utils/validation.py +0 -0
  620. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/visualization/__init__.py +0 -0
  621. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/visualization/plots.py +0 -0
  622. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/wrapper/__init__.py +0 -0
  623. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/wrapper/errors.py +0 -0
  624. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/wrapper/server.py +0 -0
  625. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent/wrapper/service.py +0 -0
  626. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent.egg-info/dependency_links.txt +0 -0
  627. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent.egg-info/entry_points.txt +0 -0
  628. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent.egg-info/top_level.txt +0 -0
  629. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent_validation/__init__.py +0 -0
  630. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent_validation/base.py +0 -0
  631. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent_validation/plugins.py +0 -0
  632. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent_validation/py.typed +0 -0
  633. {traigent-0.18.1.dev10 → traigent-0.19.0}/traigent_validation/validators.py +0 -0
@@ -6,6 +6,47 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.19.0] - 2026-07-03
10
+
11
+ ### Added
12
+ - `SemanticSaturationStopCondition` rebuilt from the shipped schema plan
13
+ (FR-SDK-SEMANTIC-SATURATION-V1).
14
+ - Surrogate (pre-screen) evaluator: a cheap second scorer over captured
15
+ outputs, with an e2e co-evolution demo in mock mode.
16
+ - Smart-pruning producer wired end-to-end: per-example pruning is reachable
17
+ from the SDK, with real per-example accuracy threaded into pruning progress
18
+ and live-e2e-confirmed correctness/durability fixes.
19
+ - `list_sessions()` with typed `SessionSummary`; `delete_session` defaults to
20
+ non-destructive and `cascade=True` now calls the backend DELETE.
21
+ - Experiment group analytics client.
22
+
23
+ ### Changed
24
+ - Deprecation warnings for the legacy session contract and the
25
+ `edge_analytics` wire value (now `local`).
26
+ - Self-describing default experiment names.
27
+ - Real streaming token-cost accounting with a plausibility clamp on
28
+ self-reported costs; `budget.max_cost_usd` is sent on typed session create
29
+ so the backend cost cap arms.
30
+
31
+ ### Fixed
32
+ - Abort on systematic provider failures instead of reporting fake
33
+ convergence; fail fast when the optimizer is unavailable instead of
34
+ hanging.
35
+ - Offline-sync finalization is status-aware and skips terminal non-COMPLETED
36
+ experiments; sync CLI surfaces terminal-skip warnings.
37
+ - Trial-results table no longer double-scales 0-100 metrics; cost capture
38
+ works when the config has no `model` key.
39
+ - `FunctionDescriptor` identity, metric batching, and audit-alert
40
+ ratchet-surfaced bugs.
41
+
42
+ ### Security
43
+ - `RestrictedUnpickler` pinned to a precise (module, name) allowlist,
44
+ closing a pickle deserialization RCE vector.
45
+ - CLI login rate limiting enforced; file-read containment for CWE-23.
46
+ - Sensitive tuned config values are redacted on the privacy-mode submission
47
+ path; safety-sensitive-key blocking is non-bypassable on best-config
48
+ drift; CI-approval token expiry compared in UTC.
49
+
9
50
  ## [0.18.0] - 2026-06-27
10
51
 
11
52
  ### Added
@@ -26,6 +67,29 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
26
67
  var (`OPTUNA_ROLLOUT`, renamed during the managed-routing migration).
27
68
  - Smart algorithms (`bayesian` and the Optuna family) now route to the Traigent
28
69
  cloud; the local SDK supports `grid` and `random` only.
70
+ - Removed 7 production-dead internal modules (`config_builder`,
71
+ `llm_processor`, `refactoring_utils`, `service_registry`, `event_manager`,
72
+ `langchain/discovery`, empty `telemetry` package) and their tests.
73
+
74
+ ### Fixed
75
+ - Per-config `cost` metric is now wired to the authoritative `total_cost`, so
76
+ the `minimize cost` objective is no longer inert and the portal no longer
77
+ shows `$0` per config on a real paid run; a model unpriced at runtime is
78
+ surfaced on the result (and fails closed under
79
+ `TRAIGENT_STRICT_COST_ACCOUNTING`).
80
+ - `traigent sync` / `traigent local sync` no longer fail every completed
81
+ session with `409 EXPERIMENT_HAS_NO_RUNS`; sync now creates the experiment
82
+ `PENDING`, uploads runs, finalizes to `COMPLETED`, resumes idempotently, and
83
+ returns a non-zero exit on failure.
84
+ - Runtime `optimize(algorithm="grid"|"random")` with a portal key now stays
85
+ local and exhaustive instead of routing to the cloud sampler.
86
+ - `traigent quickstart` runs on a bare install (uses base `litellm`, not the
87
+ `integrations` LangChain extra) and fails closed when no trial succeeds.
88
+ - `ObjectiveDefinition` fails closed on unimplemented normalization strategies
89
+ (`z_score`/`robust`) instead of silently behaving like `min_max`.
90
+
91
+ ### Dependencies
92
+ - Bumped `langsmith` 0.8.3 → 0.8.18 and `pydantic-settings` 2.14.1 → 2.14.2.
29
93
 
30
94
  ## [0.14.1] - 2026-06-19
31
95
 
@@ -123,6 +187,13 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
123
187
  - **`langgraph-checkpoint` 3.x → 4.x:** the 4.0 release drops default deserialization of payloads serialized with the legacy `"json"` serde mode. Users running `langgraph` with a persistent checkpoint saver (SQLite, Postgres, Redis, etc.) whose stored state contains JSON-format blobs will see deserialization failures unless they configure `serde` with an explicit `allowed_json_modules` list. Traigent does not bind `langgraph-checkpoint` directly — it arrives transitively through the `langgraph` dependency — so this only affects projects that also use `langgraph` checkpointers in their own code. See [CVE-2026-27794](https://github.com/langchain-ai/langgraph/security/advisories) for the underlying RCE that motivated removing the default.
124
188
 
125
189
  ### Changed
190
+ - **CI approval gate:** running `optimize()` in local/offline mode within a CI
191
+ environment now requires explicit approval via `TRAIGENT_RUN_APPROVED=1`.
192
+ `TRAIGENT_MOCK_LLM` no longer bypasses this gate — mock and offline runs in
193
+ CI are intentionally included (a purpose-built approval signal replaces an
194
+ env-var bypass of a security control). Cloud-mode runs are unaffected.
195
+ Migration: set `TRAIGENT_RUN_APPROVED=1` in CI for legitimately-approved
196
+ runs.
126
197
  - **Strict evidence modes now fail closed in promotion** (#1103,
127
198
  FR-SDK-FAIL-CLOSED-PROMOTION-V1). When a TVL promotion policy declares a strict
128
199
  evidence mode — `require_calibration.enabled: true` or `chance_constraints` —
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: traigent
3
- Version: 0.18.1.dev10
3
+ Version: 0.19.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
@@ -92,7 +92,7 @@ Requires-Dist: mcp>=1.27.0; extra == "hybrid"
92
92
  Provides-Extra: mcp
93
93
  Requires-Dist: mcp>=1.27.0; extra == "mcp"
94
94
  Provides-Extra: internal-schema
95
- Requires-Dist: traigent-schema==4.1.0; extra == "internal-schema"
95
+ Requires-Dist: traigent-schema==4.7.1; extra == "internal-schema"
96
96
  Provides-Extra: test
97
97
  Requires-Dist: pytest>=9.0.3; extra == "test"
98
98
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
@@ -247,6 +247,7 @@ async def optimize(
247
247
  | `metric_limit` / `metric_name` / `metric_include_pruned` | Configure soft cumulative-metric early stopping. |
248
248
  | `budget_limit` / `budget_metric` / `budget_include_pruned` | Deprecated aliases for metric-limit controls. Use `cost_limit` for hard USD spend control. |
249
249
  | `plateau_window` / `plateau_epsilon` | Configure plateau detection stop conditions. |
250
+ | `semantic_saturation` | Configure opt-in semantic saturation. Uses per-example metric-vector churn plus continuous objective improvement and emits sanitized diagnostics in `OptimizationResult.metadata["semantic_saturation"]`. |
250
251
  | `parameter_order` | Grid search only: mapping of parameter names to numeric priorities. Lower values vary slowest; higher values vary fastest. |
251
252
  | `order` | Alias for `parameter_order` (grid search only). |
252
253
 
@@ -16,7 +16,11 @@ During optimization runs, Traigent collects:
16
16
  - Trial suggested/intermediate/completed timestamps
17
17
  - Trial status (completed, failed, pruned)
18
18
  - Trial duration
19
- - Trial configuration (parameter values being tested, with internal keys stripped)
19
+ - Trial configuration. On the default portal-backed path, this includes tuned
20
+ config-space key/value pairs being tested, with internal keys stripped. If you
21
+ tune prompt variants or other free-text strings as configuration values, those
22
+ tuned values are sent on the default path so the portal can display winning
23
+ configs.
20
24
  - Trial metrics (accuracy, cost, latency, etc.)
21
25
 
22
26
  **Optimization Run Metadata**:
@@ -26,7 +30,7 @@ During optimization runs, Traigent collects:
26
30
  - Total optimization duration
27
31
  - Result source (`cloud_brain`, `local_fallback`, `explicit_local`, or `offline`)
28
32
  - Stop conditions triggered
29
- - Content-free tuned-variable observations can include knob names, enum/scalar values, numeric metrics, and aggregate effectuation events for backend optimization. Set `TRAIGENT_TVAR_OBSERVATION=off` to disable them, or use `TRAIGENT_TVAR_OBSERVATION=hashed` (default) to hash free-form string values. Only `off` and `hashed` are supported; unsupported values fall back to `hashed`.
33
+ - Content-free tuned-variable observations can include knob names, enum/scalar values, numeric metrics, and aggregate effectuation events for backend optimization. Set `TRAIGENT_TVAR_OBSERVATION=off` to disable the `tvar_observation_v1` metadata sub-field, or use `TRAIGENT_TVAR_OBSERVATION=hashed` (default) to hash free-form string values in that sub-field. Only `off` and `hashed` are supported; unsupported values fall back to `hashed`. This setting does not control the trial `config` field.
30
34
 
31
35
  **Performance Metrics**:
32
36
  - LLM API response times
@@ -36,7 +40,8 @@ During optimization runs, Traigent collects:
36
40
 
37
41
  ### What is NOT Collected
38
42
 
39
- Traigent does **not** collect:
43
+ Outside tuned configuration values explicitly sent on the default portal-backed
44
+ path, Traigent does **not** collect:
40
45
 
41
46
  - **User prompts or inputs**
42
47
  - **LLM responses or outputs**
@@ -47,10 +52,25 @@ Traigent does **not** collect:
47
52
 
48
53
  ### Data Boundary and No-Egress Runs
49
54
 
50
- The default portal-backed path sends configuration identifiers and numeric metrics. It
51
- does not send dataset example inputs, expected outputs, prompts, responses, or
52
- example metadata. Use `offline=True` when your policy requires no Traigent
53
- backend egress at all:
55
+ The default portal-backed path sends tuned config-space values and numeric
56
+ metrics. This is deliberate: the portal uses those values to display and compare
57
+ winning configs. If a prompt variant, persona instruction, model name, or other
58
+ string is part of the tuned configuration space, the default path sends that
59
+ string value. It does not send dataset example inputs, expected outputs, model
60
+ responses, or example metadata unless you put that content into the tuned
61
+ configuration itself.
62
+
63
+ Use privacy-mode redaction when you need backend coordination without sending
64
+ tuned string values. Privacy submissions preserve which keys were tuned, but
65
+ redact sensitive-key values and all string/free-text config values. Numeric,
66
+ boolean, and `None` config values still pass through. This redaction is gated by
67
+ the run's effective `TraigentConfig.privacy_enabled` setting, including
68
+ configuration loaded from `TRAIGENT_PRIVACY_MODE=true` for compatibility. Do not
69
+ use `@traigent.optimize(..., privacy_enabled=True)` for new code; that decorator
70
+ keyword is deprecated and emits a warning. Use `offline=True` instead when the
71
+ requirement is no Traigent backend egress.
72
+
73
+ Use `offline=True` when your policy requires no Traigent backend egress at all:
54
74
 
55
75
  ```python
56
76
  @traigent.optimize(
@@ -63,8 +83,10 @@ backend egress at all:
63
83
  No-egress runs keep Traigent optimization metadata local while still allowing your
64
84
  own function to call LLM providers or other services.
65
85
 
66
- Use `TRAIGENT_DISABLE_TELEMETRY=true` for telemetry opt-out and `offline=True`
67
- for zero Traigent backend egress.
86
+ Use `TRAIGENT_DISABLE_TELEMETRY=true` for SDK telemetry opt-out, effective
87
+ `TraigentConfig.privacy_enabled` privacy mode to redact tuned string config
88
+ values on privacy-mode submissions, and `offline=True` for zero Traigent backend
89
+ egress.
68
90
 
69
91
  ### OpenTelemetry Tracing
70
92
 
@@ -128,7 +150,7 @@ Telemetry data is used for:
128
150
  - No data is sent to the Traigent backend
129
151
 
130
152
  **Portal-backed runs**:
131
- - Configuration IDs/schema and numeric metrics can be sent to Traigent backend for optimization coordination
153
+ - Tuned config-space values, configuration IDs/schema, and numeric metrics can be sent to Traigent backend for optimization coordination
132
154
  - Retention policies depend on your managed-service agreement
133
155
  - You can request data deletion at any time
134
156
 
@@ -249,7 +271,10 @@ control and CI artifact collection in sensitive projects.
249
271
  ### Data Sanitization
250
272
 
251
273
  Configuration data is sanitized before telemetry. Private/internal keys
252
- (starting with `_`) are automatically removed.
274
+ (starting with `_`) are automatically removed. On default portal-backed
275
+ submissions, tuned config values are otherwise sent unchanged so the portal can
276
+ display winning configs. On privacy-mode submissions, sensitive-key values and
277
+ all string/free-text config values are redacted while preserving the tuned keys.
253
278
 
254
279
  ### Error Handling
255
280
 
@@ -305,9 +330,10 @@ For HIPAA compliance or handling sensitive data:
305
330
 
306
331
  ### Q: Is telemetry enabled by default?
307
332
 
308
- **A**: Yes, for local optimization metadata. The default portal-backed path sends
309
- configuration IDs/schema and numeric metrics only; use `offline=True` for zero
310
- Traigent backend egress.
333
+ **A**: Yes, for local optimization metadata. The default portal-backed path can
334
+ send tuned config-space values, configuration IDs/schema, and numeric metrics;
335
+ use privacy-mode redaction when backend coordination is needed without tuned
336
+ string values, or `offline=True` for zero Traigent backend egress.
311
337
 
312
338
  ### Q: How do I verify telemetry is disabled?
313
339
 
@@ -29,6 +29,7 @@ Built-in implementations:
29
29
  | `MetricLimitStopCondition` | Soft stop when the cumulative value of a named completed-trial metric reaches a limit. | `metric_limit`, `metric_name`, `metric_include_pruned`. |
30
30
  | `CostLimitStopCondition` | Hard money-spend guard backed by `CostEnforcer` permits before execution starts. Parallel-safe. | `cost_limit`, `cost_approved`. |
31
31
  | `HypervolumeConvergenceStopCondition` | Stops when hypervolume improvement remains below a threshold across a sliding window. | `convergence_metric="hypervolume_improvement"`, `convergence_window`, `convergence_threshold`. |
32
+ | `SemanticSaturationStopCondition` | Stops when per-example quality vectors are stable and monitored continuous objectives are no longer improving. | `semantic_saturation={...}`. |
32
33
 
33
34
  `budget_limit` remains as a deprecated alias for `metric_limit` for compatibility.
34
35
  New code should not use it.
@@ -81,6 +82,35 @@ The orchestrator instantiates the conditions during construction via
81
82
  between optimizations. `_should_stop()` evaluates all configured conditions before
82
83
  fallback logic (timeout or optimizer-provided stop signals).
83
84
 
85
+ ## Semantic saturation
86
+
87
+ `semantic_saturation` is an opt-in stop condition for runs where aggregate
88
+ accuracy alone is not enough to decide convergence. It only reads `example_id`
89
+ and numeric or boolean values from each example's `metrics` map. It never reads
90
+ or emits inputs, expected outputs, actual outputs, model text, or document
91
+ content.
92
+
93
+ The condition selects the latest completed trials with distinct configuration
94
+ signatures, warms up until `max(window, min_trials)` distinct configs are
95
+ available, then evaluates the latest `window` configs:
96
+
97
+ * Quality metrics come from `example_score_metrics`/`accuracy_metrics` or from
98
+ accuracy-like and binary per-example metrics.
99
+ * Quality saturation is measured as churn across common example IDs, gated by
100
+ `min_overlap`, `score_tolerance`, and `churn_threshold`.
101
+ * Continuous objectives come from `continuous_objectives`/`objectives`, the
102
+ `ObjectiveSchema`, or cost/latency/token-like aggregate metrics.
103
+ * Continuous objectives use direction-aware best improvement over the window,
104
+ compared to `relative_improvement_epsilon` and
105
+ `absolute_improvement_epsilon`.
106
+
107
+ The run stops only when every quality metric and every continuous objective is
108
+ saturated. When it fires, `OptimizationResult.stop_reason` is
109
+ `"semantic_saturation"`. The latest sanitized decision payload is emitted under
110
+ `OptimizationResult.metadata["semantic_saturation"]` and follows TraigentSchema
111
+ `optimization/semantic_saturation_schema.json`; example ID lists are capped by
112
+ `max_example_ids`.
113
+
84
114
  ## Vendor-error pause semantics
85
115
 
86
116
  When every trial in a parallel batch fails with a vendor-classifiable error
@@ -175,6 +205,8 @@ All three examples share the same stop-condition machinery with no additional
175
205
  plumbing.
176
206
 
177
207
  Built-in convergence stops report `OptimizationResult.stop_reason = "convergence"`.
208
+ Semantic saturation reports
209
+ `OptimizationResult.stop_reason = "semantic_saturation"`.
178
210
  Custom stop-condition instances still report the generic `"condition"` reason
179
211
  unless they are explicitly mapped into the public `StopReason` contract.
180
212
 
@@ -186,6 +218,11 @@ Unit coverage lives under:
186
218
  - Max-trial threshold (including invalid inputs).
187
219
  - Plateau detection, weight handling, reset semantics, and parameter validation.
188
220
  - Metric-limit enforcement, compatibility fallback, and pruned-trial filtering.
221
+ - Stop-condition exports include semantic saturation.
222
+ * `tests/unit/core/test_semantic_saturation_stop_condition.py` – verifies:
223
+ - Stable vectors, boolean scores, aggregate-flat no-stop behavior, repeated
224
+ config warmup, cost-improving continuation, schema-valid result metadata,
225
+ and the privacy boundary.
189
226
  * `tests/unit/core/test_orchestrator.py` – integration tests for plateau and metric limit
190
227
  within the orchestrator, ensuring early termination and reasonable counts in
191
228
  sequential runs.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "traigent"
7
- version = "0.18.1.dev10"
7
+ version = "0.19.0"
8
8
  authors = [
9
9
  {name = "Traigent Team", email = "opensource@traigent.ai"},
10
10
  ]
@@ -137,7 +137,7 @@ mcp = [
137
137
 
138
138
  # Internal schema validation support for DTO strict-validation paths.
139
139
  internal_schema = [
140
- "traigent-schema==4.1.0",
140
+ "traigent-schema==4.7.1",
141
141
  ]
142
142
 
143
143
  # Testing dependencies
@@ -199,7 +199,9 @@ ml = [
199
199
  "scipy>=1.7.0",
200
200
  ]
201
201
 
202
- # DeepEval integration (LLM evaluation metrics as optimization objectives)
202
+ # DeepEval integration (LLM evaluation metrics as optimization objectives).
203
+ # Explicit opt-in only while Aikido/deepeval#2497 telemetry exfiltration remains
204
+ # unfixed upstream; Traigent applies telemetry and TracerProvider guards at import.
203
205
  deepeval = [
204
206
  "deepeval>=1.0.0",
205
207
  ]
@@ -153,12 +153,12 @@ class LocalExecutionAdapter(ExecutionAdapter):
153
153
  }
154
154
 
155
155
  except Exception as e:
156
- logger.error(f"Edge Analytics execution failed: {str(e)}")
156
+ logger.error(f"Local execution failed: {str(e)}")
157
157
  raise
158
158
 
159
159
  async def get_execution_mode(self) -> str:
160
160
  """Get execution mode."""
161
- return ExecutionMode.EDGE_ANALYTICS.value
161
+ return ExecutionMode.LOCAL.value
162
162
 
163
163
  def _evaluate_output(
164
164
  self,
@@ -760,18 +760,6 @@ class PerformanceForecaster:
760
760
  else:
761
761
  avg_score = 0.5
762
762
 
763
- # Check for missing metrics and add warnings
764
- warnings = {}
765
- if (
766
- isinstance(config_or_config_history, dict)
767
- and "metrics" in config_or_config_history
768
- ):
769
- metrics = config_or_config_history["metrics"]
770
- expected_metrics = ["accuracy", "cost", "latency"]
771
- missing = [m for m in expected_metrics if m not in metrics]
772
- if missing:
773
- warnings["missing_metrics"] = missing
774
-
775
763
  result = {
776
764
  "expected_improvement": 0.05,
777
765
  "confidence": 0.7,
@@ -780,9 +768,6 @@ class PerformanceForecaster:
780
768
  "predicted_score": avg_score,
781
769
  }
782
770
 
783
- if warnings:
784
- result["warnings"] = warnings
785
-
786
771
  return result
787
772
 
788
773
 
@@ -19,6 +19,7 @@ optional dependency (``pip install 'traigent[analytics]'`` or
19
19
 
20
20
  from __future__ import annotations
21
21
 
22
+ import math
22
23
  from pathlib import Path
23
24
  from typing import Any, Literal
24
25
 
@@ -92,7 +93,7 @@ def _as_float(value: Any) -> float | None:
92
93
  else:
93
94
  return None
94
95
  # Reject NaN/inf so matplotlib never plots a meaningless point.
95
- if result != result or result in (float("inf"), float("-inf")):
96
+ if not math.isfinite(result):
96
97
  return None
97
98
  return result
98
99
 
@@ -84,6 +84,7 @@ from traigent.config.types import (
84
84
  ExecutionMode,
85
85
  InjectionMode,
86
86
  ResolvedExecutionPolicy,
87
+ _warn_deprecated_once,
87
88
  is_traigent_disabled,
88
89
  resolve_execution_policy,
89
90
  validate_algorithm_name,
@@ -132,6 +133,20 @@ class EvaluationOptions(BaseModel):
132
133
  custom_evaluator: Callable[..., Any] | None = None
133
134
  scoring_function: Callable[..., Any] | None = None
134
135
  metric_functions: dict[str, Callable[..., Any]] | None = None
136
+ #: Optional cheap "surrogate" (pre-screen) scorer applied to the SAME outputs
137
+ #: the primary evaluator already produced, per example. It scores captured
138
+ #: outputs only and NEVER re-executes the decorated function. Same calling
139
+ #: convention as ``scoring_function`` — ``(output, expected_output=None,
140
+ #: example=None)`` — returning a float in [0, 1] (or a dict with
141
+ #: ``surrogate_score``/``score``). Results ride alongside primary metrics as
142
+ #: ``surrogate_score`` and feed the backend's per-evaluator score tensor.
143
+ surrogate_evaluator: Callable[..., Any] | None = None
144
+ #: Optional explicit id for the surrogate descriptor's ``evaluator_id`` (the
145
+ #: key the backend tensor uses for this scorer). When omitted, the id is
146
+ #: derived from the callable's ``__name__``/class name (or ``"surrogate"`` for
147
+ #: anonymous scorers). A runtime ``optimize(surrogate_evaluator_name=...)``
148
+ #: overrides this decorator value.
149
+ surrogate_evaluator_name: str | None = None
135
150
 
136
151
 
137
152
  class InjectionOptions(BaseModel):
@@ -463,6 +478,67 @@ def _validate_custom_evaluator_signature(evaluator: Callable[..., Any]) -> None:
463
478
  )
464
479
 
465
480
 
481
+ def _validate_surrogate_evaluator_signature(surrogate: Callable[..., Any]) -> None:
482
+ """Validate a surrogate (pre-screen) evaluator at decoration time.
483
+
484
+ A surrogate SCORES already-captured outputs — it must accept the output as
485
+ its first argument (like ``scoring_function``), and must NOT look like a
486
+ func-executor (``func, config, example``) which would imply re-execution.
487
+
488
+ Raises:
489
+ ValidationError: If not callable, or the signature looks like a
490
+ func-executor / cannot accept the captured output.
491
+ """
492
+ if not callable(surrogate):
493
+ raise ValidationError("surrogate_evaluator must be callable")
494
+
495
+ if inspect.isfunction(surrogate) or inspect.ismethod(surrogate):
496
+ callable_to_check: Any = surrogate
497
+ else:
498
+ callable_to_check = getattr(surrogate, "__call__", surrogate) # noqa: B004
499
+
500
+ try:
501
+ sig = inspect.signature(callable_to_check)
502
+ except (ValueError, TypeError):
503
+ logger.debug(
504
+ "Could not inspect surrogate_evaluator signature, skipping validation"
505
+ )
506
+ return
507
+
508
+ params = list(sig.parameters.values())
509
+ if params and params[0].name == "self":
510
+ params = params[1:]
511
+
512
+ param_names = {p.name for p in params}
513
+ if {"func", "config"} <= param_names:
514
+ raise ValidationError(
515
+ "surrogate_evaluator scores already-captured outputs and must not "
516
+ "re-execute the decorated function.\n\n"
517
+ "Expected: surrogate_evaluator(output, expected_output=None, example=None) "
518
+ "-> float in [0, 1]\n"
519
+ f"Got: ({', '.join(p.name for p in params)})\n\n"
520
+ "This looks like a custom_evaluator (func, config, example). A "
521
+ "surrogate is a cheap scorer of outputs, like scoring_function."
522
+ )
523
+
524
+ accepts_output = any(
525
+ p.kind
526
+ in (
527
+ inspect.Parameter.POSITIONAL_ONLY,
528
+ inspect.Parameter.POSITIONAL_OR_KEYWORD,
529
+ inspect.Parameter.VAR_POSITIONAL,
530
+ inspect.Parameter.VAR_KEYWORD,
531
+ )
532
+ for p in params
533
+ )
534
+ if not accepts_output:
535
+ raise ValidationError(
536
+ "surrogate_evaluator must accept the captured output as its first "
537
+ "argument, e.g. surrogate_evaluator(output, expected_output=None, "
538
+ "example=None)."
539
+ )
540
+
541
+
466
542
  def _warn_context_mode_param_shadowing(
467
543
  func: Callable[..., Any],
468
544
  configuration_space: Any,
@@ -578,6 +654,7 @@ _OPTIMIZE_DEFAULTS: dict[str, Any] = {
578
654
  # Early stopping parameters
579
655
  "plateau_window": None, # Stop if no improvement for N trials
580
656
  "plateau_epsilon": None, # Improvement threshold for plateau detection
657
+ "semantic_saturation": None, # Opt-in semantic saturation stop condition config
581
658
  # Multi-agent configuration
582
659
  "agents": None, # Explicit agent definitions
583
660
  "agent_prefixes": None, # Prefix-based agent inference
@@ -656,6 +733,7 @@ _ALLOWED_RUNTIME_OVERRIDE_KEYS = frozenset(
656
733
  "metric_include_pruned",
657
734
  "plateau_window",
658
735
  "plateau_epsilon",
736
+ "semantic_saturation",
659
737
  "cost_limit",
660
738
  "cost_approved",
661
739
  "tie_breakers",
@@ -666,34 +744,28 @@ _ALLOWED_RUNTIME_OVERRIDE_KEYS = frozenset(
666
744
 
667
745
  def _warn_for_legacy_execution_options(keys: set[str]) -> None:
668
746
  """Emit coarse deprecation warnings for legacy execution option names."""
669
- import warnings
670
-
671
- if keys & {"execution_mode"}:
672
- warnings.warn(
673
- "execution_mode is deprecated as a public optimizer selector. Use "
674
- "algorithm='auto'|'grid'|'random' and offline=True for no egress.",
675
- DeprecationWarning,
676
- stacklevel=4,
677
- )
678
747
  if keys & {"privacy_enabled"}:
679
- warnings.warn(
748
+ _warn_deprecated_once(
749
+ "optimize.privacy_enabled",
680
750
  "privacy_enabled is deprecated and has no effect. Use offline=True "
681
- "for no egress.",
682
- DeprecationWarning,
751
+ "for no egress. This compatibility option will be removed in a "
752
+ "future major release.",
683
753
  stacklevel=4,
684
754
  )
685
755
  if keys & {"cloud_fallback_policy"}:
686
- warnings.warn(
756
+ _warn_deprecated_once(
757
+ "optimize.cloud_fallback_policy",
687
758
  "cloud_fallback_policy is deprecated and has no effect. Set "
688
- "TRAIGENT_REQUIRE_CLOUD=1 to disable fallback.",
689
- DeprecationWarning,
759
+ "TRAIGENT_REQUIRE_CLOUD=1 to disable fallback. This compatibility "
760
+ "option will be removed in a future major release.",
690
761
  stacklevel=4,
691
762
  )
692
763
  if keys & set(_LEGACY_HYBRID_API_OPTION_MAP):
693
- warnings.warn(
764
+ _warn_deprecated_once(
765
+ "optimize.hybrid_api_flat_options",
694
766
  "Flat hybrid_api_* optimize options are deprecated. Pass an "
695
- "ExternalServiceEvaluator or evaluator options dict instead.",
696
- DeprecationWarning,
767
+ "ExternalServiceEvaluator or evaluator options dict instead. This "
768
+ "compatibility option will be removed in a future major release.",
697
769
  stacklevel=4,
698
770
  )
699
771
 
@@ -1575,7 +1647,7 @@ def _runtime_execution_mode_for_policy(
1575
1647
  if external_evaluator is not None:
1576
1648
  return ExecutionMode.HYBRID_API
1577
1649
  if policy.intent is ExecutionIntent.LOCAL_ONLY:
1578
- return ExecutionMode.EDGE_ANALYTICS
1650
+ return ExecutionMode.LOCAL
1579
1651
  return ExecutionMode.HYBRID
1580
1652
 
1581
1653
 
@@ -1627,7 +1699,7 @@ def _resolve_actual_execution_mode(
1627
1699
  ) -> str:
1628
1700
  """Resolve legacy execution mode from provided or global config."""
1629
1701
  if (
1630
- execution_mode == ExecutionMode.EDGE_ANALYTICS.value
1702
+ execution_mode == ExecutionMode.LOCAL.value
1631
1703
  and "execution_mode" in _GLOBAL_CONFIG
1632
1704
  ):
1633
1705
  result: str = str(_GLOBAL_CONFIG["execution_mode"])
@@ -1644,7 +1716,7 @@ def _log_execution_mode_warnings(
1644
1716
  minimal_logging: bool,
1645
1717
  ) -> None:
1646
1718
  """Log warnings for incompatible runtime settings."""
1647
- if minimal_logging and execution_mode_enum is not ExecutionMode.EDGE_ANALYTICS:
1719
+ if minimal_logging and execution_mode_enum is not ExecutionMode.LOCAL:
1648
1720
  logger.warning(
1649
1721
  "minimal_logging is only effective for offline local runs. "
1650
1722
  "It will be ignored for the selected managed execution path."
@@ -2280,6 +2352,11 @@ def optimize( # NOSONAR(S107)
2280
2352
  Requires metric_name. Use for counters such as total tokens or
2281
2353
  cumulative latency, not hard money-spend control.
2282
2354
  metric_name: Metric summed by metric_limit.
2355
+ semantic_saturation: Opt-in stop condition config matching
2356
+ TraigentSchema
2357
+ ``optimization/semantic_saturation_schema.json``. When provided,
2358
+ the SDK evaluates per-example metric-vector churn and continuous
2359
+ objective improvement using sanitized diagnostics only.
2283
2360
 
2284
2361
  Additional controls:
2285
2362
  legacy: Adapter for the legacy decorator signature. Accepts either a
@@ -2289,8 +2366,9 @@ def optimize( # NOSONAR(S107)
2289
2366
  the decorator. The currently supported keys are:
2290
2367
  ``metric_limit``, ``metric_name``,
2291
2368
  ``metric_include_pruned``, ``plateau_window``,
2292
- ``plateau_epsilon``, ``cost_limit``, ``cost_approved``,
2293
- ``tie_breakers``, and ``tvl_parameter_agents``.
2369
+ ``plateau_epsilon``, ``semantic_saturation``, ``cost_limit``,
2370
+ ``cost_approved``, ``tie_breakers``, and
2371
+ ``tvl_parameter_agents``.
2294
2372
  Note: ``algorithm`` and ``max_trials`` are first-class
2295
2373
  parameters of this decorator (not in ``**runtime_overrides``);
2296
2374
  ``timeout`` is supported on
@@ -2639,6 +2717,20 @@ def optimize( # NOSONAR(S107)
2639
2717
  if custom_evaluator is not None:
2640
2718
  _validate_custom_evaluator_signature(custom_evaluator)
2641
2719
 
2720
+ # Optional surrogate (pre-screen) scorer from the evaluation bundle. Resolved
2721
+ # here (decorator source only) and validated early; stashed on the
2722
+ # OptimizedFunction below so the evaluator factory can attach it.
2723
+ surrogate_evaluator = (
2724
+ evaluation_bundle.surrogate_evaluator if evaluation_bundle is not None else None
2725
+ )
2726
+ surrogate_evaluator_name = (
2727
+ evaluation_bundle.surrogate_evaluator_name
2728
+ if evaluation_bundle is not None
2729
+ else None
2730
+ )
2731
+ if surrogate_evaluator is not None:
2732
+ _validate_surrogate_evaluator_signature(surrogate_evaluator)
2733
+
2642
2734
  (
2643
2735
  injection_mode,
2644
2736
  config_param,
@@ -2969,6 +3061,13 @@ def optimize( # NOSONAR(S107)
2969
3061
  optimized_func.external_service_evaluator = external_service_evaluator
2970
3062
  optimized_func.hybrid_api_options = hybrid_api_options
2971
3063
  optimized_func.offline = execution_policy.offline
3064
+ # Surrogate (pre-screen) scorer: read via getattr by the evaluator
3065
+ # factory (_create_effective_evaluator). Absent when unconfigured, so the
3066
+ # no-surrogate path stays byte-identical.
3067
+ if surrogate_evaluator is not None:
3068
+ optimized_func._surrogate_evaluator = surrogate_evaluator
3069
+ if isinstance(surrogate_evaluator_name, str) and surrogate_evaluator_name:
3070
+ optimized_func._surrogate_evaluator_name = surrogate_evaluator_name
2972
3071
 
2973
3072
  logger.info(
2974
3073
  f"Created optimizable function: {func.__name__} (experiment_name={effective_experiment_name!r})"