Guidelines for using AI tools

The person submitting an issue or PR is responsible for its content, regardless of whether AI tools were used in its creation. Generative AI tools can produce output quickly, but discretion, good judgment, and critical thinking are the foundation of all good contributions. We value good code, concise accurate documentation, and well scoped PRs without unneeded code churn.

Considerations for success

Authors must review the work done by AI tooling in detail to ensure it actually makes sense before proposing it as a PR or filing it as an issue.

We expect PR authors and those filing issues to be able to explain their proposed changes in their own words.

Disclosure of the use of AI tools in the PR description is appreciated, while not required. Be prepared to explain how the tool was used and what changes it made.

Whether you are using AI tools or not, keep the following principles in mind for the quality of your contribution:

  • Consider whether the change is necessary

  • Make minimal, focused changes

  • Follow existing coding style and patterns

  • Write tests that exercise the change

  • Keep backwards compatibility with prior releases in mind. Existing tests may be ensuring specific API behaviors are maintained.

Pay close attention to AI generated recommendations for testing changes. Provide input about Python’s testing principles when guiding an AI model. Always review the output before opening a pull request or issue, including proposed PR or issue titles and descriptions.

Acceptable uses

Some of the acceptable uses of generative AI include:

  • Assistance with writing comments, especially in a non-native language

  • Gaining understanding of existing code

  • Supplementing contributor knowledge for code, tests, and documentation

Unacceptable uses

Maintainers may close issues and PRs that are not useful or productive, regardless of whether AI tools were used or not.

If a contributor repeatedly opens unproductive issues or PRs, they may be blocked from contributing to the project because it is disruptive and disrespectful of the maintainers time.

It is not acceptable to alter or bypass existing tests, or remove desired functionality, in order to make a failing test pass. Such changes are not a real fix.