Thank you for your interest in contributing! This guide will help you get started.
- Code of Conduct
- How Can I Contribute?
- Development Setup
- Pull Request Process
- Coding Standards
- Reporting Bugs
- Suggesting Features
This project follows the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code. Report unacceptable behavior via GitHub Issues.
Look for issues labeled good first issue or help wanted. These are specifically curated for new contributors.
- New Model Support — Adding tokenizers and pricing for new LLM providers (Google Gemini, Mistral, etc.)
- UI/UX Improvements — Better prompt diff views, syntax highlighting, dark mode
- Prompt Refinement Strategies — New refinement templates and techniques
- Testing — Expanding test coverage for edge cases
- Documentation — Improving guides, adding examples, translating docs
- Cost Data — Keeping model pricing up to date
See localsetup.md for complete environment setup instructions.
Quick version:
# Backend
cd backend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements-dev.txt # includes pytest, black, ruff
cp .env.example .env
# Frontend
cd frontend
npm install-
Fork the repository and create a branch from
main:git checkout -b feature/your-feature-name
-
Make your changes following the coding standards.
-
Write tests for any new functionality:
# Backend cd backend && pytest # Frontend cd frontend && npm test
-
Lint your code:
# Backend ruff check . black --check . # Frontend npm run lint
-
Commit with a clear message following Conventional Commits:
feat: add Gemini model token counting fix: correct GPT-4o pricing calculation docs: update API endpoint documentation -
Push and open a Pull Request against
main. -
Describe your changes in the PR body:
- What does this PR do?
- How was it tested?
- Any breaking changes?
-
A maintainer will review your PR. Address any feedback, and it will be merged once approved.
- Formatter: Black (line length 100)
- Linter: Ruff
- Type Hints: Required for all function signatures
- Docstrings: Google style for public functions
- Testing: pytest with at least 80% coverage for new code
# Good
def count_tokens(text: str, model: str = "gpt-4o") -> int:
"""Count the number of tokens in text for a given model."""
...
# Bad
def count_tokens(text, model="gpt-4o"):
...- Formatter: Prettier
- Linter: ESLint
- Components: Functional components with hooks
- Naming: PascalCase for components, camelCase for functions/variables
- No commented-out code in PRs
- No
console.logorprintstatements in production code - Environment variables for all secrets — never hardcode API keys
Open a GitHub Issue with:
- Summary — One-line description
- Steps to Reproduce — Numbered steps to trigger the bug
- Expected Behavior — What should happen
- Actual Behavior — What actually happens
- Environment — OS, Python version, Node version, browser
- Screenshots/Logs — If applicable
Open a GitHub Issue with the enhancement label:
- Problem Statement — What problem does this solve?
- Proposed Solution — How should it work?
- Alternatives Considered — Other approaches you thought of
- Additional Context — Mockups, references, examples
Open a Discussion on GitHub or comment on a relevant Issue. We're happy to help!