traigent 0.18.0.dev0__tar.gz → 0.18.1.dev1__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.18.0.dev0 → traigent-0.18.1.dev1}/CHANGELOG.md +2 -0
- {traigent-0.18.0.dev0/traigent.egg-info → traigent-0.18.1.dev1}/PKG-INFO +5 -5
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/README.md +3 -3
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/api-reference/complete-function-specification.md +1 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/api-reference/decorator-reference.md +1 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/getting-started/GETTING_STARTED.md +12 -6
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/pyproject.toml +2 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/requirements/requirements.txt +1 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/__init__.py +22 -3
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/_version.py +0 -5
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/adapters/execution_adapter.py +2 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/admin/config.py +5 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/agents/specification_generator.py +2 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/cost_optimization.py +3 -3
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/example_insights.py +5 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/next_steps.py +7 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/optimization_plan.py +5 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/predictive.py +6 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics_mcp/tools.py +144 -7
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/agent_inference.py +6 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/config_builder.py +9 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/constraint_builders.py +6 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/decorators.py +134 -15
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/functions.py +24 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/parameter_ranges.py +1 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/parameter_validator.py +8 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/strategy_presets.py +18 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/types.py +46 -9
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/auth_commands.py +19 -7
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/next_steps_command.py +6 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/analytics_client.py +9 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/api_key_manager.py +13 -13
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/api_operations.py +108 -7
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/auth.py +7 -64
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/backend_client.py +521 -31
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/backend_synchronizer.py +9 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/benchmark_client.py +7 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/client.py +372 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/models.py +3 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/optimizer_client.py +5 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/password_auth_handler.py +3 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/session_operations.py +19 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/sync_manager.py +10 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/token_manager.py +4 -6
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/trial_operations.py +4 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/url_security.py +65 -16
- traigent-0.18.1.dev1/traigent/cloud/user_agent.py +18 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/backend_config.py +24 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/feature_flags.py +0 -20
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/types.py +44 -46
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/presets/range_presets.py +96 -96
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/recommendations.py +2 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/backend_session_manager.py +71 -9
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/config_state_manager.py +6 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/cost_enforcement.py +40 -9
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/cost_estimator.py +28 -18
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/execution_policy_runtime.py +12 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/optimization_pipeline.py +15 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/optimized_function.py +101 -10
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/orchestrator.py +179 -17
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/result_selection.py +6 -6
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/sample_budget.py +1 -3
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/session_types.py +3 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/stop_condition_manager.py +1 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/trial_lifecycle.py +2 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/trial_result_factory.py +29 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core_metrics/config.py +5 -1
- traigent-0.18.1.dev1/traigent/defaults.py +3 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluation/__init__.py +6 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluation/client.py +175 -17
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluation/config.py +5 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluation/dtos.py +177 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/base.py +15 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/quickstart/__main__.py +2 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/quickstart/_env.py +8 -5
- traigent-0.18.1.dev1/traigent/examples/quickstart/publish_and_verify.py +179 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hybrid/http_transport.py +2 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/bedrock_client.py +11 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/framework_override.py +31 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/langfuse/__init__.py +18 -18
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/langfuse/client.py +18 -18
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/observability/wandb.py +3 -27
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/observability/workflow_traces.py +8 -3
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/plugin_registry.py +3 -3
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/pydantic_ai/__init__.py +4 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/pydantic_ai/handler.py +4 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/invokers/base.py +6 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/invokers/streaming.py +9 -9
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/cascade.py +1 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/metrics/ragas_metrics.py +2 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/observability/client.py +80 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/interactive_optimizer.py +6 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/registry.py +11 -29
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/projects/client.py +27 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/projects/config.py +5 -5
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/projects/dtos.py +1 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/prompts/client.py +30 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/prompts/config.py +5 -1
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/audit.py +1 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/auth/models.py +9 -9
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/auth/saml.py +5 -5
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-debugging/SKILL.md +18 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-debugging/references/error-reference.md +20 -5
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-quickstart/references/environment-variables.md +2 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-run-optimization/SKILL.md +18 -6
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-run-optimization/references/cost-management.md +20 -22
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tvl/__init__.py +4 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tvl/models.py +23 -3
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tvl/promotion_gate.py +20 -6
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tvl/spec_loader.py +462 -60
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tvl/statistics.py +43 -0
- traigent-0.18.1.dev1/traigent/utils/artifact_fingerprints.py +349 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/exceptions.py +33 -4
- traigent-0.18.1.dev1/traigent/utils/pagination.py +89 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/results_table.py +12 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/secure_path.py +1 -3
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/url_security.py +35 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/visualization/plots.py +5 -2
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1/traigent.egg-info}/PKG-INFO +5 -5
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent.egg-info/SOURCES.txt +5 -4
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent.egg-info/requires.txt +1 -1
- traigent-0.18.0.dev0/traigent/config/seamless_injection.py +0 -143
- traigent-0.18.0.dev0/traigent/integrations/batch_wrapper.py +0 -132
- traigent-0.18.0.dev0/traigent/utils/reproducibility.py +0 -604
- traigent-0.18.0.dev0/traigent/utils/user_prompts.py +0 -84
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/COMMERCIAL-LICENSE.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/CONTRIBUTING.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/CONTRIBUTOR-LICENSING.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/DISCLAIMER.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/LICENSE +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/MANIFEST.in +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/NOTICE +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/SECURITY.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/LOCAL_CI_GATE.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/README.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/SYNC_MAP.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/agent-skill.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/api-reference/enterprise-beta-api.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/api-reference/interactive_optimizer.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/api-reference/telemetry.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/api-reference/thread-pool-examples.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/architecture/ARCHITECTURE.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/architecture/cost-architecture-validation.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/architecture/execution_mode_follow_up.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/architecture/integrations-inventory.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/architecture/plugin_architecture.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/architecture/project-structure.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/architecture/stop_conditions.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/concepts/composite-knob-ir.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/concepts/composite-knobs.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/concepts/guided-generation.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/contributing/CONTRIBUTING.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/contributing/README.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/contributing/SECURITY.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/contributing/aikido_triage.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/contributing/code_review_instructions.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/contributing/test-quality-guide.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/demos/README.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/examples/API_PATTERNS.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/examples/LEARNING_ROADMAP.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/examples/QUICK_REFERENCE.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/examples/README.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/examples/START_HERE.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/examples/TROUBLESHOOTING.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/fake-completion-tracking.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/feature_matrices/README.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/README.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/authentication.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/constraint-dsl.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/dataflow-detection.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/framework_override_enhanced_features.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/mcp-server.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/observability-spans.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/onboarding.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/prompt_management.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/recommendations.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/safety-gates.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/seamless_injection.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/strategy-presets.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/features/strict_metrics_nulls.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/getting-started/README.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/getting-started/installation.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/getting-started/minimal-integration.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/getting-started/testing.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/guides/evaluation.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/guides/execution-mode-migration.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/guides/execution-modes.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/guides/js-bridge.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/guides/llm_plugin_migration_guide.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/guides/parallel-configuration.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/guides/secrets_management.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/hybrid-mode-api-contract.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/hybrid-mode-client-guide.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/operations/azure_openai.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/operations/bedrock.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/operations/google_gemini.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/security/trust_model.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/traceability/concepts/composite-knob-ir.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/traceability/concepts/composite-knobs.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/traceability/concepts/guided-generation.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/traceability/schema.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/traceability/tagging_tracking.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/traceability/taxonomy_reference.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/user-guide/README.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/user-guide/agent_optimization.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/user-guide/choosing_optimization_model.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/user-guide/configuration-spaces.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/user-guide/evaluation_guide.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/user-guide/injection_modes.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/user-guide/interactive_optimization.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/user-guide/smart_optimization.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/user-guide/tuned_variables.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/docs/walkthrough.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/requirements/requirements-all.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/requirements/requirements-analytics.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/requirements/requirements-bayesian.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/requirements/requirements-chroma.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/requirements/requirements-dev.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/requirements/requirements-hybrid.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/requirements/requirements-integrations.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/requirements/requirements-security.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/requirements/requirements-test.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/setup.cfg +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/admin/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/admin/client.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/admin/dtos.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/agents/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/agents/config_mapper.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/agents/executor.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/agents/platforms.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/anomaly.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/intelligence.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/meta_learning.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/render.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics/scheduling.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics_mcp/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/analytics_mcp/server.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/config_space.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/constraints.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/safety.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/api/validation_protocol.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/detect_tvars_command.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/function_discovery.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/generate_config_command.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/hooks_commands.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/local_commands.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/main.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/onboard_commands.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/optimization_validator.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/plan_command.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/playbook_commands.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/sync_commands.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cli/validation_types.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/_aiohttp_compat.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/agent_dtos.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/analytics_auth.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/async_batch_transport.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/backend_bridges.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/backend_components.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/billing.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/cloud_operations.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/credential_manager.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/credential_resolver.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/dataset_converter.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/dtos.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/governance.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/integration_manager.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/privacy_operations.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/production_mcp_client.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/remote_guidance.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/resilient_client.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/service.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/session_types.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/sessions.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/subset_selection.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/trial_tracker.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/cloud/validators.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/api_keys.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/ast_transformer.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/context.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/models.yaml +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/parallel.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/project.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/providers.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/runtime_injector.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config/tenant.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/agent_classifier.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/apply.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/catalog.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/llm_backend.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/pipeline.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/presets/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/presets/constraint_templates.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/subsystems/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/subsystems/benchmarks.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/subsystems/objectives.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/config_generator/types.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/best_config_runtime.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/cache_policy.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/ci_approval.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/constants.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/evaluator_wrapper.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/exception_handler.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/license.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/logger_facade.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/mandatory_metrics.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/meta_types.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/metadata_helpers.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/metric_registry.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/metrics_aggregator.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/namespace.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/objectives.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/orchestrator_helpers.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/parallel_execution_manager.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/progress_manager.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/samplers/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/samplers/random_sampler.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/session_context.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/stat_significance.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/stop_conditions.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/trace_env.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/tracing.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/trial_context.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/types.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/types_ext.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/utils.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core/workflow_trace_manager.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core_metrics/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core_metrics/client.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/core_metrics/dtos.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/effectuation/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/effectuation/contracts.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/effectuation/strategies/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/effectuation/strategies/framework_param.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/effectuation/strategies/self_consistency.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/catalog_loader.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/dataset_registry.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/hybrid_api.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/local.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/metrics.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/metrics_tracker.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/evaluators/recommendations.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/_bootstrap.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/_demo.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/anthropic.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/aws.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/azure.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/gcp.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/gemini.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/groq.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/litellm_any.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/manifest.json +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/openai.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/openrouter.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/providers/qa_samples.jsonl +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/quickstart/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/examples/tutorial_bootstrap.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/backend_provider.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/example_synth.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/llm_provider.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/loop.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/models.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/options.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/prompt_rewriter.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/artifacts.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/buffer.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/document.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/edits.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/prompts.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/reflection.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/schedule.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/slow_update.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/splits.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/trainer.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/skill_train/trainer_result.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/generation/validators.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/guaranteed_modes.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hooks/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hooks/config.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hooks/installer.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hooks/validator.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hybrid/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hybrid/discovery.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hybrid/lifecycle.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hybrid/mcp_transport.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hybrid/protocol.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/hybrid/transport.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/activation.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/base.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/base_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/config.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/dspy_adapter.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/langchain/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/langchain/handler.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/langfuse/callback.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/langfuse/tracker.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/anthropic_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/base_llm_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/bedrock_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/cohere_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/gemini_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/huggingface_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/langchain/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/langchain/base.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/langchain_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/litellm_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/mistral_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/openai.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/llms/openai_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/mappings.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/model_discovery/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/model_discovery/base.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/model_discovery/cache.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/model_discovery/registry.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/observability/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/observability/mlflow.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/providers.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/pydantic_ai/_types.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/pydantic_ai/plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/utils/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/utils/discovery.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/utils/message_coercion.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/utils/mock_adapter.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/utils/parameter_normalizer.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/utils/response_wrapper.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/utils/validation.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/utils/version_compat.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/vector_stores/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/vector_stores/base.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/integrations/wrappers.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/invokers/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/invokers/batch.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/invokers/local.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/adapters.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/bindings.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/canonical.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/certificates.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/composites.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/kinds.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/patterns.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/resolution.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/resolver.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/runtime.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/signals.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/knobs/telemetry.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/mcp/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/mcp/server.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/mcp/tools.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/metrics/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/metrics/agent_metrics.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/metrics/content_features.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/metrics/deepeval_metrics.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/metrics/registry.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/observability/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/observability/agent_spans.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/observability/config.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/observability/decorators.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/observability/dtos.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/base.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/batch_optimizers.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/cloud_optimizer.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/grid.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/random.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/remote.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/remote_services.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/optimizers/results.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/playbook/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/playbook/loader.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/playbook/model.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/playbook/scaffold.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/playbook/staleness.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/playbook/validator.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/plugins/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/plugins/registry.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/projects/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/prompts/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/prompts/dtos.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/providers/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/providers/validation.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/py.typed +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/reporting/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/reporting/example_map.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/auth/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/auth/helpers.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/auth/mfa.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/auth/oidc.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/auth/sms.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/auth/totp.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/config.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/credentials.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/crypto_utils.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/deployment.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/encryption.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/enterprise.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/headers.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/input_validation.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/jwt_validator.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/rate_limiter.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/redaction.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/session_manager.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/security/tenant.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-integrations/SKILL.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/storage/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/storage/local_storage.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/testing/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/traigent_client.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/traigent_integration.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tuned_variables/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tuned_variables/dataflow_strategy.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tuned_variables/detection_strategies.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tuned_variables/detection_types.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tuned_variables/detector.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tuned_variables/discovery.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tuned_variables/observation.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tuned_variables/py.typed +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tvl/__main__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tvl/objectives.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tvl/options.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tvl/registry.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/tvl/spec_validator.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/batch_optimizer_utils.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/batch_processing.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/callbacks.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/console.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/constraints.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/cost_calculator.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/diagnostics.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/discrete_domains.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/env_config.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/error_handler.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/example_id.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/file_versioning.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/function_identity.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/hashing.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/importance.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/incentives.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/insights.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/langchain_interceptor.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/litellm_interceptor.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/llm_response_parsing.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/local_analytics.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/logging.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/multi_objective.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/numpy_compat.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/objectives.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/optimization_analyzer.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/optimization_logger.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/persistence.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/retry.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/utils/validation.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/visualization/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/wrapper/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/wrapper/errors.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/wrapper/server.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent/wrapper/service.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent.egg-info/dependency_links.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent.egg-info/entry_points.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent.egg-info/top_level.txt +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent_validation/__init__.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent_validation/base.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent_validation/plugins.py +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent_validation/py.typed +0 -0
- {traigent-0.18.0.dev0 → traigent-0.18.1.dev1}/traigent_validation/validators.py +0 -0
|
@@ -6,6 +6,8 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.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.18.
|
|
3
|
+
Version: 0.18.1.dev1
|
|
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.18.0.dev0 → traigent-0.18.1.dev1}/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.18.
|
|
7
|
+
version = "0.18.1.dev1"
|
|
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
|
|
@@ -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.
|
|
@@ -246,7 +246,6 @@ class LocalExecutionAdapter(ExecutionAdapter):
|
|
|
246
246
|
|
|
247
247
|
else:
|
|
248
248
|
# Unknown evaluation type
|
|
249
|
-
result["correct"] = False
|
|
250
249
|
result["success"] = False
|
|
251
250
|
result["unknown_eval_type"] = eval_type
|
|
252
251
|
result["error"] = (
|
|
@@ -256,7 +255,8 @@ class LocalExecutionAdapter(ExecutionAdapter):
|
|
|
256
255
|
)
|
|
257
256
|
logger.error(
|
|
258
257
|
"Unsupported evaluation_type %r for LocalExecutionAdapter; marking "
|
|
259
|
-
"example as failed.
|
|
258
|
+
"example as failed and excluding it from accuracy. "
|
|
259
|
+
"trial_id=%s example_index=%s",
|
|
260
260
|
eval_type,
|
|
261
261
|
trial_id or "<unknown>",
|
|
262
262
|
example_index if example_index is not None else "<unknown>",
|
|
@@ -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
|
|
@@ -481,9 +481,9 @@ class CostOptimizationAI:
|
|
|
481
481
|
savings = action.estimated_savings_absolute * simulation_days
|
|
482
482
|
simulation["total_savings"] += savings
|
|
483
483
|
simulation["total_estimated_savings"] += savings
|
|
484
|
-
simulation["savings_breakdown"][
|
|
485
|
-
|
|
486
|
-
|
|
484
|
+
simulation["savings_breakdown"][action.resource_type.value] = (
|
|
485
|
+
savings
|
|
486
|
+
)
|
|
487
487
|
else:
|
|
488
488
|
# Dictionary format
|
|
489
489
|
if isinstance(actions, dict):
|
|
@@ -31,6 +31,7 @@ import time
|
|
|
31
31
|
from typing import Any, cast
|
|
32
32
|
|
|
33
33
|
from traigent.cloud.auth import _build_api_key_auth_headers
|
|
34
|
+
from traigent.cloud.url_security import validate_cloud_base_url
|
|
34
35
|
from traigent.config.backend_config import DEFAULT_LOCAL_URL
|
|
35
36
|
from traigent.utils.logging import get_logger
|
|
36
37
|
|
|
@@ -73,7 +74,10 @@ class ExampleInsightsClient:
|
|
|
73
74
|
"Install with: pip install traigent[analytics]"
|
|
74
75
|
)
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
backend_url = backend_url.rstrip("/")
|
|
78
|
+
self.backend_url = validate_cloud_base_url(
|
|
79
|
+
backend_url, purpose="analytics request"
|
|
80
|
+
)
|
|
77
81
|
self.timeout = timeout
|
|
78
82
|
|
|
79
83
|
# Import here to avoid circular dependency
|
|
@@ -24,6 +24,7 @@ from __future__ import annotations
|
|
|
24
24
|
from typing import Any, cast
|
|
25
25
|
|
|
26
26
|
from traigent.cloud.auth import _build_api_key_auth_headers
|
|
27
|
+
from traigent.cloud.url_security import validate_cloud_base_url
|
|
27
28
|
from traigent.config.backend_config import DEFAULT_LOCAL_URL
|
|
28
29
|
from traigent.utils.logging import get_logger
|
|
29
30
|
|
|
@@ -77,7 +78,10 @@ class NextStepsClient:
|
|
|
77
78
|
"Install with: pip install traigent[analytics]"
|
|
78
79
|
)
|
|
79
80
|
|
|
80
|
-
|
|
81
|
+
backend_url = backend_url.rstrip("/")
|
|
82
|
+
self.backend_url = validate_cloud_base_url(
|
|
83
|
+
backend_url, purpose="analytics request"
|
|
84
|
+
)
|
|
81
85
|
self.timeout = timeout
|
|
82
86
|
|
|
83
87
|
# Import here to avoid circular dependency
|
|
@@ -141,7 +145,8 @@ class NextStepsClient:
|
|
|
141
145
|
Returns:
|
|
142
146
|
Dict with the backend next-steps contract payload. The response
|
|
143
147
|
includes a ``caveat`` field that callers should display near the
|
|
144
|
-
recommendations.
|
|
148
|
+
recommendations. If the backend includes the optional opaque
|
|
149
|
+
``posture`` block, it is returned unchanged.
|
|
145
150
|
|
|
146
151
|
Raises:
|
|
147
152
|
httpx.HTTPError: If request fails. A 404 response is raised as
|
|
@@ -13,6 +13,7 @@ from __future__ import annotations
|
|
|
13
13
|
from collections.abc import Sequence
|
|
14
14
|
from typing import Any, cast
|
|
15
15
|
|
|
16
|
+
from traigent.cloud.url_security import validate_cloud_base_url
|
|
16
17
|
from traigent.config.backend_config import DEFAULT_LOCAL_URL
|
|
17
18
|
from traigent.utils.logging import get_logger
|
|
18
19
|
|
|
@@ -78,7 +79,10 @@ class OptimizationPlanClient:
|
|
|
78
79
|
"Install with: pip install traigent[hybrid]"
|
|
79
80
|
)
|
|
80
81
|
|
|
81
|
-
|
|
82
|
+
backend_url = backend_url.rstrip("/")
|
|
83
|
+
self.backend_url = validate_cloud_base_url(
|
|
84
|
+
backend_url, purpose="optimization plan request"
|
|
85
|
+
)
|
|
82
86
|
self.timeout = timeout
|
|
83
87
|
|
|
84
88
|
# Import here to avoid circular dependency
|
|
@@ -206,7 +206,9 @@ class CostForecaster:
|
|
|
206
206
|
alert_level = (
|
|
207
207
|
"critical"
|
|
208
208
|
if projected_overage > budget_limit * 0.1
|
|
209
|
-
else "warning"
|
|
209
|
+
else "warning"
|
|
210
|
+
if projected_overage > 0
|
|
211
|
+
else "none"
|
|
210
212
|
)
|
|
211
213
|
|
|
212
214
|
return {
|
|
@@ -455,7 +457,9 @@ class CostForecaster:
|
|
|
455
457
|
"trend": (
|
|
456
458
|
"improving"
|
|
457
459
|
if efficiency_change < 0
|
|
458
|
-
else "degrading"
|
|
460
|
+
else "degrading"
|
|
461
|
+
if efficiency_change > 0
|
|
462
|
+
else "stable"
|
|
459
463
|
),
|
|
460
464
|
}
|
|
461
465
|
|
|
@@ -28,6 +28,15 @@ from typing import Any, cast
|
|
|
28
28
|
from traigent.cloud.analytics_client import normalize_decision_intent
|
|
29
29
|
from traigent.utils.logging import get_logger
|
|
30
30
|
|
|
31
|
+
try:
|
|
32
|
+
import httpx
|
|
33
|
+
except ImportError: # pragma: no cover - BackendAnalyticsClient reports this first
|
|
34
|
+
_HTTP_STATUS_ERRORS: tuple[type[BaseException], ...] = ()
|
|
35
|
+
_HTTP_TRANSPORT_ERRORS: tuple[type[BaseException], ...] = ()
|
|
36
|
+
else:
|
|
37
|
+
_HTTP_STATUS_ERRORS = (httpx.HTTPStatusError,)
|
|
38
|
+
_HTTP_TRANSPORT_ERRORS = (httpx.TransportError,)
|
|
39
|
+
|
|
31
40
|
logger = get_logger(__name__)
|
|
32
41
|
|
|
33
42
|
ANALYTICS_TOOL_NAMES: tuple[str, ...] = (
|
|
@@ -48,14 +57,29 @@ ANALYTICS_TOOL_NAMES: tuple[str, ...] = (
|
|
|
48
57
|
_SUPPORTED_CHART_KINDS: tuple[str, ...] = ("run_pareto", "run_correlations")
|
|
49
58
|
|
|
50
59
|
|
|
51
|
-
def _failure(
|
|
52
|
-
|
|
60
|
+
def _failure(
|
|
61
|
+
message: str,
|
|
62
|
+
*,
|
|
63
|
+
code: str = "invalid_input",
|
|
64
|
+
http_status: int | None = None,
|
|
65
|
+
backend_url: str | None = None,
|
|
66
|
+
) -> dict[str, Any]:
|
|
67
|
+
return {
|
|
68
|
+
"ok": False,
|
|
69
|
+
"code": code,
|
|
70
|
+
"message": message,
|
|
71
|
+
"http_status": http_status,
|
|
72
|
+
"backend_url": (
|
|
73
|
+
backend_url if backend_url is not None else _resolved_backend_url()
|
|
74
|
+
),
|
|
75
|
+
}
|
|
53
76
|
|
|
54
77
|
|
|
55
|
-
def _auth_failure() -> dict[str, Any]:
|
|
78
|
+
def _auth_failure(*, backend_url: str | None = None) -> dict[str, Any]:
|
|
56
79
|
return _failure(
|
|
57
80
|
"Analytics authentication failed; configure valid Traigent credentials.",
|
|
58
81
|
code="authentication_failed",
|
|
82
|
+
backend_url=backend_url,
|
|
59
83
|
)
|
|
60
84
|
|
|
61
85
|
|
|
@@ -80,7 +104,106 @@ async def _new_analytics_client() -> Any:
|
|
|
80
104
|
from traigent.cloud.analytics_client import BackendAnalyticsClient
|
|
81
105
|
|
|
82
106
|
credential_kwargs = await resolve_analytics_read_client_credentials()
|
|
83
|
-
return BackendAnalyticsClient(
|
|
107
|
+
return BackendAnalyticsClient(
|
|
108
|
+
api_key=credential_kwargs.get("api_key"),
|
|
109
|
+
jwt_token=credential_kwargs.get("jwt_token"),
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _resolved_backend_url(client: Any | None = None) -> str | None:
|
|
114
|
+
candidate = getattr(client, "backend_url", None)
|
|
115
|
+
if not candidate:
|
|
116
|
+
try:
|
|
117
|
+
from traigent.config.backend_config import BackendConfig
|
|
118
|
+
|
|
119
|
+
candidate = BackendConfig.get_backend_url()
|
|
120
|
+
except Exception: # pragma: no cover - defensive structured fallback
|
|
121
|
+
return None
|
|
122
|
+
return _sanitize_url(str(candidate))
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def _response_payload(response: Any | None) -> Any:
|
|
126
|
+
if response is None:
|
|
127
|
+
return None
|
|
128
|
+
try:
|
|
129
|
+
return response.json()
|
|
130
|
+
except Exception:
|
|
131
|
+
return None
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def _iter_payload_text(payload: Any) -> Any:
|
|
135
|
+
if isinstance(payload, dict):
|
|
136
|
+
for value in payload.values():
|
|
137
|
+
yield from _iter_payload_text(value)
|
|
138
|
+
elif isinstance(payload, list):
|
|
139
|
+
for value in payload:
|
|
140
|
+
yield from _iter_payload_text(value)
|
|
141
|
+
elif isinstance(payload, str):
|
|
142
|
+
yield payload
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def _signals_not_ready(response: Any | None) -> bool:
|
|
146
|
+
payload = _response_payload(response)
|
|
147
|
+
for text in _iter_payload_text(payload):
|
|
148
|
+
normalized = text.lower().replace("_", " ").replace("-", " ")
|
|
149
|
+
if (
|
|
150
|
+
"not ready" in normalized
|
|
151
|
+
or "not yet computed" in normalized
|
|
152
|
+
or "not computed" in normalized
|
|
153
|
+
or "not yet available" in normalized
|
|
154
|
+
or "compute to trigger" in normalized
|
|
155
|
+
or "analytics pending" in normalized
|
|
156
|
+
):
|
|
157
|
+
return True
|
|
158
|
+
return False
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def _http_status_failure(
|
|
162
|
+
exc: BaseException,
|
|
163
|
+
*,
|
|
164
|
+
what: str,
|
|
165
|
+
backend_url: str | None,
|
|
166
|
+
) -> dict[str, Any]:
|
|
167
|
+
response = getattr(exc, "response", None)
|
|
168
|
+
status = getattr(response, "status_code", None)
|
|
169
|
+
status = int(status) if isinstance(status, int) else None
|
|
170
|
+
|
|
171
|
+
if status == 401:
|
|
172
|
+
return _failure(
|
|
173
|
+
"Analytics authentication failed; configure valid Traigent credentials.",
|
|
174
|
+
code="authentication_failed",
|
|
175
|
+
http_status=status,
|
|
176
|
+
backend_url=backend_url,
|
|
177
|
+
)
|
|
178
|
+
if status == 403:
|
|
179
|
+
return _failure(
|
|
180
|
+
"Analytics request was forbidden by the backend; check project permissions "
|
|
181
|
+
"or whether a WAF/Cloudflare rule is blocking the request.",
|
|
182
|
+
code="forbidden",
|
|
183
|
+
http_status=status,
|
|
184
|
+
backend_url=backend_url,
|
|
185
|
+
)
|
|
186
|
+
if status == 404:
|
|
187
|
+
if _signals_not_ready(response):
|
|
188
|
+
return _failure(
|
|
189
|
+
f"The backend found the run, but {what} analytics are not ready yet.",
|
|
190
|
+
code="not_ready",
|
|
191
|
+
http_status=status,
|
|
192
|
+
backend_url=backend_url,
|
|
193
|
+
)
|
|
194
|
+
return _failure(
|
|
195
|
+
f"The requested {what} was not found on the configured backend.",
|
|
196
|
+
code="not_found",
|
|
197
|
+
http_status=status,
|
|
198
|
+
backend_url=backend_url,
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
return _failure(
|
|
202
|
+
f"Could not retrieve {what} from the backend.",
|
|
203
|
+
code="backend_unavailable",
|
|
204
|
+
http_status=status,
|
|
205
|
+
backend_url=backend_url,
|
|
206
|
+
)
|
|
84
207
|
|
|
85
208
|
|
|
86
209
|
async def _call_backend(coro_factory: Any, *, what: str) -> dict[str, Any]:
|
|
@@ -94,6 +217,7 @@ async def _call_backend(coro_factory: Any, *, what: str) -> dict[str, Any]:
|
|
|
94
217
|
from traigent.cloud.analytics_client import AnalyticsClientError
|
|
95
218
|
from traigent.cloud.auth import InvalidCredentialsError
|
|
96
219
|
|
|
220
|
+
client = None
|
|
97
221
|
try:
|
|
98
222
|
client = await _new_analytics_client()
|
|
99
223
|
except ImportError as exc:
|
|
@@ -102,6 +226,7 @@ async def _call_backend(coro_factory: Any, *, what: str) -> dict[str, Any]:
|
|
|
102
226
|
logger.debug("Analytics %s authentication failed: %s", what, exc)
|
|
103
227
|
return _auth_failure()
|
|
104
228
|
|
|
229
|
+
backend_url = _resolved_backend_url(client)
|
|
105
230
|
try:
|
|
106
231
|
async with client as reader:
|
|
107
232
|
data = await coro_factory(reader)
|
|
@@ -109,10 +234,21 @@ async def _call_backend(coro_factory: Any, *, what: str) -> dict[str, Any]:
|
|
|
109
234
|
return _failure(
|
|
110
235
|
f"The backend returned a malformed {what} response.",
|
|
111
236
|
code="malformed_response",
|
|
237
|
+
backend_url=backend_url,
|
|
112
238
|
)
|
|
113
239
|
except InvalidCredentialsError as exc:
|
|
114
240
|
logger.debug("Analytics %s authentication failed: %s", what, exc)
|
|
115
|
-
return _auth_failure()
|
|
241
|
+
return _auth_failure(backend_url=backend_url)
|
|
242
|
+
except _HTTP_STATUS_ERRORS as exc:
|
|
243
|
+
logger.debug("Analytics %s request returned HTTP status", what, exc_info=True)
|
|
244
|
+
return _http_status_failure(exc, what=what, backend_url=backend_url)
|
|
245
|
+
except _HTTP_TRANSPORT_ERRORS as exc:
|
|
246
|
+
logger.debug("Analytics %s transport failed: %s", what, exc)
|
|
247
|
+
return _failure(
|
|
248
|
+
f"Could not retrieve {what} from the backend.",
|
|
249
|
+
code="backend_unavailable",
|
|
250
|
+
backend_url=backend_url,
|
|
251
|
+
)
|
|
116
252
|
except Exception as exc: # noqa: BLE001 - normalize all transport failures
|
|
117
253
|
# Do not surface raw exception text: it can contain the backend URL,
|
|
118
254
|
# auth header echoes, or response bodies. Log at debug for operators.
|
|
@@ -120,6 +256,7 @@ async def _call_backend(coro_factory: Any, *, what: str) -> dict[str, Any]:
|
|
|
120
256
|
return _failure(
|
|
121
257
|
f"Could not retrieve {what} from the backend.",
|
|
122
258
|
code="backend_unavailable",
|
|
259
|
+
backend_url=backend_url,
|
|
123
260
|
)
|
|
124
261
|
|
|
125
262
|
return {"ok": True, what.replace(" ", "_"): data}
|
|
@@ -161,7 +298,7 @@ async def health_check_tool() -> dict[str, Any]:
|
|
|
161
298
|
|
|
162
299
|
|
|
163
300
|
def _sanitize_url(url: str | None) -> str | None:
|
|
164
|
-
"""Strip
|
|
301
|
+
"""Strip userinfo and query material from a URL before returning it."""
|
|
165
302
|
if not url:
|
|
166
303
|
return url
|
|
167
304
|
from urllib.parse import urlsplit, urlunsplit
|
|
@@ -175,7 +312,7 @@ def _sanitize_url(url: str | None) -> str | None:
|
|
|
175
312
|
if parts.port is not None:
|
|
176
313
|
host = f"{host}:{parts.port}"
|
|
177
314
|
parts = parts._replace(netloc=host)
|
|
178
|
-
return urlunsplit(parts)
|
|
315
|
+
return urlunsplit(parts._replace(query="", fragment=""))
|
|
179
316
|
|
|
180
317
|
|
|
181
318
|
def _mask_api_key(api_key: str | None) -> dict[str, Any]:
|
|
@@ -36,6 +36,12 @@ if TYPE_CHECKING:
|
|
|
36
36
|
logger = get_logger(__name__)
|
|
37
37
|
|
|
38
38
|
|
|
39
|
+
__all__ = [
|
|
40
|
+
"build_agent_configuration",
|
|
41
|
+
"extract_parameter_agents",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
|
|
39
45
|
def build_agent_configuration(
|
|
40
46
|
configuration_space: dict[str, Any],
|
|
41
47
|
explicit_agents: dict[str, AgentDefinition] | None = None,
|