diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index d0aa96a65b..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -name: Bug report -about: Something isn't working as expected -title: '' -labels: bug -assignees: '' - ---- - - -## Prerequisites -Please make sure to check off these prerequisites before submitting a bug report. -- [ ] Test that the bug appears on the current version of the master branch. Make sure to include the commit hash of the commit you checked out. -- [ ] Check that the issue hasn't already been reported, by checking the currently open issues. -- [ ] If there are steps to reproduce the problem, make sure to write them down below. -- [ ] If relevant, please include the hls4ml project files, which were created directly before and/or after the bug. - -## Quick summary -Please give a brief and concise description of the bug. - -## Details -Please add to the following sections to describe the bug as accurately as possible. - -### Steps to Reproduce -Add what needs to be done to reproduce the bug. Add *commented* code examples and make sure to include the original model files / code, and the commit hash you are working on. - -1. Clone the hls4ml repository -2. Checkout the master branch, with commit hash: [...] -3. Run conversion [...] on model file with code [...] -4. [Further steps ...] - -### Expected behavior -Please add a brief description of what you expected to happen. - -### Actual behavior -Describe what actually happens instead. - -## Optional - -### Possible fix -If you already know where the issue stems from, or you have a hint please let us know. - -### Additional context -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000..b1cf37e6af --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,123 @@ +name: Bug report +description: Something in hls4ml is not working as expected +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to file a bug report. + + Before filing, please check that the problem still occurs on the current `main` branch, and search + the [open issues](https://github.com/fastmachinelearning/hls4ml/issues) to see whether it has already + been reported. For questions and general problems that are probably not bugs, use + [Discussions](https://github.com/fastmachinelearning/hls4ml/discussions/categories/general) instead. + + - type: textarea + id: summary + attributes: + label: Quick summary + description: A brief and concise description of the bug. + validations: + required: true + + - type: input + id: version + attributes: + label: hls4ml version + description: Release number, or the commit hash if you are working from a checkout. + placeholder: "1.1.0, or commit abc1234" + validations: + required: true + + - type: dropdown + id: frontend + attributes: + label: Frontend + description: How the model enters hls4ml. + options: + - Keras v3 + - Keras v2 + - PyTorch + - ONNX / QONNX + - Other or not applicable + validations: + required: true + + - type: dropdown + id: backend + attributes: + label: Backend + options: + - Vitis + - Vivado + - VivadoAccelerator + - Quartus + - oneAPI + - Catapult + - Libero + - SymbolicExpression + - Other or not applicable + validations: + required: true + + - type: dropdown + id: io_type + attributes: + label: io_type + options: + - io_parallel + - io_stream + - Both + - Not applicable + validations: + required: true + + - type: input + id: tool_version + attributes: + label: HLS tool and version + description: Only if the bug involves synthesis. Write "not applicable" if it does not. + placeholder: "Vitis HLS 2024.1" + + - type: textarea + id: reproducer + attributes: + label: Steps to reproduce + description: | + The smallest script that shows the problem, plus how you ran it. Include the model definition + inline where possible, rather than attaching a large file. + render: python + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected behaviour + validations: + required: true + + - type: textarea + id: actual + attributes: + label: Actual behaviour + description: Include the full error message or the incorrect output, not a paraphrase. + validations: + required: true + + - type: textarea + id: context + attributes: + label: Possible fix or additional context + description: Optional. If you know where the problem comes from, or have a hint, tell us here. + + - type: checkboxes + id: ai_disclosure + attributes: + label: AI assistance + description: | + See the [contributing guidelines](https://github.com/fastmachinelearning/hls4ml/blob/main/CONTRIBUTING.md#use-of-ai-tools). + Anything quoted here must come from a run you actually performed. + options: + - label: An AI tool helped produce this report, and I have checked its content myself. + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 907ac6db49..e931be128a 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,8 @@ blank_issues_enabled: false contact_links: - - name: Talk and engage with the comunity + - name: Question or general problem url: https://github.com/fastmachinelearning/hls4ml/discussions/categories/general - about: Check out the GitHub discusisons page for hls4ml. This is the best way to get in touch with us. In particular, if you have a question about hls4ml or a general problem that is likely not a bug. + about: Ask on the discussions page. This is the best way to get in touch with us, in particular for a question about hls4ml or a problem that is likely not a bug. + - name: Propose an idea + url: https://github.com/fastmachinelearning/hls4ml/discussions/categories/ideas + about: Float a feature idea with the community before opening a feature request or an RFC. diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml new file mode 100644 index 0000000000..2950cb7dec --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -0,0 +1,47 @@ +name: Documentation issue +description: Something in the documentation is wrong, missing or unclear +labels: ["documentation"] +body: + - type: markdown + attributes: + value: | + This covers the documentation at [hls4ml.org](https://fastmachinelearning.org/hls4ml/), the + docstrings, and the guidance files in the repository. Corrections are welcome as pull requests too — + you do not have to file an issue first. + + - type: input + id: location + attributes: + label: Where + description: Page URL, file path, or the function whose docstring is affected. + validations: + required: true + + - type: dropdown + id: kind + attributes: + label: Kind of problem + options: + - Incorrect — it says something that is not true + - Missing — the topic is not documented + - Unclear — correct but hard to follow + - Outdated — describes behaviour that has since changed + validations: + required: true + + - type: textarea + id: details + attributes: + label: Details + description: What it says now, and what it should say instead. + validations: + required: true + + - type: checkboxes + id: ai_disclosure + attributes: + label: AI assistance + description: See the [contributing guidelines](https://github.com/fastmachinelearning/hls4ml/blob/main/CONTRIBUTING.md#use-of-ai-tools). + options: + - label: An AI tool helped produce this report, and I have checked its content myself. + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 1739f9d99f..0000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for hls4ml -title: '' -labels: enhancement -assignees: '' - ---- - -## Prerequisites -Please talk to us before creating a new feature request. So that you can check that the idea is not already in active development. - -You can present your idea over here at the GitHub discussions page for hls4ml: https://github.com/fastmachinelearning/hls4ml/discussions/categories/ideas - -Even if an idea is already being worked on you can still create a feature request, -if you would like to open a discussion about the feature or want to contribute to it. - -## Details -Please add to the following sections to describe the feature as accurately as possible. - -### New behavior -Please add a brief and concise description of what you would like to happen in hls4ml in the future. - -### Motivation -Please tell us why this feature is important to the community. - -### Parts of hls4ml being affected -Please describe which parts of hls4ml would be affected by this feature. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000000..9f85d35c91 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,64 @@ +name: Feature request +description: Suggest a new capability for hls4ml +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Please consider raising the idea in + [Discussions](https://github.com/fastmachinelearning/hls4ml/discussions/categories/ideas) first, so + you can find out whether it is already being worked on. A feature request is still welcome afterwards, + as the place to track the work. + + If you are proposing a design rather than requesting a capability — something with a migration path, + a new configuration surface, or changes across several components — use the Plan / RFC template + instead. + + - type: textarea + id: problem + attributes: + label: Problem + description: What can you not do today, and why does it matter for real hls4ml users? + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: Proposed behaviour + description: | + What hls4ml should do instead. If it adds a user-facing surface — a config key, a Strategy, an + `io_type`, an API argument — name it here. + validations: + required: true + + - type: textarea + id: scope + attributes: + label: Parts of hls4ml affected + description: Frontends, backends and components you expect this to touch. + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: Optional. Workarounds you tried, and why they are not enough. + + - type: checkboxes + id: contribution + attributes: + label: Contribution + options: + - label: I am willing to work on this myself. + required: false + + - type: checkboxes + id: ai_disclosure + attributes: + label: AI assistance + description: See the [contributing guidelines](https://github.com/fastmachinelearning/hls4ml/blob/main/CONTRIBUTING.md#use-of-ai-tools). + options: + - label: An AI tool helped produce this request, and I have checked its content myself. + required: false diff --git a/.github/ISSUE_TEMPLATE/performance_issue.yml b/.github/ISSUE_TEMPLATE/performance_issue.yml new file mode 100644 index 0000000000..268757295b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/performance_issue.yml @@ -0,0 +1,96 @@ +name: Performance or resource usage issue +description: A model synthesizes, but is slower or larger than expected +labels: ["performance"] +body: + - type: markdown + attributes: + value: | + Use this for latency, initiation interval, resource usage or clock frequency that is worse than you + expect. The generated design has to build for this to be actionable — if it does not, file a bug + report instead. + + Please give numbers rather than impressions, and say which stage they come from. C synthesis reports + estimates; co-simulation gives true latency; logic synthesis gives true resources. + + - type: textarea + id: summary + attributes: + label: Quick summary + description: What is worse than expected, and compared to what? + validations: + required: true + + - type: input + id: version + attributes: + label: hls4ml version + placeholder: "1.1.0, or commit abc1234" + validations: + required: true + + - type: dropdown + id: backend + attributes: + label: Backend + options: + - Vitis + - Vivado + - VivadoAccelerator + - Quartus + - oneAPI + - Catapult + - Libero + - Other + validations: + required: true + + - type: input + id: tool_version + attributes: + label: HLS tool and version + placeholder: "Vitis HLS 2024.1" + validations: + required: true + + - type: input + id: part + attributes: + label: Part and clock period + placeholder: "xcvu13p-flga2577-2-e, 5 ns" + validations: + required: true + + - type: textarea + id: config + attributes: + label: Model and configuration + description: | + Layer shapes, precision, `io_type`, Strategy and reuse factor — ideally the script that produced + the project. + render: python + validations: + required: true + + - type: textarea + id: numbers + attributes: + label: Numbers observed and expected + description: | + Latency, initiation interval, LUT, FF, DSP, BRAM and achieved clock, as applicable. + value: | + | Measurement | Observed | Expected | Source (csynth / cosim / logic synth) | + |---|---|---|---| + | | | | | + validations: + required: true + + - type: checkboxes + id: ai_disclosure + attributes: + label: AI assistance + description: | + See the [contributing guidelines](https://github.com/fastmachinelearning/hls4ml/blob/main/CONTRIBUTING.md#use-of-ai-tools). + All numbers above must come from runs you actually performed. + options: + - label: An AI tool helped produce this report, and I have checked its content myself. + required: false diff --git a/.github/ISSUE_TEMPLATE/rfc.yml b/.github/ISSUE_TEMPLATE/rfc.yml new file mode 100644 index 0000000000..56e0ee860b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/rfc.yml @@ -0,0 +1,73 @@ +name: Plan / RFC +description: Propose a design before implementing it +labels: ["rfc"] +title: "[RFC] " +body: + - type: markdown + attributes: + value: | + Use this for changes worth agreeing on before code exists: a new backend or frontend, a change to the + intermediate representation or optimizer machinery, a new configuration axis, or anything that + changes behaviour for existing users. + + The contributing guidelines ask you to discuss new functionality with us first. This is that + discussion, in a form we can track and refer back to. + + - type: textarea + id: motivation + attributes: + label: Motivation + description: The problem this solves, and who has it. Include the current behaviour you find inadequate. + validations: + required: true + + - type: textarea + id: design + attributes: + label: Proposed design + description: | + How it would work. Name the user-facing surface (config keys, API, generated code) and the internal + mechanism (passes, templates, types) as concretely as you can. + validations: + required: true + + - type: textarea + id: scope + attributes: + label: Components affected + description: | + Frontends, backends and parts of the tree. Say explicitly what happens on the backends that do not + support this, if it is not universal. + validations: + required: true + + - type: textarea + id: compatibility + attributes: + label: Compatibility and migration + description: | + Does existing user code, configuration or generated output change? If so, what do users have to do? + Write "no change" if there is none. + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: Designs you rejected and why. A rejected alternative is often the most useful part of an RFC. + + - type: textarea + id: plan + attributes: + label: Implementation plan + description: Optional. How this would land — in one pull request or several, and in what order. + + - type: checkboxes + id: ai_disclosure + attributes: + label: AI assistance + description: See the [contributing guidelines](https://github.com/fastmachinelearning/hls4ml/blob/main/CONTRIBUTING.md#use-of-ai-tools). + options: + - label: An AI tool helped produce this proposal, and I have checked its content myself. + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index e7565c2e11..af8a14f8bb 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,38 +1,164 @@ -# Description +## Description -> :memo: Please include a summary of the change. -> -> * Please also include relevant motivation and context. -> * List any dependencies that are required for this change. + -For a new feature or function, please create an issue first to discuss it -with us before submitting a pull request. +Fixes # -Note: Please delete options that are not relevant. +## Type of change -- [ ] Bug fix (non-breaking change that fixes an issue) -- [ ] Documentation update -- [ ] New feature (non-breaking change which adds functionality) -- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) -- [ ] A new research paper code implementation -- [ ] Other (Specify) +- [ ] Bug fix (non-breaking) +- [ ] New feature (non-breaking) +- [ ] Breaking change (existing configs, APIs or generated code behave differently) +- [ ] New frontend / backend +- [ ] New layer / operator support +- [ ] New configuration option — a new `io_type`, Strategy, or config attribute +- [ ] Research paper implementation +- [ ] Documentation +- [ ] Build, CI or tooling +- [ ] Refactor / cleanup (no functional change) + +## Affected areas + + + +**Backends:** +- [ ] +- [ ] Backend-independent (core IR, optimizer, `hls4ml.model`) + +**Frontends:** +- [ ] +- [ ] Not related to a frontend + +**Components:** +- [ ] IR (layers + model graph) / optimizer passes +- [ ] C++ templates / HLS sources under `hls4ml/templates/` +- [ ] Profiling, reporting or the CLI +- [ ] Packaging, build or CI + +## Configurations affected and exercised + + + +| Backend | `io_type` | Strategy | Verified | +|---|---|---|---| +| | | | | +| | | | | + +**New configuration axis introduced by this PR** (if any): + +## Impact on generated HLS + + + +- [ ] This PR **does not change** the generated HLS for existing models. +- [ ] This PR **changes** the generated HLS. Numbers below. + +**Numerical behaviour:** + +| Model / test | Backend & version | Part | Latency (cycles) | II | LUT | FF | DSP | BRAM | +|---|---|---|---|---|---|---|---|---| +| before | | | | | | | | | +| after | | | | | | | | | + + ## Tests -> :memo: Please describe the tests that you ran to verify your changes. -> -> * Provide instructions so we can reproduce. -> * Please also list any relevant details for your test configuration. + + +**Test configuration** (OS, Python, ML framework version, HLS tool version): -**Test Configuration**: +## Breaking changes and migration + + + +**What breaks:** + +**How users migrate:** + +## AI assistance disclosure + + + +- [ ] **None** — no AI tool was used. +- [ ] **Assisted** — completion, refactoring, docstrings, tests; design and code are mine. +- [ ] **Substantial** — significant AI-generated portions, reviewed and edited by me. +- [ ] **Agentic** — produced largely end-to-end by an AI agent from my prompts. + +Tool(s) and model(s): + +Where it was used: + +If anything other than *None* is ticked, confirm all of the following: + +- [ ] **I am the author of this contribution and take full responsibility for + it.** I have read and understood every line and can explain and defend it + in review. +- [ ] I verified the generated code against real hls4ml and HLS semantics — + no invented APIs, config keys, pragmas or citations. +- [ ] All numbers, logs and test results quoted in this PR come from runs I + actually performed, not from agent output. +- [ ] I have the right to submit this work under the project's licence, and to + my knowledge it does not reproduce third-party code that would conflict + with it. +- [ ] No AI tool is credited as an author in any commit in this branch. + + ## Checklist -- [ ] I have read the [guidelines for contributing](https://github.com/fastmachinelearning/hls4ml/blob/main/CONTRIBUTING.md). -- [ ] I have commented my code, particularly in hard-to-understand areas. -- [ ] I have made corresponding changes to the documentation. -- [ ] My changes generate no new warnings. -- [ ] I have installed and run `pre-commit` on the files I edited or added. -- [ ] I have added tests that prove my fix is effective or that my feature works. +**Required:** +- [ ] I have read the [contributing guidelines](https://github.com/fastmachinelearning/hls4ml/blob/main/CONTRIBUTING.md). +- [ ] I installed and ran `pre-commit` on the files I edited. +- [ ] I added tests under `test/pytest` covering this change (a bug fix should + add a test that fails on `main` and passes here). +- [ ] I self-reviewed the full diff and it contains no leftover debug code, + commented-out blocks or unrelated changes. +- [ ] The AI assistance disclosure above is complete and accurate. + +**If applicable:** +- [ ] Documentation under `docs/` updated. +- [ ] No new build or synthesis warnings. +- [ ] Public API / config schema changes are documented. + +## Release note + + + +```release-note + +``` diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000000..82eb19e9b5 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,65 @@ +# Working on hls4ml as an AI agent + +This file is for AI coding agents. Humans should read [CONTRIBUTING.md](CONTRIBUTING.md), which this file +follows; where the two appear to disagree, CONTRIBUTING.md wins. + +hls4ml compiles trained neural networks into HLS projects for FPGAs. The Python package is in `hls4ml/`, its +C++ kernel sources in `hls4ml/templates/`, tests in `test/pytest/`, documentation in `docs/`. + +Conversion is a pipeline, and almost every change belongs to exactly one stage of it: + +``` +frontend converter -> model graph -> optimizer passes -> code templates -> writer +hls4ml/converters/ hls4ml/model/ hls4ml/model/optimizer/, hls4ml/backends/*/passes/ hls4ml/writer/ +``` + +## Ground rules + +**Verify, do not assume.** hls4ml has several backends and they do not share conventions. A pragma, config +field, C++ class or attribute that exists for one backend may not exist for another. Read the file you are +about to rely on. Never invent an API, configuration key, pragma or citation. + +**Numbers come from runs you performed.** Do not quote latency, resource usage or accuracy that you did not +measure. If you did not run something, say so plainly. C synthesis reports estimates; co-simulation gives +true latency; logic synthesis gives true resource usage. Do not present an estimate as a measurement. + +**Match the surrounding code.** Comment density, naming and idiom should look like the file you are editing. +Do not add narration, banner comments, or explanations of what the next line does. Generated verbosity is a +common reason contributions are sent back. + +**Stay inside the requested scope.** Do not reformat unrelated code, rename things you were not asked to +rename, or fix unrelated problems in the same change. If you notice something else worth doing, mention it +rather than doing it. + +**Do not add dependencies casually.** The runtime dependency list is deliberately small and most extras are +optional. A new hard dependency needs a reason, and the default answer is an optional extra. + +## Authorship and disclosure + +Do not add `Co-authored-by` or any similar trailer crediting an AI tool in a commit message. Authorship +carries copyright, which a tool cannot hold, and such trailers distort contributor statistics. Some harnesses +add them automatically; do not. + +Disclosure belongs in the pull request description, which has a section for it. Fill in the tool and model +honestly, and state where assistance was used. + +The pull request template contains attestations that a human contributor makes about their own review and +rights. **Do not tick those on the human's behalf.** Fill in the factual parts, leave the attestations for +the person opening the pull request, and tell them what remains to be confirmed. + +## Before proposing a change + +- Run `pre-commit run --files ` and commit what it changes. It formats Python and C++ and will + reject the pull request otherwise. +- Add or update a test under `test/pytest/`. For a bug fix, the test should fail without the fix. +- Check the whole diff yourself, hunk by hunk, before presenting it. Remove debug output, commented-out code + and stray changes. +- Do not commit generated HLS projects, model files or logs. +- New functionality is discussed before it is built. If there is no issue for it, propose one rather than + opening a large unsolicited pull request. + +## Reporting back + +State what you actually did, including what you could not do. If a test fails, say so and show the output. If +you skipped a step, say which. Do not describe work as complete until it is, and do not summarize an intended +change as though it had been made. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3bd7b1e4f2..c700676755 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,11 +21,36 @@ Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for 1. Install and run `pre-commit` on the files that you have edited. 1. Submit the pull request to the [main](https://github.com/fastmachinelearning/hls4ml) branch. +Pull requests are **squash-merged**, so the individual commits on your branch are not preserved. +You do not need to curate them, but the pull request title and description become the permanent record of +the change in the project history, so please write them with that in mind. + ## Code Reviews We will review your contribution and, if any additional fixes or modifications are necessary, may provide feedback to guide you. When accepted, your pull request will be merged to the repository. +## Use of AI tools + +Usage of AI tools in development for hls4ml is generally allowed. However, we require all contributors to adhere to the following guidelines: + +- Contributed code must still be your own original work. It is your responsibility to make sure that the generated code is compatible with the [hls4ml license](LICENSE), [these Contributor Guidelines](CONTRIBUTING.md), and that it doesn't violate the license of either the AI tool or any third-party license obligations. +- The AI tool name and version must be disclosed in the pull request description. The pull request template has a section for this. +- Ensure you have reviewed and fully understand the generated code and be prepared to explain the reasoning behind it during review. +- AI coding agents tend to be very verbose. Please review generated code and especially comments and trim unnecessary clutter. +- Numbers, logs and test results quoted in a pull request or issue must come from runs you actually performed, not from tool output that was never executed. +- Do not spam the repository with issues and pull requests for problems that have no likelihood of appearing in real world applications. Focus instead on fixing or improving hls4ml for real users. + +Do not credit an AI tool as an author of a commit. Authorship carries copyright, which a tool cannot hold, and +such trailers distort contributor statistics. Some assistants add `Co-authored-by` trailers automatically; +remove them before opening the pull request. Disclosure belongs in the pull request description, where a +reviewer will read it. + +If you use an AI agent to work on hls4ml, point it at [`AGENTS.md`](AGENTS.md) in the repository root. It +states the same expectations in a form agents read, and it will save you review comments. + +Submissions that appear unreviewed or copied directly from an AI tool without proper understanding may be requested to be revised or declined. + ## Code of Conduct In the interest of fostering an open and welcoming environment, we as diff --git a/MANIFEST.in b/MANIFEST.in index e3ee5ded3c..cf06df0be9 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,4 @@ -include LICENSE README.md CONTRIBUTING.md CITATION.cff pyproject.toml .clang-format +include LICENSE README.md CONTRIBUTING.md AGENTS.md CITATION.cff pyproject.toml .clang-format graft example-models graft test graft contrib