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.
- {traigent-0.17.0.dev0 → traigent-0.18.0}/CHANGELOG.md +2 -0
- {traigent-0.17.0.dev0/traigent.egg-info → traigent-0.18.0}/PKG-INFO +5 -5
- {traigent-0.17.0.dev0 → traigent-0.18.0}/README.md +3 -3
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/complete-function-specification.md +1 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/decorator-reference.md +1 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/GETTING_STARTED.md +12 -6
- {traigent-0.17.0.dev0 → traigent-0.18.0}/pyproject.toml +3 -2
- {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements.txt +1 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/__init__.py +22 -3
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/_version.py +0 -5
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/adapters/execution_adapter.py +16 -2
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/admin/config.py +5 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/agents/specification_generator.py +2 -2
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/__init__.py +2 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/example_insights.py +8 -3
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/next_steps.py +8 -3
- traigent-0.18.0/traigent/analytics/optimization_plan.py +216 -0
- traigent-0.18.0/traigent/analytics/render.py +349 -0
- traigent-0.18.0/traigent/analytics_mcp/__init__.py +12 -0
- traigent-0.18.0/traigent/analytics_mcp/server.py +280 -0
- traigent-0.18.0/traigent/analytics_mcp/tools.py +591 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/agent_inference.py +6 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/config_builder.py +9 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/constraint_builders.py +6 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/decorators.py +134 -15
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/functions.py +24 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/parameter_ranges.py +13 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/parameter_validator.py +8 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/strategy_presets.py +18 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/types.py +55 -9
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/auth_commands.py +19 -7
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/main.py +4 -0
- traigent-0.18.0/traigent/cli/plan_command.py +225 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/sync_commands.py +10 -0
- traigent-0.18.0/traigent/cloud/analytics_auth.py +73 -0
- traigent-0.18.0/traigent/cloud/analytics_client.py +572 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/api_operations.py +85 -7
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/auth.py +21 -72
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/backend_client.py +371 -28
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/backend_synchronizer.py +9 -4
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/benchmark_client.py +7 -2
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/client.py +354 -4
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/models.py +1 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/optimizer_client.py +5 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/password_auth_handler.py +3 -4
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/session_operations.py +18 -2
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/sync_manager.py +214 -25
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/token_manager.py +4 -6
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/trial_operations.py +24 -5
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/url_security.py +65 -16
- traigent-0.18.0/traigent/cloud/user_agent.py +18 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/backend_config.py +86 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/feature_flags.py +0 -20
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/project.py +6 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/providers.py +21 -12
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/types.py +44 -46
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/backend_session_manager.py +65 -18
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/config_state_manager.py +6 -4
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/cost_enforcement.py +52 -15
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/cost_estimator.py +28 -18
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/execution_policy_runtime.py +24 -3
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/mandatory_metrics.py +7 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/objectives.py +12 -5
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/optimization_pipeline.py +15 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/optimized_function.py +174 -14
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/orchestrator.py +217 -37
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/result_selection.py +30 -22
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/session_types.py +3 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/stop_condition_manager.py +1 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/trial_lifecycle.py +50 -6
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/trial_result_factory.py +74 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core_metrics/config.py +5 -1
- traigent-0.18.0/traigent/defaults.py +3 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluation/__init__.py +6 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluation/client.py +175 -17
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluation/config.py +5 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluation/dtos.py +177 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/base.py +116 -2
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/local.py +21 -17
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/metrics.py +4 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/metrics_tracker.py +68 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/quickstart/__main__.py +51 -13
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/quickstart/_env.py +8 -5
- traigent-0.18.0/traigent/examples/quickstart/publish_and_verify.py +179 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/http_transport.py +2 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/framework_override.py +141 -16
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langchain/handler.py +146 -17
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/observability/wandb.py +3 -27
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/observability/workflow_traces.py +8 -3
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/invokers/base.py +6 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/mcp/server.py +32 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/mcp/tools.py +31 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/ragas_metrics.py +2 -2
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/client.py +80 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/base.py +20 -34
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/batch_optimizers.py +39 -18
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/grid.py +52 -9
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/random.py +100 -21
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/registry.py +11 -29
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/projects/client.py +27 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/projects/config.py +5 -5
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/projects/dtos.py +1 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/prompts/client.py +30 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/prompts/config.py +5 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-debugging/SKILL.md +18 -4
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-debugging/references/error-reference.md +20 -5
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-quickstart/references/environment-variables.md +2 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-run-optimization/SKILL.md +18 -6
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-run-optimization/references/cost-management.md +20 -22
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/__init__.py +4 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/models.py +23 -3
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/promotion_gate.py +20 -6
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/spec_loader.py +462 -60
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/statistics.py +43 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/cost_calculator.py +141 -16
- traigent-0.18.0/traigent/utils/discrete_domains.py +232 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/exceptions.py +33 -4
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/insights.py +31 -9
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/objectives.py +14 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/optimization_logger.py +6 -1
- traigent-0.18.0/traigent/utils/pagination.py +89 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/results_table.py +12 -4
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/url_security.py +35 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/visualization/plots.py +5 -2
- {traigent-0.17.0.dev0 → traigent-0.18.0/traigent.egg-info}/PKG-INFO +5 -5
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent.egg-info/SOURCES.txt +13 -11
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent.egg-info/entry_points.txt +1 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent.egg-info/requires.txt +1 -1
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent_validation/validators.py +67 -9
- traigent-0.17.0.dev0/traigent/cloud/event_manager.py +0 -551
- traigent-0.17.0.dev0/traigent/config/seamless_injection.py +0 -143
- traigent-0.17.0.dev0/traigent/core/config_builder.py +0 -565
- traigent-0.17.0.dev0/traigent/core/llm_processor.py +0 -357
- traigent-0.17.0.dev0/traigent/core/refactoring_utils.py +0 -263
- traigent-0.17.0.dev0/traigent/integrations/batch_wrapper.py +0 -132
- traigent-0.17.0.dev0/traigent/integrations/llms/langchain/discovery.py +0 -311
- traigent-0.17.0.dev0/traigent/optimizers/service_registry.py +0 -924
- traigent-0.17.0.dev0/traigent/telemetry/__init__.py +0 -5
- traigent-0.17.0.dev0/traigent/utils/reproducibility.py +0 -604
- traigent-0.17.0.dev0/traigent/utils/user_prompts.py +0 -84
- {traigent-0.17.0.dev0 → traigent-0.18.0}/COMMERCIAL-LICENSE.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/CONTRIBUTING.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/CONTRIBUTOR-LICENSING.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/DISCLAIMER.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/LICENSE +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/MANIFEST.in +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/NOTICE +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/SECURITY.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/LOCAL_CI_GATE.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/README.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/SYNC_MAP.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/agent-skill.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/enterprise-beta-api.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/interactive_optimizer.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/telemetry.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/thread-pool-examples.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/ARCHITECTURE.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/cost-architecture-validation.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/execution_mode_follow_up.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/integrations-inventory.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/plugin_architecture.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/project-structure.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/architecture/stop_conditions.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/concepts/composite-knob-ir.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/concepts/composite-knobs.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/concepts/guided-generation.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/CONTRIBUTING.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/README.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/SECURITY.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/aikido_triage.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/code_review_instructions.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/contributing/test-quality-guide.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/demos/README.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/API_PATTERNS.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/LEARNING_ROADMAP.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/QUICK_REFERENCE.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/README.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/START_HERE.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/examples/TROUBLESHOOTING.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/fake-completion-tracking.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/feature_matrices/README.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/README.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/authentication.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/constraint-dsl.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/dataflow-detection.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/framework_override_enhanced_features.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/mcp-server.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/observability-spans.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/onboarding.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/prompt_management.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/recommendations.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/safety-gates.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/seamless_injection.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/strategy-presets.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/features/strict_metrics_nulls.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/README.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/installation.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/minimal-integration.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/getting-started/testing.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/evaluation.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/execution-mode-migration.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/execution-modes.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/js-bridge.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/llm_plugin_migration_guide.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/parallel-configuration.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/guides/secrets_management.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/hybrid-mode-api-contract.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/hybrid-mode-client-guide.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/operations/azure_openai.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/operations/bedrock.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/operations/google_gemini.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/security/trust_model.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/concepts/composite-knob-ir.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/concepts/composite-knobs.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/concepts/guided-generation.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/schema.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/tagging_tracking.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/traceability/taxonomy_reference.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/README.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/agent_optimization.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/choosing_optimization_model.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/configuration-spaces.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/evaluation_guide.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/injection_modes.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/interactive_optimization.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/smart_optimization.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/user-guide/tuned_variables.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/docs/walkthrough.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-all.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-analytics.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-bayesian.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-chroma.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-dev.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-hybrid.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-integrations.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-security.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/requirements/requirements-test.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/setup.cfg +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/admin/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/admin/client.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/admin/dtos.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/agents/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/agents/config_mapper.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/agents/executor.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/agents/platforms.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/anomaly.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/cost_optimization.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/intelligence.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/meta_learning.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/predictive.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/analytics/scheduling.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/config_space.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/constraints.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/safety.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/api/validation_protocol.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/detect_tvars_command.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/function_discovery.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/generate_config_command.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/hooks_commands.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/local_commands.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/next_steps_command.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/onboard_commands.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/optimization_validator.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/playbook_commands.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cli/validation_types.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/_aiohttp_compat.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/agent_dtos.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/api_key_manager.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/async_batch_transport.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/backend_bridges.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/backend_components.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/billing.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/cloud_operations.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/credential_manager.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/credential_resolver.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/dataset_converter.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/dtos.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/governance.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/integration_manager.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/privacy_operations.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/production_mcp_client.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/remote_guidance.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/resilient_client.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/service.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/session_types.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/sessions.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/subset_selection.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/trial_tracker.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/cloud/validators.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/api_keys.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/ast_transformer.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/context.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/models.yaml +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/parallel.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/runtime_injector.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config/tenant.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/agent_classifier.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/apply.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/catalog.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/llm_backend.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/pipeline.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/presets/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/presets/constraint_templates.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/presets/range_presets.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/recommendations.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/benchmarks.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/objectives.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/config_generator/types.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/best_config_runtime.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/cache_policy.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/ci_approval.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/constants.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/evaluator_wrapper.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/exception_handler.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/license.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/logger_facade.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/meta_types.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/metadata_helpers.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/metric_registry.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/metrics_aggregator.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/namespace.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/orchestrator_helpers.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/parallel_execution_manager.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/progress_manager.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/sample_budget.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/samplers/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/samplers/random_sampler.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/session_context.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/stat_significance.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/stop_conditions.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/trace_env.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/tracing.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/trial_context.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/types.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/types_ext.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/utils.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core/workflow_trace_manager.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core_metrics/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core_metrics/client.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/core_metrics/dtos.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/effectuation/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/effectuation/contracts.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/effectuation/strategies/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/effectuation/strategies/framework_param.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/effectuation/strategies/self_consistency.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/catalog_loader.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/dataset_registry.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/hybrid_api.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/evaluators/recommendations.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/_bootstrap.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/_demo.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/anthropic.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/aws.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/azure.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/gcp.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/gemini.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/groq.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/litellm_any.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/manifest.json +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/openai.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/openrouter.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/providers/qa_samples.jsonl +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/quickstart/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/examples/tutorial_bootstrap.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/backend_provider.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/example_synth.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/llm_provider.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/loop.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/models.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/options.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/prompt_rewriter.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/artifacts.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/buffer.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/document.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/edits.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/prompts.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/reflection.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/schedule.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/slow_update.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/splits.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/trainer.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/skill_train/trainer_result.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/generation/validators.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/guaranteed_modes.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hooks/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hooks/config.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hooks/installer.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hooks/validator.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/discovery.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/lifecycle.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/mcp_transport.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/protocol.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/hybrid/transport.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/activation.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/base.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/base_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/bedrock_client.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/config.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/dspy_adapter.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langchain/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langfuse/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langfuse/callback.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langfuse/client.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/langfuse/tracker.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/anthropic_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/base_llm_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/bedrock_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/cohere_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/gemini_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/huggingface_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/langchain/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/langchain/base.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/langchain_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/litellm_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/mistral_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/openai.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/llms/openai_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/mappings.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/base.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/cache.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/model_discovery/registry.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/observability/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/observability/mlflow.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/plugin_registry.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/providers.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/pydantic_ai/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/pydantic_ai/_types.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/pydantic_ai/handler.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/pydantic_ai/plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/discovery.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/message_coercion.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/mock_adapter.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/parameter_normalizer.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/response_wrapper.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/validation.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/utils/version_compat.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/vector_stores/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/vector_stores/base.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/integrations/wrappers.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/invokers/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/invokers/batch.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/invokers/local.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/invokers/streaming.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/adapters.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/bindings.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/canonical.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/cascade.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/certificates.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/composites.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/kinds.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/patterns.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/resolution.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/resolver.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/runtime.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/signals.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/knobs/telemetry.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/mcp/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/agent_metrics.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/content_features.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/deepeval_metrics.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/metrics/registry.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/agent_spans.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/config.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/decorators.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/observability/dtos.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/cloud_optimizer.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/interactive_optimizer.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/remote.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/remote_services.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/optimizers/results.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/loader.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/model.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/scaffold.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/staleness.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/playbook/validator.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/plugins/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/plugins/registry.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/projects/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/prompts/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/prompts/dtos.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/providers/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/providers/validation.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/py.typed +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/reporting/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/reporting/example_map.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/audit.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/helpers.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/mfa.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/models.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/oidc.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/saml.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/sms.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/auth/totp.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/config.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/credentials.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/crypto_utils.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/deployment.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/encryption.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/enterprise.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/headers.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/input_validation.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/jwt_validator.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/rate_limiter.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/redaction.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/session_manager.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/security/tenant.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-integrations/SKILL.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/storage/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/storage/local_storage.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/testing/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/traigent_client.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/traigent_integration.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/dataflow_strategy.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/detection_strategies.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/detection_types.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/detector.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/discovery.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/observation.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tuned_variables/py.typed +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/__main__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/objectives.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/options.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/registry.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/tvl/spec_validator.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/batch_optimizer_utils.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/batch_processing.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/callbacks.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/console.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/constraints.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/diagnostics.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/env_config.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/error_handler.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/example_id.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/file_versioning.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/function_identity.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/hashing.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/importance.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/incentives.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/langchain_interceptor.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/litellm_interceptor.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/llm_response_parsing.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/local_analytics.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/logging.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/multi_objective.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/numpy_compat.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/optimization_analyzer.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/persistence.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/retry.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/secure_path.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/utils/validation.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/visualization/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/wrapper/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/wrapper/errors.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/wrapper/server.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent/wrapper/service.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent.egg-info/dependency_links.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent.egg-info/top_level.txt +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent_validation/__init__.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent_validation/base.py +0 -0
- {traigent-0.17.0.dev0 → traigent-0.18.0}/traigent_validation/plugins.py +0 -0
- {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.
|
|
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
|
|
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)
|
|
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-
|
|
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
|
|
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)
|
|
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-
|
|
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
|
|
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"}
|
{traigent-0.17.0.dev0 → traigent-0.18.0}/docs/api-reference/complete-function-specification.md
RENAMED
|
@@ -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(
|
|
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=
|
|
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
|
-
|
|
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(
|
|
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.
|
|
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
|
|
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"
|
|
@@ -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``
|
|
68
|
-
# to the
|
|
69
|
-
if argv0.endswith(
|
|
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 =
|
|
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["
|
|
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
|
-
|
|
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
|
-
|
|
447
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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)
|