traigent 0.18.1.dev8__tar.gz → 0.18.1.dev10__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.dev8/traigent.egg-info → traigent-0.18.1.dev10}/PKG-INFO +1 -1
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/pyproject.toml +1 -1
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/backend_client.py +5 -6
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/trial_operations.py +56 -16
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/backend_session_manager.py +77 -26
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/orchestrator.py +26 -2
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/trial_lifecycle.py +16 -5
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/base.py +177 -8
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/interactive_optimizer.py +64 -33
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10/traigent.egg-info}/PKG-INFO +1 -1
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/CHANGELOG.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/COMMERCIAL-LICENSE.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/CONTRIBUTING.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/CONTRIBUTOR-LICENSING.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/DISCLAIMER.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/LICENSE +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/MANIFEST.in +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/NOTICE +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/README.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/SECURITY.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/LOCAL_CI_GATE.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/README.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/SYNC_MAP.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/agent-skill.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/complete-function-specification.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/decorator-reference.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/enterprise-beta-api.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/interactive_optimizer.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/telemetry.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/api-reference/thread-pool-examples.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/ARCHITECTURE.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/cost-architecture-validation.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/execution_mode_follow_up.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/integrations-inventory.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/plugin_architecture.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/project-structure.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/architecture/stop_conditions.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/concepts/composite-knob-ir.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/concepts/composite-knobs.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/concepts/guided-generation.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/CONTRIBUTING.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/README.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/SECURITY.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/aikido_triage.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/code_review_instructions.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/contributing/test-quality-guide.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/demos/README.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/API_PATTERNS.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/LEARNING_ROADMAP.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/QUICK_REFERENCE.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/README.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/START_HERE.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/examples/TROUBLESHOOTING.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/fake-completion-tracking.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/feature_matrices/README.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/README.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/authentication.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/constraint-dsl.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/dataflow-detection.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/framework_override_enhanced_features.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/mcp-server.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/observability-spans.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/onboarding.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/prompt_management.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/recommendations.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/safety-gates.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/seamless_injection.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/strategy-presets.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/features/strict_metrics_nulls.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/GETTING_STARTED.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/README.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/installation.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/minimal-integration.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/getting-started/testing.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/evaluation.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/execution-mode-migration.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/execution-modes.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/js-bridge.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/llm_plugin_migration_guide.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/parallel-configuration.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/guides/secrets_management.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/hybrid-mode-api-contract.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/hybrid-mode-client-guide.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/operations/azure_openai.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/operations/bedrock.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/operations/google_gemini.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/security/trust_model.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/concepts/composite-knob-ir.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/concepts/composite-knobs.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/concepts/guided-generation.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/schema.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/tagging_tracking.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/traceability/taxonomy_reference.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/README.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/agent_optimization.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/choosing_optimization_model.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/configuration-spaces.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/evaluation_guide.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/injection_modes.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/interactive_optimization.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/smart_optimization.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/user-guide/tuned_variables.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/docs/walkthrough.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-all.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-analytics.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-bayesian.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-chroma.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-dev.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-hybrid.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-integrations.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-security.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements-test.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/requirements/requirements.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/setup.cfg +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/_version.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/adapters/execution_adapter.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/admin/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/admin/client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/admin/config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/admin/dtos.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/agents/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/agents/config_mapper.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/agents/executor.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/agents/platforms.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/agents/specification_generator.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/anomaly.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/cost_optimization.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/example_insights.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/intelligence.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/meta_learning.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/next_steps.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/optimization_plan.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/predictive.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/render.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics/scheduling.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics_mcp/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics_mcp/server.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/analytics_mcp/tools.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/agent_inference.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/config_builder.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/config_space.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/constraint_builders.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/constraints.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/decorators.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/functions.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/parameter_ranges.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/parameter_validator.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/safety.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/strategy_presets.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/types.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/api/validation_protocol.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/auth_commands.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/detect_tvars_command.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/function_discovery.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/generate_config_command.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/hooks_commands.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/local_commands.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/main.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/next_steps_command.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/onboard_commands.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/optimization_validator.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/plan_command.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/playbook_commands.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/sync_commands.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cli/validation_types.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/_aiohttp_compat.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/agent_dtos.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/analytics_auth.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/analytics_client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/api_key_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/api_operations.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/async_batch_transport.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/auth.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/backend_bridges.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/backend_components.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/backend_synchronizer.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/benchmark_client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/billing.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/cloud_operations.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/credential_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/credential_resolver.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/dataset_converter.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/dtos.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/governance.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/integration_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/models.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/optimizer_client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/password_auth_handler.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/privacy_operations.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/production_mcp_client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/remote_guidance.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/resilient_client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/service.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/session_operations.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/session_types.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/sessions.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/smart_pruning.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/subset_selection.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/sync_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/token_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/trial_tracker.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/url_security.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/user_agent.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/cloud/validators.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/api_keys.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/ast_transformer.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/backend_config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/context.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/feature_flags.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/models.yaml +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/parallel.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/project.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/provider_support.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/providers.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/runtime_injector.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/tenant.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config/types.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/agent_classifier.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/apply.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/catalog.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/llm_backend.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/pipeline.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/presets/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/presets/constraint_templates.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/presets/range_presets.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/recommendations.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/benchmarks.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/objectives.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/config_generator/types.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/best_config_runtime.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/cache_policy.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/ci_approval.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/config_state_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/constants.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/cost_enforcement.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/cost_estimator.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/evaluator_wrapper.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/exception_handler.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/execution_policy_runtime.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/license.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/logger_facade.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/mandatory_metrics.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/meta_types.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/metadata_helpers.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/metric_registry.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/metrics_aggregator.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/namespace.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/objectives.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/optimization_pipeline.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/optimized_function.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/orchestrator_helpers.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/parallel_execution_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/progress_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/result_selection.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/sample_budget.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/samplers/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/samplers/random_sampler.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/session_context.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/session_types.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/stat_significance.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/stop_condition_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/stop_conditions.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/trace_env.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/tracing.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/trial_context.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/trial_result_factory.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/types.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/types_ext.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/utils.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core/workflow_trace_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core_metrics/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core_metrics/client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core_metrics/config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/core_metrics/dtos.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/defaults.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/effectuation/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/effectuation/contracts.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/effectuation/strategies/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/effectuation/strategies/framework_param.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/effectuation/strategies/self_consistency.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluation/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluation/client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluation/config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluation/dtos.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/catalog_loader.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/dataset_registry.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/hybrid_api.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/local.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/metrics.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/metrics_tracker.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/evaluators/recommendations.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/_bootstrap.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/_demo.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/anthropic.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/aws.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/azure.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/gcp.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/gemini.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/groq.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/litellm_any.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/manifest.json +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/openai.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/openrouter.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/providers/qa_samples.jsonl +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/quickstart/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/quickstart/__main__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/quickstart/_env.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/quickstart/publish_and_verify.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/examples/tutorial_bootstrap.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/backend_provider.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/example_synth.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/llm_provider.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/loop.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/models.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/options.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/prompt_rewriter.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/artifacts.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/buffer.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/document.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/edits.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/prompts.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/reflection.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/schedule.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/slow_update.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/splits.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/trainer.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/skill_train/trainer_result.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/generation/validators.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/guaranteed_modes.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hooks/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hooks/config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hooks/installer.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hooks/validator.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/discovery.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/http_transport.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/lifecycle.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/mcp_transport.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/protocol.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/hybrid/transport.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/activation.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/base.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/base_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/bedrock_client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/dspy_adapter.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/framework_override.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langchain/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langchain/handler.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langfuse/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langfuse/callback.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langfuse/client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/langfuse/tracker.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/anthropic_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/base_llm_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/bedrock_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/cohere_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/gemini_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/huggingface_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/langchain/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/langchain/base.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/langchain_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/litellm_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/mistral_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/openai.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/llms/openai_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/mappings.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/base.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/cache.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/model_discovery/registry.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/observability/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/observability/mlflow.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/observability/wandb.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/observability/workflow_traces.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/plugin_registry.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/providers.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/pydantic_ai/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/pydantic_ai/_types.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/pydantic_ai/handler.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/pydantic_ai/plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/discovery.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/message_coercion.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/mock_adapter.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/parameter_normalizer.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/response_wrapper.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/validation.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/utils/version_compat.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/vector_stores/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/vector_stores/base.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/integrations/wrappers.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/invokers/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/invokers/base.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/invokers/batch.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/invokers/local.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/invokers/streaming.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/adapters.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/bindings.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/canonical.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/cascade.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/certificates.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/composites.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/kinds.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/patterns.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/resolution.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/resolver.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/runtime.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/signals.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/knobs/telemetry.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/mcp/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/mcp/server.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/mcp/tools.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/agent_metrics.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/content_features.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/deepeval_metrics.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/ragas_metrics.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/metrics/registry.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/agent_spans.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/decorators.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/observability/dtos.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/base.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/batch_optimizers.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/cloud_optimizer.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/grid.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/random.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/registry.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/remote.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/remote_services.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/optimizers/results.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/loader.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/model.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/scaffold.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/staleness.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/playbook/validator.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/plugins/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/plugins/registry.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/projects/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/projects/client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/projects/config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/projects/dtos.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/prompts/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/prompts/client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/prompts/config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/prompts/dtos.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/providers/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/providers/validation.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/py.typed +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/reporting/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/reporting/example_map.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/audit.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/helpers.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/mfa.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/models.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/oidc.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/saml.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/sms.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/auth/totp.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/credentials.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/crypto_utils.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/deployment.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/encryption.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/enterprise.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/headers.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/input_validation.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/jwt_validator.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/rate_limiter.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/redaction.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/session_manager.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/security/tenant.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-debugging/SKILL.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-debugging/references/error-reference.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-integrations/SKILL.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-quickstart/references/environment-variables.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-run-optimization/SKILL.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-run-optimization/references/cost-management.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/storage/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/storage/local_storage.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/testing/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/traigent_client.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/traigent_integration.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/dataflow_strategy.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/detection_strategies.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/detection_types.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/detector.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/discovery.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/observation.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tuned_variables/py.typed +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/__main__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/models.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/objectives.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/options.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/promotion_gate.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/registry.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/spec_loader.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/spec_validator.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/tvl/statistics.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/artifact_fingerprints.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/batch_optimizer_utils.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/batch_processing.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/callbacks.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/console.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/constraints.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/cost_calculator.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/diagnostics.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/discrete_domains.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/env_config.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/error_handler.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/example_id.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/exceptions.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/file_versioning.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/function_identity.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/hashing.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/importance.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/incentives.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/insights.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/langchain_interceptor.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/litellm_interceptor.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/llm_response_parsing.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/local_analytics.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/logging.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/multi_objective.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/numpy_compat.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/objectives.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/optimization_analyzer.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/optimization_logger.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/pagination.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/persistence.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/results_table.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/retry.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/secure_path.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/url_security.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/utils/validation.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/visualization/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/visualization/plots.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/wrapper/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/wrapper/errors.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/wrapper/server.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent/wrapper/service.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent.egg-info/SOURCES.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent.egg-info/dependency_links.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent.egg-info/entry_points.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent.egg-info/requires.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent.egg-info/top_level.txt +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent_validation/__init__.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent_validation/base.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent_validation/plugins.py +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/traigent_validation/py.typed +0 -0
- {traigent-0.18.1.dev8 → traigent-0.18.1.dev10}/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.dev10
|
|
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
|
|
@@ -64,7 +64,7 @@ from traigent.cloud.privacy_operations import PrivacyOperations
|
|
|
64
64
|
from traigent.cloud.session_operations import SessionOperations
|
|
65
65
|
from traigent.cloud.session_types import SessionCreationResult
|
|
66
66
|
from traigent.cloud.subset_selection import SmartSubsetSelector
|
|
67
|
-
from traigent.cloud.trial_operations import TrialOperations
|
|
67
|
+
from traigent.cloud.trial_operations import TrialOperations, TrialSlotResult
|
|
68
68
|
from traigent.cloud.url_security import (
|
|
69
69
|
CloudUrlUnreachableError,
|
|
70
70
|
validate_cloud_base_url,
|
|
@@ -1879,16 +1879,15 @@ class BackendIntegratedClient:
|
|
|
1879
1879
|
self._trial_ops.register_trial_start_sync(session_id, trial_id, config),
|
|
1880
1880
|
)
|
|
1881
1881
|
|
|
1882
|
-
async def request_trial_slot(self, session_id: str) ->
|
|
1882
|
+
async def request_trial_slot(self, session_id: str) -> TrialSlotResult:
|
|
1883
1883
|
"""Acquire a backend-minted trial id (configuration_run) for a session.
|
|
1884
1884
|
Delegates to trial_operations module.
|
|
1885
1885
|
|
|
1886
1886
|
Returns:
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
declined). ``None`` never means "use a client id".
|
|
1887
|
+
A neutral slot result: acquired backend trial id, explicit
|
|
1888
|
+
optimization-complete signal, or unavailable/error.
|
|
1890
1889
|
"""
|
|
1891
|
-
return
|
|
1890
|
+
return await self._trial_ops.request_trial_slot(session_id)
|
|
1892
1891
|
|
|
1893
1892
|
def _generate_trial_id(
|
|
1894
1893
|
self,
|
|
@@ -11,6 +11,7 @@ import concurrent.futures
|
|
|
11
11
|
import hashlib
|
|
12
12
|
import json
|
|
13
13
|
import re
|
|
14
|
+
from dataclasses import dataclass
|
|
14
15
|
from datetime import UTC, datetime
|
|
15
16
|
from typing import TYPE_CHECKING, Any
|
|
16
17
|
|
|
@@ -42,6 +43,30 @@ if TYPE_CHECKING:
|
|
|
42
43
|
logger = get_logger(__name__)
|
|
43
44
|
|
|
44
45
|
|
|
46
|
+
@dataclass(frozen=True)
|
|
47
|
+
class TrialSlotResult:
|
|
48
|
+
"""Neutral result for a backend trial-slot request."""
|
|
49
|
+
|
|
50
|
+
trial_id: str | None = None
|
|
51
|
+
optimization_complete: bool = False
|
|
52
|
+
reason: str | None = None
|
|
53
|
+
|
|
54
|
+
def __bool__(self) -> bool:
|
|
55
|
+
return bool(self.trial_id)
|
|
56
|
+
|
|
57
|
+
@classmethod
|
|
58
|
+
def acquired(cls, trial_id: str) -> "TrialSlotResult":
|
|
59
|
+
return cls(trial_id=trial_id)
|
|
60
|
+
|
|
61
|
+
@classmethod
|
|
62
|
+
def complete(cls, reason: str | None = None) -> "TrialSlotResult":
|
|
63
|
+
return cls(optimization_complete=True, reason=reason)
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def unavailable(cls) -> "TrialSlotResult":
|
|
67
|
+
return cls()
|
|
68
|
+
|
|
69
|
+
|
|
45
70
|
class TrialOperations:
|
|
46
71
|
"""Handles trial management operations."""
|
|
47
72
|
|
|
@@ -380,7 +405,7 @@ class TrialOperations:
|
|
|
380
405
|
async def request_trial_slot(
|
|
381
406
|
self,
|
|
382
407
|
session_id: str,
|
|
383
|
-
) ->
|
|
408
|
+
) -> TrialSlotResult:
|
|
384
409
|
"""Acquire a BACKEND-minted trial id (configuration_run) for a session.
|
|
385
410
|
|
|
386
411
|
The backend mints configuration_run ids only through its
|
|
@@ -392,25 +417,26 @@ class TrialOperations:
|
|
|
392
417
|
and the backend's own suggested config is irrelevant to the SDK.
|
|
393
418
|
|
|
394
419
|
Returns:
|
|
395
|
-
|
|
396
|
-
acquired
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
trial
|
|
420
|
+
A neutral slot result. ``trial_id`` means a backend-minted slot was
|
|
421
|
+
acquired. ``optimization_complete`` means a successful next-trial
|
|
422
|
+
response explicitly returned ``should_continue=False`` without a
|
|
423
|
+
trial id. Any other no-slot/error condition returns an unavailable
|
|
424
|
+
result; callers still fail closed on it (Rule 2: no fake trial
|
|
425
|
+
acknowledgment).
|
|
400
426
|
"""
|
|
401
|
-
# Skip backend calls in offline mode —
|
|
402
|
-
# "skipped" from "acquired" (Rule 2: no fake completion).
|
|
427
|
+
# Skip backend calls in offline mode — an unavailable result lets
|
|
428
|
+
# callers distinguish "skipped" from "acquired" (Rule 2: no fake completion).
|
|
403
429
|
if is_backend_offline():
|
|
404
430
|
logger.debug(
|
|
405
431
|
"Offline mode: skipping trial-slot request for session %s",
|
|
406
432
|
session_id,
|
|
407
433
|
)
|
|
408
|
-
return
|
|
434
|
+
return TrialSlotResult.unavailable()
|
|
409
435
|
self._raise_if_backend_egress_disabled("get next trial")
|
|
410
436
|
|
|
411
437
|
if not AIOHTTP_AVAILABLE:
|
|
412
438
|
logger.warning("aiohttp not available, skipping trial-slot request")
|
|
413
|
-
return
|
|
439
|
+
return TrialSlotResult.unavailable()
|
|
414
440
|
|
|
415
441
|
try:
|
|
416
442
|
headers = await self.client.auth_manager.augment_headers(
|
|
@@ -446,7 +472,21 @@ class TrialOperations:
|
|
|
446
472
|
trial_id,
|
|
447
473
|
session_id,
|
|
448
474
|
)
|
|
449
|
-
return trial_id
|
|
475
|
+
return TrialSlotResult.acquired(trial_id)
|
|
476
|
+
if (
|
|
477
|
+
isinstance(data, dict)
|
|
478
|
+
and data.get("should_continue") is False
|
|
479
|
+
):
|
|
480
|
+
reason = data.get("stop_reason") or data.get("reason")
|
|
481
|
+
logger.info(
|
|
482
|
+
"Backend next-trial completed optimization for session %s "
|
|
483
|
+
"(reason=%s)",
|
|
484
|
+
session_id,
|
|
485
|
+
reason,
|
|
486
|
+
)
|
|
487
|
+
return TrialSlotResult.complete(
|
|
488
|
+
str(reason) if reason else None
|
|
489
|
+
)
|
|
450
490
|
logger.info(
|
|
451
491
|
"Backend next-trial returned no slot for session %s "
|
|
452
492
|
"(should_continue=%s)",
|
|
@@ -457,7 +497,7 @@ class TrialOperations:
|
|
|
457
497
|
else None
|
|
458
498
|
),
|
|
459
499
|
)
|
|
460
|
-
return
|
|
500
|
+
return TrialSlotResult.unavailable()
|
|
461
501
|
if response.status == 403:
|
|
462
502
|
error_msg = await response.text()
|
|
463
503
|
self._log_ownership_forbidden(
|
|
@@ -466,26 +506,26 @@ class TrialOperations:
|
|
|
466
506
|
response.status,
|
|
467
507
|
error_msg,
|
|
468
508
|
)
|
|
469
|
-
return
|
|
509
|
+
return TrialSlotResult.unavailable()
|
|
470
510
|
logger.warning(
|
|
471
511
|
"Failed to acquire trial slot for session %s: HTTP %s",
|
|
472
512
|
session_id,
|
|
473
513
|
response.status,
|
|
474
514
|
)
|
|
475
|
-
return
|
|
515
|
+
return TrialSlotResult.unavailable()
|
|
476
516
|
except Exception as exc:
|
|
477
517
|
if is_backend_offline():
|
|
478
518
|
logger.debug(
|
|
479
519
|
"Offline mode: trial-slot request encountered %s; skipping",
|
|
480
520
|
exc,
|
|
481
521
|
)
|
|
482
|
-
return
|
|
522
|
+
return TrialSlotResult.unavailable()
|
|
483
523
|
logger.exception(
|
|
484
524
|
"Error requesting trial slot for session %s (%s)",
|
|
485
525
|
session_id,
|
|
486
526
|
self._describe_backend(),
|
|
487
527
|
)
|
|
488
|
-
return
|
|
528
|
+
return TrialSlotResult.unavailable()
|
|
489
529
|
|
|
490
530
|
def _extract_measures_from_metrics(
|
|
491
531
|
self, metrics: dict[str, Any]
|
|
@@ -8,6 +8,7 @@ import asyncio
|
|
|
8
8
|
import inspect
|
|
9
9
|
import threading
|
|
10
10
|
from collections.abc import Callable, Coroutine
|
|
11
|
+
from dataclasses import dataclass
|
|
11
12
|
from typing import TYPE_CHECKING, Any, cast
|
|
12
13
|
|
|
13
14
|
from traigent._version import get_version
|
|
@@ -133,6 +134,27 @@ def _backend_disabled_label(reason: SessionCreationFailureReason | None) -> str:
|
|
|
133
134
|
return "unknown"
|
|
134
135
|
|
|
135
136
|
|
|
137
|
+
@dataclass(frozen=True)
|
|
138
|
+
class BackendTrialSlotAcquisition:
|
|
139
|
+
"""Core-local interpretation of a backend trial-slot request."""
|
|
140
|
+
|
|
141
|
+
trial_id: str | None = None
|
|
142
|
+
optimization_complete: bool = False
|
|
143
|
+
reason: str | None = None
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
@dataclass(frozen=True)
|
|
147
|
+
class BackendTrialSubmissionOutcome:
|
|
148
|
+
"""Terminal submission outcome consumed by the orchestrator."""
|
|
149
|
+
|
|
150
|
+
optimization_complete: bool = False
|
|
151
|
+
reason: str | None = None
|
|
152
|
+
|
|
153
|
+
@classmethod
|
|
154
|
+
def complete(cls, reason: str | None = None) -> BackendTrialSubmissionOutcome:
|
|
155
|
+
return cls(optimization_complete=True, reason=reason)
|
|
156
|
+
|
|
157
|
+
|
|
136
158
|
def _format_untracked_warning_block(
|
|
137
159
|
result: SessionCreationResult,
|
|
138
160
|
classification: SessionCreationFailureClassification,
|
|
@@ -940,7 +962,7 @@ class BackendSessionManager:
|
|
|
940
962
|
session_id: str | None,
|
|
941
963
|
dataset_name: str = "dataset",
|
|
942
964
|
content_scores: dict[str, dict[int, float]] | None = None,
|
|
943
|
-
) -> bool:
|
|
965
|
+
) -> bool | BackendTrialSubmissionOutcome:
|
|
944
966
|
"""Submit trial to backend.
|
|
945
967
|
|
|
946
968
|
Args:
|
|
@@ -951,7 +973,9 @@ class BackendSessionManager:
|
|
|
951
973
|
per-run features once at session creation.
|
|
952
974
|
|
|
953
975
|
Returns:
|
|
954
|
-
True if submission succeeded
|
|
976
|
+
True if submission succeeded, False if skipped, or a terminal
|
|
977
|
+
optimization-complete outcome when the backend gracefully closed the
|
|
978
|
+
cloud run.
|
|
955
979
|
"""
|
|
956
980
|
if self._egress_disabled() or not self._backend_client or not session_id:
|
|
957
981
|
return False
|
|
@@ -990,12 +1014,14 @@ class BackendSessionManager:
|
|
|
990
1014
|
)
|
|
991
1015
|
return False
|
|
992
1016
|
|
|
993
|
-
await self._log_trial_to_backend(
|
|
1017
|
+
submission_outcome = await self._log_trial_to_backend(
|
|
994
1018
|
session_id=session_id,
|
|
995
1019
|
trial_result=trial_result,
|
|
996
1020
|
score=score,
|
|
997
1021
|
metadata=trial_metadata,
|
|
998
1022
|
)
|
|
1023
|
+
if submission_outcome is not None and submission_outcome.optimization_complete:
|
|
1024
|
+
return submission_outcome
|
|
999
1025
|
|
|
1000
1026
|
return True
|
|
1001
1027
|
|
|
@@ -1045,36 +1071,53 @@ class BackendSessionManager:
|
|
|
1045
1071
|
"""
|
|
1046
1072
|
return (session_id, trial_id) in self._acknowledged_trials
|
|
1047
1073
|
|
|
1074
|
+
@staticmethod
|
|
1075
|
+
def _coerce_backend_trial_slot(slot: Any) -> BackendTrialSlotAcquisition:
|
|
1076
|
+
"""Normalize legacy string/None and structured slot results."""
|
|
1077
|
+
|
|
1078
|
+
if isinstance(slot, str) and slot:
|
|
1079
|
+
return BackendTrialSlotAcquisition(trial_id=slot)
|
|
1080
|
+
if getattr(slot, "optimization_complete", False) is True:
|
|
1081
|
+
reason = getattr(slot, "reason", None)
|
|
1082
|
+
return BackendTrialSlotAcquisition(
|
|
1083
|
+
optimization_complete=True,
|
|
1084
|
+
reason=str(reason) if reason else None,
|
|
1085
|
+
)
|
|
1086
|
+
trial_id = getattr(slot, "trial_id", None)
|
|
1087
|
+
if isinstance(trial_id, str) and trial_id:
|
|
1088
|
+
return BackendTrialSlotAcquisition(trial_id=trial_id)
|
|
1089
|
+
return BackendTrialSlotAcquisition()
|
|
1090
|
+
|
|
1048
1091
|
async def _acquire_backend_trial_id(
|
|
1049
1092
|
self, session_id: str, trial_result: TrialResult
|
|
1050
|
-
) ->
|
|
1093
|
+
) -> BackendTrialSlotAcquisition:
|
|
1051
1094
|
"""Acquire (once per started trial) a backend-minted trial id.
|
|
1052
1095
|
|
|
1053
1096
|
Reuses a previously acquired backend id for the same client trial so
|
|
1054
|
-
retries of submit_trial don't burn extra slots. Returns
|
|
1055
|
-
|
|
1056
|
-
|
|
1097
|
+
retries of submit_trial don't burn extra slots. Returns a structured
|
|
1098
|
+
outcome so graceful backend completion is not collapsed into the genuine
|
|
1099
|
+
no-slot/error path.
|
|
1057
1100
|
"""
|
|
1058
1101
|
client = self._backend_client
|
|
1059
1102
|
if self._egress_disabled() or client is None:
|
|
1060
|
-
return
|
|
1103
|
+
return BackendTrialSlotAcquisition()
|
|
1061
1104
|
|
|
1062
1105
|
client_trial_id = str(trial_result.trial_id)
|
|
1063
1106
|
if (trial_result.metadata or {}).get("backend_trial_id_acquired"):
|
|
1064
1107
|
self._started_trials.add((session_id, client_trial_id))
|
|
1065
|
-
return client_trial_id
|
|
1108
|
+
return BackendTrialSlotAcquisition(trial_id=client_trial_id)
|
|
1066
1109
|
# If this trial already mapped to an acknowledged backend id, reuse it.
|
|
1067
1110
|
for sid, bid in self._started_trials:
|
|
1068
1111
|
if sid == session_id and bid == client_trial_id:
|
|
1069
1112
|
# client_trial_id already IS a backend id from a prior pass.
|
|
1070
|
-
return client_trial_id
|
|
1113
|
+
return BackendTrialSlotAcquisition(trial_id=client_trial_id)
|
|
1071
1114
|
|
|
1072
1115
|
requester = getattr(client, "request_trial_slot", None)
|
|
1073
1116
|
if not callable(requester):
|
|
1074
|
-
return
|
|
1117
|
+
return BackendTrialSlotAcquisition()
|
|
1075
1118
|
try:
|
|
1076
1119
|
slot = requester(session_id)
|
|
1077
|
-
|
|
1120
|
+
slot_result = await slot if inspect.isawaitable(slot) else slot
|
|
1078
1121
|
except Exception as exc:
|
|
1079
1122
|
logger.debug(
|
|
1080
1123
|
"Backend trial-slot request failed for session %s trial %s: %s",
|
|
@@ -1082,12 +1125,12 @@ class BackendSessionManager:
|
|
|
1082
1125
|
client_trial_id,
|
|
1083
1126
|
exc,
|
|
1084
1127
|
)
|
|
1085
|
-
return
|
|
1128
|
+
return BackendTrialSlotAcquisition()
|
|
1086
1129
|
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
return
|
|
1130
|
+
acquisition = self._coerce_backend_trial_slot(slot_result)
|
|
1131
|
+
if acquisition.trial_id:
|
|
1132
|
+
self._started_trials.add((session_id, acquisition.trial_id))
|
|
1133
|
+
return acquisition
|
|
1091
1134
|
|
|
1092
1135
|
async def _log_trial_to_backend(
|
|
1093
1136
|
self,
|
|
@@ -1095,14 +1138,14 @@ class BackendSessionManager:
|
|
|
1095
1138
|
trial_result: TrialResult,
|
|
1096
1139
|
score: float | None,
|
|
1097
1140
|
metadata: dict[str, Any],
|
|
1098
|
-
) -> None:
|
|
1141
|
+
) -> BackendTrialSubmissionOutcome | None:
|
|
1099
1142
|
"""Submit trial metrics to backend when possible."""
|
|
1100
1143
|
|
|
1101
1144
|
if self._egress_disabled() or not self._backend_client or not session_id:
|
|
1102
|
-
return
|
|
1145
|
+
return None
|
|
1103
1146
|
|
|
1104
1147
|
if not self._backend_tracking_enabled:
|
|
1105
|
-
return
|
|
1148
|
+
return None
|
|
1106
1149
|
|
|
1107
1150
|
sanitized_score = float(score) if score is not None else None
|
|
1108
1151
|
metadata_payload = dict(metadata)
|
|
@@ -1122,7 +1165,7 @@ class BackendSessionManager:
|
|
|
1122
1165
|
session_id,
|
|
1123
1166
|
trial_result.trial_id,
|
|
1124
1167
|
)
|
|
1125
|
-
return
|
|
1168
|
+
return None
|
|
1126
1169
|
|
|
1127
1170
|
logger.debug(
|
|
1128
1171
|
"Submitting trial %s for session %s",
|
|
@@ -1151,7 +1194,7 @@ class BackendSessionManager:
|
|
|
1151
1194
|
session_id,
|
|
1152
1195
|
trial_result.trial_id,
|
|
1153
1196
|
)
|
|
1154
|
-
return
|
|
1197
|
+
return None
|
|
1155
1198
|
|
|
1156
1199
|
# Build payload for backend session endpoint.
|
|
1157
1200
|
metrics_payload: dict[str, Any] = dict(trial_result.metrics or {})
|
|
@@ -1194,9 +1237,17 @@ class BackendSessionManager:
|
|
|
1194
1237
|
# "Trial ... not found in session". So acquire a backend slot and
|
|
1195
1238
|
# rebind this trial to it BEFORE submitting. The optimizer still
|
|
1196
1239
|
# owns the config; the slot is purely the backend's trial handle.
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1240
|
+
acquisition = await self._acquire_backend_trial_id(session_id, trial_result)
|
|
1241
|
+
if acquisition.optimization_complete:
|
|
1242
|
+
logger.info(
|
|
1243
|
+
"Backend reported optimization complete for session %s while "
|
|
1244
|
+
"submitting client trial %s (reason=%s)",
|
|
1245
|
+
session_id,
|
|
1246
|
+
trial_result.trial_id,
|
|
1247
|
+
acquisition.reason,
|
|
1248
|
+
)
|
|
1249
|
+
return BackendTrialSubmissionOutcome.complete(acquisition.reason)
|
|
1250
|
+
backend_trial_id = acquisition.trial_id
|
|
1200
1251
|
if backend_trial_id is None:
|
|
1201
1252
|
# Fail closed: no acknowledged backend slot ⇒ NO submission and
|
|
1202
1253
|
# NO acknowledgment. The certified-selection report will then
|
|
@@ -1210,7 +1261,7 @@ class BackendSessionManager:
|
|
|
1210
1261
|
session_id,
|
|
1211
1262
|
trial_result.trial_id,
|
|
1212
1263
|
)
|
|
1213
|
-
return
|
|
1264
|
+
return None
|
|
1214
1265
|
# Rebind in place: _best_trial_cached holds this same object, so the
|
|
1215
1266
|
# incumbent's trial_id becomes the backend id the report needs.
|
|
1216
1267
|
trial_result.trial_id = backend_trial_id
|
|
@@ -101,6 +101,7 @@ from traigent.core.workflow_trace_manager import WorkflowTraceManager
|
|
|
101
101
|
from traigent.evaluators.base import BaseEvaluator, Dataset
|
|
102
102
|
from traigent.metrics.registry import clone_registry
|
|
103
103
|
from traigent.optimizers.base import BaseOptimizer
|
|
104
|
+
from traigent.optimizers.interactive_optimizer import CloudBrainOptimizationComplete
|
|
104
105
|
from traigent.tvl.promotion_gate import PromotionGate
|
|
105
106
|
from traigent.utils.callbacks import CallbackManager, OptimizationCallback, ProgressInfo
|
|
106
107
|
from traigent.utils.env_config import ( # noqa: F401
|
|
@@ -1378,6 +1379,7 @@ class OptimizationOrchestrator:
|
|
|
1378
1379
|
*,
|
|
1379
1380
|
log_on_success: bool,
|
|
1380
1381
|
permit: Permit | None = None,
|
|
1382
|
+
submit_to_backend: bool = True,
|
|
1381
1383
|
) -> int:
|
|
1382
1384
|
"""Update orchestrator state after a single trial completes.
|
|
1383
1385
|
|
|
@@ -1443,13 +1445,14 @@ class OptimizationOrchestrator:
|
|
|
1443
1445
|
# on _consumed_examples during parallel trial execution
|
|
1444
1446
|
self._register_examples_attempted(trial_result)
|
|
1445
1447
|
|
|
1446
|
-
|
|
1448
|
+
submission_outcome: Any = None
|
|
1449
|
+
if submit_to_backend and self.backend_client and session_id:
|
|
1447
1450
|
pre_submit_trial_id = (
|
|
1448
1451
|
str(trial_result.trial_id)
|
|
1449
1452
|
if getattr(trial_result, "trial_id", None) is not None
|
|
1450
1453
|
else None
|
|
1451
1454
|
)
|
|
1452
|
-
await self.backend_session_manager.submit_trial(
|
|
1455
|
+
submission_outcome = await self.backend_session_manager.submit_trial(
|
|
1453
1456
|
trial_result=trial_result,
|
|
1454
1457
|
session_id=session_id,
|
|
1455
1458
|
dataset_name=getattr(self, "_dataset_name", "dataset"),
|
|
@@ -1487,6 +1490,12 @@ class OptimizationOrchestrator:
|
|
|
1487
1490
|
if should_log:
|
|
1488
1491
|
self._log_progress(new_count)
|
|
1489
1492
|
|
|
1493
|
+
if getattr(submission_outcome, "optimization_complete", False) is True:
|
|
1494
|
+
reason = getattr(submission_outcome, "reason", None)
|
|
1495
|
+
raise CloudBrainOptimizationComplete(
|
|
1496
|
+
str(reason) if reason else "cloud brain completed optimization"
|
|
1497
|
+
)
|
|
1498
|
+
|
|
1490
1499
|
return new_count
|
|
1491
1500
|
|
|
1492
1501
|
def _calculate_parallel_batch_caps(
|
|
@@ -1838,6 +1847,9 @@ class OptimizationOrchestrator:
|
|
|
1838
1847
|
- Exceptions (due to return_exceptions=True in gather)
|
|
1839
1848
|
- None for trials cancelled due to cost limit
|
|
1840
1849
|
"""
|
|
1850
|
+
terminal_completion: CloudBrainOptimizationComplete | None = None
|
|
1851
|
+
submit_to_backend = True
|
|
1852
|
+
|
|
1841
1853
|
for batch_offset, (config, permitted_result, optuna_id) in enumerate(
|
|
1842
1854
|
zip(scheduled_configs, results, scheduled_optuna_ids, strict=False)
|
|
1843
1855
|
):
|
|
@@ -1895,7 +1907,13 @@ class OptimizationOrchestrator:
|
|
|
1895
1907
|
optuna_trial_id=optuna_id,
|
|
1896
1908
|
log_on_success=False,
|
|
1897
1909
|
permit=permit,
|
|
1910
|
+
submit_to_backend=submit_to_backend,
|
|
1898
1911
|
)
|
|
1912
|
+
except CloudBrainOptimizationComplete as complete:
|
|
1913
|
+
if terminal_completion is None:
|
|
1914
|
+
terminal_completion = complete
|
|
1915
|
+
submit_to_backend = False
|
|
1916
|
+
trial_count = len(self._trials)
|
|
1899
1917
|
except Exception:
|
|
1900
1918
|
# Release permit on any exception to prevent stranding
|
|
1901
1919
|
# (only if permit is still active - wasn't already released)
|
|
@@ -1906,6 +1924,8 @@ class OptimizationOrchestrator:
|
|
|
1906
1924
|
permit.id,
|
|
1907
1925
|
)
|
|
1908
1926
|
raise
|
|
1927
|
+
if terminal_completion is not None:
|
|
1928
|
+
raise terminal_completion
|
|
1909
1929
|
return trial_count
|
|
1910
1930
|
|
|
1911
1931
|
def _apply_cap_and_prevent_excess(
|
|
@@ -2588,6 +2608,10 @@ class OptimizationOrchestrator:
|
|
|
2588
2608
|
self._stop_reason = "vendor_error"
|
|
2589
2609
|
return trial_count, "break"
|
|
2590
2610
|
return trial_count, "continue" # User chose to resume
|
|
2611
|
+
except CloudBrainOptimizationComplete as complete:
|
|
2612
|
+
self._stop_reason = cast(StopReason, complete.stop_reason)
|
|
2613
|
+
logger.info("Cloud brain completed optimization: %s", complete.reason)
|
|
2614
|
+
return len(self._trials), "break"
|
|
2591
2615
|
|
|
2592
2616
|
@staticmethod
|
|
2593
2617
|
def _vendor_retry_settings() -> tuple[int, float]:
|
|
@@ -431,11 +431,7 @@ class TrialLifecycle:
|
|
|
431
431
|
lambda: frozenset(),
|
|
432
432
|
)(),
|
|
433
433
|
)
|
|
434
|
-
|
|
435
|
-
metadata = dict(result.metadata or {})
|
|
436
|
-
metadata["backend_trial_id_acquired"] = True
|
|
437
|
-
metadata["backend_trial_id_source"] = "cloud_brain"
|
|
438
|
-
result.metadata = metadata
|
|
434
|
+
self._mark_backend_trial_id_acquired(result, backend_trial_id)
|
|
439
435
|
self._apply_budget_metadata(result, closure, budget_exhausted)
|
|
440
436
|
self._apply_effectuation_metadata(result, func)
|
|
441
437
|
|
|
@@ -463,6 +459,7 @@ class TrialLifecycle:
|
|
|
463
459
|
prune_error,
|
|
464
460
|
is_pruned=True,
|
|
465
461
|
)
|
|
462
|
+
self._mark_backend_trial_id_acquired(result, backend_trial_id)
|
|
466
463
|
self._apply_effectuation_metadata(result, func)
|
|
467
464
|
record_trial_result(span, status="pruned", error=str(prune_error))
|
|
468
465
|
end_time = time.time()
|
|
@@ -479,6 +476,7 @@ class TrialLifecycle:
|
|
|
479
476
|
optuna_trial_id,
|
|
480
477
|
constraint_error,
|
|
481
478
|
)
|
|
479
|
+
self._mark_backend_trial_id_acquired(result, backend_trial_id)
|
|
482
480
|
self._apply_effectuation_metadata(result, func)
|
|
483
481
|
record_trial_result(span, status="failed", error=str(constraint_error))
|
|
484
482
|
end_time = time.time()
|
|
@@ -523,6 +521,7 @@ class TrialLifecycle:
|
|
|
523
521
|
optuna_trial_id,
|
|
524
522
|
exc,
|
|
525
523
|
)
|
|
524
|
+
self._mark_backend_trial_id_acquired(result, backend_trial_id)
|
|
526
525
|
self._apply_effectuation_metadata(result, func)
|
|
527
526
|
record_trial_result(span, status="failed", error=str(exc))
|
|
528
527
|
end_time = time.time()
|
|
@@ -533,6 +532,18 @@ class TrialLifecycle:
|
|
|
533
532
|
if lease is not None and closure is None:
|
|
534
533
|
closure = self._finalize_budget_lease(lease)
|
|
535
534
|
|
|
535
|
+
@staticmethod
|
|
536
|
+
def _mark_backend_trial_id_acquired(
|
|
537
|
+
result: TrialResult,
|
|
538
|
+
backend_trial_id: str | None,
|
|
539
|
+
) -> None:
|
|
540
|
+
if not isinstance(backend_trial_id, str) or not backend_trial_id:
|
|
541
|
+
return
|
|
542
|
+
metadata = dict(result.metadata or {})
|
|
543
|
+
metadata["backend_trial_id_acquired"] = True
|
|
544
|
+
metadata["backend_trial_id_source"] = "cloud_brain"
|
|
545
|
+
result.metadata = metadata
|
|
546
|
+
|
|
536
547
|
def _apply_effectuation_metadata(
|
|
537
548
|
self,
|
|
538
549
|
result: TrialResult,
|