# Contributing to oMLX Thank you for your interest in contributing to oMLX! This guide will help you get started. ## Getting Started 1. Fork the repository on [GitHub](https://github.com/jundot/omlx) 2. Clone your fork: ```bash git clone https://github.com//omlx.git cd omlx ``` 3. Install development dependencies: ```bash pip install -e ".[dev]" ``` > **Note**: oMLX requires Apple Silicon (M1/M2/M3/M4) and Python 3.10+. ## Development Workflow ### Testing Run tests with: ```bash # Fast tests only (recommended during development) pytest -m "not slow" # Run a specific test file pytest tests/test_config.py -v # Run slow tests (requires model files) pytest -m slow ``` **Test markers:** | Marker | Description | |--------|-------------| | `@pytest.mark.slow` | Tests that require loading models | | `@pytest.mark.integration` | Tests that require a running server | **Test file naming:** For a source file `omlx/.py`, the test file should be `tests/test_.py`. When modifying source code, always check if existing tests are affected and update them accordingly. New code should include corresponding tests. ### License Header All source files should include the Apache 2.0 license identifier: ```python # SPDX-License-Identifier: Apache-2.0 ``` ## Project Structure ``` omlx/ ├── omlx/ # Main package │ ├── api/ # API models and adapters (OpenAI, Anthropic) │ ├── cache/ # KV cache management (paged, prefix, SSD) │ ├── engine/ # Inference engines (simple, batched, embedding) │ ├── mcp/ # Model Context Protocol integration │ ├── models/ # Model wrappers (LLM, embedding) │ ├── utils/ # Utilities │ ├── server.py # FastAPI server │ ├── scheduler.py # Request scheduling with mlx-lm BatchGenerator │ ├── engine_core.py # Core async inference engine │ ├── paged_cache.py # Block-based KV cache with LRU eviction │ └── cli.py # CLI entry point ├── packaging/ # macOS menubar app (PyObjC) ├── tests/ # Test suite └── docs/ # Documentation ``` For a more detailed architecture overview, see the [Architecture](../README.md#architecture) section in the README. ## Areas for Contribution - **Bug fixes** — Check [open issues](https://github.com/jundot/omlx/issues) for reported bugs - **Performance** — Inference speed, memory efficiency, cache hit rates - **New features** — API endpoints, model format support, admin dashboard improvements - **Documentation** — Guides, examples, API references - **Model support** — Testing and fixing compatibility with new MLX models - **macOS app** — UI improvements, new settings, system integration ## Pull Request Process 1. **Fork & branch** — Create a feature branch from `main`: ```bash git checkout -b feature/your-feature ``` 2. **Make changes** — Write code and tests following the style guidelines above. 3. **Test** — Ensure all related tests pass: ```bash pytest tests/test_.py -v ``` 4. **Submit** — Push your branch and open a pull request against `main`. Describe what changed and why. ## Support If you have questions or run into issues, please open an issue on [GitHub Issues](https://github.com/jundot/omlx/issues).