---
title: Contributing
description: How to contribute to SIE - development setup, testing, and PR workflow.
canonical_url: https://superlinked.com/docs/reference/contributing
last_updated: 2026-05-20
---

SIE is open-source under the Apache 2.0 license. Contributions are welcome.

## Development Setup

Source: [packages/sie_sdk/CONTRIBUTING.md](https://github.com/superlinked/sie/blob/main/packages/sie_sdk/CONTRIBUTING.md)

### Prerequisites

- Python 3.12+
- [mise](https://mise.jdx.dev/) for task management
- Git

### Clone and Install

```bash
git clone https://github.com/superlinked/sie.git
cd sie

# Install mise (if not already installed)
curl https://mise.run | sh

# Install dependencies
mise install
```

### Project Structure

```
sie/
├── packages/
│   ├── sie_sdk/           # Python SDK
│   ├── sie_server/        # GPU inference server
│   ├── sie_gateway/       # Rust inference gateway
│   ├── sie_config/        # Config control plane
│   └── sie_ts_sdk/        # TypeScript SDK
├── integrations/
│   ├── sie_langchain/     # LangChain adapter
│   ├── sie_llamaindex/    # LlamaIndex adapter
│   ├── sie_haystack/      # Haystack adapter
│   ├── sie_crewai/        # CrewAI adapter
│   ├── sie_dspy/          # DSPy adapter
│   └── sie_chroma/        # Chroma adapter
├── deploy/
│   ├── helm/              # Kubernetes Helm charts
│   └── terraform/         # GCP/AWS Terraform modules
└── notebooks/             # Jupyter notebooks
```

---

## Running Tests

```bash
# Run tests for a specific package
mise run test packages/sie_sdk
mise run test packages/sie_server

# Run integration tests (requires a running SIE server)
mise run test integrations/sie_langchain
```

### Test Types

| Type | Requires Server | When to Run |
|------|----------------|-------------|
| Unit tests | No | Every PR |
| Integration tests | Yes | When changing SDK/server interface |
| Docker tests | Docker | When changing Dockerfiles |
| GPU tests | GPU worker | When changing inference pipeline |

---

## Code Style

```bash
# Format code
mise run lint -f

# Type checking
mise run typecheck
```

SIE uses standard Python formatting and type annotations throughout.

---

## Adding a New Model

See [Adding Models](/docs/engine/adding-models/) for the full guide. In summary:

1. Create a YAML config in `packages/sie_server/models/`
2. Map to an existing adapter (or write a new one in `packages/sie_server/src/sie_server/adapters/`)
3. Add quality targets with `sie-bench`
4. Submit a PR

---

## Adding a New Integration

Source: [integrations/README.md](https://github.com/superlinked/sie/blob/main/integrations/README.md)

1. Create the package directory under `integrations/`:
   ```
   integrations/sie_myframework/
   ├── src/sie_myframework/
   │   ├── __init__.py
   │   └── embeddings.py
   ├── tests/
   │   ├── test_embeddings.py
   │   └── test_integration.py
   └── pyproject.toml
   ```

2. Implement the framework primitives:
   - `encode()` → framework's embedding interface
   - `score()` → framework's reranker/compressor interface
   - `extract()` → framework's tool/extractor interface

3. Use shared test fixtures from `integrations/conftest.py`:
   - `mock_sie_client` - mocked SIEClient for unit tests
   - `sie_server_url` - real server URL for integration tests

4. Add tests and submit a PR

---

## PR Workflow

1. Fork the repository
2. Create a feature branch: `git checkout -b feature/my-change`
3. Make your changes with tests
4. Run `mise run lint -f && mise run typecheck`
5. Submit a pull request

---

## License

SIE is licensed under [Apache 2.0](https://github.com/superlinked/sie/blob/main/LICENSE). By contributing, you agree that your contributions will be licensed under the same terms.
