traigent 0.18.1.dev3__tar.gz → 0.18.1.dev4__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.1.dev3/traigent.egg-info → traigent-0.18.1.dev4}/PKG-INFO +1 -1
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/pyproject.toml +1 -1
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/analytics_client.py +77 -4
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/service.py +34 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/session_operations.py +251 -37
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/api_keys.py +11 -2
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/backend_session_manager.py +13 -3
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/session_types.py +24 -1
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/framework_override.py +67 -19
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/huggingface_plugin.py +6 -3
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/mappings.py +132 -7
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/providers.py +39 -3
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/providers/validation.py +139 -16
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tvl/models.py +4 -3
- traigent-0.18.1.dev4/traigent/tvl/promotion_gate.py +731 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/env_config.py +13 -4
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4/traigent.egg-info}/PKG-INFO +1 -1
- traigent-0.18.1.dev3/traigent/tvl/promotion_gate.py +0 -530
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/CHANGELOG.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/COMMERCIAL-LICENSE.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/CONTRIBUTING.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/CONTRIBUTOR-LICENSING.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/DISCLAIMER.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/LICENSE +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/MANIFEST.in +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/NOTICE +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/README.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/SECURITY.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/LOCAL_CI_GATE.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/README.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/SYNC_MAP.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/agent-skill.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/api-reference/complete-function-specification.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/api-reference/decorator-reference.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/api-reference/enterprise-beta-api.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/api-reference/interactive_optimizer.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/api-reference/telemetry.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/api-reference/thread-pool-examples.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/architecture/ARCHITECTURE.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/architecture/cost-architecture-validation.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/architecture/execution_mode_follow_up.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/architecture/integrations-inventory.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/architecture/plugin_architecture.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/architecture/project-structure.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/architecture/stop_conditions.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/concepts/composite-knob-ir.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/concepts/composite-knobs.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/concepts/guided-generation.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/contributing/CONTRIBUTING.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/contributing/README.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/contributing/SECURITY.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/contributing/aikido_triage.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/contributing/code_review_instructions.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/contributing/test-quality-guide.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/demos/README.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/examples/API_PATTERNS.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/examples/LEARNING_ROADMAP.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/examples/QUICK_REFERENCE.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/examples/README.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/examples/START_HERE.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/examples/TROUBLESHOOTING.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/fake-completion-tracking.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/feature_matrices/README.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/README.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/authentication.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/constraint-dsl.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/dataflow-detection.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/framework_override_enhanced_features.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/mcp-server.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/observability-spans.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/onboarding.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/prompt_management.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/recommendations.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/safety-gates.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/seamless_injection.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/strategy-presets.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/features/strict_metrics_nulls.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/getting-started/GETTING_STARTED.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/getting-started/README.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/getting-started/installation.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/getting-started/minimal-integration.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/getting-started/testing.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/guides/evaluation.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/guides/execution-mode-migration.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/guides/execution-modes.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/guides/js-bridge.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/guides/llm_plugin_migration_guide.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/guides/parallel-configuration.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/guides/secrets_management.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/hybrid-mode-api-contract.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/hybrid-mode-client-guide.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/operations/azure_openai.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/operations/bedrock.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/operations/google_gemini.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/security/trust_model.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/traceability/concepts/composite-knob-ir.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/traceability/concepts/composite-knobs.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/traceability/concepts/guided-generation.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/traceability/schema.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/traceability/tagging_tracking.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/traceability/taxonomy_reference.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/user-guide/README.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/user-guide/agent_optimization.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/user-guide/choosing_optimization_model.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/user-guide/configuration-spaces.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/user-guide/evaluation_guide.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/user-guide/injection_modes.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/user-guide/interactive_optimization.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/user-guide/smart_optimization.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/user-guide/tuned_variables.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/docs/walkthrough.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/requirements/requirements-all.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/requirements/requirements-analytics.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/requirements/requirements-bayesian.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/requirements/requirements-chroma.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/requirements/requirements-dev.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/requirements/requirements-hybrid.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/requirements/requirements-integrations.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/requirements/requirements-security.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/requirements/requirements-test.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/requirements/requirements.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/setup.cfg +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/_version.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/adapters/execution_adapter.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/admin/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/admin/client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/admin/config.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/admin/dtos.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/agents/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/agents/config_mapper.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/agents/executor.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/agents/platforms.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/agents/specification_generator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/anomaly.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/cost_optimization.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/example_insights.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/intelligence.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/meta_learning.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/next_steps.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/optimization_plan.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/predictive.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/render.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics/scheduling.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics_mcp/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics_mcp/server.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/analytics_mcp/tools.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/agent_inference.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/config_builder.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/config_space.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/constraint_builders.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/constraints.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/decorators.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/functions.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/parameter_ranges.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/parameter_validator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/safety.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/strategy_presets.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/types.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/api/validation_protocol.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/auth_commands.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/detect_tvars_command.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/function_discovery.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/generate_config_command.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/hooks_commands.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/local_commands.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/main.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/next_steps_command.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/onboard_commands.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/optimization_validator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/plan_command.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/playbook_commands.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/sync_commands.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cli/validation_types.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/_aiohttp_compat.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/agent_dtos.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/analytics_auth.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/api_key_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/api_operations.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/async_batch_transport.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/auth.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/backend_bridges.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/backend_client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/backend_components.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/backend_synchronizer.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/benchmark_client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/billing.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/cloud_operations.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/credential_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/credential_resolver.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/dataset_converter.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/dtos.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/governance.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/integration_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/models.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/optimizer_client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/password_auth_handler.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/privacy_operations.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/production_mcp_client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/remote_guidance.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/resilient_client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/session_types.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/sessions.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/subset_selection.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/sync_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/token_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/trial_operations.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/trial_tracker.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/url_security.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/user_agent.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/cloud/validators.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/ast_transformer.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/backend_config.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/context.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/feature_flags.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/models.yaml +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/parallel.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/project.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/providers.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/runtime_injector.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/tenant.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config/types.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/agent_classifier.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/apply.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/catalog.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/llm_backend.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/pipeline.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/presets/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/presets/constraint_templates.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/presets/range_presets.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/recommendations.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/subsystems/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/subsystems/benchmarks.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/subsystems/objectives.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/config_generator/types.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/best_config_runtime.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/cache_policy.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/ci_approval.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/config_state_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/constants.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/cost_enforcement.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/cost_estimator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/evaluator_wrapper.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/exception_handler.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/execution_policy_runtime.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/license.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/logger_facade.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/mandatory_metrics.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/meta_types.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/metadata_helpers.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/metric_registry.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/metrics_aggregator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/namespace.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/objectives.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/optimization_pipeline.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/optimized_function.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/orchestrator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/orchestrator_helpers.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/parallel_execution_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/progress_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/result_selection.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/sample_budget.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/samplers/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/samplers/random_sampler.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/session_context.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/stat_significance.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/stop_condition_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/stop_conditions.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/trace_env.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/tracing.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/trial_context.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/trial_lifecycle.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/trial_result_factory.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/types.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/types_ext.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/utils.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core/workflow_trace_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core_metrics/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core_metrics/client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core_metrics/config.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/core_metrics/dtos.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/defaults.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/effectuation/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/effectuation/contracts.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/effectuation/strategies/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/effectuation/strategies/framework_param.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/effectuation/strategies/self_consistency.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluation/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluation/client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluation/config.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluation/dtos.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/base.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/catalog_loader.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/dataset_registry.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/hybrid_api.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/local.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/metrics.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/metrics_tracker.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/evaluators/recommendations.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/_bootstrap.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/_demo.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/anthropic.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/aws.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/azure.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/gcp.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/gemini.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/groq.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/litellm_any.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/manifest.json +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/openai.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/openrouter.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/providers/qa_samples.jsonl +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/quickstart/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/quickstart/__main__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/quickstart/_env.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/quickstart/publish_and_verify.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/examples/tutorial_bootstrap.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/backend_provider.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/example_synth.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/llm_provider.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/loop.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/models.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/options.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/prompt_rewriter.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/artifacts.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/buffer.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/document.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/edits.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/prompts.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/reflection.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/schedule.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/slow_update.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/splits.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/trainer.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/skill_train/trainer_result.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/generation/validators.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/guaranteed_modes.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hooks/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hooks/config.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hooks/installer.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hooks/validator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hybrid/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hybrid/discovery.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hybrid/http_transport.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hybrid/lifecycle.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hybrid/mcp_transport.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hybrid/protocol.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/hybrid/transport.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/activation.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/base.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/base_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/bedrock_client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/config.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/dspy_adapter.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/langchain/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/langchain/handler.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/langfuse/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/langfuse/callback.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/langfuse/client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/langfuse/tracker.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/anthropic_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/base_llm_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/bedrock_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/cohere_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/gemini_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/langchain/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/langchain/base.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/langchain_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/litellm_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/mistral_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/openai.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/llms/openai_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/model_discovery/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/model_discovery/base.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/model_discovery/cache.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/model_discovery/registry.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/observability/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/observability/mlflow.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/observability/wandb.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/observability/workflow_traces.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/plugin_registry.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/pydantic_ai/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/pydantic_ai/_types.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/pydantic_ai/handler.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/pydantic_ai/plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/utils/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/utils/discovery.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/utils/message_coercion.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/utils/mock_adapter.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/utils/parameter_normalizer.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/utils/response_wrapper.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/utils/validation.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/utils/version_compat.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/vector_stores/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/vector_stores/base.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/integrations/wrappers.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/invokers/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/invokers/base.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/invokers/batch.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/invokers/local.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/invokers/streaming.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/adapters.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/bindings.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/canonical.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/cascade.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/certificates.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/composites.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/kinds.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/patterns.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/resolution.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/resolver.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/runtime.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/signals.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/knobs/telemetry.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/mcp/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/mcp/server.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/mcp/tools.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/metrics/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/metrics/agent_metrics.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/metrics/content_features.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/metrics/deepeval_metrics.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/metrics/ragas_metrics.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/metrics/registry.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/observability/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/observability/agent_spans.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/observability/client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/observability/config.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/observability/decorators.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/observability/dtos.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/base.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/batch_optimizers.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/cloud_optimizer.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/grid.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/interactive_optimizer.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/random.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/registry.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/remote.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/remote_services.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/optimizers/results.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/playbook/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/playbook/loader.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/playbook/model.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/playbook/scaffold.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/playbook/staleness.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/playbook/validator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/plugins/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/plugins/registry.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/projects/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/projects/client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/projects/config.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/projects/dtos.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/prompts/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/prompts/client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/prompts/config.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/prompts/dtos.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/providers/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/py.typed +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/reporting/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/reporting/example_map.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/audit.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/auth/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/auth/helpers.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/auth/mfa.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/auth/models.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/auth/oidc.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/auth/saml.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/auth/sms.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/auth/totp.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/config.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/credentials.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/crypto_utils.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/deployment.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/encryption.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/enterprise.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/headers.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/input_validation.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/jwt_validator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/rate_limiter.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/redaction.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/session_manager.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/security/tenant.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-debugging/SKILL.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-debugging/references/error-reference.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-integrations/SKILL.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-quickstart/references/environment-variables.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-run-optimization/SKILL.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-run-optimization/references/cost-management.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/storage/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/storage/local_storage.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/testing/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/traigent_client.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/traigent_integration.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tuned_variables/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tuned_variables/dataflow_strategy.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tuned_variables/detection_strategies.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tuned_variables/detection_types.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tuned_variables/detector.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tuned_variables/discovery.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tuned_variables/observation.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tuned_variables/py.typed +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tvl/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tvl/__main__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tvl/objectives.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tvl/options.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tvl/registry.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tvl/spec_loader.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tvl/spec_validator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/tvl/statistics.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/artifact_fingerprints.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/batch_optimizer_utils.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/batch_processing.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/callbacks.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/console.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/constraints.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/cost_calculator.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/diagnostics.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/discrete_domains.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/error_handler.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/example_id.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/exceptions.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/file_versioning.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/function_identity.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/hashing.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/importance.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/incentives.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/insights.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/langchain_interceptor.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/litellm_interceptor.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/llm_response_parsing.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/local_analytics.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/logging.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/multi_objective.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/numpy_compat.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/objectives.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/optimization_analyzer.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/optimization_logger.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/pagination.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/persistence.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/results_table.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/retry.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/secure_path.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/url_security.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/utils/validation.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/visualization/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/visualization/plots.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/wrapper/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/wrapper/errors.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/wrapper/server.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent/wrapper/service.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent.egg-info/SOURCES.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent.egg-info/dependency_links.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent.egg-info/entry_points.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent.egg-info/requires.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent.egg-info/top_level.txt +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent_validation/__init__.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent_validation/base.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent_validation/plugins.py +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent_validation/py.typed +0 -0
- {traigent-0.18.1.dev3 → traigent-0.18.1.dev4}/traigent_validation/validators.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: traigent
|
|
3
|
-
Version: 0.18.1.
|
|
3
|
+
Version: 0.18.1.dev4
|
|
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
|
|
@@ -143,6 +143,32 @@ _EXAMPLE_INSIGHT_RECOMMENDED_ACTIONS = frozenset(
|
|
|
143
143
|
}
|
|
144
144
|
)
|
|
145
145
|
|
|
146
|
+
# Allowlists for nested aggregate fields in get_example_insights() — derived from
|
|
147
|
+
# BackendAnalyticsClient's RunExampleInsights Pydantic schema (ExampleInsightsSummary,
|
|
148
|
+
# ExampleInsightsCohort, ExampleInsightsRecommendation, ExampleInsightsRedactions in
|
|
149
|
+
# shared_infrastructure/schemas/run_analytics.py) and from the extended fixture in
|
|
150
|
+
# tests/unit/cloud/test_analytics_client.py (which documents count keys that the backend
|
|
151
|
+
# schema will expose in subsequent releases). All fields are coarse-aggregated, backend-
|
|
152
|
+
# redacted, and contain no proprietary per-example signals.
|
|
153
|
+
_EXAMPLE_INSIGHTS_SUMMARY_KEYS: frozenset[str] = frozenset(
|
|
154
|
+
{
|
|
155
|
+
"example_count",
|
|
156
|
+
"weak_example_count",
|
|
157
|
+
"unstable_example_count",
|
|
158
|
+
"suspicious_example_count",
|
|
159
|
+
"notable_example_count",
|
|
160
|
+
"stable_example_count",
|
|
161
|
+
"dataset_quality",
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
_EXAMPLE_INSIGHTS_COHORT_KEYS: frozenset[str] = frozenset(
|
|
165
|
+
{"kind", "count", "impact", "safe_example_refs", "recommendation"}
|
|
166
|
+
)
|
|
167
|
+
_EXAMPLE_INSIGHTS_RECOMMENDATION_KEYS: frozenset[str] = frozenset({"action", "reason"})
|
|
168
|
+
_EXAMPLE_INSIGHTS_REDACTIONS_KEYS: frozenset[str] = frozenset(
|
|
169
|
+
{"raw_proprietary_signals_hidden", "raw_prompt_text_hidden_by_default"}
|
|
170
|
+
)
|
|
171
|
+
|
|
146
172
|
|
|
147
173
|
class AnalyticsClientError(RuntimeError):
|
|
148
174
|
"""Raised when the analytics backend returns a malformed response.
|
|
@@ -237,6 +263,21 @@ def _project_example_insight_row(row: Any, *, index: int) -> dict[str, Any]:
|
|
|
237
263
|
}
|
|
238
264
|
|
|
239
265
|
|
|
266
|
+
def _project_aggregate(data: Any, keys: frozenset[str], *, what: str) -> dict[str, Any]:
|
|
267
|
+
"""Project a mapping to its known-safe keys, dropping unknown/raw keys.
|
|
268
|
+
|
|
269
|
+
Unknown nested keys can carry proprietary signals or raw backend state.
|
|
270
|
+
This function is the nested-aggregate counterpart of the per-row construction
|
|
271
|
+
in :func:`_project_example_insight_row`: both rebuild output by allowlist so
|
|
272
|
+
nothing unknown can pass through regardless of what the backend sends.
|
|
273
|
+
"""
|
|
274
|
+
if not isinstance(data, dict):
|
|
275
|
+
raise AnalyticsClientError(
|
|
276
|
+
f"Malformed example insights response: {what} must be an object."
|
|
277
|
+
)
|
|
278
|
+
return {k: v for k, v in data.items() if k in keys}
|
|
279
|
+
|
|
280
|
+
|
|
240
281
|
def _quote_segment(value: str, *, field: str) -> str:
|
|
241
282
|
"""URL-encode a path segment, rejecting empty values up front.
|
|
242
283
|
|
|
@@ -666,18 +707,50 @@ class BackendAnalyticsClient:
|
|
|
666
707
|
"Malformed example insights response: example_rows must contain "
|
|
667
708
|
"at most 100 rows."
|
|
668
709
|
)
|
|
710
|
+
cohorts_raw = payload["cohorts"]
|
|
711
|
+
if not isinstance(cohorts_raw, list):
|
|
712
|
+
raise AnalyticsClientError(
|
|
713
|
+
"Malformed example insights response: cohorts must be a list."
|
|
714
|
+
)
|
|
715
|
+
recommendations_raw = payload["recommendations"]
|
|
716
|
+
if not isinstance(recommendations_raw, list):
|
|
717
|
+
raise AnalyticsClientError(
|
|
718
|
+
"Malformed example insights response: recommendations must be a list."
|
|
719
|
+
)
|
|
669
720
|
|
|
670
721
|
return {
|
|
671
722
|
"run_id": payload["run_id"],
|
|
672
723
|
"privacy_mode": payload["privacy_mode"],
|
|
673
|
-
"summary":
|
|
724
|
+
"summary": _project_aggregate(
|
|
725
|
+
payload["summary"],
|
|
726
|
+
_EXAMPLE_INSIGHTS_SUMMARY_KEYS,
|
|
727
|
+
what="summary",
|
|
728
|
+
),
|
|
674
729
|
"example_rows": [
|
|
675
730
|
_project_example_insight_row(row, index=index)
|
|
676
731
|
for index, row in enumerate(rows)
|
|
677
732
|
],
|
|
678
|
-
"cohorts":
|
|
679
|
-
|
|
680
|
-
|
|
733
|
+
"cohorts": [
|
|
734
|
+
_project_aggregate(
|
|
735
|
+
cohort,
|
|
736
|
+
_EXAMPLE_INSIGHTS_COHORT_KEYS,
|
|
737
|
+
what=f"cohorts[{i}]",
|
|
738
|
+
)
|
|
739
|
+
for i, cohort in enumerate(cohorts_raw)
|
|
740
|
+
],
|
|
741
|
+
"recommendations": [
|
|
742
|
+
_project_aggregate(
|
|
743
|
+
rec,
|
|
744
|
+
_EXAMPLE_INSIGHTS_RECOMMENDATION_KEYS,
|
|
745
|
+
what=f"recommendations[{i}]",
|
|
746
|
+
)
|
|
747
|
+
for i, rec in enumerate(recommendations_raw)
|
|
748
|
+
],
|
|
749
|
+
"redactions": _project_aggregate(
|
|
750
|
+
payload["redactions"],
|
|
751
|
+
_EXAMPLE_INSIGHTS_REDACTIONS_KEYS,
|
|
752
|
+
what="redactions",
|
|
753
|
+
),
|
|
681
754
|
}
|
|
682
755
|
|
|
683
756
|
|
|
@@ -94,6 +94,40 @@ class TraigentCloudService:
|
|
|
94
94
|
if not request.configuration_space:
|
|
95
95
|
raise ValidationException("configuration_space must not be empty")
|
|
96
96
|
|
|
97
|
+
# Detect boolean values before any network or compute work.
|
|
98
|
+
# bool is a subclass of int in Python; use type(v) is bool so that
|
|
99
|
+
# real ints/floats (including 0/1) are NOT mistakenly rejected.
|
|
100
|
+
# Catches booleans in ALL supported value shapes:
|
|
101
|
+
# - scalar bool: {"flag": True}
|
|
102
|
+
# - list/tuple of values: {"flag": [True, False]}
|
|
103
|
+
# - typed param dict: {"flag": {"type": "categorical", "choices": [True, False]}}
|
|
104
|
+
def _cs_value_contains_bool(value: Any) -> bool:
|
|
105
|
+
if type(value) is bool:
|
|
106
|
+
return True
|
|
107
|
+
if isinstance(value, (list, tuple)):
|
|
108
|
+
return any(type(v) is bool for v in value)
|
|
109
|
+
if isinstance(value, dict):
|
|
110
|
+
for _key in ("choices", "values"):
|
|
111
|
+
seq = value.get(_key)
|
|
112
|
+
if isinstance(seq, (list, tuple)) and any(
|
|
113
|
+
type(v) is bool for v in seq
|
|
114
|
+
):
|
|
115
|
+
return True
|
|
116
|
+
return False
|
|
117
|
+
|
|
118
|
+
_bool_knobs = [
|
|
119
|
+
key
|
|
120
|
+
for key, value in request.configuration_space.items()
|
|
121
|
+
if _cs_value_contains_bool(value)
|
|
122
|
+
]
|
|
123
|
+
if _bool_knobs:
|
|
124
|
+
_field_refs = ", ".join(f'"{k}"' for k in _bool_knobs)
|
|
125
|
+
raise ValidationException(
|
|
126
|
+
f"configuration_space[{_field_refs}]: boolean values are not "
|
|
127
|
+
f"supported by the cloud session API — encode as strings "
|
|
128
|
+
f'(e.g. "true"/"false") or 0/1'
|
|
129
|
+
)
|
|
130
|
+
|
|
97
131
|
validate_or_raise(
|
|
98
132
|
CoreValidators.validate_list(
|
|
99
133
|
request.objectives,
|
|
@@ -71,6 +71,68 @@ def _get_session_creation_failure_detail(
|
|
|
71
71
|
return None
|
|
72
72
|
|
|
73
73
|
|
|
74
|
+
# Transient signals: the SDK could not REACH/validate the backend (the auth
|
|
75
|
+
# layer fails closed on these for safety, but the run should still degrade
|
|
76
|
+
# gracefully as it did before, not hard-fail).
|
|
77
|
+
_AUTH_TRANSIENT_MARKERS = (
|
|
78
|
+
"timed out",
|
|
79
|
+
"timeout",
|
|
80
|
+
"transport error",
|
|
81
|
+
"rate limited",
|
|
82
|
+
"temporarily unavailable",
|
|
83
|
+
"service unavailable",
|
|
84
|
+
"connection",
|
|
85
|
+
)
|
|
86
|
+
# Definitive signals: the backend REJECTED the credential (user-actionable;
|
|
87
|
+
# fix the key). Only these fail closed.
|
|
88
|
+
_AUTH_REJECTION_MARKERS = (
|
|
89
|
+
"unauthorized",
|
|
90
|
+
"invalid api key",
|
|
91
|
+
"invalid_api_key",
|
|
92
|
+
"api_key_validation_failed",
|
|
93
|
+
"reported key invalid",
|
|
94
|
+
"revoked",
|
|
95
|
+
"forbidden",
|
|
96
|
+
"expired",
|
|
97
|
+
"permission",
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _is_definitive_auth_rejection(exc: Exception) -> bool:
|
|
102
|
+
"""True only when an auth failure is a DEFINITIVE credential rejection.
|
|
103
|
+
|
|
104
|
+
A configured key that the backend rejected (invalid / revoked / expired /
|
|
105
|
+
unauthorized / forbidden — typically 401/403) is user-actionable and must
|
|
106
|
+
fail closed. A transient inability to validate the key (timeout / transport
|
|
107
|
+
error / 5xx / 429 during ``/keys/validate``) is NOT a rejection: the auth
|
|
108
|
+
layer fails closed on it for safety, but the optimization run should still
|
|
109
|
+
degrade gracefully (as before), not hard-fail. Ambiguous errors default to
|
|
110
|
+
NOT a rejection, preserving the prior resilient fallback.
|
|
111
|
+
"""
|
|
112
|
+
# Primary source: the real session API attaches the HTTP status on the
|
|
113
|
+
# structured failure detail (api_operations._handle_session_error maps a
|
|
114
|
+
# 401/403 to AuthenticationError with exc.session_creation_failure). A bare
|
|
115
|
+
# exc.status_code is a secondary source.
|
|
116
|
+
detail = getattr(exc, "session_creation_failure", None)
|
|
117
|
+
detail_status = getattr(detail, "status_code", None)
|
|
118
|
+
if isinstance(detail_status, int) and detail_status in (401, 403):
|
|
119
|
+
return True
|
|
120
|
+
if isinstance(detail_status, int) and (
|
|
121
|
+
detail_status == 429 or detail_status >= 500
|
|
122
|
+
):
|
|
123
|
+
return False
|
|
124
|
+
status = getattr(exc, "status_code", None)
|
|
125
|
+
if isinstance(status, int):
|
|
126
|
+
if status in (401, 403):
|
|
127
|
+
return True
|
|
128
|
+
if status == 429 or status >= 500:
|
|
129
|
+
return False
|
|
130
|
+
msg = str(exc).lower()
|
|
131
|
+
if any(marker in msg for marker in _AUTH_TRANSIENT_MARKERS):
|
|
132
|
+
return False
|
|
133
|
+
return any(marker in msg for marker in _AUTH_REJECTION_MARKERS)
|
|
134
|
+
|
|
135
|
+
|
|
74
136
|
class SessionOperations:
|
|
75
137
|
"""Handles session management operations."""
|
|
76
138
|
|
|
@@ -97,6 +159,63 @@ class SessionOperations:
|
|
|
97
159
|
"""Validate that an integer is positive."""
|
|
98
160
|
validate_or_raise(CoreValidators.validate_positive_int(value, field_name))
|
|
99
161
|
|
|
162
|
+
@staticmethod
|
|
163
|
+
def _config_value_contains_bool(value: Any) -> bool:
|
|
164
|
+
"""Return True if a configuration_space value contains boolean(s).
|
|
165
|
+
|
|
166
|
+
Handles all supported parameter shapes:
|
|
167
|
+
- scalar bool: ``True`` / ``False``
|
|
168
|
+
- list/tuple of values containing a bool: ``[True, False]``
|
|
169
|
+
- typed/structured dict whose ``choices`` or ``values`` list contains a
|
|
170
|
+
bool: ``{"type": "categorical", "choices": [True, False]}``
|
|
171
|
+
|
|
172
|
+
Note: ``bool`` is a subclass of ``int`` in Python. We use
|
|
173
|
+
``type(v) is bool`` so plain ints/floats (including 0/1) are NOT
|
|
174
|
+
rejected — only literal ``True``/``False`` values.
|
|
175
|
+
"""
|
|
176
|
+
if type(value) is bool:
|
|
177
|
+
return True
|
|
178
|
+
if isinstance(value, (list, tuple)):
|
|
179
|
+
return any(type(v) is bool for v in value)
|
|
180
|
+
if isinstance(value, dict):
|
|
181
|
+
for key in ("choices", "values"):
|
|
182
|
+
seq = value.get(key)
|
|
183
|
+
if isinstance(seq, (list, tuple)) and any(type(v) is bool for v in seq):
|
|
184
|
+
return True
|
|
185
|
+
return False
|
|
186
|
+
|
|
187
|
+
@staticmethod
|
|
188
|
+
def _validate_configuration_space_no_bools(
|
|
189
|
+
space: dict[str, Any], field_name: str
|
|
190
|
+
) -> None:
|
|
191
|
+
"""Raise ValidationException when a parameter contains boolean values.
|
|
192
|
+
|
|
193
|
+
The cloud session API rejects boolean knobs with a generic HTTP 400
|
|
194
|
+
VALIDATION_ERROR that names no field. Catching the problem client-side
|
|
195
|
+
gives a clear, actionable error before any network round-trip.
|
|
196
|
+
|
|
197
|
+
Catches booleans in ALL supported configuration_space value shapes:
|
|
198
|
+
- scalar bool: ``{"flag": True}``
|
|
199
|
+
- list/tuple of values: ``{"flag": [True, False]}``
|
|
200
|
+
- typed param dict: ``{"flag": {"type": "categorical", "choices": [True, False]}}``
|
|
201
|
+
|
|
202
|
+
Note: ``bool`` is a subclass of ``int`` in Python. We use
|
|
203
|
+
``type(v) is bool`` (not ``isinstance``) so plain ints and floats such
|
|
204
|
+
as 0/1 are NOT rejected — only literal ``True``/``False`` values.
|
|
205
|
+
"""
|
|
206
|
+
offending = [
|
|
207
|
+
key
|
|
208
|
+
for key, value in space.items()
|
|
209
|
+
if SessionOperations._config_value_contains_bool(value)
|
|
210
|
+
]
|
|
211
|
+
if offending:
|
|
212
|
+
field_refs = ", ".join(f'"{k}"' for k in offending)
|
|
213
|
+
raise ValidationException(
|
|
214
|
+
f"{field_name}[{field_refs}]: boolean values are not supported "
|
|
215
|
+
f"by the cloud session API — encode as strings "
|
|
216
|
+
f'(e.g. "true"/"false") or 0/1'
|
|
217
|
+
)
|
|
218
|
+
|
|
100
219
|
def _raise_if_backend_egress_disabled(self, operation: str) -> None:
|
|
101
220
|
"""Fail closed before any backend HTTP request."""
|
|
102
221
|
|
|
@@ -321,6 +440,54 @@ class SessionOperations:
|
|
|
321
440
|
storage_e,
|
|
322
441
|
)
|
|
323
442
|
|
|
443
|
+
def _auth_fallback_result(
|
|
444
|
+
self,
|
|
445
|
+
exc: Exception,
|
|
446
|
+
fallback_id: str,
|
|
447
|
+
detail: str,
|
|
448
|
+
failure_response: SessionCreationFailureDetail | None,
|
|
449
|
+
function_name: str,
|
|
450
|
+
intends_cloud_egress: bool,
|
|
451
|
+
) -> SessionCreationResult:
|
|
452
|
+
"""Build the fallback result for a non-fail-loud AuthenticationError.
|
|
453
|
+
|
|
454
|
+
A run that INTENDS cloud egress but hit a non-definitive auth failure
|
|
455
|
+
(could-not-validate / transient) takes the UNREACHABLE contract: degrade
|
|
456
|
+
to LOCAL but FLAG it (degraded=True + SESSION_FAILED + WARN) so it is
|
|
457
|
+
never mistaken for a managed run. A LOCAL-routed run only ever wanted
|
|
458
|
+
OPTIONAL backend tracking, so a rejected/invalid key is irrelevant: it
|
|
459
|
+
continues untracked locally (degraded=False) — intentional local
|
|
460
|
+
execution, NOT a downgrade (#1421).
|
|
461
|
+
"""
|
|
462
|
+
if intends_cloud_egress:
|
|
463
|
+
logger.warning(
|
|
464
|
+
"Managed session creation failed (could not validate credentials "
|
|
465
|
+
"— backend unreachable) for '%s'; degrading to LOCAL execution — "
|
|
466
|
+
"results are NOT tracked on the backend (set offline=True to make "
|
|
467
|
+
"this explicit): %s",
|
|
468
|
+
function_name,
|
|
469
|
+
exc,
|
|
470
|
+
)
|
|
471
|
+
return SessionCreationResult.fallback(
|
|
472
|
+
session_id=fallback_id,
|
|
473
|
+
reason=SessionCreationFailureReason.SESSION_FAILED,
|
|
474
|
+
detail=detail,
|
|
475
|
+
failure_response=failure_response,
|
|
476
|
+
degraded=True,
|
|
477
|
+
)
|
|
478
|
+
logger.warning(
|
|
479
|
+
"Backend tracking unavailable (auth) for local run '%s'; continuing "
|
|
480
|
+
"untracked locally: %s",
|
|
481
|
+
function_name,
|
|
482
|
+
exc,
|
|
483
|
+
)
|
|
484
|
+
return SessionCreationResult.fallback(
|
|
485
|
+
session_id=fallback_id,
|
|
486
|
+
reason=SessionCreationFailureReason.AUTH,
|
|
487
|
+
detail=detail,
|
|
488
|
+
failure_response=failure_response,
|
|
489
|
+
)
|
|
490
|
+
|
|
324
491
|
def create_session(
|
|
325
492
|
self,
|
|
326
493
|
function_name: str,
|
|
@@ -350,6 +517,7 @@ class SessionOperations:
|
|
|
350
517
|
"""
|
|
351
518
|
self._validate_non_empty_string(function_name, "function_name")
|
|
352
519
|
self._validate_mapping(search_space, "search_space")
|
|
520
|
+
self._validate_configuration_space_no_bools(search_space, "configuration_space")
|
|
353
521
|
self._validate_non_empty_string(optimization_goal, "optimization_goal")
|
|
354
522
|
if metadata is not None and not isinstance(metadata, dict):
|
|
355
523
|
raise ValidationException("metadata must be a dictionary if provided")
|
|
@@ -361,7 +529,32 @@ class SessionOperations:
|
|
|
361
529
|
# misconfiguration, and old-BE typed rejection as success.
|
|
362
530
|
governed = bool(promotion_policy or tvl_governance)
|
|
363
531
|
|
|
532
|
+
# Does this run actually INTEND cloud egress (managed / auto-cloud)? The
|
|
533
|
+
# backend session manager sets this from the runtime-resolved execution
|
|
534
|
+
# policy before calling us (mirrors the existing ``no_egress`` flag). A
|
|
535
|
+
# LOCAL-routed run (algorithm grid/random, offline, or runtime-resolved
|
|
536
|
+
# -to-local) creates a backend session only for OPTIONAL tracking — a
|
|
537
|
+
# configured-but-invalid/rejected key is irrelevant to it and must NOT
|
|
538
|
+
# hard-fail the local optimization. Default True keeps fail-closed for
|
|
539
|
+
# direct callers that do not declare intent. (#1421 regression.)
|
|
540
|
+
intends_cloud_egress = bool(getattr(self.client, "cloud_egress_intent", True))
|
|
541
|
+
|
|
364
542
|
def _must_fail_loud(exc: Exception) -> bool:
|
|
543
|
+
# A DEFINITIVELY rejected credential (invalid / revoked / expired /
|
|
544
|
+
# unauthorized — a key WAS configured; the no-key path returns
|
|
545
|
+
# NO_API_KEY before any HTTP) is a user-actionable error on a run
|
|
546
|
+
# that INTENDS cloud egress: silently degrading such a managed run
|
|
547
|
+
# to a local/anonymous one would change execution semantics (managed
|
|
548
|
+
# Bayesian -> local search), drop the backend/billing/governance
|
|
549
|
+
# record, and present the degraded run as success — so fail closed.
|
|
550
|
+
# On a LOCAL-routed run the same rejected key is irrelevant (zero
|
|
551
|
+
# cloud egress), so do NOT fail loud. A *transient* failure to
|
|
552
|
+
# reach/validate the backend is never a rejection and still degrades
|
|
553
|
+
# gracefully (see _is_definitive_auth_rejection).
|
|
554
|
+
if isinstance(exc, AuthenticationError):
|
|
555
|
+
return governed or (
|
|
556
|
+
intends_cloud_egress and _is_definitive_auth_rejection(exc)
|
|
557
|
+
)
|
|
365
558
|
return governed or isinstance(
|
|
366
559
|
exc, (CloudEgressBlockedError, SessionContractError)
|
|
367
560
|
)
|
|
@@ -578,27 +771,40 @@ class SessionOperations:
|
|
|
578
771
|
await self._reset_client_session("create_session auth_failure")
|
|
579
772
|
if _must_fail_loud(e):
|
|
580
773
|
raise
|
|
581
|
-
logger.warning("Backend auth failed for '%s': %s", function_name, e)
|
|
582
774
|
failure_response = _get_session_creation_failure_detail(e)
|
|
583
775
|
fallback_id = self._create_local_fallback_session(
|
|
584
776
|
function_name, search_space, optimization_goal, metadata
|
|
585
777
|
)
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
778
|
+
detail = (
|
|
779
|
+
failure_response.one_line_summary()
|
|
780
|
+
if failure_response
|
|
781
|
+
else str(e)[:200]
|
|
782
|
+
)
|
|
783
|
+
return self._auth_fallback_result(
|
|
784
|
+
e,
|
|
785
|
+
fallback_id,
|
|
786
|
+
detail,
|
|
787
|
+
failure_response,
|
|
788
|
+
function_name,
|
|
789
|
+
intends_cloud_egress,
|
|
595
790
|
)
|
|
596
791
|
|
|
597
792
|
except (TimeoutError, CloudServiceError, OSError) as e:
|
|
598
793
|
await self._reset_client_session("create_session fallback")
|
|
599
794
|
if _must_fail_loud(e):
|
|
600
795
|
raise
|
|
601
|
-
|
|
796
|
+
# A configured key intended a managed/cloud run, but the backend
|
|
797
|
+
# was unreachable. We degrade to LOCAL execution for resilience —
|
|
798
|
+
# but this is a DOWNGRADE (managed search/tracking is lost), so
|
|
799
|
+
# surface it at WARNING and flag degraded=True on the result so a
|
|
800
|
+
# caller never mistakes the local run for a managed one.
|
|
801
|
+
logger.warning(
|
|
802
|
+
"Managed session creation failed (backend unreachable) for "
|
|
803
|
+
"'%s'; degrading to LOCAL execution — results are NOT tracked "
|
|
804
|
+
"on the backend (set offline=True to make this explicit): %s",
|
|
805
|
+
function_name,
|
|
806
|
+
e,
|
|
807
|
+
)
|
|
602
808
|
failure_response = _get_session_creation_failure_detail(e)
|
|
603
809
|
fallback_id = self._create_local_fallback_session(
|
|
604
810
|
function_name, search_space, optimization_goal, metadata
|
|
@@ -616,6 +822,7 @@ class SessionOperations:
|
|
|
616
822
|
typed_legacy_session_create_400=bool(
|
|
617
823
|
getattr(e, "typed_legacy_session_create_400", False)
|
|
618
824
|
),
|
|
825
|
+
degraded=True,
|
|
619
826
|
)
|
|
620
827
|
|
|
621
828
|
# Run async method in sync context
|
|
@@ -644,39 +851,41 @@ class SessionOperations:
|
|
|
644
851
|
except AuthenticationError as exc:
|
|
645
852
|
if _must_fail_loud(exc):
|
|
646
853
|
raise
|
|
647
|
-
# Issue #1373
|
|
648
|
-
#
|
|
649
|
-
#
|
|
650
|
-
#
|
|
651
|
-
#
|
|
652
|
-
#
|
|
653
|
-
# mutually exclusive per failure
|
|
654
|
-
# caught by exactly one handler), so this does not double-log.
|
|
655
|
-
logger.warning(
|
|
656
|
-
"Backend auth failed for '%s': %s",
|
|
657
|
-
function_name,
|
|
658
|
-
exc,
|
|
659
|
-
)
|
|
854
|
+
# Issue #1373 "outer create_session swallow": an auth failure that
|
|
855
|
+
# ESCAPES _create_session_async (e.g. the has_api_key preflight or
|
|
856
|
+
# the async-runner machinery). A DEFINITIVE rejection on a cloud-
|
|
857
|
+
# intended run fails loud above. Reaching here is a non-definitive
|
|
858
|
+
# auth failure OR a LOCAL-routed run — both handled by the shared
|
|
859
|
+
# helper (cloud-intent: degrade+flag; local: continue untracked).
|
|
860
|
+
# The two auth sites are mutually exclusive per failure.
|
|
660
861
|
failure_response = _get_session_creation_failure_detail(exc)
|
|
661
862
|
fallback_id = self._create_local_fallback_session(
|
|
662
863
|
function_name, search_space, optimization_goal, metadata
|
|
663
864
|
)
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
865
|
+
detail = (
|
|
866
|
+
failure_response.one_line_summary()
|
|
867
|
+
if failure_response
|
|
868
|
+
else str(exc)[:200]
|
|
869
|
+
)
|
|
870
|
+
return self._auth_fallback_result(
|
|
871
|
+
exc,
|
|
872
|
+
fallback_id,
|
|
873
|
+
detail,
|
|
874
|
+
failure_response,
|
|
875
|
+
function_name,
|
|
876
|
+
intends_cloud_egress,
|
|
673
877
|
)
|
|
674
878
|
|
|
675
879
|
except (TimeoutError, CloudServiceError, OSError) as exc:
|
|
676
880
|
if _must_fail_loud(exc):
|
|
677
881
|
raise
|
|
678
|
-
|
|
679
|
-
|
|
882
|
+
# Backend unreachable on the outer path — same downgrade semantics as
|
|
883
|
+
# the inner sibling: WARN + flag degraded so the local run is never
|
|
884
|
+
# mistaken for a managed one.
|
|
885
|
+
logger.warning(
|
|
886
|
+
"Managed session creation failed (backend unreachable) for '%s'; "
|
|
887
|
+
"degrading to LOCAL execution — results are NOT tracked on the "
|
|
888
|
+
"backend (set offline=True to make this explicit): %s",
|
|
680
889
|
function_name,
|
|
681
890
|
exc,
|
|
682
891
|
)
|
|
@@ -694,6 +903,7 @@ class SessionOperations:
|
|
|
694
903
|
reason=SessionCreationFailureReason.SESSION_FAILED,
|
|
695
904
|
detail=detail,
|
|
696
905
|
failure_response=failure_response,
|
|
906
|
+
degraded=True,
|
|
697
907
|
)
|
|
698
908
|
|
|
699
909
|
except Exception as exc:
|
|
@@ -703,8 +913,11 @@ class SessionOperations:
|
|
|
703
913
|
# governed/contract failures, which must stay loud.
|
|
704
914
|
if _must_fail_loud(exc):
|
|
705
915
|
raise
|
|
706
|
-
|
|
707
|
-
|
|
916
|
+
# An unexpected error that degrades a managed run to local is still a
|
|
917
|
+
# downgrade — surface at WARNING and flag degraded (was debug-only).
|
|
918
|
+
logger.warning(
|
|
919
|
+
"Unexpected error in create_session for '%s'; degrading to LOCAL "
|
|
920
|
+
"execution — results are NOT tracked on the backend: %s",
|
|
708
921
|
function_name,
|
|
709
922
|
exc,
|
|
710
923
|
)
|
|
@@ -715,6 +928,7 @@ class SessionOperations:
|
|
|
715
928
|
session_id=fallback_id,
|
|
716
929
|
reason=SessionCreationFailureReason.SESSION_FAILED,
|
|
717
930
|
detail=str(exc)[:200],
|
|
931
|
+
degraded=True,
|
|
718
932
|
)
|
|
719
933
|
|
|
720
934
|
async def create_hybrid_session(
|
|
@@ -62,12 +62,21 @@ class APIKeyManager:
|
|
|
62
62
|
"openai": "OPENAI_API_KEY",
|
|
63
63
|
"anthropic": "ANTHROPIC_API_KEY",
|
|
64
64
|
"cohere": "COHERE_API_KEY",
|
|
65
|
-
|
|
65
|
+
# HuggingFace: native HF_TOKEN first; HF_API_KEY kept for back-compat
|
|
66
|
+
"huggingface": "HF_TOKEN",
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
# Check environment first (most secure)
|
|
69
70
|
if provider in env_names:
|
|
70
|
-
|
|
71
|
+
if provider == "huggingface":
|
|
72
|
+
# Native-first alias chain: HF_TOKEN -> HUGGING_FACE_HUB_TOKEN -> HF_API_KEY
|
|
73
|
+
env_key = (
|
|
74
|
+
os.getenv("HF_TOKEN")
|
|
75
|
+
or os.getenv("HUGGING_FACE_HUB_TOKEN")
|
|
76
|
+
or os.getenv("HF_API_KEY")
|
|
77
|
+
)
|
|
78
|
+
else:
|
|
79
|
+
env_key = os.getenv(env_names[provider])
|
|
71
80
|
if env_key:
|
|
72
81
|
return env_key
|
|
73
82
|
|
|
@@ -760,6 +760,17 @@ class BackendSessionManager:
|
|
|
760
760
|
if slug_hash:
|
|
761
761
|
portal_name = f"{portal_name} ({slug_hash})"
|
|
762
762
|
|
|
763
|
+
# Tell create_session whether this run actually INTENDS cloud egress
|
|
764
|
+
# (managed / auto-cloud) vs. a LOCAL-routed run (grid/random/offline/
|
|
765
|
+
# runtime-resolved-to-local) that only wants OPTIONAL backend
|
|
766
|
+
# tracking. A configured-but-invalid/rejected key must fail closed
|
|
767
|
+
# for the former but must NOT hard-fail the latter (#1421). Mirrors
|
|
768
|
+
# the existing ``no_egress`` flag set on the same client.
|
|
769
|
+
_policy = policy_from_config(self._traigent_config)
|
|
770
|
+
self._backend_client.cloud_egress_intent = bool(
|
|
771
|
+
policy_requires_cloud(_policy) or policy_is_cloud_brain(_policy)
|
|
772
|
+
)
|
|
773
|
+
|
|
763
774
|
raw_result = self._backend_client.create_session(
|
|
764
775
|
function_name=portal_name,
|
|
765
776
|
search_space=getattr(self._optimizer, "config_space", {}),
|
|
@@ -1447,9 +1458,8 @@ class BackendSessionManager:
|
|
|
1447
1458
|
result.metadata.get("statistical_significance") if result.metadata else None
|
|
1448
1459
|
)
|
|
1449
1460
|
if stat_sig:
|
|
1450
|
-
summary_stats_with_aggregation["metadata"]
|
|
1451
|
-
|
|
1452
|
-
)
|
|
1461
|
+
agg_meta = summary_stats_with_aggregation["metadata"]
|
|
1462
|
+
agg_meta["statistical_significance"] = stat_sig
|
|
1453
1463
|
|
|
1454
1464
|
try:
|
|
1455
1465
|
successful_trials = len([t for t in result.trials if t.is_successful])
|
|
@@ -115,6 +115,16 @@ class SessionCreationResult:
|
|
|
115
115
|
project_id: str | None = None
|
|
116
116
|
tenant_id: str | None = None
|
|
117
117
|
typed_legacy_session_create_400: bool = False
|
|
118
|
+
# Execution-path transparency (so a caller never mistakes a local run for a
|
|
119
|
+
# managed/cloud one). ``execution_path`` is "connected" for a real backend
|
|
120
|
+
# session and "local_fallback" for any local result. ``backend_fallback`` is
|
|
121
|
+
# True whenever the run is local. ``degraded`` is True ONLY when the user
|
|
122
|
+
# intended a managed/cloud run but the backend was unreachable and we fell
|
|
123
|
+
# back to local — it stays False for intentional local execution (offline
|
|
124
|
+
# mode / no API key), which is a deliberate configuration, not a downgrade.
|
|
125
|
+
execution_path: str | None = None
|
|
126
|
+
backend_fallback: bool = False
|
|
127
|
+
degraded: bool = False
|
|
118
128
|
|
|
119
129
|
def __str__(self) -> str:
|
|
120
130
|
"""Return the session ID string for backwards compatibility.
|
|
@@ -145,6 +155,9 @@ class SessionCreationResult:
|
|
|
145
155
|
backend_connected=True,
|
|
146
156
|
project_id=project_id,
|
|
147
157
|
tenant_id=tenant_id,
|
|
158
|
+
execution_path="connected",
|
|
159
|
+
backend_fallback=False,
|
|
160
|
+
degraded=False,
|
|
148
161
|
)
|
|
149
162
|
|
|
150
163
|
@classmethod
|
|
@@ -155,8 +168,15 @@ class SessionCreationResult:
|
|
|
155
168
|
detail: str | None = None,
|
|
156
169
|
failure_response: SessionCreationFailureDetail | None = None,
|
|
157
170
|
typed_legacy_session_create_400: bool = False,
|
|
171
|
+
degraded: bool = False,
|
|
158
172
|
) -> SessionCreationResult:
|
|
159
|
-
"""Factory for a local-fallback session after backend failure.
|
|
173
|
+
"""Factory for a local-fallback session after backend failure.
|
|
174
|
+
|
|
175
|
+
``degraded`` must be set True by callers where the user intended a
|
|
176
|
+
managed/cloud run but the backend was unreachable (an unintended
|
|
177
|
+
downgrade); it stays False for intentional local execution (offline
|
|
178
|
+
mode / no API key configured).
|
|
179
|
+
"""
|
|
160
180
|
return cls(
|
|
161
181
|
session_id=session_id,
|
|
162
182
|
backend_connected=False,
|
|
@@ -164,4 +184,7 @@ class SessionCreationResult:
|
|
|
164
184
|
failure_detail=detail,
|
|
165
185
|
failure_response=failure_response,
|
|
166
186
|
typed_legacy_session_create_400=typed_legacy_session_create_400,
|
|
187
|
+
execution_path="local_fallback",
|
|
188
|
+
backend_fallback=True,
|
|
189
|
+
degraded=degraded,
|
|
167
190
|
)
|