traigent 0.20.0__tar.gz → 0.21.0.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.20.0 → traigent-0.21.0.dev0}/CHANGELOG.md +75 -0
- {traigent-0.20.0/traigent.egg-info → traigent-0.21.0.dev0}/PKG-INFO +2 -2
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/api-reference/telemetry.md +36 -1
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/onboarding.md +1 -1
- {traigent-0.20.0 → traigent-0.21.0.dev0}/pyproject.toml +4 -2
- {traigent-0.20.0 → traigent-0.21.0.dev0}/requirements/requirements-dev.txt +1 -1
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/decorators.py +10 -4
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/types.py +7 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/auth_commands.py +8 -6
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/main.py +23 -24
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/onboard_commands.py +1 -1
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/analytics_client.py +93 -14
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/api_operations.py +59 -7
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/auth.py +193 -11
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/backend_client.py +24 -8
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/client.py +2 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/dataset_converter.py +11 -8
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/optimizer_client.py +1 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/password_auth_handler.py +1 -1
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/resilient_client.py +4 -1
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/session_operations.py +8 -2
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/sync_manager.py +280 -562
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/token_manager.py +2 -2
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/trial_operations.py +78 -25
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/models.yaml +15 -2
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/types.py +2 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/backend_session_manager.py +147 -21
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/execution_policy_runtime.py +37 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/metadata_helpers.py +7 -6
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/optimization_pipeline.py +3 -2
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/optimized_function.py +62 -9
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/orchestrator.py +198 -27
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/session_types.py +11 -1
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/base.py +98 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/local.py +253 -64
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/metrics_tracker.py +12 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/langfuse/client.py +2 -2
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/model_discovery/anthropic_discovery.py +34 -21
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/observability/workflow_traces.py +1 -1
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/observability/agent_spans.py +8 -10
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/observability/client.py +246 -85
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/observability/config.py +35 -2
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/observability/decorators.py +49 -22
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/observability/dtos.py +58 -44
- traigent-0.21.0.dev0/traigent/security/redaction.py +233 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/artifact_fingerprints.py +66 -33
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/callbacks.py +74 -19
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/cost_calculator.py +22 -3
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/env_config.py +6 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/logging.py +4 -3
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/optimization_logger.py +92 -9
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/retry.py +25 -4
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/validation.py +85 -1
- {traigent-0.20.0 → traigent-0.21.0.dev0/traigent.egg-info}/PKG-INFO +2 -2
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent.egg-info/requires.txt +1 -1
- traigent-0.20.0/traigent/security/redaction.py +0 -91
- {traigent-0.20.0 → traigent-0.21.0.dev0}/COMMERCIAL-LICENSE.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/CONTRIBUTING.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/CONTRIBUTOR-LICENSING.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/DISCLAIMER.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/LICENSE +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/MANIFEST.in +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/NOTICE +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/README.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/SECURITY.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/LOCAL_CI_GATE.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/README.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/SYNC_MAP.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/agent-skill.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/api-reference/complete-function-specification.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/api-reference/decorator-reference.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/api-reference/enterprise-beta-api.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/api-reference/interactive_optimizer.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/api-reference/thread-pool-examples.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/architecture/ARCHITECTURE.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/architecture/cost-architecture-validation.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/architecture/execution_mode_follow_up.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/architecture/integrations-inventory.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/architecture/plugin_architecture.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/architecture/project-structure.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/architecture/stop_conditions.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/concepts/composite-knob-ir.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/concepts/composite-knobs.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/concepts/guided-generation.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/contributing/CONTRIBUTING.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/contributing/README.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/contributing/SECURITY.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/contributing/aikido_triage.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/contributing/code_review_instructions.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/contributing/test-quality-guide.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/demos/README.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/examples/API_PATTERNS.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/examples/LEARNING_ROADMAP.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/examples/QUICK_REFERENCE.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/examples/README.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/examples/START_HERE.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/examples/TROUBLESHOOTING.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/fake-completion-tracking.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/feature_matrices/README.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/README.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/authentication.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/constraint-dsl.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/dataflow-detection.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/framework_override_enhanced_features.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/mcp-server.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/observability-spans.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/prompt_management.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/recommendations.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/safety-gates.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/seamless_injection.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/strategy-presets.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/features/strict_metrics_nulls.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/getting-started/GETTING_STARTED.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/getting-started/README.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/getting-started/installation.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/getting-started/minimal-integration.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/getting-started/testing.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/guides/evaluation.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/guides/execution-mode-migration.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/guides/execution-modes.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/guides/js-bridge.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/guides/llm_plugin_migration_guide.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/guides/parallel-configuration.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/guides/secrets_management.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/hybrid-mode-api-contract.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/hybrid-mode-client-guide.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/operations/azure_openai.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/operations/bedrock.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/operations/google_gemini.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/security/trust_model.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/traceability/concepts/composite-knob-ir.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/traceability/concepts/composite-knobs.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/traceability/concepts/guided-generation.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/traceability/schema.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/traceability/tagging_tracking.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/traceability/taxonomy_reference.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/user-guide/README.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/user-guide/agent_optimization.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/user-guide/choosing_optimization_model.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/user-guide/configuration-spaces.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/user-guide/evaluation_guide.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/user-guide/injection_modes.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/user-guide/interactive_optimization.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/user-guide/smart_optimization.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/user-guide/tuned_variables.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/docs/walkthrough.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/requirements/requirements-all.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/requirements/requirements-analytics.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/requirements/requirements-bayesian.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/requirements/requirements-chroma.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/requirements/requirements-hybrid.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/requirements/requirements-integrations.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/requirements/requirements-security.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/requirements/requirements-test.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/requirements/requirements.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/setup.cfg +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/_version.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/adapters/execution_adapter.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/admin/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/admin/client.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/admin/config.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/admin/dtos.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/agents/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/agents/config_mapper.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/agents/executor.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/agents/platforms.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/agents/specification_generator.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/anomaly.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/cost_optimization.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/example_insights.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/intelligence.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/meta_learning.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/next_steps.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/optimization_plan.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/predictive.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/render.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics/scheduling.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics_mcp/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics_mcp/server.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/analytics_mcp/tools.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/agent_inference.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/config_builder.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/config_space.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/constraint_builders.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/constraints.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/functions.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/parameter_ranges.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/parameter_validator.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/safety.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/strategy_presets.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/api/validation_protocol.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/detect_tvars_command.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/function_discovery.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/generate_config_command.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/hooks_commands.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/local_commands.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/next_steps_command.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/optimization_validator.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/plan_command.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/playbook_commands.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/sync_commands.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cli/validation_types.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/_aiohttp_compat.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/agent_dtos.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/analytics_auth.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/api_key_manager.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/async_batch_transport.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/backend_bridges.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/backend_components.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/backend_synchronizer.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/benchmark_client.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/billing.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/cloud_operations.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/credential_manager.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/credential_resolver.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/dtos.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/governance.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/integration_manager.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/models.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/privacy_operations.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/production_mcp_client.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/remote_guidance.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/service.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/session_types.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/sessions.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/smart_pruning.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/subset_selection.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/trial_tracker.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/url_security.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/user_agent.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/cloud/validators.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/api_keys.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/ast_transformer.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/backend_config.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/context.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/feature_flags.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/parallel.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/project.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/provider_support.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/providers.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/runtime_injector.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config/tenant.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/agent_classifier.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/apply.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/catalog.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/llm_backend.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/pipeline.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/presets/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/presets/constraint_templates.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/presets/range_presets.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/recommendations.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/subsystems/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/subsystems/benchmarks.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/subsystems/objectives.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/config_generator/types.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/best_config_runtime.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/cache_policy.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/ci_approval.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/config_state_manager.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/constants.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/cost_enforcement.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/cost_estimator.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/evaluator_wrapper.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/exception_handler.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/license.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/logger_facade.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/mandatory_metrics.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/meta_types.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/metric_registry.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/metrics_aggregator.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/namespace.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/objectives.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/orchestrator_helpers.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/parallel_execution_manager.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/progress_manager.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/result_selection.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/sample_budget.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/samplers/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/samplers/random_sampler.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/session_context.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/stat_significance.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/stop_condition_manager.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/stop_conditions.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/trace_env.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/tracing.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/trial_context.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/trial_lifecycle.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/trial_result_factory.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/types.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/types_ext.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/utils.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core/workflow_trace_manager.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core_metrics/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core_metrics/client.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core_metrics/config.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/core_metrics/dtos.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/defaults.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/effectuation/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/effectuation/contracts.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/effectuation/strategies/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/effectuation/strategies/framework_param.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/effectuation/strategies/self_consistency.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluation/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluation/client.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluation/config.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluation/dtos.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/catalog_loader.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/dataset_registry.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/hybrid_api.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/metrics.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/evaluators/recommendations.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/_portal.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/_bootstrap.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/_demo.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/anthropic.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/aws.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/azure.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/gcp.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/gemini.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/groq.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/litellm_any.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/manifest.json +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/openai.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/openrouter.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/providers/qa_samples.jsonl +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/quickstart/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/quickstart/__main__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/quickstart/_env.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/quickstart/publish_and_verify.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/examples/tutorial_bootstrap.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/backend_provider.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/example_synth.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/llm_provider.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/loop.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/models.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/options.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/prompt_rewriter.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/_deterministic_indices.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/artifacts.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/buffer.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/document.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/edits.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/prompts.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/reflection.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/schedule.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/slow_update.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/splits.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/trainer.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/skill_train/trainer_result.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/generation/validators.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/guaranteed_modes.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hooks/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hooks/config.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hooks/installer.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hooks/validator.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hybrid/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hybrid/discovery.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hybrid/http_transport.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hybrid/lifecycle.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hybrid/mcp_transport.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hybrid/protocol.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/hybrid/transport.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/activation.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/base.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/base_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/bedrock_client.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/config.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/dspy_adapter.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/framework_override.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/langchain/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/langchain/handler.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/langfuse/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/langfuse/callback.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/langfuse/tracker.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/anthropic_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/base_llm_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/bedrock_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/cohere_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/gemini_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/huggingface_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/langchain/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/langchain/base.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/langchain_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/litellm_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/mistral_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/openai.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/llms/openai_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/mappings.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/model_discovery/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/model_discovery/base.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/model_discovery/cache.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/model_discovery/registry.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/observability/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/observability/mlflow.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/observability/wandb.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/plugin_registry.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/providers.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/pydantic_ai/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/pydantic_ai/_types.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/pydantic_ai/handler.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/pydantic_ai/plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/utils/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/utils/discovery.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/utils/message_coercion.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/utils/mock_adapter.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/utils/parameter_normalizer.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/utils/response_wrapper.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/utils/validation.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/utils/version_compat.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/vector_stores/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/vector_stores/base.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/integrations/wrappers.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/invokers/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/invokers/base.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/invokers/batch.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/invokers/local.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/invokers/streaming.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/adapters.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/bindings.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/canonical.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/cascade.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/certificates.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/composites.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/kinds.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/patterns.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/resolution.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/resolver.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/runtime.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/signals.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/knobs/telemetry.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/mcp/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/mcp/server.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/mcp/tools.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/metrics/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/metrics/agent_metrics.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/metrics/content_features.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/metrics/deepeval_metrics.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/metrics/ragas_metrics.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/metrics/registry.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/observability/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/base.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/batch_optimizers.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/cloud_optimizer.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/grid.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/interactive_optimizer.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/random.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/registry.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/remote.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/remote_services.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/optimizers/results.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/playbook/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/playbook/loader.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/playbook/model.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/playbook/scaffold.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/playbook/staleness.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/playbook/validator.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/plugins/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/plugins/registry.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/projects/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/projects/client.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/projects/config.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/projects/dtos.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/prompts/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/prompts/client.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/prompts/config.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/prompts/dtos.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/providers/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/providers/validation.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/py.typed +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/reporting/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/reporting/example_map.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/audit.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/auth/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/auth/helpers.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/auth/mfa.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/auth/models.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/auth/oidc.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/auth/saml.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/auth/sms.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/auth/totp.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/config.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/credentials.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/crypto_utils.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/deployment.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/encryption.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/enterprise.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/headers.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/input_validation.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/jwt_validator.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/rate_limiter.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/session_manager.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/security/tenant.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-debugging/SKILL.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-debugging/references/error-reference.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-integrations/SKILL.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-quickstart/references/environment-variables.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-run-optimization/SKILL.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-run-optimization/references/cost-management.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/storage/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/storage/local_storage.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/testing/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/traigent_client.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/traigent_integration.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tuned_variables/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tuned_variables/dataflow_strategy.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tuned_variables/detection_strategies.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tuned_variables/detection_types.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tuned_variables/detector.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tuned_variables/discovery.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tuned_variables/observation.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tuned_variables/py.typed +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tvl/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tvl/__main__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tvl/models.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tvl/objectives.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tvl/options.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tvl/promotion_gate.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tvl/registry.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tvl/spec_loader.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tvl/spec_validator.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/tvl/statistics.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/batch_optimizer_utils.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/batch_processing.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/console.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/constraints.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/diagnostics.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/discrete_domains.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/error_handler.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/example_id.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/exceptions.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/file_versioning.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/function_identity.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/hashing.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/importance.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/incentives.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/insights.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/langchain_interceptor.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/litellm_interceptor.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/llm_response_parsing.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/local_analytics.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/multi_objective.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/numpy_compat.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/objectives.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/optimization_analyzer.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/pagination.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/persistence.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/results_table.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/secure_path.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/utils/url_security.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/visualization/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/visualization/plots.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/wrapper/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/wrapper/errors.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/wrapper/server.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent/wrapper/service.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent.egg-info/SOURCES.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent.egg-info/dependency_links.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent.egg-info/entry_points.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent.egg-info/top_level.txt +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent_validation/__init__.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent_validation/base.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent_validation/plugins.py +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent_validation/py.typed +0 -0
- {traigent-0.20.0 → traigent-0.21.0.dev0}/traigent_validation/validators.py +0 -0
|
@@ -6,6 +6,81 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.21.0] - 2026-07-07
|
|
10
|
+
|
|
11
|
+
Observability hardening release. Enterprise-grade privacy posture for the
|
|
12
|
+
`@observe` instrumentation plus latency/usage accuracy fixes across the
|
|
13
|
+
SDK, backend, and portal.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- **BREAKING (behavioral): `@observe` is now metadata-only by default.** The
|
|
18
|
+
decorator and `ObserveContext` no longer send function arguments or return
|
|
19
|
+
values to the observability backend by default — only span metadata (name,
|
|
20
|
+
type, timing, tags, session/environment, and token/cost fields you pass).
|
|
21
|
+
To restore raw input/output capture, opt in per span with
|
|
22
|
+
`@observe(..., content_mode="record")` or globally with
|
|
23
|
+
`TRAIGENT_OBSERVABILITY_CONTENT=record`. Use `content_mode="redacted"` to
|
|
24
|
+
emit redaction placeholders. This closes an egress path where prompt/response
|
|
25
|
+
content left the process by default. **Migration:** if you relied on seeing
|
|
26
|
+
prompts/outputs in the dashboard, set `content_mode="record"` on those spans
|
|
27
|
+
(only for spans whose I/O is safe to store).
|
|
28
|
+
- Recorded span latency now measures only the wrapped function body. Previously
|
|
29
|
+
the span start was stamped before SDK trace-setup work, so transport/setup
|
|
30
|
+
overhead (tens of ms) was misattributed to application latency.
|
|
31
|
+
- Token and cost usage fields are nullable end-to-end (SDK DTO → backend schema
|
|
32
|
+
and model → portal). Unknown usage now renders as `—` instead of a misleading
|
|
33
|
+
`0` / `$0.0000`; a measured zero still renders as `0`. Completed generation
|
|
34
|
+
spans with no usage log a one-time warning rather than implying auto-capture.
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- Observability transport no longer blocks the calling application thread on
|
|
39
|
+
batch-size flushes: sends run on a daemon flush thread, and payload
|
|
40
|
+
redaction/serialization happen before acquiring the transport lock. An age
|
|
41
|
+
timer stays armed as a backstop so a tail item is never stranded if the flush
|
|
42
|
+
thread is in its death window when the next item arrives.
|
|
43
|
+
- Telemetry drops (queue full, oversized/non-serializable payloads, closed
|
|
44
|
+
transport, failed batches) are no longer silent: each updates stats/errors and
|
|
45
|
+
emits a `health_callback` event.
|
|
46
|
+
- Unknown `ENVIRONMENT`/`TRAIGENT_ENV` labels now log a warning (without leaking
|
|
47
|
+
the raw value) instead of being silently ignored; a missing `session_id`
|
|
48
|
+
renders as `—`.
|
|
49
|
+
|
|
50
|
+
## [0.20.1] - 2026-07-06
|
|
51
|
+
|
|
52
|
+
Patch release for the managed optimization dispatch fix wave and adjacent
|
|
53
|
+
SDK honesty/hardening fixes shipped on develop after 0.20.0.
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
- Named smart optimization for managed-backend users now binds supported
|
|
57
|
+
algorithm names (`bayesian`, `tpe`, `optuna`, `optuna_tpe`, and
|
|
58
|
+
`optuna_random`) to the typed backend Optuna strategy and serializes
|
|
59
|
+
`optimization_strategy` on session creation. Unsupported smart names such
|
|
60
|
+
as `nsga2` and `cmaes` now fail before backend session creation with a
|
|
61
|
+
capability message instead of creating an orphaned session or returning a
|
|
62
|
+
misleading zero-trial result. (#1758, #1752)
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
- Dict-input evaluation now warns when metadata-only parameters are defaulted
|
|
66
|
+
instead of silently accepting the defaulted shape. (#1756, #1746)
|
|
67
|
+
- Local run-log persistence preserves trial/configuration fidelity and keeps
|
|
68
|
+
orchestrator builder compatibility. (#1757, #1747, #1748)
|
|
69
|
+
- CLI algorithm/model surfaces now match public behavior and remove unsourced
|
|
70
|
+
Claude model guesses. (#1759, #1751)
|
|
71
|
+
- Callback failures derived from `BaseException` are contained without
|
|
72
|
+
breaking optimization control flow. (#1760, #1749)
|
|
73
|
+
- Objective reporting now honestly records unmatched objective metrics instead
|
|
74
|
+
of implying a measurement exists. (#1761, #1691)
|
|
75
|
+
- API-key validation failures are classified as auth/permission failures rather
|
|
76
|
+
than generic backend/network errors. (#1762, #1754)
|
|
77
|
+
- Prior unreleased develop fixes since 0.20.0: public onboarding skills repo
|
|
78
|
+
selection (#1737, #1623), early-stop decorator propagation (#1739, #1692),
|
|
79
|
+
unpriceable OpenRouter cost handling (#1740, #1597), redaction fail-open
|
|
80
|
+
tightening (#1742, #1649, #1650), exact ruff pin extraction in preflight
|
|
81
|
+
(#1743, #1550), analytics insight value validation (#1744, #1662), and
|
|
82
|
+
companion error message threading (#1745, #1885).
|
|
83
|
+
|
|
9
84
|
## [0.20.0] - 2026-07-05
|
|
10
85
|
|
|
11
86
|
Fail-closed hardening release. A systematic silent-failure audit of the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: traigent
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.21.0.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
|
|
@@ -121,7 +121,7 @@ Requires-Dist: types-PyYAML>=6.0.0; extra == "dev"
|
|
|
121
121
|
Requires-Dist: types-requests>=2.31.0; extra == "dev"
|
|
122
122
|
Requires-Dist: types-bleach>=6.0.0; extra == "dev"
|
|
123
123
|
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
|
|
124
|
-
Requires-Dist: ruff
|
|
124
|
+
Requires-Dist: ruff==0.15.12; extra == "dev"
|
|
125
125
|
Requires-Dist: bandit>=1.7.0; extra == "dev"
|
|
126
126
|
Requires-Dist: hypothesis>=6.100.0; extra == "dev"
|
|
127
127
|
Provides-Extra: docs
|
|
@@ -41,7 +41,8 @@ During optimization runs, Traigent collects:
|
|
|
41
41
|
### What is NOT Collected
|
|
42
42
|
|
|
43
43
|
Outside tuned configuration values explicitly sent on the default portal-backed
|
|
44
|
-
path,
|
|
44
|
+
path, and outside observability content you explicitly opt into recording,
|
|
45
|
+
Traigent does **not** collect:
|
|
45
46
|
|
|
46
47
|
- **User prompts or inputs**
|
|
47
48
|
- **LLM responses or outputs**
|
|
@@ -88,6 +89,39 @@ Use `TRAIGENT_DISABLE_TELEMETRY=true` for SDK telemetry opt-out, effective
|
|
|
88
89
|
values on privacy-mode submissions, and `offline=True` for zero Traigent backend
|
|
89
90
|
egress.
|
|
90
91
|
|
|
92
|
+
### `@observe` Content Egress
|
|
93
|
+
|
|
94
|
+
The `@observe` decorator and `ObserveContext` are metadata-only by default. They
|
|
95
|
+
can send trace names, observation names, status, timing, tags, environment,
|
|
96
|
+
release, IDs, explicit metadata, and token/cost fields you pass, but they omit
|
|
97
|
+
function arguments, explicit context `input_data`, return values, and output data
|
|
98
|
+
unless you opt in.
|
|
99
|
+
|
|
100
|
+
To send prompt/output content for observability, opt in explicitly:
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
@observe("llm-call", content_mode="record")
|
|
104
|
+
def call_model(prompt: str) -> str:
|
|
105
|
+
...
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Alternatively set `TRAIGENT_OBSERVABILITY_CONTENT=record`. The supported content
|
|
109
|
+
modes are:
|
|
110
|
+
|
|
111
|
+
- `metadata` (default): omit input and output content
|
|
112
|
+
- `redacted`: send `{"redacted": true}` placeholders for input and output
|
|
113
|
+
- `record`: send captured input and output content
|
|
114
|
+
|
|
115
|
+
`redact_input=True` and `redact_output=True` force redaction placeholders for the
|
|
116
|
+
corresponding side even when `content_mode="record"`. The transport still applies
|
|
117
|
+
pattern-based secret scrubbing before send, but that scrubber is a final safety
|
|
118
|
+
net, not the content-egress policy.
|
|
119
|
+
|
|
120
|
+
`@observe(observation_type=GENERATION)` does not estimate LangChain or provider
|
|
121
|
+
token usage from prompts. Pass measured `input_tokens`, `output_tokens`,
|
|
122
|
+
`total_tokens`, or `cost_usd` from the provider response when recording
|
|
123
|
+
generation spans; otherwise usage is reported as unknown, not zero.
|
|
124
|
+
|
|
91
125
|
### OpenTelemetry Tracing
|
|
92
126
|
|
|
93
127
|
OpenTelemetry tracing is opt-in and uses a separate flag from telemetry
|
|
@@ -179,6 +213,7 @@ The following values are recognized as "opt-out" (case-insensitive):
|
|
|
179
213
|
- `"true"`
|
|
180
214
|
- `"1"`
|
|
181
215
|
- `"yes"`
|
|
216
|
+
- `"on"`
|
|
182
217
|
|
|
183
218
|
Any other value (including unset) means telemetry is enabled.
|
|
184
219
|
|
|
@@ -20,7 +20,7 @@ In a terminal, onboarding can offer to:
|
|
|
20
20
|
|
|
21
21
|
- add `traigent[integrations]` to the project
|
|
22
22
|
- start device login unless `--no-login` is set
|
|
23
|
-
- install Traigent agent skills through `npx skills add Traigent/
|
|
23
|
+
- install Traigent agent skills through `npx skills add Traigent/traigent-skills`
|
|
24
24
|
- register MCP for detected agents when `traigent mcp --help` succeeds
|
|
25
25
|
- run the packaged mock quickstart
|
|
26
26
|
- print the first prompt for the detected coding agent
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "traigent"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.21.0.dev0"
|
|
8
8
|
authors = [
|
|
9
9
|
{name = "Traigent Team", email = "opensource@traigent.ai"},
|
|
10
10
|
]
|
|
@@ -177,7 +177,9 @@ dev = [
|
|
|
177
177
|
"types-requests>=2.31.0",
|
|
178
178
|
"types-bleach>=6.0.0",
|
|
179
179
|
"pre-commit>=3.0.0",
|
|
180
|
-
"ruff
|
|
180
|
+
"ruff==0.15.12", # Exact pin (issue #1550): CI preflight installs this exact
|
|
181
|
+
# version so an unrelated ruff release can't retroactively fail PRs on
|
|
182
|
+
# pre-existing lint debt. Bump deliberately, in the same PR as any fix-up.
|
|
181
183
|
"bandit>=1.7.0",
|
|
182
184
|
"hypothesis>=6.100.0", # Property-based testing for validation logic
|
|
183
185
|
]
|
|
@@ -701,10 +701,16 @@ _OPTIMIZE_DEFAULTS: dict[str, Any] = {
|
|
|
701
701
|
"execution": None,
|
|
702
702
|
"mock": None,
|
|
703
703
|
"max_trials": DEFAULT_MAX_TRIALS,
|
|
704
|
-
#
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
704
|
+
# NOTE: plateau_window / plateau_epsilon / semantic_saturation are
|
|
705
|
+
# intentionally NOT listed here (issue #1692). They are early-stop
|
|
706
|
+
# runtime-override keys (see _ALLOWED_RUNTIME_OVERRIDE_KEYS) that must
|
|
707
|
+
# flow through `combined_runtime_overrides` -> `_decorator_runtime_overrides`
|
|
708
|
+
# -> the orchestrator's stop-condition config, both at decoration time and
|
|
709
|
+
# at call time. Adding them to _OPTIMIZE_DEFAULTS pulls them into
|
|
710
|
+
# _DIRECT_OPTION_KEYS, which reroutes decorator-time values into the dead
|
|
711
|
+
# `combined_settings` bucket (nothing ever reads combined_settings[...]
|
|
712
|
+
# for these keys) instead of `combined_runtime_overrides`, silently
|
|
713
|
+
# no-op'ing early stopping when configured on the decorator.
|
|
708
714
|
# Multi-agent configuration
|
|
709
715
|
"agents": None, # Explicit agent definitions
|
|
710
716
|
"agent_prefixes": None, # Prefix-based agent inference
|
|
@@ -727,6 +727,11 @@ class OptimizationResult:
|
|
|
727
727
|
# Stop reason - why the optimization stopped (see class docstring for values)
|
|
728
728
|
stop_reason: StopReason | None = None
|
|
729
729
|
|
|
730
|
+
# Selection reason for no-winner or fail-closed terminal results. This is
|
|
731
|
+
# distinct from stop_reason: stop_reason explains why execution stopped,
|
|
732
|
+
# while reason_code explains why result selection did not produce a winner.
|
|
733
|
+
reason_code: str | None = None
|
|
734
|
+
|
|
730
735
|
# Run identification and cloud link
|
|
731
736
|
experiment_id: str | None = None
|
|
732
737
|
cloud_url: str | None = None
|
|
@@ -781,6 +786,8 @@ class OptimizationResult:
|
|
|
781
786
|
@property
|
|
782
787
|
def success_rate(self) -> float:
|
|
783
788
|
"""Calculate trial success rate."""
|
|
789
|
+
if "OBJECTIVE_UNMATCHED" in self.warning_codes:
|
|
790
|
+
return 0.0
|
|
784
791
|
if not self.trials:
|
|
785
792
|
return 0.0
|
|
786
793
|
return len(self.successful_trials) / len(self.trials)
|
|
@@ -503,7 +503,8 @@ class TraigentAuthCLI:
|
|
|
503
503
|
|
|
504
504
|
try:
|
|
505
505
|
async with aiohttp.ClientSession(
|
|
506
|
-
timeout=aiohttp.ClientTimeout(total=15)
|
|
506
|
+
timeout=aiohttp.ClientTimeout(total=15),
|
|
507
|
+
trust_env=True,
|
|
507
508
|
) as session:
|
|
508
509
|
async with session.post(url, headers=headers) as response:
|
|
509
510
|
response_text = await response.text()
|
|
@@ -896,7 +897,7 @@ class TraigentAuthCLI:
|
|
|
896
897
|
return False
|
|
897
898
|
|
|
898
899
|
try:
|
|
899
|
-
async with aiohttp.ClientSession() as session:
|
|
900
|
+
async with aiohttp.ClientSession(trust_env=True) as session:
|
|
900
901
|
authorization = await self._start_device_authorization(session)
|
|
901
902
|
self._display_device_authorization(authorization)
|
|
902
903
|
credentials = await self._poll_device_token(
|
|
@@ -1026,7 +1027,7 @@ class TraigentAuthCLI:
|
|
|
1026
1027
|
|
|
1027
1028
|
console.print(f"[dim]POST {login_url}[/dim]")
|
|
1028
1029
|
|
|
1029
|
-
async with aiohttp.ClientSession() as session:
|
|
1030
|
+
async with aiohttp.ClientSession(trust_env=True) as session:
|
|
1030
1031
|
async with session.post(
|
|
1031
1032
|
login_url,
|
|
1032
1033
|
json={"email": email, "password": password},
|
|
@@ -1113,7 +1114,7 @@ class TraigentAuthCLI:
|
|
|
1113
1114
|
console.print(f"\n[dim]POST {api_key_url}[/dim]")
|
|
1114
1115
|
console.print(f"[dim]Creating API key: {key_name}[/dim]")
|
|
1115
1116
|
|
|
1116
|
-
async with aiohttp.ClientSession() as session:
|
|
1117
|
+
async with aiohttp.ClientSession(trust_env=True) as session:
|
|
1117
1118
|
async with session.post(
|
|
1118
1119
|
api_key_url,
|
|
1119
1120
|
json=key_payload,
|
|
@@ -1446,7 +1447,7 @@ class TraigentAuthCLI:
|
|
|
1446
1447
|
try:
|
|
1447
1448
|
import aiohttp
|
|
1448
1449
|
|
|
1449
|
-
async with aiohttp.ClientSession():
|
|
1450
|
+
async with aiohttp.ClientSession(trust_env=True):
|
|
1450
1451
|
# Backend may not expose a revoke endpoint yet; placeholder for future call.
|
|
1451
1452
|
pass # Silently continue if revocation fails
|
|
1452
1453
|
except Exception as e:
|
|
@@ -1985,7 +1986,8 @@ async def _check_api_key(backend_api_url: str, key: str) -> bool:
|
|
|
1985
1986
|
|
|
1986
1987
|
try:
|
|
1987
1988
|
async with aiohttp.ClientSession(
|
|
1988
|
-
timeout=aiohttp.ClientTimeout(total=15)
|
|
1989
|
+
timeout=aiohttp.ClientTimeout(total=15),
|
|
1990
|
+
trust_env=True,
|
|
1989
1991
|
) as session:
|
|
1990
1992
|
async with session.post(
|
|
1991
1993
|
url,
|
|
@@ -15,7 +15,6 @@ from rich.table import Table
|
|
|
15
15
|
|
|
16
16
|
from traigent import get_version_info
|
|
17
17
|
from traigent.api.functions import (
|
|
18
|
-
get_available_strategies,
|
|
19
18
|
list_recommendation_agent_types,
|
|
20
19
|
recommend_configuration_space,
|
|
21
20
|
)
|
|
@@ -32,6 +31,7 @@ from traigent.cli.auth_commands import auth
|
|
|
32
31
|
from traigent.cli.hooks_commands import hooks
|
|
33
32
|
from traigent.cli.local_commands import register_local_commands
|
|
34
33
|
from traigent.cli.sync_commands import register_sync_command
|
|
34
|
+
from traigent.config.types import accepted_algorithm_values
|
|
35
35
|
from traigent.evaluators import (
|
|
36
36
|
list_eval_recommendation_task_types,
|
|
37
37
|
recommend_evaluator,
|
|
@@ -508,34 +508,33 @@ def info() -> None:
|
|
|
508
508
|
|
|
509
509
|
@cli.command()
|
|
510
510
|
def algorithms() -> None:
|
|
511
|
-
"""List
|
|
512
|
-
strategies = get_available_strategies()
|
|
511
|
+
"""List public optimization algorithms accepted by SDK validation."""
|
|
513
512
|
|
|
514
513
|
console.print("\n[bold blue]Available Optimization Algorithms[/bold blue]\n")
|
|
515
514
|
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
515
|
+
table = Table(show_header=True, header_style=_TABLE_HEADER_STYLE)
|
|
516
|
+
table.add_column("Algorithm", style="cyan")
|
|
517
|
+
table.add_column("Availability")
|
|
518
|
+
table.add_column("Notes")
|
|
519
|
+
|
|
520
|
+
for name in accepted_algorithm_values():
|
|
521
|
+
if name == "auto":
|
|
522
|
+
availability = "[green]connected[/green]"
|
|
523
|
+
notes = "Default cloud smart optimizer/TPE path when authenticated."
|
|
524
|
+
elif name in {"grid", "random"}:
|
|
525
|
+
availability = "[green]local[/green]"
|
|
526
|
+
notes = "Runs in-process; can sync results when authenticated."
|
|
527
|
+
else:
|
|
528
|
+
availability = "[yellow]connected[/yellow]"
|
|
529
|
+
notes = "Accepted public smart name; routed through Traigent cloud."
|
|
531
530
|
|
|
532
|
-
|
|
533
|
-
if info["parameters"]:
|
|
534
|
-
console.print(" Parameters:")
|
|
535
|
-
for param, desc in info["parameters"].items():
|
|
536
|
-
console.print(f" • {param}: {desc}")
|
|
531
|
+
table.add_row(name, availability, notes)
|
|
537
532
|
|
|
538
|
-
|
|
533
|
+
console.print(table)
|
|
534
|
+
console.print(
|
|
535
|
+
"\n[dim]Runtime-only registry names are intentionally omitted here because "
|
|
536
|
+
"they are not accepted by public SDK validation.[/dim]"
|
|
537
|
+
)
|
|
539
538
|
|
|
540
539
|
|
|
541
540
|
@cli.command("recommend")
|
|
@@ -33,7 +33,7 @@ FIRST_PROMPT_TOOL_LINE: dict[AgentName, str] = {
|
|
|
33
33
|
}
|
|
34
34
|
PLAN_JSON_BEGIN = "BEGIN_TRAIGENT_ONBOARD_PLAN_JSON"
|
|
35
35
|
PLAN_JSON_END = "END_TRAIGENT_ONBOARD_PLAN_JSON"
|
|
36
|
-
SKILLS_COMMAND = ["npx", "skills", "add", "Traigent/
|
|
36
|
+
SKILLS_COMMAND = ["npx", "skills", "add", "Traigent/traigent-skills"]
|
|
37
37
|
AUTH_STATUS_COMMAND = ["traigent", "auth", "status"]
|
|
38
38
|
|
|
39
39
|
|
|
@@ -127,6 +127,8 @@ _RUN_EXAMPLE_INSIGHTS_REQUIRED_KEYS = frozenset(
|
|
|
127
127
|
}
|
|
128
128
|
)
|
|
129
129
|
_EXAMPLE_INSIGHT_REF_PATTERN = re.compile(r"^exref_[0-9a-f]{16}$")
|
|
130
|
+
_EXAMPLE_INSIGHT_MAX_SAFE_EXAMPLE_REFS = 50
|
|
131
|
+
_EXAMPLE_INSIGHTS_DATASET_QUALITIES = frozenset({"low", "medium", "high"})
|
|
130
132
|
_EXAMPLE_INSIGHT_REVIEW_PRIORITIES = frozenset({"critical", "high", "medium", "low"})
|
|
131
133
|
_EXAMPLE_INSIGHT_DIFFICULTY_BUCKETS = frozenset({"low", "medium", "high", "unknown"})
|
|
132
134
|
_EXAMPLE_INSIGHT_SUSPICIOUS_FLAGS = frozenset(
|
|
@@ -277,7 +279,13 @@ def _project_aggregate(data: Any, keys: frozenset[str], *, what: str) -> dict[st
|
|
|
277
279
|
Unknown nested keys can carry proprietary signals or raw backend state.
|
|
278
280
|
This function is the nested-aggregate counterpart of the per-row construction
|
|
279
281
|
in :func:`_project_example_insight_row`: both rebuild output by allowlist so
|
|
280
|
-
nothing unknown can pass through regardless of what the backend sends.
|
|
282
|
+
nothing unknown can pass through regardless of what the backend sends. Note
|
|
283
|
+
that this allowlists by *key* only — callers whose values carry a specific
|
|
284
|
+
contract (e.g. ``summary.dataset_quality``, ``cohorts[].safe_example_refs``)
|
|
285
|
+
must additionally validate those values themselves (see
|
|
286
|
+
:func:`_project_example_insights_summary` and
|
|
287
|
+
:func:`_project_example_insights_cohort`); an unvalidated value allowlisted
|
|
288
|
+
by key alone could still smuggle raw/proprietary content through.
|
|
281
289
|
"""
|
|
282
290
|
if not isinstance(data, dict):
|
|
283
291
|
raise AnalyticsClientError(
|
|
@@ -286,6 +294,81 @@ def _project_aggregate(data: Any, keys: frozenset[str], *, what: str) -> dict[st
|
|
|
286
294
|
return {k: v for k, v in data.items() if k in keys}
|
|
287
295
|
|
|
288
296
|
|
|
297
|
+
def _assert_allowed_string(value: Any, allowed: frozenset[str], *, what: str) -> str:
|
|
298
|
+
"""Validate that ``value`` is one of a fixed set of enum strings.
|
|
299
|
+
|
|
300
|
+
Mirrors the JS SDK's ``assertAllowedString`` (traigent-js analytics-client.ts)
|
|
301
|
+
used to close the same value-validation gap for cross-SDK parity.
|
|
302
|
+
"""
|
|
303
|
+
if not isinstance(value, str) or value not in allowed:
|
|
304
|
+
raise AnalyticsClientError(
|
|
305
|
+
f"Malformed example insights response: {what} must be one of: "
|
|
306
|
+
f"{', '.join(sorted(allowed))}."
|
|
307
|
+
)
|
|
308
|
+
return value
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def _assert_safe_example_refs(value: Any, *, what: str) -> list[str]:
|
|
312
|
+
"""Validate a cohort's ``safe_example_refs`` list.
|
|
313
|
+
|
|
314
|
+
Each element must be an opaque ``exref_`` reference matching the backend
|
|
315
|
+
contract (``run_analytics_service._safe_example_refs``), and the list must
|
|
316
|
+
not exceed the backend's cap. Mirrors the JS SDK's
|
|
317
|
+
``assertSafeExampleRefs`` for cross-SDK parity (Traigent#1662).
|
|
318
|
+
"""
|
|
319
|
+
if not isinstance(value, list):
|
|
320
|
+
raise AnalyticsClientError(
|
|
321
|
+
f"Malformed example insights response: {what} must be a list."
|
|
322
|
+
)
|
|
323
|
+
if len(value) > _EXAMPLE_INSIGHT_MAX_SAFE_EXAMPLE_REFS:
|
|
324
|
+
raise AnalyticsClientError(
|
|
325
|
+
f"Malformed example insights response: {what} must contain at most "
|
|
326
|
+
f"{_EXAMPLE_INSIGHT_MAX_SAFE_EXAMPLE_REFS} refs."
|
|
327
|
+
)
|
|
328
|
+
for ref in value:
|
|
329
|
+
if not isinstance(ref, str) or not _EXAMPLE_INSIGHT_REF_PATTERN.match(ref):
|
|
330
|
+
raise AnalyticsClientError(
|
|
331
|
+
f"Malformed example insights response: {what} must only contain "
|
|
332
|
+
"refs matching ^exref_[0-9a-f]{16}$."
|
|
333
|
+
)
|
|
334
|
+
return list(value)
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
def _project_example_insights_summary(data: Any) -> dict[str, Any]:
|
|
338
|
+
"""Project + value-validate the ``summary`` aggregate.
|
|
339
|
+
|
|
340
|
+
``dataset_quality`` is required and must be one of the backend's frozen
|
|
341
|
+
``Literal["low", "medium", "high"]`` enum values; a backend regression
|
|
342
|
+
emitting a raw/unexpected value must fail closed rather than pass through.
|
|
343
|
+
"""
|
|
344
|
+
summary = _project_aggregate(data, _EXAMPLE_INSIGHTS_SUMMARY_KEYS, what="summary")
|
|
345
|
+
summary["dataset_quality"] = _assert_allowed_string(
|
|
346
|
+
summary.get("dataset_quality"),
|
|
347
|
+
_EXAMPLE_INSIGHTS_DATASET_QUALITIES,
|
|
348
|
+
what="summary.dataset_quality",
|
|
349
|
+
)
|
|
350
|
+
return summary
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
def _project_example_insights_cohort(cohort: Any, *, index: int) -> dict[str, Any]:
|
|
354
|
+
"""Project + value-validate one ``cohorts[]`` aggregate.
|
|
355
|
+
|
|
356
|
+
``safe_example_refs`` is optional per cohort, but when present each element
|
|
357
|
+
must be a well-formed opaque ref within the backend's cap — a backend
|
|
358
|
+
regression placing raw prompt text/emails in this list must not pass
|
|
359
|
+
through the SDK.
|
|
360
|
+
"""
|
|
361
|
+
projected = _project_aggregate(
|
|
362
|
+
cohort, _EXAMPLE_INSIGHTS_COHORT_KEYS, what=f"cohorts[{index}]"
|
|
363
|
+
)
|
|
364
|
+
if "safe_example_refs" in projected:
|
|
365
|
+
projected["safe_example_refs"] = _assert_safe_example_refs(
|
|
366
|
+
projected["safe_example_refs"],
|
|
367
|
+
what=f"cohorts[{index}].safe_example_refs",
|
|
368
|
+
)
|
|
369
|
+
return projected
|
|
370
|
+
|
|
371
|
+
|
|
289
372
|
def _quote_segment(value: str, *, field: str) -> str:
|
|
290
373
|
"""URL-encode a path segment, rejecting empty values up front.
|
|
291
374
|
|
|
@@ -687,9 +770,13 @@ class BackendAnalyticsClient:
|
|
|
687
770
|
from projected safe fields so raw signals cannot pass through even on a
|
|
688
771
|
backend regression. ``summary``, ``cohorts``, ``recommendations``, and
|
|
689
772
|
``redactions`` are backend-redacted, templated, canary-enforced safe
|
|
690
|
-
aggregate guidance
|
|
691
|
-
|
|
692
|
-
|
|
773
|
+
aggregate guidance, projected by key allowlist. ``summary.dataset_quality``
|
|
774
|
+
and ``cohorts[].safe_example_refs`` additionally get per-value shape
|
|
775
|
+
validation (enum / opaque-ref-pattern + length cap): a backend regression
|
|
776
|
+
placing raw content in those two value families must fail closed rather
|
|
777
|
+
than pass through (Traigent#1662). This reader deliberately allowlists by
|
|
778
|
+
construction, unlike the other thin pass-through readers in this module,
|
|
779
|
+
because it is the IP-sensitive per-example endpoint.
|
|
693
780
|
"""
|
|
694
781
|
path = (
|
|
695
782
|
"/api/v1/analytics/runs/"
|
|
@@ -729,21 +816,13 @@ class BackendAnalyticsClient:
|
|
|
729
816
|
return {
|
|
730
817
|
"run_id": payload["run_id"],
|
|
731
818
|
"privacy_mode": payload["privacy_mode"],
|
|
732
|
-
"summary":
|
|
733
|
-
payload["summary"],
|
|
734
|
-
_EXAMPLE_INSIGHTS_SUMMARY_KEYS,
|
|
735
|
-
what="summary",
|
|
736
|
-
),
|
|
819
|
+
"summary": _project_example_insights_summary(payload["summary"]),
|
|
737
820
|
"example_rows": [
|
|
738
821
|
_project_example_insight_row(row, index=index)
|
|
739
822
|
for index, row in enumerate(rows)
|
|
740
823
|
],
|
|
741
824
|
"cohorts": [
|
|
742
|
-
|
|
743
|
-
cohort,
|
|
744
|
-
_EXAMPLE_INSIGHTS_COHORT_KEYS,
|
|
745
|
-
what=f"cohorts[{i}]",
|
|
746
|
-
)
|
|
825
|
+
_project_example_insights_cohort(cohort, index=i)
|
|
747
826
|
for i, cohort in enumerate(cohorts_raw)
|
|
748
827
|
],
|
|
749
828
|
"recommendations": [
|