traigent 0.17.0__tar.gz → 0.18.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.17.0 → traigent-0.18.0.dev0}/CHANGELOG.md +0 -25
- {traigent-0.17.0/traigent.egg-info → traigent-0.18.0.dev0}/PKG-INFO +1 -1
- {traigent-0.17.0 → traigent-0.18.0.dev0}/pyproject.toml +2 -1
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/adapters/execution_adapter.py +16 -2
- traigent-0.18.0.dev0/traigent/analytics/render.py +349 -0
- traigent-0.18.0.dev0/traigent/analytics_mcp/__init__.py +12 -0
- traigent-0.18.0.dev0/traigent/analytics_mcp/server.py +280 -0
- traigent-0.18.0.dev0/traigent/analytics_mcp/tools.py +454 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/parameter_ranges.py +12 -0
- traigent-0.18.0.dev0/traigent/cloud/analytics_auth.py +73 -0
- traigent-0.18.0.dev0/traigent/cloud/analytics_client.py +565 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/auth.py +2 -5
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/backend_client.py +178 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/sync_manager.py +2 -6
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/project.py +6 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/providers.py +21 -12
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/cost_enforcement.py +12 -6
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/mandatory_metrics.py +7 -1
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/orchestrator.py +33 -19
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/result_selection.py +24 -16
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/trial_lifecycle.py +48 -6
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/base.py +102 -1
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/local.py +21 -17
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/metrics.py +4 -1
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/slow_update.py +3 -2
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/splits.py +5 -3
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/framework_override.py +110 -16
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/langchain/handler.py +146 -17
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/base.py +20 -34
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/batch_optimizers.py +39 -18
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/grid.py +52 -9
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/random.py +100 -21
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/input_validation.py +5 -7
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/cost_calculator.py +14 -2
- traigent-0.18.0.dev0/traigent/utils/discrete_domains.py +232 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/objectives.py +14 -1
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/optimization_logger.py +6 -1
- {traigent-0.17.0 → traigent-0.18.0.dev0/traigent.egg-info}/PKG-INFO +1 -1
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent.egg-info/SOURCES.txt +7 -1
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent.egg-info/entry_points.txt +1 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent_validation/validators.py +67 -9
- traigent-0.17.0/traigent/generation/skill_train/_deterministic_indices.py +0 -33
- {traigent-0.17.0 → traigent-0.18.0.dev0}/COMMERCIAL-LICENSE.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/CONTRIBUTING.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/CONTRIBUTOR-LICENSING.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/DISCLAIMER.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/LICENSE +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/MANIFEST.in +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/NOTICE +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/README.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/SECURITY.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/LOCAL_CI_GATE.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/README.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/SYNC_MAP.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/agent-skill.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/api-reference/complete-function-specification.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/api-reference/decorator-reference.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/api-reference/enterprise-beta-api.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/api-reference/interactive_optimizer.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/api-reference/telemetry.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/api-reference/thread-pool-examples.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/architecture/ARCHITECTURE.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/architecture/cost-architecture-validation.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/architecture/execution_mode_follow_up.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/architecture/integrations-inventory.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/architecture/plugin_architecture.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/architecture/project-structure.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/architecture/stop_conditions.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/concepts/composite-knob-ir.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/concepts/composite-knobs.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/concepts/guided-generation.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/contributing/ADDING_NEW_INTEGRATIONS.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/contributing/CODE_OF_CONDUCT.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/contributing/CONTRIBUTING.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/contributing/EXAMPLE_TEMPLATE.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/contributing/README.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/contributing/SECURITY.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/contributing/aikido_triage.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/contributing/code_review_instructions.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/contributing/test-quality-guide.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/demos/DEMO_VIDEO_GUIDE.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/demos/README.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/examples/API_PATTERNS.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/examples/LEARNING_ROADMAP.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/examples/QUICK_REFERENCE.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/examples/README.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/examples/START_HERE.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/examples/TROUBLESHOOTING.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/fake-completion-tracking.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/feature_matrices/README.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/README.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/authentication.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/constraint-dsl.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/dataflow-detection.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/framework_override_enhanced_features.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/mcp-server.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/observability-spans.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/onboarding.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/prompt_management.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/recommendations.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/safety-gates.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/seamless_injection.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/strategy-presets.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/features/strict_metrics_nulls.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/getting-started/GETTING_STARTED.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/getting-started/README.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/getting-started/installation.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/getting-started/minimal-integration.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/getting-started/portal-dev-laptop-agent.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/getting-started/testing.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/guides/VSCODE_RESTART_GUIDE.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/guides/evaluation.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/guides/execution-mode-migration.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/guides/execution-modes.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/guides/js-bridge.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/guides/llm_plugin_migration_guide.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/guides/parallel-configuration.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/guides/secrets_management.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/hybrid-mode-api-contract.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/hybrid-mode-client-guide.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/operations/azure_openai.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/operations/bedrock.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/operations/google_gemini.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/security/trust_model.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/testing/CREATIVE_STRESS_TESTING.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/traceability/concepts/composite-knob-ir.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/traceability/concepts/composite-knobs.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/traceability/concepts/guided-generation.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/traceability/schema.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/traceability/tagging_tracking.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/traceability/taxonomy_reference.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/tvl/CONSTRAINT_EXPRESSIONS.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/user-guide/README.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/user-guide/agent_optimization.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/user-guide/choosing_optimization_model.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/user-guide/configuration-spaces.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/user-guide/evaluation_guide.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/user-guide/injection_modes.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/user-guide/interactive_optimization.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/user-guide/smart_optimization.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/user-guide/tuned_variables.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/docs/walkthrough.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/requirements/requirements-all.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/requirements/requirements-analytics.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/requirements/requirements-bayesian.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/requirements/requirements-chroma.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/requirements/requirements-dev.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/requirements/requirements-hybrid.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/requirements/requirements-integrations.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/requirements/requirements-security.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/requirements/requirements-test.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/requirements/requirements.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/setup.cfg +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/_version.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/admin/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/admin/client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/admin/config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/admin/dtos.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/agents/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/agents/config_mapper.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/agents/executor.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/agents/platforms.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/agents/specification_generator.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/analytics/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/analytics/anomaly.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/analytics/cost_optimization.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/analytics/example_insights.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/analytics/intelligence.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/analytics/meta_learning.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/analytics/next_steps.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/analytics/optimization_plan.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/analytics/predictive.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/analytics/scheduling.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/agent_inference.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/config_builder.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/config_space.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/constraint_builders.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/constraints.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/decorators.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/functions.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/parameter_validator.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/safety.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/strategy_presets.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/types.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/api/validation_protocol.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/auth_commands.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/detect_tvars_command.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/function_discovery.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/generate_config_command.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/hooks_commands.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/local_commands.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/main.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/next_steps_command.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/onboard_commands.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/optimization_validator.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/plan_command.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/playbook_commands.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/sync_commands.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cli/validation_types.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/_aiohttp_compat.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/agent_dtos.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/api_key_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/api_operations.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/async_batch_transport.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/backend_bridges.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/backend_components.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/backend_synchronizer.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/benchmark_client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/billing.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/cloud_operations.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/credential_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/credential_resolver.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/dataset_converter.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/dtos.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/governance.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/integration_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/models.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/optimizer_client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/password_auth_handler.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/privacy_operations.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/production_mcp_client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/remote_guidance.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/resilient_client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/service.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/session_operations.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/session_types.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/sessions.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/subset_selection.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/token_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/trial_operations.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/trial_tracker.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/url_security.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/cloud/validators.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/api_keys.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/ast_transformer.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/backend_config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/context.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/feature_flags.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/models.yaml +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/parallel.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/runtime_injector.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/seamless_injection.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/tenant.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config/types.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/agent_classifier.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/apply.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/catalog/schemas/tvar_catalog_entry_schema.json +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/catalog/schemas/tvar_observation_schema.json +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/catalog/schemas/tvar_value_recommendation_schema.json +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/catalog/tvar_catalog.v1.json +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/catalog.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/llm_backend.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/pipeline.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/presets/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/presets/agent_type_catalog.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/presets/benchmark_catalog.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/presets/constraint_templates.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/presets/range_presets.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/recommendations.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/subsystems/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/subsystems/benchmarks.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/subsystems/objectives.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/subsystems/safety_constraints.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/subsystems/structural_constraints.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/subsystems/tvar_ranges.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/subsystems/tvar_recommendations.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/config_generator/types.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/backend_session_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/best_config_runtime.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/cache_policy.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/ci_approval.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/config_state_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/constants.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/cost_estimator.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/evaluator_wrapper.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/exception_handler.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/execution_policy_runtime.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/license.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/logger_facade.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/meta_types.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/metadata_helpers.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/metric_registry.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/metrics_aggregator.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/namespace.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/objectives.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/optimization_pipeline.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/optimized_function.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/orchestrator_helpers.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/parallel_execution_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/progress_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/sample_budget.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/samplers/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/samplers/random_sampler.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/session_context.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/session_types.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/stat_significance.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/stop_condition_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/stop_conditions.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/trace_env.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/tracing.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/trial_context.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/trial_result_factory.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/types.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/types_ext.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/utils.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core/workflow_trace_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core_metrics/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core_metrics/client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core_metrics/config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/core_metrics/dtos.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/effectuation/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/effectuation/contracts.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/effectuation/strategies/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/effectuation/strategies/framework_param.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/effectuation/strategies/self_consistency.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluation/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluation/client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluation/config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluation/dtos.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/catalog/metric_eval_catalog.v1.json +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/catalog/schemas/metric_eval_catalog_entry_schema.json +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/catalog_loader.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/dataset_registry.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/hybrid_api.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/metrics_tracker.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/evaluators/recommendations.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/_bootstrap.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/_demo.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/anthropic.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/aws.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/azure.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/gcp.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/gemini.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/groq.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/litellm_any.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/manifest.json +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/openai.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/openrouter.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/providers/qa_samples.jsonl +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/quickstart/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/quickstart/__main__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/quickstart/_env.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/quickstart/qa_samples.jsonl +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/examples/tutorial_bootstrap.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/backend_provider.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/example_synth.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/llm_provider.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/loop.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/models.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/options.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/prompt_rewriter.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/artifacts.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/buffer.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/document.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/edits.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/prompts.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/reflection.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/schedule.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/trainer.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/skill_train/trainer_result.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/generation/validators.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/guaranteed_modes.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hooks/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hooks/config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hooks/installer.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hooks/validator.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hybrid/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hybrid/discovery.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hybrid/http_transport.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hybrid/lifecycle.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hybrid/mcp_transport.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hybrid/protocol.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/hybrid/transport.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/activation.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/base.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/base_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/batch_wrapper.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/bedrock_client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/dspy_adapter.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/langchain/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/langfuse/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/langfuse/callback.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/langfuse/client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/langfuse/tracker.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/anthropic_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/azure_openai_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/base_llm_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/bedrock_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/cohere_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/gemini_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/huggingface_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/langchain/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/langchain/base.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/langchain_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/litellm_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/llamaindex_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/mistral_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/openai.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/llms/openai_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/mappings.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/model_discovery/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/model_discovery/anthropic_discovery.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/model_discovery/azure_discovery.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/model_discovery/base.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/model_discovery/cache.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/model_discovery/gemini_discovery.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/model_discovery/mistral_discovery.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/model_discovery/openai_discovery.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/model_discovery/registry.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/observability/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/observability/mlflow.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/observability/wandb.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/observability/workflow_traces.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/plugin_registry.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/providers.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/pydantic_ai/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/pydantic_ai/_types.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/pydantic_ai/handler.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/pydantic_ai/plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/utils/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/utils/discovery.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/utils/message_coercion.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/utils/mock_adapter.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/utils/parameter_normalizer.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/utils/response_wrapper.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/utils/validation.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/utils/version_compat.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/vector_stores/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/vector_stores/base.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/vector_stores/chromadb_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/vector_stores/pinecone_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/vector_stores/weaviate_plugin.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/integrations/wrappers.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/invokers/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/invokers/base.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/invokers/batch.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/invokers/local.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/invokers/streaming.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/adapters.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/bindings.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/canonical.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/cascade.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/certificates.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/composites.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/kinds.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/patterns.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/resolution.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/resolver.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/runtime.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/signals.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/knobs/telemetry.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/mcp/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/mcp/server.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/mcp/tools.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/metrics/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/metrics/agent_metrics.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/metrics/content_features.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/metrics/deepeval_metrics.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/metrics/ragas_metrics.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/metrics/registry.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/observability/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/observability/agent_spans.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/observability/client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/observability/config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/observability/decorators.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/observability/dtos.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/cloud_optimizer.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/interactive_optimizer.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/registry.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/remote.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/remote_services.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/optimizers/results.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/playbook/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/playbook/loader.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/playbook/model.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/playbook/scaffold.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/playbook/schemas/agent_playbook_schema.json +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/playbook/staleness.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/playbook/validator.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/plugins/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/plugins/registry.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/projects/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/projects/client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/projects/config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/projects/dtos.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/prompts/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/prompts/client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/prompts/config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/prompts/dtos.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/providers/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/providers/validation.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/py.typed +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/reporting/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/reporting/example_map.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/audit.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/auth/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/auth/helpers.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/auth/mfa.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/auth/models.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/auth/oidc.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/auth/saml.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/auth/sms.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/auth/totp.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/credentials.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/crypto_utils.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/deployment.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/encryption.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/enterprise.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/headers.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/jwt_validator.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/rate_limiter.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/redaction.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/session_manager.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/security/tenant.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-analyze-results/SKILL.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-analyze-results/references/convergence-patterns.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-analyze-results/references/optimization-result-api.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-configuration-space/SKILL.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-configuration-space/references/constraints.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-configuration-space/references/parameter-types.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-debugging/SKILL.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-debugging/references/error-reference.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-debugging/references/logging-config.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-debugging/references/mock-mode.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-decorator-setup/SKILL.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-decorator-setup/references/evaluation-options.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-decorator-setup/references/execution-modes.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-decorator-setup/references/injection-modes.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-integrations/SKILL.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-integrations/references/dspy.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-integrations/references/langchain.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-integrations/references/litellm.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-quickstart/SKILL.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-quickstart/references/environment-variables.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-quickstart/references/installation-extras.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-run-optimization/SKILL.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-run-optimization/references/algorithms.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-run-optimization/references/cost-management.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/skills/traigent-run-optimization/references/parallel-config.md +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/storage/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/storage/local_storage.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/testing/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/traigent_client.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/traigent_integration.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tuned_variables/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tuned_variables/dataflow_strategy.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tuned_variables/detection_strategies.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tuned_variables/detection_types.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tuned_variables/detector.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tuned_variables/discovery.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tuned_variables/observation.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tuned_variables/py.typed +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tvl/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tvl/__main__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tvl/models.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tvl/objectives.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tvl/options.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tvl/promotion_gate.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tvl/registry.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tvl/spec_loader.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tvl/spec_validator.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/tvl/statistics.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/batch_optimizer_utils.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/batch_processing.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/callbacks.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/console.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/constraints.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/diagnostics.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/env_config.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/error_handler.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/example_id.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/exceptions.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/file_versioning.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/function_identity.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/hashing.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/importance.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/incentives.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/insights.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/langchain_interceptor.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/litellm_interceptor.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/llm_response_parsing.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/local_analytics.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/logging.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/multi_objective.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/numpy_compat.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/optimization_analyzer.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/persistence.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/reproducibility.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/results_table.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/retry.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/secure_path.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/url_security.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/user_prompts.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/utils/validation.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/visualization/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/visualization/plots.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/wrapper/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/wrapper/errors.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/wrapper/server.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent/wrapper/service.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent.egg-info/dependency_links.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent.egg-info/requires.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent.egg-info/top_level.txt +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent_validation/__init__.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent_validation/base.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent_validation/plugins.py +0 -0
- {traigent-0.17.0 → traigent-0.18.0.dev0}/traigent_validation/py.typed +0 -0
|
@@ -6,8 +6,6 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
-
## [0.17.0] - 2026-06-23
|
|
10
|
-
|
|
11
9
|
### Added
|
|
12
10
|
- Added a no-content-egress cloud-brain canary test that captures serialized
|
|
13
11
|
session, next-trial, metrics, and finalize payloads and asserts dataset
|
|
@@ -26,29 +24,6 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
26
24
|
var (`OPTUNA_ROLLOUT`, renamed during the managed-routing migration).
|
|
27
25
|
- Smart algorithms (`bayesian` and the Optuna family) now route to the Traigent
|
|
28
26
|
cloud; the local SDK supports `grid` and `random` only.
|
|
29
|
-
- Removed 7 production-dead internal modules (`config_builder`,
|
|
30
|
-
`llm_processor`, `refactoring_utils`, `service_registry`, `event_manager`,
|
|
31
|
-
`langchain/discovery`, empty `telemetry` package) and their tests.
|
|
32
|
-
|
|
33
|
-
### Fixed
|
|
34
|
-
- Per-config `cost` metric is now wired to the authoritative `total_cost`, so
|
|
35
|
-
the `minimize cost` objective is no longer inert and the portal no longer
|
|
36
|
-
shows `$0` per config on a real paid run; a model unpriced at runtime is
|
|
37
|
-
surfaced on the result (and fails closed under
|
|
38
|
-
`TRAIGENT_STRICT_COST_ACCOUNTING`).
|
|
39
|
-
- `traigent sync` / `traigent local sync` no longer fail every completed
|
|
40
|
-
session with `409 EXPERIMENT_HAS_NO_RUNS`; sync now creates the experiment
|
|
41
|
-
`PENDING`, uploads runs, finalizes to `COMPLETED`, resumes idempotently, and
|
|
42
|
-
returns a non-zero exit on failure.
|
|
43
|
-
- Runtime `optimize(algorithm="grid"|"random")` with a portal key now stays
|
|
44
|
-
local and exhaustive instead of routing to the cloud sampler.
|
|
45
|
-
- `traigent quickstart` runs on a bare install (uses base `litellm`, not the
|
|
46
|
-
`integrations` LangChain extra) and fails closed when no trial succeeds.
|
|
47
|
-
- `ObjectiveDefinition` fails closed on unimplemented normalization strategies
|
|
48
|
-
(`z_score`/`robust`) instead of silently behaving like `min_max`.
|
|
49
|
-
|
|
50
|
-
### Dependencies
|
|
51
|
-
- Bumped `langsmith` 0.8.3 → 0.8.18 and `pydantic-settings` 2.14.1 → 2.14.2.
|
|
52
27
|
|
|
53
28
|
## [0.14.1] - 2026-06-19
|
|
54
29
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: traigent
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.18.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
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "traigent"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.18.0.dev0"
|
|
8
8
|
authors = [
|
|
9
9
|
{name = "Traigent Team", email = "opensource@traigent.ai"},
|
|
10
10
|
]
|
|
@@ -239,6 +239,7 @@ Changelog = "https://github.com/Traigent/Traigent/blob/main/CHANGELOG.md"
|
|
|
239
239
|
|
|
240
240
|
[project.scripts]
|
|
241
241
|
traigent = "traigent.cli.main:cli"
|
|
242
|
+
traigent-analytics-mcp = "traigent.analytics_mcp.server:main"
|
|
242
243
|
|
|
243
244
|
[project.entry-points."traigent.validators"]
|
|
244
245
|
python = "traigent_validation.validators:PythonConstraintValidator"
|
|
@@ -9,6 +9,7 @@ from abc import ABC, abstractmethod
|
|
|
9
9
|
from typing import Any, cast
|
|
10
10
|
|
|
11
11
|
from traigent.config.types import ExecutionMode
|
|
12
|
+
from traigent.evaluators.base import _accuracy_values_match
|
|
12
13
|
|
|
13
14
|
logger = logging.getLogger(__name__)
|
|
14
15
|
|
|
@@ -192,7 +193,7 @@ class LocalExecutionAdapter(ExecutionAdapter):
|
|
|
192
193
|
# Exact / case-insensitive match — must stay aligned with
|
|
193
194
|
# LocalEvaluator and the public docs (the tracked fix). Diverging
|
|
194
195
|
# here was how "Paris" vs "paris" silently scored 0.0.
|
|
195
|
-
is_correct =
|
|
196
|
+
is_correct = _accuracy_values_match(output, expected)
|
|
196
197
|
result["correct"] = is_correct
|
|
197
198
|
|
|
198
199
|
elif eval_type == "contains":
|
|
@@ -245,8 +246,21 @@ class LocalExecutionAdapter(ExecutionAdapter):
|
|
|
245
246
|
|
|
246
247
|
else:
|
|
247
248
|
# Unknown evaluation type
|
|
248
|
-
result["correct"] =
|
|
249
|
+
result["correct"] = False
|
|
250
|
+
result["success"] = False
|
|
249
251
|
result["unknown_eval_type"] = eval_type
|
|
252
|
+
result["error"] = (
|
|
253
|
+
f"Unsupported evaluation_type '{eval_type}'. "
|
|
254
|
+
"Use exact_match, contains, numeric, semantic with a custom evaluator, "
|
|
255
|
+
"or provide a scoring_function."
|
|
256
|
+
)
|
|
257
|
+
logger.error(
|
|
258
|
+
"Unsupported evaluation_type %r for LocalExecutionAdapter; marking "
|
|
259
|
+
"example as failed. trial_id=%s example_index=%s",
|
|
260
|
+
eval_type,
|
|
261
|
+
trial_id or "<unknown>",
|
|
262
|
+
example_index if example_index is not None else "<unknown>",
|
|
263
|
+
)
|
|
250
264
|
|
|
251
265
|
return result
|
|
252
266
|
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
"""Local chart rendering for backend analytics payloads.
|
|
2
|
+
|
|
3
|
+
This module turns a canonical, backend-produced analytics payload (a
|
|
4
|
+
``run_pareto`` or ``run_correlations`` document, per the frozen v0 contracts)
|
|
5
|
+
into an image file on disk and returns the path.
|
|
6
|
+
|
|
7
|
+
It is a **pure presentation layer**: it renders pixels *from the numbers the
|
|
8
|
+
backend already computed*. It never recomputes a frontier, a correlation, a
|
|
9
|
+
p-value, or any other analytic — doing so would risk the chart disagreeing with
|
|
10
|
+
the backend's own report. If a value is missing from the payload, the point is
|
|
11
|
+
skipped, not invented.
|
|
12
|
+
|
|
13
|
+
``matplotlib`` is imported lazily inside :func:`render_chart` so it stays an
|
|
14
|
+
optional dependency (``pip install 'traigent[analytics]'`` or
|
|
15
|
+
``traigent[visualization]``) and the base SDK install is not bloated.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
# Traceability: CONC-Layer-Infra FUNC-ANALYTICS
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
from typing import Any, Literal
|
|
24
|
+
|
|
25
|
+
from traigent.utils.logging import get_logger
|
|
26
|
+
|
|
27
|
+
logger = get_logger(__name__)
|
|
28
|
+
|
|
29
|
+
ChartKind = Literal["run_pareto", "run_correlations"]
|
|
30
|
+
|
|
31
|
+
_SUPPORTED_KINDS: frozenset[str] = frozenset({"run_pareto", "run_correlations"})
|
|
32
|
+
_DEFAULT_FORMAT = "png"
|
|
33
|
+
_SUPPORTED_FORMATS: frozenset[str] = frozenset({"png", "svg"})
|
|
34
|
+
|
|
35
|
+
_MATPLOTLIB_INSTALL_MESSAGE = (
|
|
36
|
+
"Chart rendering requires matplotlib. "
|
|
37
|
+
"Install it with: pip install 'traigent[analytics]'"
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ChartRenderError(ValueError):
|
|
42
|
+
"""Raised when a payload cannot be rendered into a chart."""
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _import_pyplot() -> Any:
|
|
46
|
+
"""Import matplotlib's pyplot lazily with a non-interactive backend."""
|
|
47
|
+
try:
|
|
48
|
+
import matplotlib
|
|
49
|
+
except ImportError as exc: # pragma: no cover - covered by import guard test
|
|
50
|
+
raise ChartRenderError(_MATPLOTLIB_INSTALL_MESSAGE) from exc
|
|
51
|
+
|
|
52
|
+
# Force a headless backend so rendering works in agent/CI environments with
|
|
53
|
+
# no display. Set before pyplot is imported.
|
|
54
|
+
matplotlib.use("Agg", force=True)
|
|
55
|
+
import matplotlib.pyplot as plt
|
|
56
|
+
|
|
57
|
+
return plt
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _resolve_output_path(
|
|
61
|
+
output_path: str | Path | None,
|
|
62
|
+
*,
|
|
63
|
+
kind: str,
|
|
64
|
+
run_id: str | None,
|
|
65
|
+
fmt: str,
|
|
66
|
+
) -> Path:
|
|
67
|
+
if output_path is not None:
|
|
68
|
+
path = Path(output_path).expanduser()
|
|
69
|
+
if path.suffix.lower().lstrip(".") not in _SUPPORTED_FORMATS:
|
|
70
|
+
raise ChartRenderError(
|
|
71
|
+
f"output_path must end in one of {sorted(_SUPPORTED_FORMATS)}: {path}"
|
|
72
|
+
)
|
|
73
|
+
return path
|
|
74
|
+
|
|
75
|
+
safe_run = "".join(
|
|
76
|
+
ch if ch.isalnum() or ch in {"-", "_"} else "_" for ch in (run_id or "run")
|
|
77
|
+
)
|
|
78
|
+
return Path.cwd() / f"{kind}.{safe_run}.{fmt}"
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _as_float(value: Any) -> float | None:
|
|
82
|
+
"""Best-effort numeric coercion; returns None when not a finite number."""
|
|
83
|
+
if isinstance(value, bool):
|
|
84
|
+
return None
|
|
85
|
+
if isinstance(value, (int, float)):
|
|
86
|
+
result = float(value)
|
|
87
|
+
elif isinstance(value, str):
|
|
88
|
+
try:
|
|
89
|
+
result = float(value)
|
|
90
|
+
except ValueError:
|
|
91
|
+
return None
|
|
92
|
+
else:
|
|
93
|
+
return None
|
|
94
|
+
# Reject NaN/inf so matplotlib never plots a meaningless point.
|
|
95
|
+
if result != result or result in (float("inf"), float("-inf")):
|
|
96
|
+
return None
|
|
97
|
+
return result
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _require_mapping(payload: Any) -> dict[str, Any]:
|
|
101
|
+
if not isinstance(payload, dict):
|
|
102
|
+
raise ChartRenderError("payload must be a mapping (decoded JSON object).")
|
|
103
|
+
return payload
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def _resolve_axis_metric_key(measures: Any, axis: str) -> str:
|
|
107
|
+
"""Resolve a canonical axis name to the payload's actual metric key."""
|
|
108
|
+
if not isinstance(measures, dict):
|
|
109
|
+
return axis
|
|
110
|
+
resolved = measures.get(axis)
|
|
111
|
+
if isinstance(resolved, str) and resolved:
|
|
112
|
+
return resolved
|
|
113
|
+
return axis
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _render_pareto(plt: Any, payload: dict[str, Any]) -> Any:
|
|
117
|
+
"""Plot a cost/quality scatter from a ``run_pareto`` payload.
|
|
118
|
+
|
|
119
|
+
Frontier points are emphasized (the knee is annotated); dominated points are
|
|
120
|
+
drawn faded. Axes are read straight from each config's ``metrics`` — nothing
|
|
121
|
+
is recomputed.
|
|
122
|
+
"""
|
|
123
|
+
measures = payload.get("measures") or {}
|
|
124
|
+
quality_key = _resolve_axis_metric_key(measures, "quality")
|
|
125
|
+
cost_key = _resolve_axis_metric_key(measures, "cost")
|
|
126
|
+
|
|
127
|
+
fig, ax = plt.subplots(figsize=(7, 5))
|
|
128
|
+
|
|
129
|
+
frontier = payload.get("frontier") or []
|
|
130
|
+
dominated = payload.get("dominated_points") or payload.get("dominated") or []
|
|
131
|
+
|
|
132
|
+
plotted_any = False
|
|
133
|
+
knee_xy: tuple[float, float] | None = None
|
|
134
|
+
|
|
135
|
+
front_x: list[float] = []
|
|
136
|
+
front_y: list[float] = []
|
|
137
|
+
for point in frontier:
|
|
138
|
+
if not isinstance(point, dict):
|
|
139
|
+
continue
|
|
140
|
+
metrics = point.get("metrics") or {}
|
|
141
|
+
cost = _as_float(metrics.get(cost_key))
|
|
142
|
+
quality = _as_float(metrics.get(quality_key))
|
|
143
|
+
if cost is None or quality is None:
|
|
144
|
+
continue
|
|
145
|
+
front_x.append(cost)
|
|
146
|
+
front_y.append(quality)
|
|
147
|
+
plotted_any = True
|
|
148
|
+
if point.get("is_knee"):
|
|
149
|
+
knee_xy = (cost, quality)
|
|
150
|
+
label = point.get("config_id")
|
|
151
|
+
if label:
|
|
152
|
+
ax.annotate(
|
|
153
|
+
str(label),
|
|
154
|
+
(cost, quality),
|
|
155
|
+
textcoords="offset points",
|
|
156
|
+
xytext=(5, 5),
|
|
157
|
+
fontsize=7,
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
dom_x: list[float] = []
|
|
161
|
+
dom_y: list[float] = []
|
|
162
|
+
for point in dominated:
|
|
163
|
+
if not isinstance(point, dict):
|
|
164
|
+
continue
|
|
165
|
+
metrics = point.get("metrics") or {}
|
|
166
|
+
cost = _as_float(metrics.get(cost_key))
|
|
167
|
+
quality = _as_float(metrics.get(quality_key))
|
|
168
|
+
if cost is None or quality is None:
|
|
169
|
+
continue
|
|
170
|
+
dom_x.append(cost)
|
|
171
|
+
dom_y.append(quality)
|
|
172
|
+
plotted_any = True
|
|
173
|
+
|
|
174
|
+
if dom_x:
|
|
175
|
+
ax.scatter(dom_x, dom_y, c="#bbbbbb", marker="x", label="dominated", zorder=2)
|
|
176
|
+
if front_x:
|
|
177
|
+
# Sort frontier by cost so the connecting line reads left-to-right.
|
|
178
|
+
order = sorted(range(len(front_x)), key=lambda i: front_x[i])
|
|
179
|
+
sx = [front_x[i] for i in order]
|
|
180
|
+
sy = [front_y[i] for i in order]
|
|
181
|
+
ax.plot(sx, sy, color="#1f77b4", linewidth=1.0, alpha=0.6, zorder=3)
|
|
182
|
+
ax.scatter(
|
|
183
|
+
front_x, front_y, c="#1f77b4", marker="o", label="frontier", zorder=4
|
|
184
|
+
)
|
|
185
|
+
if knee_xy is not None:
|
|
186
|
+
ax.scatter(
|
|
187
|
+
[knee_xy[0]],
|
|
188
|
+
[knee_xy[1]],
|
|
189
|
+
facecolors="none",
|
|
190
|
+
edgecolors="#d62728",
|
|
191
|
+
s=180,
|
|
192
|
+
linewidths=2,
|
|
193
|
+
label="knee",
|
|
194
|
+
zorder=5,
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
if not plotted_any:
|
|
198
|
+
raise ChartRenderError(
|
|
199
|
+
"run_pareto payload had no plottable points "
|
|
200
|
+
f"(need frontier/dominated entries with metrics.{cost_key} "
|
|
201
|
+
f"and metrics.{quality_key})."
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
quality_meta = measures.get(quality_key) if isinstance(measures, dict) else None
|
|
205
|
+
cost_meta = measures.get(cost_key) if isinstance(measures, dict) else None
|
|
206
|
+
ax.set_xlabel(_axis_label("cost", cost_meta))
|
|
207
|
+
ax.set_ylabel(_axis_label("quality", quality_meta))
|
|
208
|
+
run_id = payload.get("run_id") or "run"
|
|
209
|
+
shape = payload.get("shape")
|
|
210
|
+
title = f"Pareto frontier — {run_id}"
|
|
211
|
+
if shape:
|
|
212
|
+
title = f"{title} ({shape})"
|
|
213
|
+
ax.set_title(title)
|
|
214
|
+
ax.legend(loc="best", fontsize=8)
|
|
215
|
+
ax.grid(True, linestyle=":", alpha=0.4)
|
|
216
|
+
fig.tight_layout()
|
|
217
|
+
return fig
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def _axis_label(default: str, meta: Any) -> str:
|
|
221
|
+
if isinstance(meta, dict):
|
|
222
|
+
name = meta.get("label") or meta.get("name")
|
|
223
|
+
unit = meta.get("unit")
|
|
224
|
+
if name and unit:
|
|
225
|
+
return f"{name} ({unit})"
|
|
226
|
+
if name:
|
|
227
|
+
return str(name)
|
|
228
|
+
return default
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def _render_correlations(plt: Any, payload: dict[str, Any]) -> Any:
|
|
232
|
+
"""Plot a bar chart of measure correlations from a ``run_correlations`` payload.
|
|
233
|
+
|
|
234
|
+
Each bar is one ``measure_correlations`` entry's ``r`` value. Values are read
|
|
235
|
+
directly from the payload; nothing is recomputed.
|
|
236
|
+
"""
|
|
237
|
+
correlations = payload.get("measure_correlations") or []
|
|
238
|
+
labels: list[str] = []
|
|
239
|
+
values: list[float] = []
|
|
240
|
+
for entry in correlations:
|
|
241
|
+
if not isinstance(entry, dict):
|
|
242
|
+
continue
|
|
243
|
+
r = _as_float(entry.get("r"))
|
|
244
|
+
if r is None:
|
|
245
|
+
continue
|
|
246
|
+
x = entry.get("x")
|
|
247
|
+
y = entry.get("y")
|
|
248
|
+
labels.append(f"{x}↔{y}" if x and y else str(entry.get("strength", "?")))
|
|
249
|
+
values.append(r)
|
|
250
|
+
|
|
251
|
+
if not values:
|
|
252
|
+
raise ChartRenderError(
|
|
253
|
+
"run_correlations payload had no plottable measure_correlations "
|
|
254
|
+
"entries with a numeric 'r'."
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
fig, ax = plt.subplots(figsize=(7, 5))
|
|
258
|
+
colors = ["#2ca02c" if v >= 0 else "#d62728" for v in values]
|
|
259
|
+
positions = list(range(len(values)))
|
|
260
|
+
ax.bar(positions, values, color=colors)
|
|
261
|
+
ax.set_xticks(positions)
|
|
262
|
+
ax.set_xticklabels(labels, rotation=30, ha="right", fontsize=8)
|
|
263
|
+
ax.set_ylabel("Pearson r")
|
|
264
|
+
ax.set_ylim(-1.05, 1.05)
|
|
265
|
+
ax.axhline(0.0, color="#333333", linewidth=0.8)
|
|
266
|
+
method = payload.get("method")
|
|
267
|
+
run_id = payload.get("run_id") or "run"
|
|
268
|
+
sample = payload.get("sample_size")
|
|
269
|
+
title = f"Measure correlations — {run_id}"
|
|
270
|
+
if method or sample is not None:
|
|
271
|
+
suffix = ", ".join(
|
|
272
|
+
part
|
|
273
|
+
for part in (
|
|
274
|
+
str(method) if method else None,
|
|
275
|
+
f"n={sample}" if sample is not None else None,
|
|
276
|
+
)
|
|
277
|
+
if part
|
|
278
|
+
)
|
|
279
|
+
title = f"{title} ({suffix})"
|
|
280
|
+
ax.set_title(title)
|
|
281
|
+
ax.grid(True, axis="y", linestyle=":", alpha=0.4)
|
|
282
|
+
fig.tight_layout()
|
|
283
|
+
return fig
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
def render_chart(
|
|
287
|
+
payload: dict[str, Any],
|
|
288
|
+
kind: ChartKind,
|
|
289
|
+
output_path: str | Path | None = None,
|
|
290
|
+
*,
|
|
291
|
+
fmt: str | None = None,
|
|
292
|
+
) -> str:
|
|
293
|
+
"""Render a canonical analytics payload to an image file and return its path.
|
|
294
|
+
|
|
295
|
+
Args:
|
|
296
|
+
payload: A backend-produced ``run_pareto`` or ``run_correlations``
|
|
297
|
+
document (the frozen v0 contract). Values are plotted as-is; this
|
|
298
|
+
function never recomputes analytics.
|
|
299
|
+
kind: ``"run_pareto"`` or ``"run_correlations"``.
|
|
300
|
+
output_path: Destination file. When ``None`` a name is derived from the
|
|
301
|
+
kind and ``run_id`` and written under the current working directory.
|
|
302
|
+
The extension (``.png`` / ``.svg``) determines the format.
|
|
303
|
+
fmt: Optional explicit format (``"png"`` or ``"svg"``) used only when
|
|
304
|
+
``output_path`` is ``None``.
|
|
305
|
+
|
|
306
|
+
Returns:
|
|
307
|
+
The absolute path to the written image, as a string.
|
|
308
|
+
|
|
309
|
+
Raises:
|
|
310
|
+
ChartRenderError: If ``kind`` is unsupported, ``matplotlib`` is missing,
|
|
311
|
+
the format is unsupported, or the payload has no plottable data.
|
|
312
|
+
"""
|
|
313
|
+
if kind not in _SUPPORTED_KINDS:
|
|
314
|
+
raise ChartRenderError(
|
|
315
|
+
f"Unsupported chart kind {kind!r}. "
|
|
316
|
+
f"Supported kinds: {sorted(_SUPPORTED_KINDS)}."
|
|
317
|
+
)
|
|
318
|
+
payload = _require_mapping(payload)
|
|
319
|
+
|
|
320
|
+
chosen_fmt = (fmt or _DEFAULT_FORMAT).lower().lstrip(".")
|
|
321
|
+
if chosen_fmt not in _SUPPORTED_FORMATS:
|
|
322
|
+
raise ChartRenderError(
|
|
323
|
+
f"Unsupported format {chosen_fmt!r}. "
|
|
324
|
+
f"Supported formats: {sorted(_SUPPORTED_FORMATS)}."
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
resolved = _resolve_output_path(
|
|
328
|
+
output_path,
|
|
329
|
+
kind=kind,
|
|
330
|
+
run_id=(
|
|
331
|
+
payload.get("run_id") if isinstance(payload.get("run_id"), str) else None
|
|
332
|
+
),
|
|
333
|
+
fmt=chosen_fmt,
|
|
334
|
+
)
|
|
335
|
+
resolved.parent.mkdir(parents=True, exist_ok=True)
|
|
336
|
+
|
|
337
|
+
plt = _import_pyplot()
|
|
338
|
+
if kind == "run_pareto":
|
|
339
|
+
fig = _render_pareto(plt, payload)
|
|
340
|
+
else:
|
|
341
|
+
fig = _render_correlations(plt, payload)
|
|
342
|
+
|
|
343
|
+
try:
|
|
344
|
+
fig.savefig(str(resolved))
|
|
345
|
+
finally:
|
|
346
|
+
plt.close(fig)
|
|
347
|
+
|
|
348
|
+
logger.debug("Rendered %s chart to %s", kind, resolved)
|
|
349
|
+
return str(resolved.resolve())
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Agent-facing Traigent analytics MCP (cloud-read optimization analytics).
|
|
2
|
+
|
|
3
|
+
A separate MCP server from :mod:`traigent.mcp` (the local-results server): this
|
|
4
|
+
one is an authenticated thin client over the backend analytics endpoints plus a
|
|
5
|
+
local chart-render helper. Console entry point: ``traigent-analytics-mcp``.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from traigent.analytics_mcp.tools import ANALYTICS_TOOL_NAMES
|
|
11
|
+
|
|
12
|
+
__all__ = ["ANALYTICS_TOOL_NAMES"]
|