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