traigent 0.21.0.dev2__tar.gz → 0.21.1.dev0__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.21.0.dev2/traigent.egg-info → traigent-0.21.1.dev0}/PKG-INFO +1 -1
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/pyproject.toml +1 -1
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/api_operations.py +14 -2
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/backend_client.py +30 -3
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/client.py +34 -26
- traigent-0.21.1.dev0/traigent/cloud/session_budgets.py +82 -0
- traigent-0.21.1.dev0/traigent/cloud/session_objectives.py +78 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/session_operations.py +50 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/sync_manager.py +48 -19
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/trial_operations.py +22 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/backend_session_manager.py +344 -89
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/orchestrator.py +32 -16
- traigent-0.21.1.dev0/traigent/utils/trial_costs.py +63 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0/traigent.egg-info}/PKG-INFO +1 -1
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent.egg-info/SOURCES.txt +3 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/CHANGELOG.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/COMMERCIAL-LICENSE.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/CONTRIBUTING.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/CONTRIBUTOR-LICENSING.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/DISCLAIMER.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/LICENSE +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/MANIFEST.in +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/NOTICE +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/README.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/SECURITY.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/LOCAL_CI_GATE.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/README.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/SYNC_MAP.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/agent-skill.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/complete-function-specification.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/decorator-reference.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/enterprise-beta-api.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/interactive_optimizer.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/telemetry.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/api-reference/thread-pool-examples.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/ARCHITECTURE.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/cost-architecture-validation.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/execution_mode_follow_up.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/integrations-inventory.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/plugin_architecture.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/project-structure.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/architecture/stop_conditions.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/concepts/composite-knob-ir.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/concepts/composite-knobs.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/concepts/guided-generation.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/CONTRIBUTING.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/README.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/SECURITY.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/aikido_triage.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/code_review_instructions.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/contributing/test-quality-guide.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/demos/README.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/API_PATTERNS.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/LEARNING_ROADMAP.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/QUICK_REFERENCE.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/README.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/START_HERE.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/examples/TROUBLESHOOTING.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/fake-completion-tracking.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/feature_matrices/README.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/README.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/authentication.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/constraint-dsl.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/dataflow-detection.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/framework_override_enhanced_features.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/mcp-server.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/observability-spans.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/onboarding.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/prompt_management.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/recommendations.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/safety-gates.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/seamless_injection.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/strategy-presets.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/features/strict_metrics_nulls.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/GETTING_STARTED.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/README.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/installation.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/minimal-integration.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/getting-started/testing.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/evaluation.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/execution-mode-migration.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/execution-modes.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/js-bridge.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/llm_plugin_migration_guide.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/parallel-configuration.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/guides/secrets_management.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/hybrid-mode-api-contract.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/hybrid-mode-client-guide.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/operations/azure_openai.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/operations/bedrock.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/operations/google_gemini.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/security/trust_model.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/concepts/composite-knob-ir.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/concepts/composite-knobs.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/concepts/guided-generation.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/schema.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/tagging_tracking.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/traceability/taxonomy_reference.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/README.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/agent_optimization.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/choosing_optimization_model.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/configuration-spaces.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/evaluation_guide.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/injection_modes.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/interactive_optimization.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/smart_optimization.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/user-guide/tuned_variables.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/docs/walkthrough.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-all.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-analytics.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-bayesian.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-chroma.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-dev.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-hybrid.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-integrations.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-security.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements-test.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/requirements/requirements.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/setup.cfg +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/_version.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/adapters/execution_adapter.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/admin/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/admin/client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/admin/config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/admin/dtos.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/agents/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/agents/config_mapper.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/agents/executor.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/agents/platforms.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/agents/specification_generator.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/anomaly.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/cost_optimization.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/example_insights.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/intelligence.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/meta_learning.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/next_steps.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/optimization_plan.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/predictive.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/render.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics/scheduling.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics_mcp/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics_mcp/server.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/analytics_mcp/tools.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/agent_inference.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/config_builder.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/config_space.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/constraint_builders.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/constraints.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/decorators.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/functions.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/parameter_ranges.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/parameter_validator.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/safety.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/strategy_presets.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/types.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/api/validation_protocol.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/auth_commands.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/detect_tvars_command.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/function_discovery.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/generate_config_command.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/hooks_commands.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/local_commands.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/main.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/next_steps_command.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/onboard_commands.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/optimization_validator.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/plan_command.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/playbook_commands.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/sync_commands.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cli/validation_types.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/_aiohttp_compat.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/agent_dtos.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/analytics_auth.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/analytics_client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/api_key_manager.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/async_batch_transport.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/auth.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/backend_bridges.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/backend_components.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/backend_synchronizer.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/benchmark_client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/billing.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/cloud_operations.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/credential_manager.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/credential_resolver.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/dataset_converter.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/dtos.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/governance.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/integration_manager.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/models.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/optimizer_client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/password_auth_handler.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/privacy_operations.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/production_mcp_client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/remote_guidance.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/resilient_client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/service.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/session_types.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/sessions.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/smart_pruning.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/subset_selection.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/token_manager.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/trial_tracker.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/url_security.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/user_agent.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/cloud/validators.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/api_keys.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/ast_transformer.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/backend_config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/context.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/feature_flags.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/models.yaml +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/parallel.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/project.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/provider_support.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/providers.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/runtime_injector.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/tenant.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config/types.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/agent_classifier.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/apply.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/catalog.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/llm_backend.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/pipeline.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/presets/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/presets/constraint_templates.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/presets/range_presets.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/recommendations.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/benchmarks.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/objectives.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/config_generator/types.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/best_config_runtime.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/cache_policy.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/ci_approval.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/config_state_manager.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/constants.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/cost_enforcement.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/cost_estimator.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/evaluator_wrapper.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/exception_handler.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/execution_policy_runtime.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/license.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/logger_facade.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/mandatory_metrics.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/meta_types.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/metadata_helpers.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/metric_registry.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/metrics_aggregator.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/namespace.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/objectives.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/optimization_pipeline.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/optimized_function.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/orchestrator_helpers.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/parallel_execution_manager.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/progress_manager.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/result_selection.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/sample_budget.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/samplers/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/samplers/random_sampler.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/session_context.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/session_types.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/stat_significance.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/stop_condition_manager.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/stop_conditions.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/trace_env.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/tracing.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/trial_context.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/trial_lifecycle.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/trial_result_factory.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/types.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/types_ext.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/utils.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core/workflow_trace_manager.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core_metrics/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core_metrics/client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core_metrics/config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/core_metrics/dtos.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/defaults.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/effectuation/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/effectuation/contracts.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/effectuation/strategies/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/effectuation/strategies/framework_param.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/effectuation/strategies/self_consistency.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluation/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluation/client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluation/config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluation/dtos.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/base.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/catalog_loader.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/dataset_registry.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/hybrid_api.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/local.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/metrics.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/metrics_tracker.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/evaluators/recommendations.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/_portal.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/_bootstrap.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/_demo.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/anthropic.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/aws.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/azure.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/gcp.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/gemini.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/groq.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/litellm_any.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/manifest.json +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/openai.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/openrouter.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/providers/qa_samples.jsonl +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/quickstart/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/quickstart/__main__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/quickstart/_env.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/quickstart/publish_and_verify.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/examples/tutorial_bootstrap.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/backend_provider.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/example_synth.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/llm_provider.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/loop.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/models.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/options.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/prompt_rewriter.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/_deterministic_indices.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/artifacts.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/buffer.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/document.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/edits.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/prompts.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/reflection.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/schedule.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/slow_update.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/splits.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/trainer.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/skill_train/trainer_result.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/generation/validators.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/guaranteed_modes.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hooks/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hooks/config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hooks/installer.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hooks/validator.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/discovery.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/http_transport.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/lifecycle.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/mcp_transport.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/protocol.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/hybrid/transport.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/activation.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/base.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/base_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/bedrock_client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/dspy_adapter.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/framework_override.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langchain/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langchain/handler.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langfuse/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langfuse/callback.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langfuse/client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/langfuse/tracker.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/anthropic_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/base_llm_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/bedrock_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/cohere_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/gemini_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/huggingface_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/langchain/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/langchain/base.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/langchain_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/litellm_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/mistral_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/openai.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/llms/openai_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/mappings.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/base.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/cache.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/model_discovery/registry.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/observability/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/observability/mlflow.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/observability/wandb.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/observability/workflow_traces.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/plugin_registry.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/providers.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/pydantic_ai/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/pydantic_ai/_types.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/pydantic_ai/handler.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/pydantic_ai/plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/discovery.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/message_coercion.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/mock_adapter.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/parameter_normalizer.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/response_wrapper.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/validation.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/utils/version_compat.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/vector_stores/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/vector_stores/base.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/integrations/wrappers.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/invokers/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/invokers/base.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/invokers/batch.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/invokers/local.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/invokers/streaming.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/adapters.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/bindings.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/canonical.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/cascade.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/certificates.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/composites.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/kinds.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/patterns.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/resolution.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/resolver.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/runtime.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/signals.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/knobs/telemetry.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/mcp/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/mcp/server.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/mcp/tools.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/agent_metrics.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/content_features.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/deepeval_metrics.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/ragas_metrics.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/metrics/registry.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/agent_spans.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/decorators.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/observability/dtos.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/base.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/batch_optimizers.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/cloud_optimizer.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/grid.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/interactive_optimizer.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/random.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/registry.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/remote.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/remote_services.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/optimizers/results.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/loader.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/model.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/scaffold.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/staleness.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/playbook/validator.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/plugins/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/plugins/registry.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/projects/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/projects/client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/projects/config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/projects/dtos.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/prompts/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/prompts/client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/prompts/config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/prompts/dtos.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/providers/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/providers/validation.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/py.typed +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/reporting/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/reporting/example_map.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/audit.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/helpers.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/mfa.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/models.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/oidc.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/saml.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/sms.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/auth/totp.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/credentials.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/crypto_utils.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/deployment.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/encryption.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/enterprise.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/headers.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/input_validation.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/jwt_validator.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/rate_limiter.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/redaction.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/session_manager.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/security/tenant.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-debugging/SKILL.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-debugging/references/error-reference.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-integrations/SKILL.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-quickstart/references/environment-variables.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-run-optimization/SKILL.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-run-optimization/references/cost-management.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/storage/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/storage/local_storage.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/testing/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/traigent_client.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/traigent_integration.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/dataflow_strategy.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/detection_strategies.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/detection_types.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/detector.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/discovery.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/observation.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tuned_variables/py.typed +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/__main__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/models.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/objectives.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/options.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/promotion_gate.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/registry.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/spec_loader.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/spec_validator.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/tvl/statistics.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/artifact_fingerprints.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/batch_optimizer_utils.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/batch_processing.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/callbacks.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/console.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/constraints.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/cost_calculator.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/diagnostics.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/discrete_domains.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/env_config.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/error_handler.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/example_id.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/exceptions.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/file_versioning.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/function_identity.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/hashing.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/importance.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/incentives.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/insights.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/langchain_interceptor.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/litellm_interceptor.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/llm_response_parsing.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/local_analytics.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/logging.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/multi_objective.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/numpy_compat.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/objectives.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/optimization_analyzer.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/optimization_logger.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/pagination.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/persistence.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/results_table.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/retry.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/secure_path.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/url_security.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/utils/validation.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/visualization/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/visualization/plots.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/wrapper/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/wrapper/errors.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/wrapper/server.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent/wrapper/service.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent.egg-info/dependency_links.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent.egg-info/entry_points.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent.egg-info/requires.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent.egg-info/top_level.txt +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent_validation/__init__.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent_validation/base.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent_validation/plugins.py +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent_validation/py.typed +0 -0
- {traigent-0.21.0.dev2 → traigent-0.21.1.dev0}/traigent_validation/validators.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: traigent
|
|
3
|
-
Version: 0.21.
|
|
3
|
+
Version: 0.21.1.dev0
|
|
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
|
|
@@ -30,6 +30,8 @@ from traigent.cloud.models import (
|
|
|
30
30
|
SessionCreationResponse,
|
|
31
31
|
TrialResultSubmission,
|
|
32
32
|
)
|
|
33
|
+
from traigent.cloud.session_budgets import remember_cost_budget_armed_session
|
|
34
|
+
from traigent.cloud.session_objectives import normalize_typed_objectives
|
|
33
35
|
from traigent.cloud.smart_pruning import (
|
|
34
36
|
normalize_intermediate_report_payload,
|
|
35
37
|
normalize_smart_pruning_options,
|
|
@@ -523,9 +525,13 @@ class ApiOperations:
|
|
|
523
525
|
{"Content-Type": _JSON_CONTENT_TYPE}
|
|
524
526
|
)
|
|
525
527
|
try:
|
|
526
|
-
|
|
528
|
+
result = await self._post_session_creation(
|
|
527
529
|
session_payload, headers, connector
|
|
528
530
|
)
|
|
531
|
+
remember_cost_budget_armed_session(
|
|
532
|
+
self.client, result[0], session_payload.get("budget")
|
|
533
|
+
)
|
|
534
|
+
return result
|
|
529
535
|
except CloudServiceError as typed_exc:
|
|
530
536
|
# auto-contract fallback: a failed TYPED create may retry the
|
|
531
537
|
# legacy shape ONCE — and only for NON-governed sessions
|
|
@@ -675,6 +681,12 @@ class ApiOperations:
|
|
|
675
681
|
strategy = getattr(session_request, "optimization_strategy", None)
|
|
676
682
|
return dict(strategy) if isinstance(strategy, dict) and strategy else None
|
|
677
683
|
|
|
684
|
+
@staticmethod
|
|
685
|
+
def _normalize_typed_objectives(objectives: Any) -> list[Any]:
|
|
686
|
+
"""Compatibility wrapper around the shared typed objective normalizer."""
|
|
687
|
+
|
|
688
|
+
return normalize_typed_objectives(objectives)
|
|
689
|
+
|
|
678
690
|
def _build_typed_session_payload(
|
|
679
691
|
self, session_request: SessionCreationRequest, max_trials: int
|
|
680
692
|
) -> dict[str, Any]:
|
|
@@ -695,7 +707,7 @@ class ApiOperations:
|
|
|
695
707
|
"configuration_space": _typed_configuration_space(
|
|
696
708
|
session_request.configuration_space
|
|
697
709
|
),
|
|
698
|
-
"objectives":
|
|
710
|
+
"objectives": self._normalize_typed_objectives(session_request.objectives),
|
|
699
711
|
"dataset_metadata": dataset_metadata,
|
|
700
712
|
"max_trials": max_trials,
|
|
701
713
|
"metadata": {
|
|
@@ -58,6 +58,10 @@ from traigent.cloud.models import (
|
|
|
58
58
|
TrialResultSubmission,
|
|
59
59
|
TrialSuggestion,
|
|
60
60
|
)
|
|
61
|
+
from traigent.cloud.session_budgets import (
|
|
62
|
+
is_cost_budget_armed_session,
|
|
63
|
+
remember_cost_budget_armed_session,
|
|
64
|
+
)
|
|
61
65
|
|
|
62
66
|
# Import refactored sub-modules
|
|
63
67
|
from traigent.cloud.privacy_operations import PrivacyOperations
|
|
@@ -765,6 +769,7 @@ class BackendIntegratedClient:
|
|
|
765
769
|
self._session = None
|
|
766
770
|
self._active_sessions: dict[str, OptimizationSession] = {}
|
|
767
771
|
self._active_sessions_lock = Lock()
|
|
772
|
+
self._cost_budget_armed_sessions: set[str] = set()
|
|
768
773
|
|
|
769
774
|
# Memory bounds to prevent unbounded growth
|
|
770
775
|
self._max_active_sessions = 100 # Maximum concurrent sessions
|
|
@@ -826,6 +831,18 @@ class BackendIntegratedClient:
|
|
|
826
831
|
logger.info("using local interaction policy")
|
|
827
832
|
self._interaction_policy_fallback_logged = True
|
|
828
833
|
|
|
834
|
+
def _remember_cost_budget_armed_session(
|
|
835
|
+
self, session_id: str, budget: Mapping[str, Any] | None
|
|
836
|
+
) -> None:
|
|
837
|
+
"""Track sessions whose typed create armed a positive cost budget."""
|
|
838
|
+
|
|
839
|
+
remember_cost_budget_armed_session(self, session_id, budget)
|
|
840
|
+
|
|
841
|
+
def _is_cost_budget_armed_session(self, session_id: str) -> bool:
|
|
842
|
+
"""Return whether this client created the session with a positive budget."""
|
|
843
|
+
|
|
844
|
+
return is_cost_budget_armed_session(self, session_id)
|
|
845
|
+
|
|
829
846
|
def _static_interaction_policy(self) -> dict[str, Any]:
|
|
830
847
|
self._log_local_interaction_policy_once()
|
|
831
848
|
return {
|
|
@@ -1568,12 +1585,18 @@ class BackendIntegratedClient:
|
|
|
1568
1585
|
session_id: str,
|
|
1569
1586
|
include_full_history: bool = False,
|
|
1570
1587
|
certified_selection: dict[str, Any] | None = None,
|
|
1588
|
+
session_aggregation: dict[str, Any] | None = None,
|
|
1571
1589
|
) -> OptimizationFinalizationResponse:
|
|
1572
1590
|
"""Finalize optimization session and get results.
|
|
1573
1591
|
Delegates to session_operations module. Phase 8: an optional
|
|
1574
|
-
client-attested certified-selection report (content-free).
|
|
1592
|
+
client-attested certified-selection report (content-free).
|
|
1593
|
+
Traigent#1720/#1724 (g2:agg-summary): an optional content-free
|
|
1594
|
+
session-level rollup, threaded the same way."""
|
|
1575
1595
|
return await self._session_ops.finalize_session(
|
|
1576
|
-
session_id,
|
|
1596
|
+
session_id,
|
|
1597
|
+
include_full_history,
|
|
1598
|
+
certified_selection=certified_selection,
|
|
1599
|
+
session_aggregation=session_aggregation,
|
|
1577
1600
|
)
|
|
1578
1601
|
|
|
1579
1602
|
async def delete_session(self, session_id: str, cascade: bool = True) -> bool:
|
|
@@ -1586,11 +1609,15 @@ class BackendIntegratedClient:
|
|
|
1586
1609
|
session_id: str,
|
|
1587
1610
|
include_full_history: bool = False,
|
|
1588
1611
|
certified_selection: dict[str, Any] | None = None,
|
|
1612
|
+
session_aggregation: dict[str, Any] | None = None,
|
|
1589
1613
|
) -> OptimizationFinalizationResponse | None:
|
|
1590
1614
|
"""Synchronous wrapper for finalize_session.
|
|
1591
1615
|
Delegates to session_operations module."""
|
|
1592
1616
|
return self._session_ops.finalize_session_sync(
|
|
1593
|
-
session_id,
|
|
1617
|
+
session_id,
|
|
1618
|
+
include_full_history,
|
|
1619
|
+
certified_selection=certified_selection,
|
|
1620
|
+
session_aggregation=session_aggregation,
|
|
1594
1621
|
)
|
|
1595
1622
|
|
|
1596
1623
|
def delete_session_sync(self, session_id: str, cascade: bool = True) -> bool:
|
|
@@ -66,6 +66,12 @@ from .models import (
|
|
|
66
66
|
TrialResultSubmission,
|
|
67
67
|
TrialSuggestion,
|
|
68
68
|
)
|
|
69
|
+
from .session_budgets import (
|
|
70
|
+
ensure_cost_metric_for_budgeted_completed_submission,
|
|
71
|
+
is_cost_budget_armed_session,
|
|
72
|
+
remember_cost_budget_armed_session,
|
|
73
|
+
)
|
|
74
|
+
from .session_objectives import normalize_typed_objectives, session_objective_to_wire
|
|
69
75
|
from .smart_pruning import normalize_smart_pruning_options
|
|
70
76
|
from .subset_selection import SmartSubsetSelector
|
|
71
77
|
from .url_security import validate_cloud_base_url
|
|
@@ -813,6 +819,7 @@ class TraigentCloudClient(BaseTraigentClient):
|
|
|
813
819
|
self._session_finalizer: weakref.finalize | None = None
|
|
814
820
|
# Track session ownership fingerprints for clearer error reporting
|
|
815
821
|
self._session_owners: dict[str, dict[str, Any]] = {}
|
|
822
|
+
self._cost_budget_armed_sessions: set[str] = set()
|
|
816
823
|
|
|
817
824
|
@property
|
|
818
825
|
def _session(self) -> aiohttp.ClientSession | None:
|
|
@@ -1055,6 +1062,18 @@ class TraigentCloudClient(BaseTraigentClient):
|
|
|
1055
1062
|
if owner_info:
|
|
1056
1063
|
self._session_owners[session_id] = owner_info
|
|
1057
1064
|
|
|
1065
|
+
def _remember_cost_budget_armed_session(
|
|
1066
|
+
self, session_id: str, budget: dict[str, Any] | None
|
|
1067
|
+
) -> None:
|
|
1068
|
+
"""Track sessions whose typed create armed a positive cost budget."""
|
|
1069
|
+
|
|
1070
|
+
remember_cost_budget_armed_session(self, session_id, budget)
|
|
1071
|
+
|
|
1072
|
+
def _is_cost_budget_armed_session(self, session_id: str) -> bool:
|
|
1073
|
+
"""Return whether this client created the session with a positive budget."""
|
|
1074
|
+
|
|
1075
|
+
return is_cost_budget_armed_session(self, session_id)
|
|
1076
|
+
|
|
1058
1077
|
@staticmethod
|
|
1059
1078
|
def _summarize_actor(info: dict[str, Any] | None) -> str:
|
|
1060
1079
|
"""Create a human-readable summary of a session owner or caller."""
|
|
@@ -1715,6 +1734,9 @@ class TraigentCloudClient(BaseTraigentClient):
|
|
|
1715
1734
|
dict(request.metadata or {}),
|
|
1716
1735
|
data.get("metadata", {}),
|
|
1717
1736
|
)
|
|
1737
|
+
self._remember_cost_budget_armed_session(
|
|
1738
|
+
result.session_id, request_data.get("budget")
|
|
1739
|
+
)
|
|
1718
1740
|
return result
|
|
1719
1741
|
else:
|
|
1720
1742
|
error_text = await response.text()
|
|
@@ -1832,6 +1854,15 @@ class TraigentCloudClient(BaseTraigentClient):
|
|
|
1832
1854
|
try:
|
|
1833
1855
|
url = f"{self.api_base_url}/sessions/{session_id}/results"
|
|
1834
1856
|
request_data = self._serialize_trial_result(result)
|
|
1857
|
+
request_data["metrics"] = dict(request_data.get("metrics") or {})
|
|
1858
|
+
ensure_cost_metric_for_budgeted_completed_submission(
|
|
1859
|
+
client=self,
|
|
1860
|
+
session_id=session_id,
|
|
1861
|
+
metrics=request_data["metrics"],
|
|
1862
|
+
status=request_data.get("status"),
|
|
1863
|
+
telemetry_sources=(result.metadata, request_data.get("metadata")),
|
|
1864
|
+
logger=logger,
|
|
1865
|
+
)
|
|
1835
1866
|
|
|
1836
1867
|
async with self._aio_session.post(
|
|
1837
1868
|
url, json=request_data, headers=await self._get_headers()
|
|
@@ -1917,13 +1948,11 @@ class TraigentCloudClient(BaseTraigentClient):
|
|
|
1917
1948
|
"""Serialize session creation request."""
|
|
1918
1949
|
metadata = self._ensure_owner_metadata(request.metadata)
|
|
1919
1950
|
request.metadata = metadata
|
|
1951
|
+
objectives_payload = normalize_typed_objectives(request.objectives)
|
|
1920
1952
|
payload: dict[str, Any] = {
|
|
1921
1953
|
"function_name": request.function_name,
|
|
1922
1954
|
"configuration_space": request.configuration_space,
|
|
1923
|
-
"objectives":
|
|
1924
|
-
self._serialize_session_objective(objective)
|
|
1925
|
-
for objective in (request.objectives or [])
|
|
1926
|
-
],
|
|
1955
|
+
"objectives": objectives_payload,
|
|
1927
1956
|
"dataset_metadata": request.dataset_metadata,
|
|
1928
1957
|
"max_trials": request.max_trials,
|
|
1929
1958
|
"optimization_strategy": request.optimization_strategy,
|
|
@@ -1962,28 +1991,7 @@ class TraigentCloudClient(BaseTraigentClient):
|
|
|
1962
1991
|
objective: str | SessionObjectiveDefinition | dict[str, Any],
|
|
1963
1992
|
) -> str | dict[str, Any]:
|
|
1964
1993
|
"""Serialize a typed objective while preserving string shorthand."""
|
|
1965
|
-
|
|
1966
|
-
return objective
|
|
1967
|
-
if isinstance(objective, SessionObjectiveDefinition):
|
|
1968
|
-
payload: dict[str, Any] = {
|
|
1969
|
-
"metric": objective.metric,
|
|
1970
|
-
}
|
|
1971
|
-
if objective.band is not None:
|
|
1972
|
-
payload["band"] = dict(objective.band)
|
|
1973
|
-
if objective.test is not None:
|
|
1974
|
-
payload["test"] = objective.test
|
|
1975
|
-
if objective.alpha is not None:
|
|
1976
|
-
payload["alpha"] = objective.alpha
|
|
1977
|
-
elif objective.direction is not None:
|
|
1978
|
-
payload["direction"] = objective.direction
|
|
1979
|
-
if objective.weight is not None:
|
|
1980
|
-
payload["weight"] = objective.weight
|
|
1981
|
-
return payload
|
|
1982
|
-
if isinstance(objective, dict):
|
|
1983
|
-
return dict(objective)
|
|
1984
|
-
raise TypeError(
|
|
1985
|
-
"Session objectives must be strings, dicts, or SessionObjectiveDefinition objects"
|
|
1986
|
-
)
|
|
1994
|
+
return session_objective_to_wire(objective)
|
|
1987
1995
|
|
|
1988
1996
|
def _deserialize_session_response(
|
|
1989
1997
|
self, data: dict[str, Any]
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""Session budget tracking and result cost guarantees."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Mapping
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from traigent.utils.trial_costs import (
|
|
9
|
+
coerce_finite_cost,
|
|
10
|
+
extract_trial_cost_metric,
|
|
11
|
+
is_finite_numeric_cost,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def cost_budget_is_armed(budget: Any) -> bool:
|
|
16
|
+
"""Return True when a session-create budget carries a positive cost cap."""
|
|
17
|
+
|
|
18
|
+
if not isinstance(budget, Mapping):
|
|
19
|
+
return False
|
|
20
|
+
max_cost = coerce_finite_cost(budget.get("max_cost_usd"))
|
|
21
|
+
return max_cost is not None and max_cost > 0
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def remember_cost_budget_armed_session(
|
|
25
|
+
client: Any, session_id: str, budget: Any
|
|
26
|
+
) -> None:
|
|
27
|
+
"""Record a successfully created budget-armed session on a client instance."""
|
|
28
|
+
|
|
29
|
+
sessions = getattr(client, "__dict__", {}).get("_cost_budget_armed_sessions")
|
|
30
|
+
if not isinstance(sessions, set):
|
|
31
|
+
sessions = set()
|
|
32
|
+
client._cost_budget_armed_sessions = sessions
|
|
33
|
+
if cost_budget_is_armed(budget):
|
|
34
|
+
sessions.add(session_id)
|
|
35
|
+
else:
|
|
36
|
+
sessions.discard(session_id)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def is_cost_budget_armed_session(client: Any, session_id: str) -> bool:
|
|
40
|
+
"""Return whether the client remembers a positive cost budget for a session."""
|
|
41
|
+
|
|
42
|
+
sessions = getattr(client, "__dict__", {}).get("_cost_budget_armed_sessions")
|
|
43
|
+
return isinstance(sessions, set) and session_id in sessions
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def is_completed_status(status: Any) -> bool:
|
|
47
|
+
"""Return True for SDK or backend completed status tokens."""
|
|
48
|
+
|
|
49
|
+
raw_status = getattr(status, "value", status)
|
|
50
|
+
return str(raw_status or "").strip().upper() == "COMPLETED"
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def ensure_cost_metric_for_budgeted_completed_submission(
|
|
54
|
+
*,
|
|
55
|
+
client: Any,
|
|
56
|
+
session_id: str,
|
|
57
|
+
metrics: dict[str, Any],
|
|
58
|
+
status: Any,
|
|
59
|
+
telemetry_sources: tuple[Any, ...] = (),
|
|
60
|
+
logger: Any | None = None,
|
|
61
|
+
) -> bool:
|
|
62
|
+
"""Guarantee metrics.cost for completed submissions on budgeted sessions.
|
|
63
|
+
|
|
64
|
+
Returns True when the metrics mapping was mutated.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
if not is_completed_status(status):
|
|
68
|
+
return False
|
|
69
|
+
if not is_cost_budget_armed_session(client, session_id):
|
|
70
|
+
return False
|
|
71
|
+
if is_finite_numeric_cost(metrics.get("cost")):
|
|
72
|
+
return False
|
|
73
|
+
|
|
74
|
+
cost = extract_trial_cost_metric(metrics, *telemetry_sources)
|
|
75
|
+
if cost is not None:
|
|
76
|
+
metrics["cost"] = cost
|
|
77
|
+
return True
|
|
78
|
+
|
|
79
|
+
metrics["cost"] = 0.0
|
|
80
|
+
if logger is not None:
|
|
81
|
+
logger.debug("no cost telemetry; backfilling 0.0 for budget accounting")
|
|
82
|
+
return True
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""Typed session objective normalization helpers."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from traigent.cloud.models import SessionObjectiveDefinition
|
|
8
|
+
|
|
9
|
+
_DIRECTION_OBJECTIVES = frozenset({"maximize", "minimize"})
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def session_objective_to_wire(
|
|
13
|
+
objective: str | SessionObjectiveDefinition | dict[str, Any],
|
|
14
|
+
) -> str | dict[str, Any]:
|
|
15
|
+
"""Serialize one typed objective to the session-create wire shape."""
|
|
16
|
+
|
|
17
|
+
if isinstance(objective, str):
|
|
18
|
+
return objective
|
|
19
|
+
if isinstance(objective, SessionObjectiveDefinition):
|
|
20
|
+
payload: dict[str, Any] = {"metric": objective.metric}
|
|
21
|
+
if objective.band is not None:
|
|
22
|
+
payload["band"] = dict(objective.band)
|
|
23
|
+
if objective.test is not None:
|
|
24
|
+
payload["test"] = objective.test
|
|
25
|
+
if objective.alpha is not None:
|
|
26
|
+
payload["alpha"] = objective.alpha
|
|
27
|
+
elif objective.direction is not None:
|
|
28
|
+
payload["direction"] = objective.direction
|
|
29
|
+
if objective.weight is not None:
|
|
30
|
+
payload["weight"] = objective.weight
|
|
31
|
+
return payload
|
|
32
|
+
if isinstance(objective, dict):
|
|
33
|
+
return dict(objective)
|
|
34
|
+
raise TypeError(
|
|
35
|
+
"Session objectives must be strings, dicts, or SessionObjectiveDefinition objects"
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def normalize_typed_objectives(objectives: Any) -> list[Any]:
|
|
40
|
+
"""Normalize typed objective shorthands without changing legacy semantics.
|
|
41
|
+
|
|
42
|
+
Bare direction words are legacy optimization-goal placeholders, not metric
|
|
43
|
+
names. The typed session contract uses "score" for that fallback because
|
|
44
|
+
BackendSessionManager backfills the score metric before result submission.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
normalized: list[Any] = []
|
|
48
|
+
seen_score_directions: set[str] = set()
|
|
49
|
+
raw_objectives = list(objectives or ["maximize"])
|
|
50
|
+
|
|
51
|
+
for raw_objective in raw_objectives:
|
|
52
|
+
objective = session_objective_to_wire(raw_objective)
|
|
53
|
+
if isinstance(objective, str):
|
|
54
|
+
direction = objective.strip().lower()
|
|
55
|
+
if direction in _DIRECTION_OBJECTIVES:
|
|
56
|
+
objective = {"metric": "score", "direction": direction}
|
|
57
|
+
|
|
58
|
+
score_direction = None
|
|
59
|
+
if isinstance(objective, dict):
|
|
60
|
+
metric = objective.get("metric")
|
|
61
|
+
direction = objective.get("direction")
|
|
62
|
+
if (
|
|
63
|
+
isinstance(metric, str)
|
|
64
|
+
and metric == "score"
|
|
65
|
+
and isinstance(direction, str)
|
|
66
|
+
and direction.lower() in _DIRECTION_OBJECTIVES
|
|
67
|
+
):
|
|
68
|
+
score_direction = direction.lower()
|
|
69
|
+
|
|
70
|
+
if score_direction is not None:
|
|
71
|
+
if score_direction in seen_score_directions:
|
|
72
|
+
continue
|
|
73
|
+
seen_score_directions.add(score_direction)
|
|
74
|
+
objective["direction"] = score_direction
|
|
75
|
+
|
|
76
|
+
normalized.append(objective)
|
|
77
|
+
|
|
78
|
+
return normalized
|
|
@@ -1167,6 +1167,7 @@ class SessionOperations:
|
|
|
1167
1167
|
session_id: str,
|
|
1168
1168
|
include_full_history: bool = False,
|
|
1169
1169
|
certified_selection: dict[str, Any] | None = None,
|
|
1170
|
+
session_aggregation: dict[str, Any] | None = None,
|
|
1170
1171
|
) -> OptimizationFinalizationResponse:
|
|
1171
1172
|
"""Finalize optimization session and get results.
|
|
1172
1173
|
|
|
@@ -1176,6 +1177,10 @@ class SessionOperations:
|
|
|
1176
1177
|
Args:
|
|
1177
1178
|
session_id: Session ID to finalize
|
|
1178
1179
|
include_full_history: Whether to include full trial history in response
|
|
1180
|
+
certified_selection: Client-attested certified-selection report.
|
|
1181
|
+
session_aggregation: Content-free session-level rollup payload
|
|
1182
|
+
(Traigent#1720/#1724, g2:agg-summary), threaded to the
|
|
1183
|
+
finalize endpoint exactly like ``certified_selection``.
|
|
1179
1184
|
|
|
1180
1185
|
Returns:
|
|
1181
1186
|
OptimizationFinalizationResponse with session summary
|
|
@@ -1227,6 +1232,7 @@ class SessionOperations:
|
|
|
1227
1232
|
session_id,
|
|
1228
1233
|
mapping.experiment_run_id,
|
|
1229
1234
|
certified_selection=certified_selection,
|
|
1235
|
+
session_aggregation=session_aggregation,
|
|
1230
1236
|
)
|
|
1231
1237
|
except CloudServiceError:
|
|
1232
1238
|
raise
|
|
@@ -1294,6 +1300,14 @@ class SessionOperations:
|
|
|
1294
1300
|
backend_convergence_history = backend_summary.get("convergence_history")
|
|
1295
1301
|
backend_full_history = backend_summary.get("full_history")
|
|
1296
1302
|
backend_metadata = backend_summary.get("metadata")
|
|
1303
|
+
# Traigent#1720/#1724 (g2:agg-summary): the backend echoes the
|
|
1304
|
+
# allowlist-normalized session_aggregation rollup back as a
|
|
1305
|
+
# top-level finalize-response property (mirrors the request shape).
|
|
1306
|
+
# Only surface it when it round-tripped as a dict — the SDK
|
|
1307
|
+
# orchestrator uses its presence here as the honest "was this
|
|
1308
|
+
# actually persisted" signal, so a malformed/missing echo must not
|
|
1309
|
+
# be synthesized.
|
|
1310
|
+
backend_session_aggregation = backend_summary.get("session_aggregation")
|
|
1297
1311
|
backend_warm_start_transfer = (
|
|
1298
1312
|
backend_metadata.get("warm_start_transfer")
|
|
1299
1313
|
if isinstance(backend_metadata, dict)
|
|
@@ -1427,6 +1441,15 @@ class SessionOperations:
|
|
|
1427
1441
|
if isinstance(effective_warm_start_transfer, dict)
|
|
1428
1442
|
else {}
|
|
1429
1443
|
),
|
|
1444
|
+
# Traigent#1720/#1724 (g2:agg-summary): echo the backend's
|
|
1445
|
+
# acknowledged session_aggregation rollup so the orchestrator
|
|
1446
|
+
# can derive an honest "was this actually persisted" signal.
|
|
1447
|
+
# Absent/malformed echo => key omitted (never synthesized).
|
|
1448
|
+
**(
|
|
1449
|
+
{"session_aggregation": dict(backend_session_aggregation)}
|
|
1450
|
+
if isinstance(backend_session_aggregation, dict)
|
|
1451
|
+
else {}
|
|
1452
|
+
),
|
|
1430
1453
|
},
|
|
1431
1454
|
)
|
|
1432
1455
|
|
|
@@ -1437,12 +1460,16 @@ class SessionOperations:
|
|
|
1437
1460
|
session_id: str,
|
|
1438
1461
|
experiment_run_id: str,
|
|
1439
1462
|
certified_selection: dict[str, Any] | None = None,
|
|
1463
|
+
session_aggregation: dict[str, Any] | None = None,
|
|
1440
1464
|
) -> dict[str, Any] | None:
|
|
1441
1465
|
"""Call backend session finalization endpoint.
|
|
1442
1466
|
|
|
1443
1467
|
Args:
|
|
1444
1468
|
session_id: Session ID to finalize
|
|
1445
1469
|
experiment_run_id: Associated experiment run ID
|
|
1470
|
+
certified_selection: Client-attested certified-selection report.
|
|
1471
|
+
session_aggregation: Content-free session-level rollup payload
|
|
1472
|
+
(Traigent#1720/#1724, g2:agg-summary).
|
|
1446
1473
|
|
|
1447
1474
|
Returns:
|
|
1448
1475
|
Parsed backend response payload (may be ``{}`` if the backend
|
|
@@ -1484,6 +1511,27 @@ class SessionOperations:
|
|
|
1484
1511
|
# selection report — TOP-LEVEL key only (the backend
|
|
1485
1512
|
# rejects metadata-tunneled reports).
|
|
1486
1513
|
finalize_body["certified_selection"] = certified_selection
|
|
1514
|
+
if session_aggregation is not None:
|
|
1515
|
+
# Traigent#1720/#1724 (g2:agg-summary): the content-free
|
|
1516
|
+
# session-level rollup — TOP-LEVEL key only, mirroring
|
|
1517
|
+
# certified_selection immediately above (the backend
|
|
1518
|
+
# rejects metadata-tunneled payloads).
|
|
1519
|
+
#
|
|
1520
|
+
# EGRESS GUARD (Codex round 6): re-sanitize here, at the
|
|
1521
|
+
# true wire boundary, so a caller-supplied dict passed to
|
|
1522
|
+
# finalize_session(..., session_aggregation=...) that
|
|
1523
|
+
# bypassed the builder cannot leak unbounded content. The
|
|
1524
|
+
# builder's output is already bounded, so this is a no-op
|
|
1525
|
+
# on the normal path. Lazy import avoids an import cycle.
|
|
1526
|
+
from traigent.core.backend_session_manager import (
|
|
1527
|
+
sanitize_session_aggregation_payload,
|
|
1528
|
+
)
|
|
1529
|
+
|
|
1530
|
+
sanitized_aggregation = sanitize_session_aggregation_payload(
|
|
1531
|
+
session_aggregation
|
|
1532
|
+
)
|
|
1533
|
+
if sanitized_aggregation is not None:
|
|
1534
|
+
finalize_body["session_aggregation"] = sanitized_aggregation
|
|
1487
1535
|
async with session.post(
|
|
1488
1536
|
url,
|
|
1489
1537
|
json=finalize_body,
|
|
@@ -1631,6 +1679,7 @@ class SessionOperations:
|
|
|
1631
1679
|
session_id: str,
|
|
1632
1680
|
include_full_history: bool = False,
|
|
1633
1681
|
certified_selection: dict[str, Any] | None = None,
|
|
1682
|
+
session_aggregation: dict[str, Any] | None = None,
|
|
1634
1683
|
) -> OptimizationFinalizationResponse | None:
|
|
1635
1684
|
"""Synchronous wrapper for finalize_session."""
|
|
1636
1685
|
import concurrent.futures
|
|
@@ -1647,6 +1696,7 @@ class SessionOperations:
|
|
|
1647
1696
|
session_id,
|
|
1648
1697
|
include_full_history,
|
|
1649
1698
|
certified_selection=certified_selection,
|
|
1699
|
+
session_aggregation=session_aggregation,
|
|
1650
1700
|
)
|
|
1651
1701
|
)
|
|
1652
1702
|
finally:
|
|
@@ -320,6 +320,12 @@ class SyncManager:
|
|
|
320
320
|
session.trials or []
|
|
321
321
|
)
|
|
322
322
|
objectives = self._derive_objectives(opt_config, configuration_runs)
|
|
323
|
+
# Guard: the backend rejects a COMPLETED trial whose metrics lack any
|
|
324
|
+
# declared objective. Backfill each completed trial's measures so every
|
|
325
|
+
# objective is present as a number (prefer its own ``score``, else 0.0),
|
|
326
|
+
# so a real user-declared objective missing from one trial can't 400 the
|
|
327
|
+
# whole sync.
|
|
328
|
+
self._backfill_objective_measures(configuration_runs, objectives)
|
|
323
329
|
|
|
324
330
|
# Content-free dataset label: name + size only, never example content.
|
|
325
331
|
# The typed path validates dataset_metadata.size as a positive int
|
|
@@ -377,18 +383,54 @@ class SyncManager:
|
|
|
377
383
|
def _derive_objectives(
|
|
378
384
|
opt_config: dict[str, Any], configuration_runs: list[dict[str, Any]]
|
|
379
385
|
) -> list[str]:
|
|
380
|
-
"""Derive objective names for the typed
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
386
|
+
"""Derive the session's objective names for the typed create payload.
|
|
387
|
+
|
|
388
|
+
The backend requires EVERY declared objective to be present as a numeric
|
|
389
|
+
metric on EVERY completed trial (an Optuna objective must be a scalar it
|
|
390
|
+
can ``tell()``). So the objective set must be MINIMAL and universally
|
|
391
|
+
present, NOT the union of every incidental per-trial measure — declaring
|
|
392
|
+
the union makes run-level overlays (``run_trials_completed``,
|
|
393
|
+
``duration``, tokens, cost, ...) "required objectives" that not every
|
|
394
|
+
trial reports, and each such trial's /results then 400s
|
|
395
|
+
("Completed trial is missing numeric metric ...").
|
|
396
|
+
|
|
397
|
+
Prefer the run's real optimization objectives; otherwise fall back to
|
|
398
|
+
``["score"]`` — ``score`` is written on every trial by
|
|
399
|
+
``_convert_trials_to_results``, so it is guaranteed present. The caller
|
|
400
|
+
additionally backfills any declared objective missing from a completed
|
|
401
|
+
trial (see ``convert_session_to_traigent_format``). Content-free: only
|
|
402
|
+
objective *names* are emitted.
|
|
385
403
|
"""
|
|
386
404
|
raw_objectives = opt_config.get("objectives")
|
|
387
405
|
if isinstance(raw_objectives, (list, tuple)):
|
|
388
406
|
names = [str(name) for name in raw_objectives if name]
|
|
389
407
|
if names:
|
|
390
408
|
return names
|
|
391
|
-
return
|
|
409
|
+
return ["score"]
|
|
410
|
+
|
|
411
|
+
@staticmethod
|
|
412
|
+
def _backfill_objective_measures(
|
|
413
|
+
configuration_runs: list[dict[str, Any]], objectives: list[str]
|
|
414
|
+
) -> None:
|
|
415
|
+
"""Ensure every COMPLETED trial reports each declared objective numerically.
|
|
416
|
+
|
|
417
|
+
The backend requires a numeric value for every objective on a completed
|
|
418
|
+
trial (Optuna ``tell``). If a trial's measures omit one (or it is
|
|
419
|
+
non-numeric), backfill it with the trial's ``score`` when available, else
|
|
420
|
+
``0.0``. Only completed trials are guarded — failed trials skip the
|
|
421
|
+
objective check server-side. Mutates ``configuration_runs`` in place.
|
|
422
|
+
"""
|
|
423
|
+
for configuration_run in configuration_runs:
|
|
424
|
+
if str(configuration_run.get("status", "")).upper() != "COMPLETED":
|
|
425
|
+
continue
|
|
426
|
+
measures = configuration_run.setdefault("measures", {})
|
|
427
|
+
fallback = measures.get("score")
|
|
428
|
+
if not isinstance(fallback, (int, float)) or isinstance(fallback, bool):
|
|
429
|
+
fallback = 0.0
|
|
430
|
+
for objective in objectives:
|
|
431
|
+
value = measures.get(objective)
|
|
432
|
+
if not isinstance(value, (int, float)) or isinstance(value, bool):
|
|
433
|
+
measures[objective] = fallback
|
|
392
434
|
|
|
393
435
|
def _convert_trials_to_configuration_runs(
|
|
394
436
|
self, trials: list[Any]
|
|
@@ -453,19 +495,6 @@ class SyncManager:
|
|
|
453
495
|
"""Return True for JSON numeric values while excluding booleans."""
|
|
454
496
|
return isinstance(value, (int, float)) and not isinstance(value, bool)
|
|
455
497
|
|
|
456
|
-
@staticmethod
|
|
457
|
-
def _derive_experiment_measures(
|
|
458
|
-
configuration_runs: list[dict[str, Any]],
|
|
459
|
-
) -> list[str]:
|
|
460
|
-
"""Derive the experiment-level measure list from trial payloads."""
|
|
461
|
-
measures: list[str] = []
|
|
462
|
-
for configuration_run in configuration_runs:
|
|
463
|
-
for measure_name in configuration_run.get("measures", {}):
|
|
464
|
-
if measure_name not in measures:
|
|
465
|
-
measures.append(measure_name)
|
|
466
|
-
|
|
467
|
-
return measures or ["score"]
|
|
468
|
-
|
|
469
498
|
def _convert_trials_to_results(self, trials: list[Any]) -> list[dict[str, Any]]:
|
|
470
499
|
"""Convert local trials to Traigent configuration_run format."""
|
|
471
500
|
results = []
|
|
@@ -22,6 +22,9 @@ from traigent.cloud.client import (
|
|
|
22
22
|
raise_if_cloud_egress_disabled,
|
|
23
23
|
)
|
|
24
24
|
from traigent.cloud.dtos import MeasuresDict
|
|
25
|
+
from traigent.cloud.session_budgets import (
|
|
26
|
+
ensure_cost_metric_for_budgeted_completed_submission,
|
|
27
|
+
)
|
|
25
28
|
from traigent.cloud.validators import validate_configuration_run_submission
|
|
26
29
|
from traigent.config.backend_config import BackendConfig
|
|
27
30
|
from traigent.utils.env_config import is_backend_offline, resolve_environment_label
|
|
@@ -989,6 +992,15 @@ class TrialOperations:
|
|
|
989
992
|
)
|
|
990
993
|
return False
|
|
991
994
|
|
|
995
|
+
ensure_cost_metric_for_budgeted_completed_submission(
|
|
996
|
+
client=self.client,
|
|
997
|
+
session_id=session_id,
|
|
998
|
+
metrics=validated_metrics,
|
|
999
|
+
status=backend_status,
|
|
1000
|
+
telemetry_sources=(metrics, metadata, measures, summary_stats),
|
|
1001
|
+
logger=logger,
|
|
1002
|
+
)
|
|
1003
|
+
|
|
992
1004
|
# Build result data
|
|
993
1005
|
result_data = self._build_trial_result_data(
|
|
994
1006
|
trial_id,
|
|
@@ -1169,6 +1181,16 @@ class TrialOperations:
|
|
|
1169
1181
|
# Also include summary_stats for backend to detect privacy mode
|
|
1170
1182
|
"summary_stats": summary_stats,
|
|
1171
1183
|
}
|
|
1184
|
+
submission_metrics = submission_data["metrics"]
|
|
1185
|
+
if isinstance(submission_metrics, dict):
|
|
1186
|
+
ensure_cost_metric_for_budgeted_completed_submission(
|
|
1187
|
+
client=self.client,
|
|
1188
|
+
session_id=session_id,
|
|
1189
|
+
metrics=submission_metrics,
|
|
1190
|
+
status=backend_status,
|
|
1191
|
+
telemetry_sources=(summary_stats, submission_metadata),
|
|
1192
|
+
logger=logger,
|
|
1193
|
+
)
|
|
1172
1194
|
|
|
1173
1195
|
# Validate the submission data. Schema validation is authoritative;
|
|
1174
1196
|
# invalid payloads must not be posted to the backend.
|