diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 03c0b8a6c..a62f8763f 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -3,3 +3,7 @@ - [ ] Update docstrings/[documentation](https://github.com/openforcefield/openff-toolkit/tree/main/docs), if applicable - [ ] [Lint](https://docs.openforcefield.org/projects/toolkit/en/stable/users/developing.html#style-guide) codebase - [ ] Update [changelog](https://github.com/openforcefield/openff-toolkit/blob/main/docs/releasehistory.md) + +See our [AI Policy](https://github.com/openforcefield/openff-toolkit/blob/main/AI_POLICY.md). Please indicate whether LLMs or other AI-powered tools (beyond simple IDE use cases) were used in this contribution: +- [ ] No +- [ ] Yes: [If yes, please provide details here] diff --git a/AI_POLICY.md b/AI_POLICY.md new file mode 100644 index 000000000..b898d9843 --- /dev/null +++ b/AI_POLICY.md @@ -0,0 +1,28 @@ +# AI Policy + +## OpenFF Ecosystem Policies + +The Open Force Field Initiative reserves the right to reject contributions if we judge that they do not follow the spirit of these principles. +The following policies hold for all repositories in the OpenFF ecosystem: + +1. Repository Maintainers always reserve the right to make exceptions to any of the following rules on a case-by-case basis. +2. LLMs use must be always disclosed. At minimum in the PR description, but preferably reflected in a “Co-Authored-By” line in the commit. +3. LLMs may always be used for translation (disclosing LLM use is important here, so that maintainers can be more considerate when encountering translation inaccuracies). +4. All content must have a human identified as being accountable for the contribution. The human takes responsibility for the contribution and stands by its correctness. No agent-only commits. +5. Code authors must retain full authorship for any contributed code and contributions must be covered by the [MIT license](https://github.com/openforcefield/openff-toolkit/blob/main/LICENSE), and [Developer Certificate of Origin](https://developercertificate.org/). + +## Policies specific to this repository + +The following policies are specific only to this repository, and decided by the repository's maintainer(s). + +In this repository, it is either acceptable (✅) or not acceptable (❌) to use LLMs for: + +- ✅️ Generating content that only the author sees, but affects their work (searching repositories, asking questions, finding bugs, self-review, linting). +- ✅️ Generating code that is shared, but not committed to the code base (e.g. Minimally Reproducible Examples in issue text). +- Generating content which the human author has: + +| | Code | Docs | PRs & Issues | Replies to humans | +|--------------------------------------------------------------|:----:|:----:|:------------:|:-----------------:| +| Read thoroughly and understands every line before submission | ✅️ | ✅️ | ✅️ | ❌ | +| Checked for obvious issues before submission | ❌ | ❌ | ❌ | ❌ | +| Not reviewed before submission | ❌ | ❌ | ❌ | ❌ | diff --git a/docs/releasehistory.md b/docs/releasehistory.md index 2bd396cc9..1ef4d104d 100644 --- a/docs/releasehistory.md +++ b/docs/releasehistory.md @@ -25,6 +25,9 @@ Releases follow the `major.minor.micro` scheme recommended by [PEP440](https://w ### Improved documentation and warnings +- [PR #2248](https://github.com/openforcefield/openff-toolkit/pull/2248): Add initial AI policy. + + ## 0.19.0 ### Behavior changes diff --git a/openff/toolkit/topology/molecule.py b/openff/toolkit/topology/molecule.py index d50301b83..862fbf30f 100644 --- a/openff/toolkit/topology/molecule.py +++ b/openff/toolkit/topology/molecule.py @@ -1170,7 +1170,14 @@ def to_dict(self) -> dict: # https://mypy.readthedocs.io/en/latest/typed_dict.html#typeddict molecule_dict: dict[ str, - str | bytes | dict[str, Any] | list[str] | list[bytes] | list[HierarchyElement] | list[dict[str, Any]] | None, + str + | bytes + | dict[str, Any] + | list[str] + | list[bytes] + | list[HierarchyElement] + | list[dict[str, Any]] + | None, ] = dict() molecule_dict["name"] = self._name