traigent 0.18.0__tar.gz → 0.18.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.18.0/traigent.egg-info → traigent-0.18.1.dev0}/PKG-INFO +1 -1
- {traigent-0.18.0 → traigent-0.18.1.dev0}/pyproject.toml +1 -1
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/cost_optimization.py +3 -3
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/next_steps.py +2 -1
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/predictive.py +6 -2
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/next_steps_command.py +6 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/api_key_manager.py +13 -13
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/api_operations.py +23 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/backend_client.py +326 -1
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/client.py +18 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/models.py +2 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/session_operations.py +4 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/presets/range_presets.py +96 -96
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/recommendations.py +2 -4
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/backend_session_manager.py +4 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/optimized_function.py +49 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/orchestrator.py +6 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/sample_budget.py +1 -3
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/langfuse/__init__.py +18 -18
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/langfuse/client.py +18 -18
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/plugin_registry.py +3 -3
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/pydantic_ai/__init__.py +4 -4
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/pydantic_ai/handler.py +4 -4
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/invokers/streaming.py +9 -9
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/cascade.py +1 -2
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/interactive_optimizer.py +6 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/audit.py +1 -2
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/auth/models.py +9 -9
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/auth/saml.py +5 -5
- traigent-0.18.1.dev0/traigent/utils/artifact_fingerprints.py +349 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/secure_path.py +1 -3
- {traigent-0.18.0 → traigent-0.18.1.dev0/traigent.egg-info}/PKG-INFO +1 -1
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent.egg-info/SOURCES.txt +1 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/CHANGELOG.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/COMMERCIAL-LICENSE.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/CONTRIBUTING.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/CONTRIBUTOR-LICENSING.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/DISCLAIMER.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/LICENSE +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/MANIFEST.in +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/NOTICE +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/README.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/SECURITY.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/LOCAL_CI_GATE.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/README.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/SYNC_MAP.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/agent-skill.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/api-reference/complete-function-specification.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/api-reference/decorator-reference.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/api-reference/enterprise-beta-api.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/api-reference/interactive_optimizer.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/api-reference/telemetry.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/api-reference/thread-pool-examples.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/architecture/ARCHITECTURE.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/architecture/cost-architecture-validation.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/architecture/execution_mode_follow_up.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/architecture/integrations-inventory.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/architecture/plugin_architecture.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/architecture/project-structure.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/architecture/stop_conditions.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/concepts/composite-knob-ir.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/concepts/composite-knobs.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/concepts/guided-generation.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/contributing/CONTRIBUTING.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/contributing/README.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/contributing/SECURITY.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/contributing/aikido_triage.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/contributing/code_review_instructions.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/contributing/test-quality-guide.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/demos/README.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/examples/API_PATTERNS.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/examples/LEARNING_ROADMAP.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/examples/QUICK_REFERENCE.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/examples/README.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/examples/START_HERE.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/examples/TROUBLESHOOTING.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/fake-completion-tracking.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/feature_matrices/README.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/README.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/authentication.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/constraint-dsl.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/dataflow-detection.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/framework_override_enhanced_features.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/mcp-server.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/observability-spans.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/onboarding.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/prompt_management.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/recommendations.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/safety-gates.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/seamless_injection.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/strategy-presets.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/features/strict_metrics_nulls.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/getting-started/GETTING_STARTED.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/getting-started/README.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/getting-started/installation.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/getting-started/minimal-integration.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/getting-started/testing.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/guides/evaluation.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/guides/execution-mode-migration.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/guides/execution-modes.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/guides/js-bridge.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/guides/llm_plugin_migration_guide.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/guides/parallel-configuration.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/guides/secrets_management.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/hybrid-mode-api-contract.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/hybrid-mode-client-guide.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/operations/azure_openai.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/operations/bedrock.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/operations/google_gemini.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/security/trust_model.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/traceability/concepts/composite-knob-ir.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/traceability/concepts/composite-knobs.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/traceability/concepts/guided-generation.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/traceability/schema.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/traceability/tagging_tracking.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/traceability/taxonomy_reference.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/user-guide/README.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/user-guide/agent_optimization.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/user-guide/choosing_optimization_model.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/user-guide/configuration-spaces.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/user-guide/evaluation_guide.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/user-guide/injection_modes.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/user-guide/interactive_optimization.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/user-guide/smart_optimization.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/user-guide/tuned_variables.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/docs/walkthrough.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/requirements/requirements-all.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/requirements/requirements-analytics.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/requirements/requirements-bayesian.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/requirements/requirements-chroma.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/requirements/requirements-dev.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/requirements/requirements-hybrid.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/requirements/requirements-integrations.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/requirements/requirements-security.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/requirements/requirements-test.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/requirements/requirements.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/setup.cfg +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/_version.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/adapters/execution_adapter.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/admin/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/admin/client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/admin/config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/admin/dtos.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/agents/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/agents/config_mapper.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/agents/executor.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/agents/platforms.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/agents/specification_generator.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/anomaly.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/example_insights.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/intelligence.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/meta_learning.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/optimization_plan.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/render.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics/scheduling.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics_mcp/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics_mcp/server.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/analytics_mcp/tools.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/agent_inference.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/config_builder.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/config_space.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/constraint_builders.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/constraints.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/decorators.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/functions.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/parameter_ranges.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/parameter_validator.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/safety.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/strategy_presets.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/types.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/api/validation_protocol.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/auth_commands.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/detect_tvars_command.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/function_discovery.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/generate_config_command.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/hooks_commands.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/local_commands.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/main.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/onboard_commands.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/optimization_validator.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/plan_command.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/playbook_commands.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/sync_commands.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cli/validation_types.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/_aiohttp_compat.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/agent_dtos.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/analytics_auth.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/analytics_client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/async_batch_transport.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/auth.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/backend_bridges.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/backend_components.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/backend_synchronizer.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/benchmark_client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/billing.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/cloud_operations.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/credential_manager.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/credential_resolver.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/dataset_converter.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/dtos.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/governance.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/integration_manager.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/optimizer_client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/password_auth_handler.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/privacy_operations.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/production_mcp_client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/remote_guidance.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/resilient_client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/service.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/session_types.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/sessions.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/subset_selection.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/sync_manager.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/token_manager.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/trial_operations.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/trial_tracker.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/url_security.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/user_agent.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/cloud/validators.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/api_keys.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/ast_transformer.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/backend_config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/context.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/feature_flags.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/models.yaml +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/parallel.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/project.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/providers.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/runtime_injector.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/tenant.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config/types.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/agent_classifier.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/apply.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/catalog.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/llm_backend.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/pipeline.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/presets/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/presets/constraint_templates.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/subsystems/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/subsystems/benchmarks.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/subsystems/objectives.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/config_generator/types.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/best_config_runtime.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/cache_policy.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/ci_approval.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/config_state_manager.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/constants.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/cost_enforcement.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/cost_estimator.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/evaluator_wrapper.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/exception_handler.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/execution_policy_runtime.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/license.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/logger_facade.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/mandatory_metrics.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/meta_types.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/metadata_helpers.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/metric_registry.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/metrics_aggregator.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/namespace.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/objectives.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/optimization_pipeline.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/orchestrator_helpers.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/parallel_execution_manager.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/progress_manager.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/result_selection.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/samplers/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/samplers/random_sampler.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/session_context.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/session_types.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/stat_significance.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/stop_condition_manager.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/stop_conditions.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/trace_env.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/tracing.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/trial_context.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/trial_lifecycle.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/trial_result_factory.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/types.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/types_ext.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/utils.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core/workflow_trace_manager.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core_metrics/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core_metrics/client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core_metrics/config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/core_metrics/dtos.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/defaults.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/effectuation/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/effectuation/contracts.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/effectuation/strategies/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/effectuation/strategies/framework_param.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/effectuation/strategies/self_consistency.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluation/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluation/client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluation/config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluation/dtos.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/base.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/catalog_loader.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/dataset_registry.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/hybrid_api.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/local.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/metrics.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/metrics_tracker.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/evaluators/recommendations.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/_bootstrap.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/_demo.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/anthropic.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/aws.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/azure.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/gcp.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/gemini.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/groq.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/litellm_any.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/manifest.json +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/openai.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/openrouter.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/providers/qa_samples.jsonl +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/quickstart/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/quickstart/__main__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/quickstart/_env.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/quickstart/publish_and_verify.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/examples/tutorial_bootstrap.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/backend_provider.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/example_synth.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/llm_provider.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/loop.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/models.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/options.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/prompt_rewriter.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/artifacts.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/buffer.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/document.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/edits.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/prompts.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/reflection.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/schedule.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/slow_update.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/splits.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/trainer.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/skill_train/trainer_result.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/generation/validators.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/guaranteed_modes.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hooks/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hooks/config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hooks/installer.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hooks/validator.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hybrid/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hybrid/discovery.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hybrid/http_transport.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hybrid/lifecycle.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hybrid/mcp_transport.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hybrid/protocol.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/hybrid/transport.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/activation.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/base.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/base_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/bedrock_client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/dspy_adapter.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/framework_override.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/langchain/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/langchain/handler.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/langfuse/callback.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/langfuse/tracker.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/anthropic_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/base_llm_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/bedrock_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/cohere_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/gemini_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/huggingface_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/langchain/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/langchain/base.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/langchain_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/litellm_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/mistral_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/openai.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/llms/openai_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/mappings.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/model_discovery/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/model_discovery/base.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/model_discovery/cache.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/model_discovery/registry.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/observability/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/observability/mlflow.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/observability/wandb.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/observability/workflow_traces.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/providers.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/pydantic_ai/_types.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/pydantic_ai/plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/utils/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/utils/discovery.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/utils/message_coercion.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/utils/mock_adapter.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/utils/parameter_normalizer.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/utils/response_wrapper.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/utils/validation.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/utils/version_compat.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/vector_stores/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/vector_stores/base.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/integrations/wrappers.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/invokers/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/invokers/base.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/invokers/batch.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/invokers/local.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/adapters.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/bindings.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/canonical.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/certificates.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/composites.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/kinds.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/patterns.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/resolution.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/resolver.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/runtime.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/signals.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/knobs/telemetry.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/mcp/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/mcp/server.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/mcp/tools.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/metrics/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/metrics/agent_metrics.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/metrics/content_features.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/metrics/deepeval_metrics.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/metrics/ragas_metrics.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/metrics/registry.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/observability/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/observability/agent_spans.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/observability/client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/observability/config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/observability/decorators.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/observability/dtos.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/base.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/batch_optimizers.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/cloud_optimizer.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/grid.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/random.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/registry.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/remote.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/remote_services.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/optimizers/results.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/playbook/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/playbook/loader.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/playbook/model.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/playbook/scaffold.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/playbook/staleness.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/playbook/validator.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/plugins/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/plugins/registry.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/projects/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/projects/client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/projects/config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/projects/dtos.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/prompts/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/prompts/client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/prompts/config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/prompts/dtos.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/providers/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/providers/validation.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/py.typed +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/reporting/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/reporting/example_map.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/auth/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/auth/helpers.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/auth/mfa.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/auth/oidc.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/auth/sms.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/auth/totp.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/credentials.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/crypto_utils.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/deployment.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/encryption.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/enterprise.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/headers.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/input_validation.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/jwt_validator.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/rate_limiter.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/redaction.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/session_manager.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/security/tenant.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-debugging/SKILL.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-debugging/references/error-reference.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-integrations/SKILL.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-quickstart/references/environment-variables.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-run-optimization/SKILL.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-run-optimization/references/cost-management.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/storage/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/storage/local_storage.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/testing/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/traigent_client.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/traigent_integration.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tuned_variables/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tuned_variables/dataflow_strategy.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tuned_variables/detection_strategies.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tuned_variables/detection_types.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tuned_variables/detector.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tuned_variables/discovery.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tuned_variables/observation.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tuned_variables/py.typed +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tvl/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tvl/__main__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tvl/models.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tvl/objectives.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tvl/options.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tvl/promotion_gate.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tvl/registry.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tvl/spec_loader.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tvl/spec_validator.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/tvl/statistics.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/batch_optimizer_utils.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/batch_processing.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/callbacks.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/console.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/constraints.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/cost_calculator.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/diagnostics.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/discrete_domains.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/env_config.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/error_handler.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/example_id.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/exceptions.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/file_versioning.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/function_identity.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/hashing.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/importance.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/incentives.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/insights.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/langchain_interceptor.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/litellm_interceptor.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/llm_response_parsing.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/local_analytics.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/logging.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/multi_objective.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/numpy_compat.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/objectives.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/optimization_analyzer.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/optimization_logger.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/pagination.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/persistence.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/results_table.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/retry.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/url_security.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/utils/validation.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/visualization/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/visualization/plots.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/wrapper/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/wrapper/errors.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/wrapper/server.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent/wrapper/service.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent.egg-info/dependency_links.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent.egg-info/entry_points.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent.egg-info/requires.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent.egg-info/top_level.txt +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent_validation/__init__.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent_validation/base.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent_validation/plugins.py +0 -0
- {traigent-0.18.0 → traigent-0.18.1.dev0}/traigent_validation/py.typed +0 -0
- {traigent-0.18.0 → traigent-0.18.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.18.
|
|
3
|
+
Version: 0.18.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
|
|
@@ -481,9 +481,9 @@ class CostOptimizationAI:
|
|
|
481
481
|
savings = action.estimated_savings_absolute * simulation_days
|
|
482
482
|
simulation["total_savings"] += savings
|
|
483
483
|
simulation["total_estimated_savings"] += savings
|
|
484
|
-
simulation["savings_breakdown"][
|
|
485
|
-
|
|
486
|
-
|
|
484
|
+
simulation["savings_breakdown"][action.resource_type.value] = (
|
|
485
|
+
savings
|
|
486
|
+
)
|
|
487
487
|
else:
|
|
488
488
|
# Dictionary format
|
|
489
489
|
if isinstance(actions, dict):
|
|
@@ -145,7 +145,8 @@ class NextStepsClient:
|
|
|
145
145
|
Returns:
|
|
146
146
|
Dict with the backend next-steps contract payload. The response
|
|
147
147
|
includes a ``caveat`` field that callers should display near the
|
|
148
|
-
recommendations.
|
|
148
|
+
recommendations. If the backend includes the optional opaque
|
|
149
|
+
``posture`` block, it is returned unchanged.
|
|
149
150
|
|
|
150
151
|
Raises:
|
|
151
152
|
httpx.HTTPError: If request fails. A 404 response is raised as
|
|
@@ -206,7 +206,9 @@ class CostForecaster:
|
|
|
206
206
|
alert_level = (
|
|
207
207
|
"critical"
|
|
208
208
|
if projected_overage > budget_limit * 0.1
|
|
209
|
-
else "warning"
|
|
209
|
+
else "warning"
|
|
210
|
+
if projected_overage > 0
|
|
211
|
+
else "none"
|
|
210
212
|
)
|
|
211
213
|
|
|
212
214
|
return {
|
|
@@ -455,7 +457,9 @@ class CostForecaster:
|
|
|
455
457
|
"trend": (
|
|
456
458
|
"improving"
|
|
457
459
|
if efficiency_change < 0
|
|
458
|
-
else "degrading"
|
|
460
|
+
else "degrading"
|
|
461
|
+
if efficiency_change > 0
|
|
462
|
+
else "stable"
|
|
459
463
|
),
|
|
460
464
|
}
|
|
461
465
|
|
|
@@ -70,6 +70,12 @@ def _print_next_steps_table(payload: dict[str, Any]) -> None:
|
|
|
70
70
|
experiment_run_id = payload.get("experiment_run_id", "unknown")
|
|
71
71
|
console.print(f"\n[bold blue]Next Steps for {experiment_run_id}[/bold blue]\n")
|
|
72
72
|
|
|
73
|
+
posture = payload.get("posture")
|
|
74
|
+
if isinstance(posture, dict):
|
|
75
|
+
summary_text = posture.get("summary_text")
|
|
76
|
+
if summary_text:
|
|
77
|
+
console.print(f"[bold]Posture:[/bold] {summary_text}\n")
|
|
78
|
+
|
|
73
79
|
rows = payload.get("next_steps") or []
|
|
74
80
|
if rows:
|
|
75
81
|
table = Table(show_header=True, header_style="bold magenta")
|
|
@@ -290,12 +290,12 @@ class APIKeyManager:
|
|
|
290
290
|
alphanumerics or underscores after the prefix.
|
|
291
291
|
Returns False for any deviation so callers can reject suspicious values early.
|
|
292
292
|
|
|
293
|
-
Supported formats:
|
|
294
|
-
- `tg_`: Standard Traigent API keys (64 characters total)
|
|
295
|
-
- `uk_`: User/utility keys issued by the backend (46 characters total)
|
|
296
|
-
- `sk_`: Service keys issued by the backend (46 characters total)
|
|
297
|
-
- `ak_`: Admin keys issued by the backend (46 characters total)
|
|
298
|
-
- `tk_`: Temporary keys issued by the backend (46 characters total)
|
|
293
|
+
Supported formats:
|
|
294
|
+
- `tg_`: Standard Traigent API keys (64 characters total)
|
|
295
|
+
- `uk_`: User/utility keys issued by the backend (46 characters total)
|
|
296
|
+
- `sk_`: Service keys issued by the backend (46 characters total)
|
|
297
|
+
- `ak_`: Admin keys issued by the backend (46 characters total)
|
|
298
|
+
- `tk_`: Temporary keys issued by the backend (46 characters total)
|
|
299
299
|
|
|
300
300
|
Args:
|
|
301
301
|
key: API key to validate
|
|
@@ -307,13 +307,13 @@ class APIKeyManager:
|
|
|
307
307
|
return False
|
|
308
308
|
|
|
309
309
|
# Define valid prefixes and their expected total lengths
|
|
310
|
-
prefix_lengths = {
|
|
311
|
-
"tg_": 64, # Standard Traigent API keys
|
|
312
|
-
"uk_": 46, # User/utility keys from backend
|
|
313
|
-
"sk_": 46, # Service keys from backend
|
|
314
|
-
"ak_": 46, # Admin keys from backend
|
|
315
|
-
"tk_": 46, # Temporary keys from backend
|
|
316
|
-
}
|
|
310
|
+
prefix_lengths = {
|
|
311
|
+
"tg_": 64, # Standard Traigent API keys
|
|
312
|
+
"uk_": 46, # User/utility keys from backend
|
|
313
|
+
"sk_": 46, # Service keys from backend
|
|
314
|
+
"ak_": 46, # Admin keys from backend
|
|
315
|
+
"tk_": 46, # Temporary keys from backend
|
|
316
|
+
}
|
|
317
317
|
|
|
318
318
|
# Find matching prefix
|
|
319
319
|
matched_prefix = None
|
|
@@ -36,6 +36,10 @@ from traigent.core.session_types import (
|
|
|
36
36
|
)
|
|
37
37
|
from traigent.utils.env_config import is_backend_offline
|
|
38
38
|
from traigent.utils.exceptions import MetricExtractionError
|
|
39
|
+
from traigent.utils.artifact_fingerprints import (
|
|
40
|
+
artifact_fingerprints_to_wire,
|
|
41
|
+
fingerprint_meta_to_wire,
|
|
42
|
+
)
|
|
39
43
|
from traigent.utils.logging import get_logger
|
|
40
44
|
from traigent.utils.validation import validate_numeric_metric
|
|
41
45
|
|
|
@@ -654,6 +658,7 @@ class ApiOperations:
|
|
|
654
658
|
payload["tvl_governance"] = wire_governance
|
|
655
659
|
if getattr(session_request, "warm_start_from", None):
|
|
656
660
|
payload["warm_start_from"] = session_request.warm_start_from
|
|
661
|
+
self._attach_artifact_fingerprint_payload(payload, session_request)
|
|
657
662
|
return payload
|
|
658
663
|
|
|
659
664
|
def _build_legacy_session_payload(
|
|
@@ -697,8 +702,26 @@ class ApiOperations:
|
|
|
697
702
|
# BE may not consume it yet; the SDK must still forward it.
|
|
698
703
|
if getattr(session_request, "warm_start_from", None):
|
|
699
704
|
payload["warm_start_from"] = session_request.warm_start_from
|
|
705
|
+
self._attach_artifact_fingerprint_payload(payload, session_request)
|
|
700
706
|
return payload
|
|
701
707
|
|
|
708
|
+
@staticmethod
|
|
709
|
+
def _attach_artifact_fingerprint_payload(
|
|
710
|
+
payload: dict[str, Any],
|
|
711
|
+
session_request: SessionCreationRequest,
|
|
712
|
+
) -> None:
|
|
713
|
+
artifact_fingerprints = artifact_fingerprints_to_wire(
|
|
714
|
+
getattr(session_request, "artifact_fingerprints", None)
|
|
715
|
+
)
|
|
716
|
+
if artifact_fingerprints is not None:
|
|
717
|
+
payload["artifact_fingerprints"] = artifact_fingerprints
|
|
718
|
+
|
|
719
|
+
fingerprint_meta = fingerprint_meta_to_wire(
|
|
720
|
+
getattr(session_request, "fingerprint_meta", None)
|
|
721
|
+
)
|
|
722
|
+
if fingerprint_meta is not None:
|
|
723
|
+
payload["fingerprint_meta"] = fingerprint_meta
|
|
724
|
+
|
|
702
725
|
def _build_connector(self) -> Any | None:
|
|
703
726
|
"""Create an aiohttp connector when custom transport settings are required."""
|
|
704
727
|
|
|
@@ -8,6 +8,7 @@ for better maintainability and adherence to software engineering principles.
|
|
|
8
8
|
|
|
9
9
|
import asyncio
|
|
10
10
|
import concurrent.futures
|
|
11
|
+
import json
|
|
11
12
|
import os
|
|
12
13
|
import secrets
|
|
13
14
|
import sys
|
|
@@ -24,7 +25,7 @@ from urllib.parse import quote, urlparse, urlunparse
|
|
|
24
25
|
# Import and re-export BackendClientConfig for backward compatibility
|
|
25
26
|
from traigent.cloud._aiohttp_compat import AIOHTTP_AVAILABLE, aiohttp
|
|
26
27
|
from traigent.cloud.api_operations import ApiOperations
|
|
27
|
-
from traigent.cloud.auth import AuthenticationError
|
|
28
|
+
from traigent.cloud.auth import AuthenticationError, _build_api_key_auth_headers
|
|
28
29
|
from traigent.cloud.backend_bridges import SDKBackendBridge, SessionExperimentMapping
|
|
29
30
|
from traigent.cloud.backend_bridges import bridge as _bridge
|
|
30
31
|
from traigent.cloud.backend_components import (
|
|
@@ -116,6 +117,48 @@ _ALLOWED_EXAMPLE_FEATURE_KINDS = frozenset({"simhash_v1"})
|
|
|
116
117
|
_JSON_CONTENT_TYPE = "application/json"
|
|
117
118
|
_SDK_USER_AGENT = get_sdk_user_agent()
|
|
118
119
|
_SYNC_BACKEND_TRANSIENT_STATUSES = frozenset({408, 429, *range(500, 600)})
|
|
120
|
+
_INTERACTION_POLICY_REQUIRED_KEYS = frozenset(
|
|
121
|
+
{
|
|
122
|
+
"schema_version",
|
|
123
|
+
"profile",
|
|
124
|
+
"policy_text",
|
|
125
|
+
"question_budget",
|
|
126
|
+
"options_max",
|
|
127
|
+
"jargon_level",
|
|
128
|
+
"next_skill_hint",
|
|
129
|
+
"fallback_policy",
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
_INTERACTION_POLICY_PROFILE_REQUIRED_KEYS = frozenset(
|
|
133
|
+
{
|
|
134
|
+
"schema_version",
|
|
135
|
+
"control",
|
|
136
|
+
"expertise",
|
|
137
|
+
"pace",
|
|
138
|
+
"source",
|
|
139
|
+
"confidence",
|
|
140
|
+
}
|
|
141
|
+
)
|
|
142
|
+
_INTERACTION_POLICY_RESPONSE_SCHEMA_VERSION = "traigent.agent_interaction.response.v1"
|
|
143
|
+
_INTERACTION_POLICY_PROFILE_SCHEMA_VERSION = "traigent.interaction_policy.v1"
|
|
144
|
+
|
|
145
|
+
STATIC_POLICY_TEXT = (
|
|
146
|
+
"Adapt to the user's interaction profile — persona "
|
|
147
|
+
"(control=delegate|guided|inspect, expertise=se|ds|unknown) and session "
|
|
148
|
+
"mood (pace=execute|balanced|explore); default guided,se,balanced; infer "
|
|
149
|
+
"from explicit statements first then behavior, corrections win. Always be "
|
|
150
|
+
"concise. Match terminology to expertise: plain words and define each term "
|
|
151
|
+
"once for se; compact statistics/optimization terms for ds. When asking, "
|
|
152
|
+
"show at most 3 options, mark one Recommended, give one short trade-off "
|
|
153
|
+
"each. For delegate/execute, proceed with the recommended reversible "
|
|
154
|
+
"action and ask only at hard gates (paid/provider calls, data egress, "
|
|
155
|
+
"destructive edits, service-owned decisions, missing required facts); for "
|
|
156
|
+
"inspect/explore, give brief rationale before asking. Always recommend "
|
|
157
|
+
"the next skill or action. Never weaken safety (dry-run before paid runs; "
|
|
158
|
+
"approval before cost or egress; service-returned plans are authoritative) "
|
|
159
|
+
"and never put persona or private content into telemetry, metadata, names, "
|
|
160
|
+
"logs, or provenance."
|
|
161
|
+
)
|
|
119
162
|
|
|
120
163
|
|
|
121
164
|
class _SyncBackendTransientError(RetryableError):
|
|
@@ -563,6 +606,10 @@ class BackendIntegratedClient:
|
|
|
563
606
|
# Read-only analytics accessor (lazily exposed via the ``analytics``
|
|
564
607
|
# property). Kept separate from the write paths above.
|
|
565
608
|
self._analytics_ns: AnalyticsNamespace | None = None
|
|
609
|
+
self._interaction_policy_cache: dict[
|
|
610
|
+
tuple[str | None, str | None], dict[str, Any]
|
|
611
|
+
] = {}
|
|
612
|
+
self._interaction_policy_fallback_logged = False
|
|
566
613
|
|
|
567
614
|
@property
|
|
568
615
|
def analytics(self) -> "AnalyticsNamespace":
|
|
@@ -577,12 +624,286 @@ class BackendIntegratedClient:
|
|
|
577
624
|
self._analytics_ns = AnalyticsNamespace(self)
|
|
578
625
|
return self._analytics_ns
|
|
579
626
|
|
|
627
|
+
def _log_local_interaction_policy_once(self) -> None:
|
|
628
|
+
if self._interaction_policy_fallback_logged:
|
|
629
|
+
return
|
|
630
|
+
logger.info("using local interaction policy")
|
|
631
|
+
self._interaction_policy_fallback_logged = True
|
|
632
|
+
|
|
633
|
+
def _static_interaction_policy(self) -> dict[str, Any]:
|
|
634
|
+
self._log_local_interaction_policy_once()
|
|
635
|
+
return {
|
|
636
|
+
"schema_version": _INTERACTION_POLICY_RESPONSE_SCHEMA_VERSION,
|
|
637
|
+
"profile": {
|
|
638
|
+
"control": "guided",
|
|
639
|
+
"expertise": "se",
|
|
640
|
+
"pace": "balanced",
|
|
641
|
+
"source": "default",
|
|
642
|
+
"confidence": 0.0,
|
|
643
|
+
"schema_version": _INTERACTION_POLICY_PROFILE_SCHEMA_VERSION,
|
|
644
|
+
},
|
|
645
|
+
"policy_text": STATIC_POLICY_TEXT,
|
|
646
|
+
"question_budget": 2,
|
|
647
|
+
"options_max": 3,
|
|
648
|
+
"jargon_level": "plain",
|
|
649
|
+
"next_skill_hint": None,
|
|
650
|
+
"fallback_policy": "static_v1",
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
@staticmethod
|
|
654
|
+
def _interaction_policy_cache_key(
|
|
655
|
+
*,
|
|
656
|
+
harness: str | None,
|
|
657
|
+
skill: str | None,
|
|
658
|
+
) -> tuple[str | None, str | None]:
|
|
659
|
+
def _normalize(value: str | None) -> str | None:
|
|
660
|
+
if not isinstance(value, str):
|
|
661
|
+
return value
|
|
662
|
+
cleaned = value.strip()
|
|
663
|
+
return cleaned or None
|
|
664
|
+
|
|
665
|
+
return (_normalize(harness), _normalize(skill))
|
|
666
|
+
|
|
667
|
+
@staticmethod
|
|
668
|
+
def _build_interaction_policy_params(
|
|
669
|
+
*,
|
|
670
|
+
harness: str | None,
|
|
671
|
+
skill: str | None,
|
|
672
|
+
signals: Any,
|
|
673
|
+
) -> dict[str, str] | None:
|
|
674
|
+
params: dict[str, str] = {}
|
|
675
|
+
if isinstance(harness, str) and harness.strip():
|
|
676
|
+
params["harness"] = harness.strip()
|
|
677
|
+
if isinstance(skill, str) and skill.strip():
|
|
678
|
+
params["skill"] = skill.strip()
|
|
679
|
+
if signals is not None:
|
|
680
|
+
params["signals"] = json.dumps(
|
|
681
|
+
signals, separators=(",", ":"), sort_keys=True
|
|
682
|
+
)
|
|
683
|
+
return params or None
|
|
684
|
+
|
|
685
|
+
@staticmethod
|
|
686
|
+
def _normalize_interaction_policy_payload(payload: Any) -> dict[str, Any]:
|
|
687
|
+
if not isinstance(payload, dict):
|
|
688
|
+
raise CloudServiceError(
|
|
689
|
+
"Interaction policy endpoint returned a non-JSON object response"
|
|
690
|
+
)
|
|
691
|
+
|
|
692
|
+
data = payload.get("data", payload)
|
|
693
|
+
if not isinstance(data, dict):
|
|
694
|
+
raise CloudServiceError(
|
|
695
|
+
"Interaction policy endpoint returned invalid response data"
|
|
696
|
+
)
|
|
697
|
+
|
|
698
|
+
missing = sorted(_INTERACTION_POLICY_REQUIRED_KEYS - data.keys())
|
|
699
|
+
if missing:
|
|
700
|
+
raise CloudServiceError(
|
|
701
|
+
"Interaction policy endpoint returned malformed response: "
|
|
702
|
+
f"missing {', '.join(missing)}"
|
|
703
|
+
)
|
|
704
|
+
|
|
705
|
+
if data.get("schema_version") != _INTERACTION_POLICY_RESPONSE_SCHEMA_VERSION:
|
|
706
|
+
raise CloudServiceError(
|
|
707
|
+
"Interaction policy endpoint returned unsupported response schema"
|
|
708
|
+
)
|
|
709
|
+
|
|
710
|
+
profile = data.get("profile")
|
|
711
|
+
if not isinstance(profile, dict):
|
|
712
|
+
raise CloudServiceError(
|
|
713
|
+
"Interaction policy endpoint returned malformed profile"
|
|
714
|
+
)
|
|
715
|
+
|
|
716
|
+
missing_profile = sorted(
|
|
717
|
+
_INTERACTION_POLICY_PROFILE_REQUIRED_KEYS - profile.keys()
|
|
718
|
+
)
|
|
719
|
+
if missing_profile:
|
|
720
|
+
raise CloudServiceError(
|
|
721
|
+
"Interaction policy endpoint returned malformed profile: "
|
|
722
|
+
f"missing {', '.join(missing_profile)}"
|
|
723
|
+
)
|
|
724
|
+
|
|
725
|
+
if profile.get("schema_version") != _INTERACTION_POLICY_PROFILE_SCHEMA_VERSION:
|
|
726
|
+
raise CloudServiceError(
|
|
727
|
+
"Interaction policy endpoint returned unsupported profile schema"
|
|
728
|
+
)
|
|
729
|
+
|
|
730
|
+
return {
|
|
731
|
+
"schema_version": data["schema_version"],
|
|
732
|
+
"profile": {
|
|
733
|
+
"control": profile["control"],
|
|
734
|
+
"expertise": profile["expertise"],
|
|
735
|
+
"pace": profile["pace"],
|
|
736
|
+
"source": profile["source"],
|
|
737
|
+
"confidence": profile["confidence"],
|
|
738
|
+
"schema_version": profile["schema_version"],
|
|
739
|
+
},
|
|
740
|
+
"policy_text": data["policy_text"],
|
|
741
|
+
"question_budget": data["question_budget"],
|
|
742
|
+
"options_max": data["options_max"],
|
|
743
|
+
"jargon_level": data["jargon_level"],
|
|
744
|
+
"next_skill_hint": data["next_skill_hint"],
|
|
745
|
+
"fallback_policy": data["fallback_policy"],
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
def _cache_interaction_policy(
|
|
749
|
+
self,
|
|
750
|
+
*,
|
|
751
|
+
cache_key: tuple[str | None, str | None],
|
|
752
|
+
policy: Mapping[str, Any],
|
|
753
|
+
etag: str | None,
|
|
754
|
+
) -> None:
|
|
755
|
+
profile = policy.get("profile")
|
|
756
|
+
cached_profile: dict[str, Any] | None = None
|
|
757
|
+
if isinstance(profile, Mapping):
|
|
758
|
+
cached_profile = {
|
|
759
|
+
"control": profile.get("control"),
|
|
760
|
+
"expertise": profile.get("expertise"),
|
|
761
|
+
"pace": profile.get("pace"),
|
|
762
|
+
"source": profile.get("source"),
|
|
763
|
+
"confidence": profile.get("confidence"),
|
|
764
|
+
"schema_version": profile.get("schema_version"),
|
|
765
|
+
}
|
|
766
|
+
self._interaction_policy_cache[cache_key] = {
|
|
767
|
+
"etag": etag,
|
|
768
|
+
"policy_text": policy["policy_text"],
|
|
769
|
+
"profile": cached_profile,
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
def _cached_interaction_policy(
|
|
773
|
+
self, cache_key: tuple[str | None, str | None]
|
|
774
|
+
) -> dict[str, Any] | None:
|
|
775
|
+
cached = self._interaction_policy_cache.get(cache_key)
|
|
776
|
+
if not isinstance(cached, dict):
|
|
777
|
+
return None
|
|
778
|
+
|
|
779
|
+
policy_text = cached.get("policy_text")
|
|
780
|
+
if not isinstance(policy_text, str):
|
|
781
|
+
return None
|
|
782
|
+
|
|
783
|
+
profile = cached.get("profile")
|
|
784
|
+
if not isinstance(profile, dict):
|
|
785
|
+
return None
|
|
786
|
+
|
|
787
|
+
restored = {
|
|
788
|
+
"schema_version": _INTERACTION_POLICY_RESPONSE_SCHEMA_VERSION,
|
|
789
|
+
"profile": {
|
|
790
|
+
"control": profile.get("control"),
|
|
791
|
+
"expertise": profile.get("expertise"),
|
|
792
|
+
"pace": profile.get("pace"),
|
|
793
|
+
"source": profile.get("source"),
|
|
794
|
+
"confidence": profile.get("confidence"),
|
|
795
|
+
"schema_version": profile.get("schema_version"),
|
|
796
|
+
},
|
|
797
|
+
"policy_text": policy_text,
|
|
798
|
+
"question_budget": 2,
|
|
799
|
+
"options_max": 3,
|
|
800
|
+
"jargon_level": "plain",
|
|
801
|
+
"next_skill_hint": None,
|
|
802
|
+
"fallback_policy": "static_v1",
|
|
803
|
+
}
|
|
804
|
+
return restored
|
|
805
|
+
|
|
580
806
|
@property
|
|
581
807
|
def session_bridge(self) -> "SDKBackendBridge":
|
|
582
808
|
"""Return the shared session bridge (exposed for test patching)."""
|
|
583
809
|
|
|
584
810
|
return bridge
|
|
585
811
|
|
|
812
|
+
async def get_interaction_policy(
|
|
813
|
+
self,
|
|
814
|
+
*,
|
|
815
|
+
harness: str | None = None,
|
|
816
|
+
skill: str | None = None,
|
|
817
|
+
signals: Any = None,
|
|
818
|
+
) -> dict[str, Any]:
|
|
819
|
+
"""Return the backend persona-interaction policy seed for this session.
|
|
820
|
+
|
|
821
|
+
The backend response is a seed for the agent's starting interaction
|
|
822
|
+
profile only. Explicit user corrections made in-conversation remain
|
|
823
|
+
authoritative and must override this seed.
|
|
824
|
+
"""
|
|
825
|
+
from traigent.utils.env_config import is_mock_llm
|
|
826
|
+
|
|
827
|
+
if cloud_backend_egress_disabled(self.no_egress):
|
|
828
|
+
return self._static_interaction_policy()
|
|
829
|
+
|
|
830
|
+
api_key = os.getenv("TRAIGENT_API_KEY") or self._api_key_fallback
|
|
831
|
+
if not api_key or is_mock_llm() or not AIOHTTP_AVAILABLE:
|
|
832
|
+
return self._static_interaction_policy()
|
|
833
|
+
|
|
834
|
+
cache_key = self._interaction_policy_cache_key(
|
|
835
|
+
harness=harness,
|
|
836
|
+
skill=skill,
|
|
837
|
+
)
|
|
838
|
+
cached = self._interaction_policy_cache.get(cache_key)
|
|
839
|
+
|
|
840
|
+
headers = _build_api_key_auth_headers(api_key)
|
|
841
|
+
headers.setdefault("User-Agent", _SDK_USER_AGENT)
|
|
842
|
+
cached_etag = cached.get("etag") if isinstance(cached, dict) else None
|
|
843
|
+
if isinstance(cached_etag, str) and cached_etag:
|
|
844
|
+
headers["If-None-Match"] = cached_etag
|
|
845
|
+
|
|
846
|
+
try:
|
|
847
|
+
params = self._build_interaction_policy_params(
|
|
848
|
+
harness=harness,
|
|
849
|
+
skill=skill,
|
|
850
|
+
signals=signals,
|
|
851
|
+
)
|
|
852
|
+
backend_origin = (
|
|
853
|
+
self.backend_config.backend_base_url or BackendConfig.get_backend_url()
|
|
854
|
+
).rstrip("/")
|
|
855
|
+
url = f"{backend_origin}/api/v1/auth/me/interaction-policy"
|
|
856
|
+
|
|
857
|
+
async with aiohttp.ClientSession() as session:
|
|
858
|
+
async with session.get(
|
|
859
|
+
url,
|
|
860
|
+
headers=headers,
|
|
861
|
+
params=params,
|
|
862
|
+
timeout=aiohttp.ClientTimeout(total=self.timeout),
|
|
863
|
+
) as response:
|
|
864
|
+
if response.status == 304:
|
|
865
|
+
cached_policy = self._cached_interaction_policy(cache_key)
|
|
866
|
+
if cached_policy is not None:
|
|
867
|
+
return cached_policy
|
|
868
|
+
raise CloudServiceError(
|
|
869
|
+
"Interaction policy cache miss for backend 304 response"
|
|
870
|
+
)
|
|
871
|
+
|
|
872
|
+
if response.status >= 400:
|
|
873
|
+
error_text = await response.text()
|
|
874
|
+
raise CloudServiceError(
|
|
875
|
+
"Interaction policy request failed with HTTP "
|
|
876
|
+
f"{response.status}: {error_text[:200]}"
|
|
877
|
+
)
|
|
878
|
+
|
|
879
|
+
try:
|
|
880
|
+
payload = await response.json()
|
|
881
|
+
except Exception as exc:
|
|
882
|
+
raise CloudServiceError(
|
|
883
|
+
"Interaction policy endpoint returned non-JSON response"
|
|
884
|
+
) from exc
|
|
885
|
+
|
|
886
|
+
policy = self._normalize_interaction_policy_payload(payload)
|
|
887
|
+
self._cache_interaction_policy(
|
|
888
|
+
cache_key=cache_key,
|
|
889
|
+
policy=policy,
|
|
890
|
+
etag=response.headers.get("ETag"),
|
|
891
|
+
)
|
|
892
|
+
return policy
|
|
893
|
+
except (
|
|
894
|
+
aiohttp.ClientError,
|
|
895
|
+
TimeoutError,
|
|
896
|
+
CloudServiceError,
|
|
897
|
+
AuthenticationError,
|
|
898
|
+
TypeError,
|
|
899
|
+
ValueError,
|
|
900
|
+
) as exc:
|
|
901
|
+
logger.debug(
|
|
902
|
+
"Interaction policy request failed; using local fallback: %s",
|
|
903
|
+
exc,
|
|
904
|
+
)
|
|
905
|
+
return self._static_interaction_policy()
|
|
906
|
+
|
|
586
907
|
def _resolve_local_storage_path(self, override: str | None) -> Path:
|
|
587
908
|
"""Determine the root path for local fallback storage."""
|
|
588
909
|
|
|
@@ -960,6 +1281,8 @@ class BackendIntegratedClient:
|
|
|
960
1281
|
promotion_policy: dict[str, Any] | None = None,
|
|
961
1282
|
tvl_governance: dict[str, Any] | None = None,
|
|
962
1283
|
warm_start_from: str | None = None,
|
|
1284
|
+
artifact_fingerprints: dict[str, str | None] | None = None,
|
|
1285
|
+
fingerprint_meta: dict[str, Any] | None = None,
|
|
963
1286
|
) -> SessionCreationResult:
|
|
964
1287
|
"""Synchronous wrapper for creating a session.
|
|
965
1288
|
Delegates to session_operations module. Phase 8: objectives are
|
|
@@ -974,6 +1297,8 @@ class BackendIntegratedClient:
|
|
|
974
1297
|
promotion_policy=promotion_policy,
|
|
975
1298
|
tvl_governance=tvl_governance,
|
|
976
1299
|
warm_start_from=warm_start_from,
|
|
1300
|
+
artifact_fingerprints=artifact_fingerprints,
|
|
1301
|
+
fingerprint_meta=fingerprint_meta,
|
|
977
1302
|
)
|
|
978
1303
|
|
|
979
1304
|
async def create_hybrid_session(
|
|
@@ -36,6 +36,10 @@ from traigent.evaluators.base import Dataset
|
|
|
36
36
|
from traigent.utils.env_config import is_backend_offline
|
|
37
37
|
from traigent.utils.error_handler import OfflineModeError
|
|
38
38
|
from traigent.utils.error_handler import TraigentError as HelpfulTraigentError
|
|
39
|
+
from traigent.utils.artifact_fingerprints import (
|
|
40
|
+
artifact_fingerprints_to_wire,
|
|
41
|
+
fingerprint_meta_to_wire,
|
|
42
|
+
)
|
|
39
43
|
from traigent.utils.exceptions import ValidationError as ValidationException
|
|
40
44
|
from traigent.utils.logging import get_logger
|
|
41
45
|
from traigent.utils.retry import NetworkError, RateLimitError, retry_http_request
|
|
@@ -1570,6 +1574,8 @@ class TraigentCloudClient(BaseTraigentClient):
|
|
|
1570
1574
|
optimization_strategy: dict[str, Any] | None = None,
|
|
1571
1575
|
user_id: str | None = None,
|
|
1572
1576
|
billing_tier: str = "standard",
|
|
1577
|
+
artifact_fingerprints: dict[str, str | None] | None = None,
|
|
1578
|
+
fingerprint_meta: dict[str, Any] | None = None,
|
|
1573
1579
|
) -> SessionCreationResponse:
|
|
1574
1580
|
"""Create a new optimization session for interactive optimization.
|
|
1575
1581
|
|
|
@@ -1611,6 +1617,8 @@ class TraigentCloudClient(BaseTraigentClient):
|
|
|
1611
1617
|
optimization_strategy=optimization_strategy,
|
|
1612
1618
|
user_id=user_id,
|
|
1613
1619
|
billing_tier=billing_tier,
|
|
1620
|
+
artifact_fingerprints=artifact_fingerprints,
|
|
1621
|
+
fingerprint_meta=fingerprint_meta,
|
|
1614
1622
|
)
|
|
1615
1623
|
|
|
1616
1624
|
if self._aio_session is None:
|
|
@@ -1857,6 +1865,16 @@ class TraigentCloudClient(BaseTraigentClient):
|
|
|
1857
1865
|
# Warm-start: prior experiment id (empty string treated as absent).
|
|
1858
1866
|
if request.warm_start_from:
|
|
1859
1867
|
payload["warm_start_from"] = request.warm_start_from
|
|
1868
|
+
artifact_fingerprints = artifact_fingerprints_to_wire(
|
|
1869
|
+
getattr(request, "artifact_fingerprints", None)
|
|
1870
|
+
)
|
|
1871
|
+
if artifact_fingerprints is not None:
|
|
1872
|
+
payload["artifact_fingerprints"] = artifact_fingerprints
|
|
1873
|
+
fingerprint_meta = fingerprint_meta_to_wire(
|
|
1874
|
+
getattr(request, "fingerprint_meta", None)
|
|
1875
|
+
)
|
|
1876
|
+
if fingerprint_meta is not None:
|
|
1877
|
+
payload["fingerprint_meta"] = fingerprint_meta
|
|
1860
1878
|
return payload
|
|
1861
1879
|
|
|
1862
1880
|
@staticmethod
|
|
@@ -202,6 +202,8 @@ class SessionCreationRequest:
|
|
|
202
202
|
user_id: str | None = None
|
|
203
203
|
billing_tier: str = "standard"
|
|
204
204
|
metadata: dict[str, Any] = field(default_factory=dict)
|
|
205
|
+
artifact_fingerprints: dict[str, str | None] | None = None
|
|
206
|
+
fingerprint_meta: dict[str, Any] | None = None
|
|
205
207
|
# Alternative parameter names for test compatibility
|
|
206
208
|
problem_type: str | None = None
|
|
207
209
|
|
|
@@ -329,6 +329,8 @@ class SessionOperations:
|
|
|
329
329
|
promotion_policy: dict[str, Any] | None = None,
|
|
330
330
|
tvl_governance: dict[str, Any] | None = None,
|
|
331
331
|
warm_start_from: str | None = None,
|
|
332
|
+
artifact_fingerprints: dict[str, str | None] | None = None,
|
|
333
|
+
fingerprint_meta: dict[str, Any] | None = None,
|
|
332
334
|
) -> SessionCreationResult:
|
|
333
335
|
"""Create a session with backend metadata submission.
|
|
334
336
|
|
|
@@ -446,6 +448,8 @@ class SessionOperations:
|
|
|
446
448
|
user_id=None, # Privacy preserving
|
|
447
449
|
billing_tier="privacy",
|
|
448
450
|
metadata=metadata or {},
|
|
451
|
+
artifact_fingerprints=artifact_fingerprints,
|
|
452
|
+
fingerprint_meta=fingerprint_meta,
|
|
449
453
|
)
|
|
450
454
|
|
|
451
455
|
try:
|