Thanks for your interest in improving the framework. This guide covers how to report issues, submit changes, and the license your contributions fall under.
By participating in this project you agree to abide by our Code of Conduct.
Before we can merge your contribution, you must sign the Santander Open Source Contributor License Agreement. The first time you open a pull request, the CLA Assistant bot will comment with a link and instructions; signing is a one-time action that covers all your future contributions to this repository. All contributions are made under the project's Apache License 2.0.
- Search the existing issues first to avoid duplicates.
- Open a Bug report or Feature request using the issue templates.
- For security vulnerabilities, do not open a public issue — follow SECURITY.md (private email or GitHub Security Advisory).
- Never include secrets, API keys, internal URLs, or proprietary content.
- Fork the repository and create a topic branch from
main. - Make your change in a focused commit set; follow Conventional Commits for messages.
- Run the checks locally (
ruff check .,black --check .,mypy src,pytest) and add or update tests for new behaviour. - Open a PR against
main, fill in the PR template, and link any related issue (e.g.Closes #123). - Ensure the CLA check is green and CI passes. A maintainer
(
@SantanderAI/mech-gov-framework-maintainers) will review.
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/macOS
# source .venv/bin/activate
pip install -e ".[dev]"pytestThe test suite uses the offline mock LLM provider, so it runs with no network
access and no credentials.
- Keep the core vendor-neutral. Nothing under
src/mech_gov/(outsidellm/providers/aws.pyand thebedrock_*/sagemaker_*modules) may import a cloud SDK. New backends belong insrc/mech_gov/llm/providers/and must be registered insrc/mech_gov/llm/registry.py. - No secrets in the repo. Pass credentials via environment variables.
- Add tests for new behaviour and keep them runnable offline.
- Style: follow the existing code style; keep public APIs documented.
- Implement
mech_gov.llm.base.LLMInterfacein a new module undersrc/mech_gov/llm/providers/. - Expose a
build(config: dict) -> LLMInterfaceentry point. - Register it in
registry.py(eagerly if dependency-free, lazily if it needs an optional dependency). - Add a test using a fake/stubbed transport where possible.