Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

120 lines
4.0 KiB
TOML

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "perfxpert"
version = "0.2.0"
description = "AI-powered GPU trace analysis for rocprofiler-sdk databases"
readme = "README.md"
license = { text = "MIT" }
authors = [{ name = "Advanced Micro Devices, Inc." }]
requires-python = ">=3.10"
# The agentic runtime uses pydantic/pyyaml/jsonschema for structured
# knowledge loading and schema validation. LLM enhancement still requires
# anthropic or openai (optional extras below).
dependencies = [
"pydantic>=2.0",
"pyyaml>=6.0",
"jsonschema>=4.0",
"httpx>=0.25",
"mcp>=1.0",
# numpy is used by perfxpert.runtime.gate_cascade for the regression
# aggregation math; loaded eagerly during `perfxpert doctor` and any
# `perfxpert analyze` invocation. Required (not optional).
"numpy>=1.24",
# openai-agents is the agentic-runtime SDK (imported as `agents`) that
# perfxpert.agents.framework lazily loads whenever the agentic path
# dispatches an LLM-backed action. `perfxpert doctor` also reports
# its install status, so keep it as a required runtime dep.
"openai-agents>=0.1",
# tomlkit is used by the Codex backend adapter to round-trip edits
# to ~/.codex/config.toml while preserving user comments/formatting.
# Required (not optional) so `perfxpert-code codex` works out of the box.
"tomlkit>=0.12",
]
[project.optional-dependencies]
llm = ["anthropic>=0.18", "openai>=1.0"]
rich = ["rich>=13.0"]
# litellm routes non-OpenAI providers (anthropic, ollama, private) through
# the openai-agents SDK via agents.extensions.models.litellm_model.LitellmModel.
# Without it, framework._sdk_invoke() silently routes every model string to
# OpenAI's endpoint and fails with "requested model does not exist" for
# Anthropic/Ollama models (Phase 8 fix).
litellm = ["litellm>=1.50", "python-dotenv>=1.2.2"]
all = [
"anthropic>=0.18",
"openai>=1.0",
"rich>=13.0",
"litellm>=1.50",
"python-dotenv>=1.2.2",
]
dev = [
"pytest>=8.0",
"pytest-asyncio>=0.21",
"flake8",
"black",
"pexpect>=4.8",
"pytest-xdist>=3.5", # parallel red-team / parity execution
"hypothesis>=6.100", # property-based fuzz for sanitizer
"rich>=13.0", # exit-dashboard rendering (already a runtime dep; dev pin kept for parity)
]
[project.scripts]
perfxpert = "perfxpert.__main__:main"
perfxpert-code = "perfxpert.cli.opencode_launcher:main"
perfxpert-mcp = "mcp_server.server:main"
[project.urls]
Homepage = "https://github.com/ROCm/rocm-systems"
Documentation = "https://rocm.docs.amd.com"
[tool.setuptools]
# Auto-discover every perfxpert.* subpackage + mcp_server. The explicit
# list was fragile — new subpackages (perfxpert.tools, perfxpert.agents,
# perfxpert.knowledge, perfxpert.fence, perfxpert.conversation,
# perfxpert.cli._backend, perfxpert.cli._gate_hooks) silently dropped
# from the wheel, so a fresh `pip install perfxpert` would import-fail
# at runtime on `from perfxpert.tools._tooldep import require_tool`.
[tool.setuptools.packages.find]
include = ["perfxpert*", "mcp_server*"]
exclude = ["tests*", "opencode*"]
[tool.setuptools.package-data]
perfxpert = [
"formatters/templates/*.html",
"_bundled/opencode",
"_bundled/**/*",
"_bundled/opencode_config/*",
"knowledge/*.yaml",
"knowledge/_schemas/*.json",
"agents/fence/*.md",
"agents/templates/*",
"../NOTICE",
"_bundled/opencode_LICENSE",
]
[tool.pytest.ini_options]
testpaths = [
"tests",
]
python_files = ["test_*.py"]
addopts = "-ra"
markers = [
"parity: parity (new-path vs old-path) tests — can be slow",
"red_team: adversarial tests; every one MUST pass",
"regression_gate: proven-optimization false-positive tests",
"dashboard: exit-dashboard contract tests",
"slow: runs > 10s; excluded from default CI",
]
[tool.black]
line-length = 120
target-version = ["py38", "py310"]
[tool.flake8]
max-line-length = 120
extend-ignore = ["E203", "W503"]