Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
ab320ba
Add evals
danielholanda Aug 26, 2026
f4af496
Merge pull request #1 from danielholanda/dholanda/sync_demo
danielholanda Aug 26, 2026
359ec3f
Increase max retries for findings file validation
danielholanda Aug 26, 2026
68e3b6f
Update max retries for findings file validation
danielholanda Aug 26, 2026
0428165
Run black
danielholanda Aug 27, 2026
df75ecc
headers
danielholanda Aug 27, 2026
cbbb0ae
Merge branch 'main' into main
danielholanda Aug 27, 2026
050978e
Sync analysis-orchestrator evals with amd/skills#193
cursoragent Aug 29, 2026
53cb50b
Merge pull request #2 from danielholanda/dholanda/tl_ss
danielholanda Aug 29, 2026
6a0b5b0
Run the analysis-orchestrator evals with skillscope (#3)
danielholanda Aug 29, 2026
3bf24f1
Point skill-evals at skillscope's first-class commands (#4)
danielholanda Aug 29, 2026
83c8949
Use reusable workflow
danielholanda Aug 31, 2026
968ffee
Better eval name
danielholanda Aug 31, 2026
d2d3767
Tergets
danielholanda Aug 31, 2026
ec934da
Merge pull request #5 from danielholanda/dholanda/reusable_tl
danielholanda Aug 31, 2026
5af9b4a
Point to upstream repo
danielholanda Sep 2, 2026
9482e1b
Merge pull request #6 from danielholanda/dholanda/upstream
danielholanda Sep 2, 2026
61fc0d7
Add options to dispatchable workflow
danielholanda Sep 3, 2026
1b6fcb3
Ensure folder and skill match names
danielholanda Sep 3, 2026
5af9e1d
Merge pull request #7 from danielholanda/dholanda/dispatch_options
danielholanda Sep 3, 2026
ac83bc8
Trigger workflows with checkboxes
danielholanda Sep 3, 2026
1425214
Fix naming
danielholanda Sep 3, 2026
ca305a3
Merge pull request #8 from danielholanda/dholanda/checkboxes
danielholanda Sep 3, 2026
255dfe4
Merge branch 'main' into dholanda/upstream
danielholanda Sep 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ omit =
TraceLens/PerfModel/benchmarking/*
TraceLens/PerfModel/origami_helper.py
TraceLens/PerfModel/run_perf_model.py
TraceLens/Agent/*/skills/*/evals/*

[paths]
source =
Expand Down
45 changes: 45 additions & 0 deletions .github/workflows/skill-evals.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
###############################################################################
# Copyright (c) 2026 Advanced Micro Devices, Inc. All rights reserved.
#
# See LICENSE for license information.
###############################################################################

# Run skillscope on evals.json (same intake criteria as amd/skills)

name: AMD Skills Checks

on:
pull_request:
paths:
- "TraceLens/Agent/Analysis/skills/**"
- ".github/workflows/skill-evals.yml"
workflow_dispatch:
inputs:
structural:
description: Structural Tests
type: boolean
default: true
routing:
description: Routing Tests
type: boolean
default: false
behavioral:
description: Behavioral Tests
type: boolean
default: false

permissions:
contents: read

jobs:
evals:
name: AMD Skills Checks
uses: amd/skillscope/.github/workflows/reusable.yml@main
secrets:
api_key: ${{ secrets.ANTHROPIC_API_KEY }}
with:
skills: TraceLens/Agent/Analysis/skills/analysis-orchestrator
# Each step can be set to `required`, `optional`, or `off`.
structural: ${{ github.event_name != 'workflow_dispatch' && 'required' || inputs.structural && 'required' || 'off' }}
routing: ${{ github.event_name == 'workflow_dispatch' && inputs.routing && 'required' || 'off' }}
behavioral: ${{ github.event_name == 'workflow_dispatch' && inputs.behavioral && 'required' || 'off' }}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: tracelens-analysis-orchestrator

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as in the PR description:

This PR also ensures that the skill name and the folder name match each other. This is in general a good practice as some tools do expect those names to match. Please also note that this could also be solved by changing the folder name instead of the skill name. When importing it to AMD Skills we are still importing it as tracelens-analysis-orchestrator.

name: analysis-orchestrator
description: >-
Orchestrates modular PyTorch profiler trace analysis with TraceLens: generates perf
reports, prepares category data, runs system-level and compute-kernel subagents in
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
{
"evaluations": [
{
"id": "gemm-01-repeatability",
"skill_should_trigger": true,
"prompt": "Run the full standalone TraceLens analysis workflow on locally with the default analysis mode, and write everything to analysis_output/ in the current directory. The trace ships inside https://github.com/AMD-AGI/TraceLens/raw/main/agent_evals/Analysis/analysis_tests/unit_tests_standalone.tar.gz. Unpack that and analyze agent_evals/Analysis/analysis_tests/unit_tests_standalone/gemm/gemm_01_compute_few_tiles_analysis_output/gemm_01_compute_few_tiles.json.",
"files_exist": [
"analysis_output/analysis.md",
"analysis_output/perf_report.xlsx",
"analysis_output/category_data/category_manifest.json",
"analysis_output/priority_data.json",
"analysis_output/metadata/model_info.json",
"analysis_output/perf_improvement.png"
],
"expected_behavior": [
"Filled the Executive Summary of analysis.md with measured numbers, leaving no template placeholders such as 'X ms', 'Y%' or '<Brief Title>' behind"
]
},
{
"id": "analyze-torch-trace",
"skill_should_trigger": true,
"prompt": "My training step is way slower than I expected. I ran it under the PyTorch profiler and the output is at https://github.com/AMD-AGI/TraceLens/raw/main/tests/traces/mi300/resnet_act_checkpoint.json.gz. Work out where the time is actually going and write it up so I know what to fix first."
},
{
"id": "compare-two-traces",
"skill_should_trigger": true,
"prompt": "I profiled the same model on two different machines and one is clearly slower, but I can't tell why. The captures are at https://github.com/AMD-AGI/TraceLens/raw/main/tests/traces/mi300/facebook_timesformer-base-finetuned-k400__1016002.json.gz and https://github.com/AMD-AGI/TraceLens/raw/main/tests/traces/h100/facebook_timesformer-base-finetuned-k400__1016002.json.gz. Tell me which GPU kernels are worse on the slow one, worst first, and write it up."
},
{
"id": "agentic-analysis-workflow",
"skill_should_trigger": true,
"prompt": "Run the agentic analysis workflow on the trace at https://github.com/AMD-AGI/TraceLens/raw/main/tests/traces/mi300/gaunernst_bert-small-uncased__1016001.json.gz and produce analysis.md."
},
{
"id": "kernel-perf-report",
"skill_should_trigger": true,
"prompt": "I captured a GPU kernel trace from a distributed training run: https://github.com/AMD-AGI/TraceLens/raw/main/tests/traces/mi300/llama_70b_fsdp/rank0_trace_no_pyfn.json.gz. I need a prioritized report of the worst performance offenders that I can show stakeholders."
},
{
"id": "node-event-loop",
"skill_should_trigger": false,
"prompt": "My Node.js server shows high event loop latency under load. Help me profile it and find the blocking call."
},
{
"id": "cprofile-python-script",
"skill_should_trigger": false,
"prompt": "Profile my Python script with cProfile and tell me which function is eating the most time."
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
###############################################################################
# Copyright (c) 2026 Advanced Micro Devices, Inc. All rights reserved.
#
# See LICENSE for license information.
###############################################################################

os: [Linux]
Loading