W
Whisper API
Navigation

Thank you for considering contributing to the Whisper API! We welcome all contributions that improve the project — from bug fixes and documentation to new features and performance improvements.


Ways to Contribute

TypeDescription
Bug ReportsFound something broken? Open an issue with reproduction steps
Feature RequestsHave an idea? Share it as a feature request issue
DocumentationImprove guides, fix typos, add examples
Code FixesFix bugs, improve error handling, optimize performance
New FeaturesImplement new endpoints, formats, or integrations
TestsWrite unit tests, integration tests, or end-to-end tests

Development Setup

    1. Fork the repository on GitHub

    2. Clone your fork:

      git clone https://github.com/YOUR_USERNAME/whisper.api.git
      cd whisper.api
    3. Create a virtual environment:

      python -m venv .venv
      source .venv/bin/activate
    4. Install dependencies:

      pip install -r requirements.txt
    5. Set up environment:

      cp .env.example .env
    6. Build the whisper binary:

      chmod +x setup_whisper.sh
      ./setup_whisper.sh
    7. Initialize the database:

      python -m app.cli init
      python -m app.cli create --name "DevToken"
    8. Run the dev server:

      uvicorn app.main:app --host 0.0.0.0 --port 7860 --reload

Running Tests

# Run the full test suite
pytest

# Run with coverage report
pytest --cov=app --cov-report=term-missing

# Run a specific test file
pytest app/tests/test_api.py -v

Submitting Changes

    1. Create a feature branch:

      git checkout -b feature/your-feature-name
    2. Make your changes and commit with clear messages:

      git add .
      git commit -m "feat: add support for FLAC file uploads"
    3. Format your code with Black:

      black app/
    4. Run tests to make sure nothing is broken:

      pytest
    5. Push to your fork:

      git push origin feature/your-feature-name
    6. Open a Pull Request on GitHub with a clear description of what your changes do


Reporting Bugs

When filing a bug report, please include:

FieldDescription
Steps to ReproduceExact commands or actions that trigger the bug
Expected ResultWhat you expected to happen
Actual ResultWhat actually happened (include error messages)
EnvironmentOS, Python version, model used
LogsRelevant server logs (server.log)

Requesting Features

When requesting a new feature, include:

FieldDescription
DescriptionClear description of the feature
Use CaseWhy you need this feature
AlternativesAny workarounds you’ve considered

Project Structure

whisper.api/
├── app/
│   ├── api/
│   │   ├── endpoints/
│   │   │   ├── listen.py      # POST /v1/listen & WS /v1/listen
│   │   │   ├── models.py      # GET /v1/models
│   │   │   └── auth.py        # POST /v1/auth/test-token
│   │   └── models/            # Pydantic request/response schemas
│   ├── core/
│   │   ├── config.py          # Settings (env vars)
│   │   ├── database.py        # SQLAlchemy setup
│   │   ├── errors.py          # Error handlers
│   │   └── models/            # Database models (ApiKey)
│   ├── utils/                 # Helper functions
│   ├── tests/                 # Test suite
│   ├── cli.py                 # Offline key management CLI
│   └── main.py                # FastAPI app entry point
├── binary/                    # whisper-cli binary (built from source)
├── models/                    # GGML model files (.bin)
├── docs/                      # Markdown documentation
├── examples/                  # Example scripts
├── setup_whisper.sh           # Build script for whisper.cpp
├── requirements.txt           # Python dependencies
├── Dockerfile                 # Container build
└── .env.example               # Environment template

Code Style

  • Formatter: Black (default settings)
  • Type Hints: Use Python type hints where possible
  • Docstrings: Use triple-quoted docstrings for public functions
  • Commits: Use Conventional Commits format

License

This project is licensed under the MIT License. By contributing, you agree that your contributions will be licensed under the same terms.

Author: Ved Gupta