agentops-accelerator 0.3.6__tar.gz → 0.3.8__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.
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.claude-plugin/marketplace.json +1 -1
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/plugin/marketplace.json +1 -1
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/CHANGELOG.md +32 -0
- {agentops_accelerator-0.3.6/src/agentops_accelerator.egg-info → agentops_accelerator-0.3.8}/PKG-INFO +1 -1
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/tutorial-end-to-end.md +23 -7
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/tutorial-hosted-agent-quickstart.md +23 -7
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/tutorial-prompt-agent-quickstart.md +25 -7
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/package.json +1 -1
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/plugin.json +1 -1
- {agentops_accelerator-0.3.6/src/agentops/templates → agentops_accelerator-0.3.8/plugins/agentops}/skills/agentops-eval/SKILL.md +19 -3
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/cli/app.py +32 -4
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/setup_wizard.py +24 -14
- {agentops_accelerator-0.3.6/plugins/agentops → agentops_accelerator-0.3.8/src/agentops/templates}/skills/agentops-eval/SKILL.md +19 -3
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8/src/agentops_accelerator.egg-info}/PKG-INFO +1 -1
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_init_command.py +12 -2
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_setup_wizard.py +74 -4
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.gitattributes +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/actions/azure-oidc-login/action.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/code-quality-py.instructions.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/copilot-instructions.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/dependabot.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/extensions/agentops-skills/extension.mjs +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/skills/release-management/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/_build.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/agentops-watchdog.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/ci.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/cut-release.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/e2e.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/release.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/staging.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.gitignore +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.pre-commit-config.yaml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.vscode/launch.json +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.vscode/settings.json +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.vscode/tasks.json +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/AGENTS.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/CONTRIBUTING.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/LICENSE +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/README.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/SECURITY.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/bundles.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/ci-github-actions.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/concepts.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/doctor-checks.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/doctor-explained.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/e2e-live-architecture.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/e2e-live-setup.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/foundry-evaluation-sdk-built-in-evaluators.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/how-it-works.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/media/agentops-diagrams.vsdx +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/media/foundry-control-plane.png +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/release-process.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/examples/flat-quickstart/README.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/examples/flat-quickstart/agentops.yaml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/examples/flat-quickstart/dataset.jsonl +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/icon.png +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/agent-app/Dockerfile +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/agent-app/app.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/agent-app/requirements.txt +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/bootstrap.bicep +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/bootstrap.parameters.example.json +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/perrun.bicep +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/launch.json +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/media/foundry.svg +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/media/quickstart.gif +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/.vscodeignore +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/LICENSE +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/README.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/skills/agentops-agent/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/skills/agentops-config/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/skills/agentops-dataset/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/skills/agentops-report/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/skills/agentops-workflow/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/pyproject.toml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/create_support_agent.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/cut-release.ps1 +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/cut-release.sh +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_aggregate_summary.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_data/basic.jsonl +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_data/rag.jsonl +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_data/tools.jsonl +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_demo.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_hosted_agent.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_make_transcript.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_render_config.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/release.ps1 +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/release.sh +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/setup-e2e-new-tenant.ps1 +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/staging.ps1 +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/staging.sh +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/sync-skills.ps1 +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/sync-skills.sh +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/setup.cfg +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/__main__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/_legacy_ids.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/analyzer.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/catalog.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/errors.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/foundry_config.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/latency.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/opex.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/opex_workspace.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/content_filter.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/diagnostics.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/local_auth.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/managed_identity.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/network.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/regression.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/release_readiness.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/safety.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/spec_conformance.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/cockpit.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/config.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/findings.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/history.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/knowledge/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/knowledge/waf-checklist.csv +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_base.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_bundle_rule.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_client.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_dataset_rules.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_engine.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_prompt_rules.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_spec_rules.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/production_telemetry.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/report.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/server/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/server/app.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/server/auth.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/server/chat.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/server/protocol.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/azure_monitor.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/azure_resources.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/foundry_control.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/results_history.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/spec_detectors/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/spec_detectors/_base.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/spec_detectors/agents_md.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/spec_detectors/spec_kit.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/time_range.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/cli/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/agentops_config.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/config_loader.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/evaluators.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/release_evidence.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/results.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/mcp/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/mcp/server.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/cloud_results.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/cloud_runner.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/comparison.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/diagnostics.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/invocations.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/official_eval.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/orchestrator.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/prompt_deploy.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/publisher.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/reporter.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/runtime.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/thresholds.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/cicd.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/eval_analysis.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/evidence_pack.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/initializer.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/preflight.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/skills.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/trace_promotion.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/workflow_analysis.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/.gitignore +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/agent-server/Dockerfile +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/agent-server/README.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/agent-server/main.bicep +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/agent.yaml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/agentops.yaml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/foundry.svg +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/icon.png +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-dev-azd.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-dev.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prod-azd.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prod.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prompt-agent.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-qa-azd.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-qa.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-pr-prompt-agent.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-pr.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-watchdog.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/project.gitignore +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/sample-traces.jsonl +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/skills/agentops-agent/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/skills/agentops-config/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/skills/agentops-dataset/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/skills/agentops-report/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/skills/agentops-workflow/SKILL.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/smoke.jsonl +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/waf-checklist.README.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/waf-checklist.csv +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-dev-azd.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-dev.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-prod-azd.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-prod.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-prompt-agent.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-qa-azd.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-qa.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-pr-prompt-agent.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-pr.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-watchdog.yml +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/__init__.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/azd_env.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/azure_endpoints.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/colors.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/dotenv_loader.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/foundry_discovery.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/logging.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/telemetry.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/yaml.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops_accelerator.egg-info/SOURCES.txt +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops_accelerator.egg-info/dependency_links.txt +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops_accelerator.egg-info/entry_points.txt +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops_accelerator.egg-info/requires.txt +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops_accelerator.egg-info/top_level.txt +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/TESTING.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/fixtures/fake_adapter.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/fixtures/fake_eval_runner.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/integration/.gitkeep +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/integration/test_cli_flat_schema.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/integration/test_pipeline_smoke.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/.gitkeep +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_analyzer.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_categories.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_errors.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_foundry_config.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_opex.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_opex_workspace.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_regression.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_safety.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_spec_conformance.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_cli.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_config.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_findings.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_history.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_opex_workspace_check.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_posture_rules.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_results_history.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_server.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agentops_config.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_azd_env.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_azure_endpoints.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_azure_resources_discovery.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cicd.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cli_cockpit_connection_summary.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cli_cockpit_port_conflict.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cli_commands.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cli_explain.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cloud_results.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cloud_runner.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cockpit.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_diagnostics.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_doctor_catalog.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_doctor_cli_explain.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_dotenv_loader.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_e2e_render.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_eval_analysis.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_eval_run_grader_errors.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_evaluators.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_foundry_discovery.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_initializer.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_invocations.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_knowledge_loader.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_llm_assist.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_llm_assist_spec_rules.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_mcp_server.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_official_eval.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_pipeline_publisher.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_pipeline_reporter.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_preflight.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_production_telemetry.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_prompt_deploy.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_release_evidence.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_runtime_conversation.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_runtime_model_config.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_skills.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_skills_sync.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_telemetry.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_time_range.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_trace_promotion.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_workflow_analysis.py +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tombstones/vscode/CDN_DEPRECATION_REQUEST.md +0 -0
- {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/uv.lock +0 -0
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"name": "agentops-accelerator",
|
|
14
14
|
"source": "../../plugins/agentops",
|
|
15
15
|
"description": "Copilot agent skills for running standardized evaluation workflows with AgentOps Toolkit and Microsoft Foundry agents.",
|
|
16
|
-
"version": "0.3.
|
|
16
|
+
"version": "0.3.8",
|
|
17
17
|
"keywords": [
|
|
18
18
|
"agentops",
|
|
19
19
|
"evaluation",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"name": "agentops-accelerator",
|
|
14
14
|
"source": "../../plugins/agentops",
|
|
15
15
|
"description": "Copilot agent skills for running standardized evaluation workflows with AgentOps Toolkit and Microsoft Foundry agents.",
|
|
16
|
-
"version": "0.3.
|
|
16
|
+
"version": "0.3.8",
|
|
17
17
|
"keywords": [
|
|
18
18
|
"agentops",
|
|
19
19
|
"evaluation",
|
|
@@ -5,6 +5,38 @@ This format follows [Keep a Changelog](https://keepachangelog.com/) and adheres
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.3.8] - 2026-06-04
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- **`agentops init` now handles blank required wizard values gracefully.** If
|
|
12
|
+
the user presses Enter without an existing Foundry endpoint or agent default,
|
|
13
|
+
the wizard explains that AgentOps needs the missing value and re-prompts
|
|
14
|
+
instead of proceeding to a later persistence failure. Scripted blank flags
|
|
15
|
+
such as `--agent ""` now exit with the same friendly message and no traceback.
|
|
16
|
+
- **`agentops init` no longer depends on undeclared PyYAML.** The setup wizard
|
|
17
|
+
now reads and writes `agentops.yaml` through the repository's `ruamel.yaml`
|
|
18
|
+
helpers, fixing the ugly `No module named 'yaml'` traceback seen in clean
|
|
19
|
+
installs.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- **AgentOps brand tagline sequence now reads `Evaluate :: Ship :: Observe ::
|
|
23
|
+
Own`.** The startup/explain banner now matches the intended product story
|
|
24
|
+
order.
|
|
25
|
+
|
|
26
|
+
## [0.3.7] - 2026-06-01
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- **RBAC preflight now covers Foundry/Azure AI managed identities, not only
|
|
30
|
+
the signed-in user.** Cloud evaluations run server-side and some agent or
|
|
31
|
+
grader calls authenticate as the managed identities on the backing AI
|
|
32
|
+
Services account and child Foundry project. Granting `Cognitive Services
|
|
33
|
+
OpenAI User` only to the user still allowed intermittent grader
|
|
34
|
+
`AuthenticationError` failures and the v0.3.6 execution warning. The
|
|
35
|
+
prompt-agent, hosted-agent, and end-to-end tutorials plus the
|
|
36
|
+
`agentops-eval` skill now assign the same data-plane role to every managed
|
|
37
|
+
identity in the Foundry resource group, preventing the warning/failure path
|
|
38
|
+
before `agentops eval run`.
|
|
39
|
+
|
|
8
40
|
## [0.3.6] - 2026-06-01
|
|
9
41
|
|
|
10
42
|
### Changed
|
|
@@ -286,7 +286,7 @@ for creating agents, tools, tracing, evaluation, and red-team scans:
|
|
|
286
286
|
https://github.com/Azure-Samples/microsoft-foundry-e2e-agent-observability-workshop/tree/2026-04-aie-europe
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
-
### Grant
|
|
289
|
+
### Grant data-plane access to your identity and Foundry managed identities
|
|
290
290
|
|
|
291
291
|
Both options above (prompt agent and hosted HTTP agent) eventually drive
|
|
292
292
|
an `agentops eval run` that calls chat-completions on the AI Services
|
|
@@ -300,16 +300,32 @@ what causes the eval to fail later with `PermissionDenied` on
|
|
|
300
300
|
`Microsoft.CognitiveServices/accounts/OpenAI/deployments/chat/
|
|
301
301
|
completions/action`.
|
|
302
302
|
|
|
303
|
-
Run
|
|
304
|
-
you will evaluate against.
|
|
305
|
-
|
|
306
|
-
|
|
303
|
+
Run these assignments once per resource group that hosts a Foundry account
|
|
304
|
+
you will evaluate against. Cloud evaluations run server-side and some agent
|
|
305
|
+
or grader calls may authenticate as Foundry/Azure AI managed identities, not
|
|
306
|
+
only as your signed-in user. Assigning the role only to your user can still
|
|
307
|
+
leave graders failing with `AuthenticationError`.
|
|
307
308
|
|
|
308
309
|
```powershell
|
|
310
|
+
$subscriptionId = az account show --query id -o tsv
|
|
311
|
+
$resourceGroup = "<resource-group>"
|
|
312
|
+
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
|
|
313
|
+
$userObjectId = az ad signed-in-user show --query id -o tsv
|
|
314
|
+
|
|
309
315
|
az role assignment create `
|
|
310
|
-
--assignee
|
|
316
|
+
--assignee $userObjectId `
|
|
311
317
|
--role "Cognitive Services OpenAI User" `
|
|
312
|
-
--scope
|
|
318
|
+
--scope $scope
|
|
319
|
+
|
|
320
|
+
az resource list -g $resourceGroup `
|
|
321
|
+
--query "[?identity.principalId!=null].identity.principalId" -o tsv |
|
|
322
|
+
ForEach-Object {
|
|
323
|
+
az role assignment create `
|
|
324
|
+
--assignee-object-id $_ `
|
|
325
|
+
--assignee-principal-type ServicePrincipal `
|
|
326
|
+
--role "Cognitive Services OpenAI User" `
|
|
327
|
+
--scope $scope
|
|
328
|
+
}
|
|
313
329
|
```
|
|
314
330
|
|
|
315
331
|
> **Give the assignment a few minutes to propagate.** Data-plane role
|
{agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/tutorial-hosted-agent-quickstart.md
RENAMED
|
@@ -310,7 +310,7 @@ If the deployed endpoint needs a bearer token:
|
|
|
310
310
|
$env:HOSTED_AGENT_TOKEN = "<token>"
|
|
311
311
|
```
|
|
312
312
|
|
|
313
|
-
### Grant
|
|
313
|
+
### Grant data-plane access to your identity and Foundry managed identities
|
|
314
314
|
|
|
315
315
|
The local AI-assisted evaluators that AgentOps runs in step 8 call
|
|
316
316
|
chat-completions on the AI Services account that backs your Foundry
|
|
@@ -322,16 +322,32 @@ but `dataActions: []`. Skipping this once causes the eval to fail with
|
|
|
322
322
|
`PermissionDenied` on `Microsoft.CognitiveServices/accounts/OpenAI/
|
|
323
323
|
deployments/chat/completions/action`.
|
|
324
324
|
|
|
325
|
-
Run
|
|
326
|
-
you will evaluate against
|
|
327
|
-
|
|
328
|
-
|
|
325
|
+
Run these assignments once per resource group hosting a Foundry account
|
|
326
|
+
you will evaluate against. Local AI-assisted evaluators use your identity,
|
|
327
|
+
while Foundry-hosted/server-side eval paths may use Azure AI managed
|
|
328
|
+
identities from the same resource group. Assigning only the user can still
|
|
329
|
+
leave server-side graders failing with `AuthenticationError`.
|
|
329
330
|
|
|
330
331
|
```powershell
|
|
332
|
+
$subscriptionId = az account show --query id -o tsv
|
|
333
|
+
$resourceGroup = "<resource-group>"
|
|
334
|
+
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
|
|
335
|
+
$userObjectId = az ad signed-in-user show --query id -o tsv
|
|
336
|
+
|
|
331
337
|
az role assignment create `
|
|
332
|
-
--assignee
|
|
338
|
+
--assignee $userObjectId `
|
|
333
339
|
--role "Cognitive Services OpenAI User" `
|
|
334
|
-
--scope
|
|
340
|
+
--scope $scope
|
|
341
|
+
|
|
342
|
+
az resource list -g $resourceGroup `
|
|
343
|
+
--query "[?identity.principalId!=null].identity.principalId" -o tsv |
|
|
344
|
+
ForEach-Object {
|
|
345
|
+
az role assignment create `
|
|
346
|
+
--assignee-object-id $_ `
|
|
347
|
+
--assignee-principal-type ServicePrincipal `
|
|
348
|
+
--role "Cognitive Services OpenAI User" `
|
|
349
|
+
--scope $scope
|
|
350
|
+
}
|
|
335
351
|
```
|
|
336
352
|
|
|
337
353
|
> **Give the assignment a few minutes to propagate.** Data-plane role
|
{agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/tutorial-prompt-agent-quickstart.md
RENAMED
|
@@ -241,7 +241,7 @@ Show me the planned changes and the resulting endpoints before applying.
|
|
|
241
241
|
|
|
242
242
|
If the skill is not available, use Path A.
|
|
243
243
|
|
|
244
|
-
### Grant
|
|
244
|
+
### Grant data-plane access to your identity and Foundry managed identities
|
|
245
245
|
|
|
246
246
|
Creating a project through the portal only assigns you `Foundry User` **at
|
|
247
247
|
the project scope**. That role does not cover the OpenAI data-plane actions
|
|
@@ -257,16 +257,34 @@ Skipping this step is what causes the eval grader to fail later with::
|
|
|
257
257
|
data action `Microsoft.CognitiveServices/accounts/OpenAI/deployments/
|
|
258
258
|
chat/completions/action` to perform `POST /openai/deployments/...`
|
|
259
259
|
|
|
260
|
-
Run
|
|
261
|
-
you will evaluate against.
|
|
262
|
-
and
|
|
263
|
-
|
|
260
|
+
Run these assignments once per resource group that hosts a Foundry account
|
|
261
|
+
you will evaluate against. Cloud evaluations run server-side: the agent call
|
|
262
|
+
and graders may authenticate as Foundry/Azure AI managed identities, not only
|
|
263
|
+
as your signed-in user. Assigning the role only to your user can still leave
|
|
264
|
+
some graders failing with `AuthenticationError`.
|
|
264
265
|
|
|
265
266
|
```powershell
|
|
267
|
+
$subscriptionId = az account show --query id -o tsv
|
|
268
|
+
$resourceGroup = "<resource-group>"
|
|
269
|
+
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
|
|
270
|
+
$userObjectId = az ad signed-in-user show --query id -o tsv
|
|
271
|
+
|
|
272
|
+
# User running local commands / creating cloud evals.
|
|
266
273
|
az role assignment create `
|
|
267
|
-
--assignee
|
|
274
|
+
--assignee $userObjectId `
|
|
268
275
|
--role "Cognitive Services OpenAI User" `
|
|
269
|
-
--scope
|
|
276
|
+
--scope $scope
|
|
277
|
+
|
|
278
|
+
# Foundry/Azure AI managed identities used by server-side agent/evaluator calls.
|
|
279
|
+
az resource list -g $resourceGroup `
|
|
280
|
+
--query "[?identity.principalId!=null].identity.principalId" -o tsv |
|
|
281
|
+
ForEach-Object {
|
|
282
|
+
az role assignment create `
|
|
283
|
+
--assignee-object-id $_ `
|
|
284
|
+
--assignee-principal-type ServicePrincipal `
|
|
285
|
+
--role "Cognitive Services OpenAI User" `
|
|
286
|
+
--scope $scope
|
|
287
|
+
}
|
|
270
288
|
```
|
|
271
289
|
|
|
272
290
|
Repeat the command with the `travel-agent-dev` resource group if the dev
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "agentops-accelerator",
|
|
3
3
|
"displayName": "AgentOps Accelerator — Skills for GitHub Copilot",
|
|
4
4
|
"description": "Copilot agent skills for running standardized evaluation workflows with AgentOps Accelerator and Microsoft Foundry agents.",
|
|
5
|
-
"version": "0.3.
|
|
5
|
+
"version": "0.3.8",
|
|
6
6
|
"publisher": "AgentOpsAccelerator",
|
|
7
7
|
"icon": "icon.png",
|
|
8
8
|
"license": "MIT",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentops-accelerator",
|
|
3
3
|
"description": "Copilot agent skills for running standardized evaluation workflows with AgentOps Accelerator and Microsoft Foundry agents.",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.8",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "AgentOps Accelerator",
|
|
7
7
|
"url": "https://github.com/Azure/agentops"
|
|
@@ -41,8 +41,12 @@ PermissionDenied … lacks the required data action
|
|
|
41
41
|
'Microsoft.CognitiveServices/accounts/OpenAI/deployments/chat/completions/action'
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
Run this preflight before Step 1
|
|
45
|
-
|
|
44
|
+
Run this preflight before Step 1. It must grant the role to the signed-in
|
|
45
|
+
user **and** to the Foundry/Azure AI managed identities in the resource
|
|
46
|
+
group. Cloud evaluations run server-side and some graders authenticate as
|
|
47
|
+
those managed identities, so assigning only the user can still produce
|
|
48
|
+
intermittent `AuthenticationError` grader failures. The commands are
|
|
49
|
+
idempotent (`RoleAssignmentExists` means the role was already granted):
|
|
46
50
|
|
|
47
51
|
```bash
|
|
48
52
|
# 1. Resolve the AI Services account from agentops.yaml / .azure/<env>/.env
|
|
@@ -55,11 +59,23 @@ SUB_ID=$(az account show --query id -o tsv)
|
|
|
55
59
|
RG=$(az cognitiveservices account list --subscription "$SUB_ID" --query "[?name=='$ACCOUNT_NAME'].resourceGroup | [0]" -o tsv)
|
|
56
60
|
OBJ_ID=$(az ad signed-in-user show --query id -o tsv)
|
|
57
61
|
|
|
58
|
-
# 3. Grant data-plane access at
|
|
62
|
+
# 3. Grant the user data-plane access at RG scope.
|
|
59
63
|
az role assignment create \
|
|
60
64
|
--assignee "$OBJ_ID" \
|
|
61
65
|
--role "Cognitive Services OpenAI User" \
|
|
62
66
|
--scope "/subscriptions/$SUB_ID/resourceGroups/$RG"
|
|
67
|
+
|
|
68
|
+
# 4. Grant the same data-plane role to Foundry/Azure AI managed identities.
|
|
69
|
+
az resource list -g "$RG" \
|
|
70
|
+
--query "[?identity.principalId!=null].identity.principalId" -o tsv |
|
|
71
|
+
while read -r PRINCIPAL_ID; do
|
|
72
|
+
[ -z "$PRINCIPAL_ID" ] && continue
|
|
73
|
+
az role assignment create \
|
|
74
|
+
--assignee-object-id "$PRINCIPAL_ID" \
|
|
75
|
+
--assignee-principal-type ServicePrincipal \
|
|
76
|
+
--role "Cognitive Services OpenAI User" \
|
|
77
|
+
--scope "/subscriptions/$SUB_ID/resourceGroups/$RG"
|
|
78
|
+
done
|
|
63
79
|
```
|
|
64
80
|
|
|
65
81
|
PowerShell equivalent: replace `$(...)` with the PowerShell variable
|
|
@@ -1365,6 +1365,7 @@ def cmd_init(
|
|
|
1365
1365
|
AGENT_TITLE,
|
|
1366
1366
|
DATASET_TITLE,
|
|
1367
1367
|
PROJECT_ENDPOINT_TITLE,
|
|
1368
|
+
REQUIRED_CONFIGURATION_MESSAGE,
|
|
1368
1369
|
WizardAnswers,
|
|
1369
1370
|
apply_answers,
|
|
1370
1371
|
discover_defaults,
|
|
@@ -1476,16 +1477,37 @@ def cmd_init(
|
|
|
1476
1477
|
if any_flag:
|
|
1477
1478
|
# Scripted mode — validate then apply.
|
|
1478
1479
|
if project_endpoint is not None:
|
|
1480
|
+
if not project_endpoint.strip():
|
|
1481
|
+
typer.echo(
|
|
1482
|
+
f"{_cli_error('Error')}: --project-endpoint is required. "
|
|
1483
|
+
f"{REQUIRED_CONFIGURATION_MESSAGE}",
|
|
1484
|
+
err=True,
|
|
1485
|
+
)
|
|
1486
|
+
raise typer.Exit(code=1)
|
|
1479
1487
|
err = validate_project_endpoint(project_endpoint)
|
|
1480
1488
|
if err:
|
|
1481
1489
|
typer.echo(f"{_cli_error('Error')}: --project-endpoint: {err}", err=True)
|
|
1482
1490
|
raise typer.Exit(code=1)
|
|
1483
1491
|
if agent is not None:
|
|
1492
|
+
if not agent.strip():
|
|
1493
|
+
typer.echo(
|
|
1494
|
+
f"{_cli_error('Error')}: --agent is required. "
|
|
1495
|
+
f"{REQUIRED_CONFIGURATION_MESSAGE}",
|
|
1496
|
+
err=True,
|
|
1497
|
+
)
|
|
1498
|
+
raise typer.Exit(code=1)
|
|
1484
1499
|
err = validate_agent(agent)
|
|
1485
1500
|
if err:
|
|
1486
1501
|
typer.echo(f"{_cli_error('Error')}: --agent: {err}", err=True)
|
|
1487
1502
|
raise typer.Exit(code=1)
|
|
1488
1503
|
if dataset is not None:
|
|
1504
|
+
if not dataset.strip():
|
|
1505
|
+
typer.echo(
|
|
1506
|
+
f"{_cli_error('Error')}: --dataset is required. "
|
|
1507
|
+
f"{REQUIRED_CONFIGURATION_MESSAGE}",
|
|
1508
|
+
err=True,
|
|
1509
|
+
)
|
|
1510
|
+
raise typer.Exit(code=1)
|
|
1489
1511
|
err = validate_dataset(dataset, workspace)
|
|
1490
1512
|
if err:
|
|
1491
1513
|
typer.echo(f"{_cli_error('Error')}: --dataset: {err}", err=True)
|
|
@@ -1605,8 +1627,14 @@ def cmd_init(
|
|
|
1605
1627
|
default_env_name=target_env_name,
|
|
1606
1628
|
azd_env_name=azd_env_name,
|
|
1607
1629
|
)
|
|
1608
|
-
except
|
|
1609
|
-
typer.echo(
|
|
1630
|
+
except Exception as exc: # noqa: BLE001
|
|
1631
|
+
typer.echo(
|
|
1632
|
+
f"{_cli_error('Error')}: could not save AgentOps configuration. "
|
|
1633
|
+
f"{REQUIRED_CONFIGURATION_MESSAGE}",
|
|
1634
|
+
err=True,
|
|
1635
|
+
)
|
|
1636
|
+
if str(exc):
|
|
1637
|
+
typer.echo(f"{_cli_warn('Details')}: {exc}", err=True)
|
|
1610
1638
|
raise typer.Exit(code=1)
|
|
1611
1639
|
|
|
1612
1640
|
typer.echo("")
|
|
@@ -4362,8 +4390,8 @@ def _colorize_block(
|
|
|
4362
4390
|
# fallback keeps the same words on a single line.
|
|
4363
4391
|
def _agentops_tagline() -> str:
|
|
4364
4392
|
if _terminal_unicode_enabled():
|
|
4365
|
-
return "Evaluate ·
|
|
4366
|
-
return "Evaluate ::
|
|
4393
|
+
return "Evaluate · Ship · Observe · Own — every Foundry agent."
|
|
4394
|
+
return "Evaluate :: Ship :: Observe :: Own -- every Foundry agent."
|
|
4367
4395
|
|
|
4368
4396
|
|
|
4369
4397
|
def _render_brand_block(
|
{agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/setup_wizard.py
RENAMED
|
@@ -67,6 +67,12 @@ DATASET_HELP = (
|
|
|
67
67
|
ENV_KEY_PROJECT_ENDPOINT = "AZURE_AI_FOUNDRY_PROJECT_ENDPOINT"
|
|
68
68
|
ENV_KEY_APPINSIGHTS = "APPLICATIONINSIGHTS_CONNECTION_STRING"
|
|
69
69
|
|
|
70
|
+
REQUIRED_CONFIGURATION_MESSAGE = (
|
|
71
|
+
"AgentOps needs a Foundry project endpoint, an agent, and a dataset path "
|
|
72
|
+
"before it can finish configuration. Enter the missing value, or press "
|
|
73
|
+
"Ctrl+C to cancel and re-run `agentops init` later."
|
|
74
|
+
)
|
|
75
|
+
|
|
70
76
|
|
|
71
77
|
# ---------------------------------------------------------------------------
|
|
72
78
|
# Data models
|
|
@@ -356,18 +362,16 @@ def _read_agentops_yaml(workspace: Path) -> dict:
|
|
|
356
362
|
if not path.exists():
|
|
357
363
|
return {}
|
|
358
364
|
try:
|
|
359
|
-
import
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
try:
|
|
363
|
-
data = yaml.safe_load(path.read_text(encoding="utf-8"))
|
|
365
|
+
from agentops.utils.yaml import load_yaml # noqa: PLC0415
|
|
366
|
+
|
|
367
|
+
data = load_yaml(path)
|
|
364
368
|
except Exception: # noqa: BLE001
|
|
365
369
|
return {}
|
|
366
370
|
return data if isinstance(data, dict) else {}
|
|
367
371
|
|
|
368
372
|
|
|
369
373
|
def _write_agentops_yaml(path: Path, data: dict) -> None:
|
|
370
|
-
import
|
|
374
|
+
from agentops.utils.yaml import save_yaml # noqa: PLC0415
|
|
371
375
|
|
|
372
376
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
373
377
|
# Preserve simple field order for readability: version, agent, dataset,
|
|
@@ -381,10 +385,7 @@ def _write_agentops_yaml(path: Path, data: dict) -> None:
|
|
|
381
385
|
for key, value in data.items():
|
|
382
386
|
if key not in ordered:
|
|
383
387
|
ordered[key] = value
|
|
384
|
-
path
|
|
385
|
-
yaml.safe_dump(ordered, sort_keys=False, default_flow_style=False),
|
|
386
|
-
encoding="utf-8",
|
|
387
|
-
)
|
|
388
|
+
save_yaml(path, ordered)
|
|
388
389
|
|
|
389
390
|
|
|
390
391
|
_AGENTOPS_ENV_HEADER = (
|
|
@@ -601,7 +602,11 @@ def run_wizard(
|
|
|
601
602
|
raw = prompt("Foundry project endpoint", effective_endpoint_default)
|
|
602
603
|
value = raw.strip()
|
|
603
604
|
if not value:
|
|
604
|
-
|
|
605
|
+
if effective_endpoint_default:
|
|
606
|
+
break # keep current
|
|
607
|
+
echo(" ! Foundry project endpoint is required.")
|
|
608
|
+
echo(" ! " + REQUIRED_CONFIGURATION_MESSAGE)
|
|
609
|
+
continue
|
|
605
610
|
err = validate_project_endpoint(value)
|
|
606
611
|
if err:
|
|
607
612
|
echo(" ! " + err)
|
|
@@ -623,7 +628,11 @@ def run_wizard(
|
|
|
623
628
|
raw = prompt("Agent", defaults.agent)
|
|
624
629
|
value = raw.strip()
|
|
625
630
|
if not value:
|
|
626
|
-
|
|
631
|
+
if defaults.agent:
|
|
632
|
+
break # keep current
|
|
633
|
+
echo(" ! Agent is required.")
|
|
634
|
+
echo(" ! " + REQUIRED_CONFIGURATION_MESSAGE)
|
|
635
|
+
continue
|
|
627
636
|
err = validate_agent(value)
|
|
628
637
|
if err:
|
|
629
638
|
echo(" ! " + err)
|
|
@@ -641,11 +650,12 @@ def run_wizard(
|
|
|
641
650
|
echo("")
|
|
642
651
|
echo(DATASET_TITLE)
|
|
643
652
|
echo(_indent(DATASET_HELP))
|
|
653
|
+
dataset_default = defaults.dataset or ".agentops/data/smoke.jsonl"
|
|
644
654
|
while True:
|
|
645
|
-
raw = prompt("Dataset path",
|
|
655
|
+
raw = prompt("Dataset path", dataset_default)
|
|
646
656
|
value = raw.strip()
|
|
647
657
|
if not value:
|
|
648
|
-
|
|
658
|
+
value = dataset_default
|
|
649
659
|
err = validate_dataset(value, workspace)
|
|
650
660
|
if err:
|
|
651
661
|
echo(" ! " + err)
|
|
@@ -41,8 +41,12 @@ PermissionDenied … lacks the required data action
|
|
|
41
41
|
'Microsoft.CognitiveServices/accounts/OpenAI/deployments/chat/completions/action'
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
Run this preflight before Step 1
|
|
45
|
-
|
|
44
|
+
Run this preflight before Step 1. It must grant the role to the signed-in
|
|
45
|
+
user **and** to the Foundry/Azure AI managed identities in the resource
|
|
46
|
+
group. Cloud evaluations run server-side and some graders authenticate as
|
|
47
|
+
those managed identities, so assigning only the user can still produce
|
|
48
|
+
intermittent `AuthenticationError` grader failures. The commands are
|
|
49
|
+
idempotent (`RoleAssignmentExists` means the role was already granted):
|
|
46
50
|
|
|
47
51
|
```bash
|
|
48
52
|
# 1. Resolve the AI Services account from agentops.yaml / .azure/<env>/.env
|
|
@@ -55,11 +59,23 @@ SUB_ID=$(az account show --query id -o tsv)
|
|
|
55
59
|
RG=$(az cognitiveservices account list --subscription "$SUB_ID" --query "[?name=='$ACCOUNT_NAME'].resourceGroup | [0]" -o tsv)
|
|
56
60
|
OBJ_ID=$(az ad signed-in-user show --query id -o tsv)
|
|
57
61
|
|
|
58
|
-
# 3. Grant data-plane access at
|
|
62
|
+
# 3. Grant the user data-plane access at RG scope.
|
|
59
63
|
az role assignment create \
|
|
60
64
|
--assignee "$OBJ_ID" \
|
|
61
65
|
--role "Cognitive Services OpenAI User" \
|
|
62
66
|
--scope "/subscriptions/$SUB_ID/resourceGroups/$RG"
|
|
67
|
+
|
|
68
|
+
# 4. Grant the same data-plane role to Foundry/Azure AI managed identities.
|
|
69
|
+
az resource list -g "$RG" \
|
|
70
|
+
--query "[?identity.principalId!=null].identity.principalId" -o tsv |
|
|
71
|
+
while read -r PRINCIPAL_ID; do
|
|
72
|
+
[ -z "$PRINCIPAL_ID" ] && continue
|
|
73
|
+
az role assignment create \
|
|
74
|
+
--assignee-object-id "$PRINCIPAL_ID" \
|
|
75
|
+
--assignee-principal-type ServicePrincipal \
|
|
76
|
+
--role "Cognitive Services OpenAI User" \
|
|
77
|
+
--scope "/subscriptions/$SUB_ID/resourceGroups/$RG"
|
|
78
|
+
done
|
|
63
79
|
```
|
|
64
80
|
|
|
65
81
|
PowerShell equivalent: replace `$(...)` with the PowerShell variable
|
|
@@ -119,6 +119,16 @@ def test_init_scripted_validates_project_endpoint(tmp_path: Path) -> None:
|
|
|
119
119
|
assert "Project endpoint" in result.output
|
|
120
120
|
|
|
121
121
|
|
|
122
|
+
def test_init_scripted_blank_required_value_is_friendly(tmp_path: Path) -> None:
|
|
123
|
+
"""Blank scripted values fail with a concise message, not a traceback."""
|
|
124
|
+
result = runner.invoke(app, ["init", "--dir", str(tmp_path), "--agent", ""])
|
|
125
|
+
|
|
126
|
+
assert result.exit_code == 1
|
|
127
|
+
assert "--agent is required" in result.output
|
|
128
|
+
assert "AgentOps needs a Foundry project endpoint" in result.output
|
|
129
|
+
assert "Traceback" not in result.output
|
|
130
|
+
|
|
131
|
+
|
|
122
132
|
def test_init_scripted_with_custom_azd_env(tmp_path: Path) -> None:
|
|
123
133
|
"""`--azd-env qa` writes to the explicit azd env instead of the local env."""
|
|
124
134
|
runner.invoke(app, ["init", "--dir", str(tmp_path), "--no-prompt"])
|
|
@@ -293,7 +303,7 @@ def test_init_prints_brand_banner(tmp_path: Path, monkeypatch) -> None:
|
|
|
293
303
|
# ASCII letterforms from _AGENTOPS_PLAIN_BANNER (figlet "Standard").
|
|
294
304
|
assert "____ _____ _ _ _____" in text
|
|
295
305
|
# The catchphrase, ASCII fallback variant.
|
|
296
|
-
assert "Evaluate ::
|
|
306
|
+
assert "Evaluate :: Ship :: Observe :: Own -- every Foundry agent." in text
|
|
297
307
|
|
|
298
308
|
|
|
299
309
|
def test_brand_tagline_is_used_by_explain_pages(monkeypatch) -> None:
|
|
@@ -305,7 +315,7 @@ def test_brand_tagline_is_used_by_explain_pages(monkeypatch) -> None:
|
|
|
305
315
|
result = runner.invoke(app, ["init", "explain", "--no-pager"])
|
|
306
316
|
assert result.exit_code == 0
|
|
307
317
|
text = _strip_ansi(result.stdout)
|
|
308
|
-
assert "Evaluate ::
|
|
318
|
+
assert "Evaluate :: Ship :: Observe :: Own -- every Foundry agent." in text
|
|
309
319
|
|
|
310
320
|
|
|
311
321
|
# ---------------------------------------------------------------------------
|
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
6
|
import os
|
|
7
|
+
import builtins
|
|
7
8
|
from pathlib import Path
|
|
8
9
|
|
|
9
10
|
import pytest
|
|
@@ -242,6 +243,29 @@ def test_apply_answers_writes_agent_and_dataset_to_yaml(tmp_path: Path):
|
|
|
242
243
|
assert "dataset: .agentops/data/smoke.jsonl" in text
|
|
243
244
|
|
|
244
245
|
|
|
246
|
+
def test_apply_answers_writes_yaml_without_pyyaml(
|
|
247
|
+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
248
|
+
):
|
|
249
|
+
real_import = builtins.__import__
|
|
250
|
+
|
|
251
|
+
def _import(name, *args, **kwargs): # noqa: ANN001
|
|
252
|
+
if name == "yaml":
|
|
253
|
+
raise ModuleNotFoundError("No module named 'yaml'")
|
|
254
|
+
return real_import(name, *args, **kwargs)
|
|
255
|
+
|
|
256
|
+
monkeypatch.setattr(builtins, "__import__", _import)
|
|
257
|
+
|
|
258
|
+
result = apply_answers(
|
|
259
|
+
tmp_path,
|
|
260
|
+
WizardAnswers(agent="my-bot:7", dataset=".agentops/data/smoke.jsonl"),
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
assert result.yaml_updated is True
|
|
264
|
+
assert "agent: my-bot:7" in (tmp_path / "agentops.yaml").read_text(
|
|
265
|
+
encoding="utf-8"
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
|
|
245
269
|
def test_apply_answers_does_not_write_project_endpoint_to_yaml(tmp_path: Path):
|
|
246
270
|
"""Environment-specific endpoints stay out of agentops.yaml."""
|
|
247
271
|
answers = WizardAnswers(
|
|
@@ -465,7 +489,7 @@ def test_run_wizard_does_not_prompt_for_appinsights(
|
|
|
465
489
|
assert "Application Insights" not in "\n".join(messages)
|
|
466
490
|
|
|
467
491
|
|
|
468
|
-
def
|
|
492
|
+
def test_run_wizard_empty_input_reprompts_required_missing_endpoint(
|
|
469
493
|
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
470
494
|
):
|
|
471
495
|
monkeypatch.delenv("AZURE_AI_FOUNDRY_PROJECT_ENDPOINT", raising=False)
|
|
@@ -479,14 +503,46 @@ def test_run_wizard_empty_input_keeps_current(
|
|
|
479
503
|
# With idempotent skip-on-default, agent/dataset are silently reused.
|
|
480
504
|
# Only the still-empty project endpoint gets asked; App Insights is left
|
|
481
505
|
# for runtime discovery or explicit non-interactive configuration.
|
|
482
|
-
prompt = _scripted_prompt([""])
|
|
506
|
+
prompt = _scripted_prompt(["", "https://acct.services.ai.azure.com/api/projects/p"])
|
|
507
|
+
messages: list[str] = []
|
|
483
508
|
answers = run_wizard(
|
|
484
|
-
tmp_path, prompt=prompt, echo=
|
|
509
|
+
tmp_path, prompt=prompt, echo=messages.append, reconfigure=False
|
|
485
510
|
)
|
|
486
|
-
assert answers.project_endpoint
|
|
511
|
+
assert answers.project_endpoint == "https://acct.services.ai.azure.com/api/projects/p"
|
|
487
512
|
assert answers.agent is None
|
|
488
513
|
assert answers.dataset is None
|
|
489
514
|
assert answers.appinsights_connection_string is None
|
|
515
|
+
assert "Foundry project endpoint is required." in "\n".join(messages)
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
def test_run_wizard_reprompts_blank_required_values(
|
|
519
|
+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
520
|
+
):
|
|
521
|
+
monkeypatch.delenv("AZURE_AI_FOUNDRY_PROJECT_ENDPOINT", raising=False)
|
|
522
|
+
monkeypatch.delenv("APPLICATIONINSIGHTS_CONNECTION_STRING", raising=False)
|
|
523
|
+
|
|
524
|
+
data_dir = tmp_path / ".agentops" / "data"
|
|
525
|
+
data_dir.mkdir(parents=True)
|
|
526
|
+
(data_dir / "smoke.jsonl").write_text("{}\n", encoding="utf-8")
|
|
527
|
+
prompt = _scripted_prompt(
|
|
528
|
+
[
|
|
529
|
+
"",
|
|
530
|
+
"https://acct.services.ai.azure.com/api/projects/p",
|
|
531
|
+
"",
|
|
532
|
+
"my-bot:9",
|
|
533
|
+
"",
|
|
534
|
+
]
|
|
535
|
+
)
|
|
536
|
+
messages: list[str] = []
|
|
537
|
+
|
|
538
|
+
answers = run_wizard(tmp_path, prompt=prompt, echo=messages.append)
|
|
539
|
+
|
|
540
|
+
assert answers.project_endpoint == "https://acct.services.ai.azure.com/api/projects/p"
|
|
541
|
+
assert answers.agent == "my-bot:9"
|
|
542
|
+
assert answers.dataset == ".agentops/data/smoke.jsonl"
|
|
543
|
+
output = "\n".join(messages)
|
|
544
|
+
assert "Foundry project endpoint is required." in output
|
|
545
|
+
assert "Agent is required." in output
|
|
490
546
|
|
|
491
547
|
|
|
492
548
|
def test_run_wizard_force_prompt_fields_reasks_seed_agent_and_dataset(
|
|
@@ -543,6 +599,20 @@ def test_run_wizard_appinsights_is_not_interactive_even_when_missing(
|
|
|
543
599
|
"""The wizard should not ask for App Insights just to leave it blank."""
|
|
544
600
|
monkeypatch.delenv("AZURE_AI_FOUNDRY_PROJECT_ENDPOINT", raising=False)
|
|
545
601
|
monkeypatch.delenv("APPLICATIONINSIGHTS_CONNECTION_STRING", raising=False)
|
|
602
|
+
_seed_azd_env(
|
|
603
|
+
tmp_path,
|
|
604
|
+
"dev",
|
|
605
|
+
{
|
|
606
|
+
"AZURE_AI_FOUNDRY_PROJECT_ENDPOINT": (
|
|
607
|
+
"https://acct.services.ai.azure.com/api/projects/p"
|
|
608
|
+
),
|
|
609
|
+
},
|
|
610
|
+
)
|
|
611
|
+
(tmp_path / "agentops.yaml").write_text(
|
|
612
|
+
"version: 1\nagent: keep:1\ndataset: keep.jsonl\n",
|
|
613
|
+
encoding="utf-8",
|
|
614
|
+
)
|
|
615
|
+
(tmp_path / "keep.jsonl").write_text("{}\n", encoding="utf-8")
|
|
546
616
|
|
|
547
617
|
messages: list[str] = []
|
|
548
618
|
prompt_calls: list[str] = []
|
|
File without changes
|
|
File without changes
|
{agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/code-quality-py.instructions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|