Skip to content

AI and LLM policy

The purpose of this document is to gradually boundaries about the use of LLMs, in order to avoid licensing conflicts and low effort contributions. We also want to be transparent about the way we use those tools, and about the way we expect others to do so when they contribute to this project. Keep in mind that those tools evolve rapidly, so we might have to frequently update this policy.

Logos, icons, and other assets

Using LLMs to generate assets is strictly prohibited. Our branding should reflect the purpose of the project, and there is clearly no room for licensing ambiguities in this case. We also have very strict rules regarding iconography (see src/icons/README.md).

Documentation

Using LLMs for extensive documentation or even for generating simple docstrings is strongly discouraged. Documentation should help clarify things that are not apparent. In our experience, LLMs tend to do the exact opposite. They state the obvious and pollute the project with noise. Using them for a final pass to catch typos and other simple mistakes should be fine.

Testing

Using LLMs to write tests is also discouraged. We prefer adding tests selectively, instead of blindly try to increase our test coverage. The "why" and "how" is more important than quantity.

Core

Code contributions fully generated by AI tools will be rejected. The core of this project is written by hand with minimal AI assistance, and we want to keep it that way to maintain ownership and control.

Changes partially assisted by AI tools are allowed with conditions. They should ideally be marked by adding an "Assisted-by: MODELS" label at the end of the pull requests. MODELS should be replaced by a comma-separated list of the utilized models. Using AI to review changes to catch minor errors or fix typos before submitting a PR does not require notice. You should always review any AI generated changes, and make sure that they don't introduce any bugs, or reduce the quality of the code.

Contributors should always ensure that their work does not violate any copyright laws. This also applies to AI generated code. Check the tool’s terms of use, to make sure you are not using copyrighted sources. You are advised to use models trained on content with compatible licensing.

Those guidelines depend on various factors, so there is a huge gray area. As a general rule, if your contribution does not increase your understanding of the domain, and/or decreases the amount of confidence that you have regarding the way the app behaves, you should be alarmed.

Reviews

We do not use LLMs to review contributions, but we might use various models from time to time to review the whole project. The purpose is to find random issues that we missed (bugs, typos, misleading naming etc). Although LLMs can produce a lot of false positives, they can also quickly identify problems that would normally require a very thorough pass to catch them.

Translations and dev tools

Those are the areas where we encourage the use LLMs. Translations make the project widely accessible, and we don't have the capacity to maintain user generated translations yet. They are also isolated, so replacing or removing them won't affect the core product. Using LLMs to update or add new languages under src/lang without further modifications is accepted, but human intervention is required to make sure that the changes don't break existing functionality, or do not reduce the quality of existing translations.

The same is also true for our dev tools under src/build. They usually contain throw-away code, since we are mainly interested in the artifacts they produce, but contributions should always be reviewed and tested, regardless of the way they were generated.

Since we did not produce those files for the most part, I don't think we are allowed to license them. Even marking them as public domain requires owning the intellectual rights. Treating files under src/lang and src/build as source available seems to be the safest option for now.

Pull requests fully generated by AI tools should be marked by adding a "Generated-by: MODELS" label at the end of the pull requests.