# pllm.protocols Python API

Public objects, practical usage, and research context for pllm.protocols.

[View canonical HTML](https://pllm.run/sdk/reference/python/pllm/protocols/)

Document ID: `pllm.docs.reference.python.pllm.protocols`  
Release: `0.1.0`

Protocol components define which parties exchange which protected values and keep baseline masking separate from optional verification. Presence documents API availability, not complete model, security, or deployment coverage; check [implementation status](/sdk/reference/status/) before relying on a path.

## Research context

Relevant design inputs: [Slalom](/research/papers/r07-slalom/), [DASH](/research/papers/r01-dash/). PLLM's implementation and evidence claims remain independent.

## Python SDK example

The example performs a bounded offline task and checks an observable result. It does not download a checkpoint or contact a provider.

```python
import pllm.protocols as protocols

guarded = protocols.GuardedLinear(max_rows_per_request=128, output_dither_bound=1)
assert guarded.get_params()["max_rows_per_request"] == 128
```

API: [`pllm.protocols`](/sdk/reference/python/pllm/protocols/#objects-and-signatures)

## Objects and signatures

### `ProtocolMethod`

Immutable `ProtocolMethod` record carrying `component`, `params` for the workflow where protocol components define which parties exchange which protected values and keep baseline masking separate from optional verification.

- Canonical object: `pllm.protocols.base.ProtocolMethod`
- Kind: `class`
- Signature/type: `constructor not exposed`
- Public exports: `pllm.protocols.ProtocolMethod`

### `MaskedLinear`

Selects component `pllm/masked-linear` during `compilation`; it provides `masked-linear` for roles client, preparation, inference.

- Canonical object: `pllm.protocols.masked_linear.MaskedLinear`
- Kind: `class`
- Signature/type: `__init__(self) -> None`
- Public exports: `pllm.MaskedLinear`, `pllm.protocols.MaskedLinear`, `pllm.protocols.masked_linear.MaskedLinear`
- Public members: `descriptor: ComponentDescriptor`; `__init__(self) -> None`; `classmethod describe(cls) -> ComponentDescriptor`

### `BlindedLinear`

Selects component `pllm/blinded-linear/v1` during `online`; it provides `blinded-proprietary-linear` for roles client, inference.

- Canonical object: `pllm.protocols.runtime_arms.BlindedLinear`
- Kind: `class`
- Signature/type: `__init__(self) -> None`
- Public exports: `pllm.protocols.BlindedLinear`
- Public members: `descriptor: ComponentDescriptor`; `__init__(self) -> None`; `classmethod describe(cls) -> ComponentDescriptor`

### `CleartextLinear`

Selects component `pllm/cleartext-linear` during `online`; it provides `plaintext-reference-linear` for roles inference.

- Canonical object: `pllm.protocols.runtime_arms.CleartextLinear`
- Kind: `class`
- Signature/type: `__init__(self) -> None`
- Public exports: `pllm.protocols.CleartextLinear`
- Public members: `descriptor: ComponentDescriptor`; `__init__(self) -> None`; `classmethod describe(cls) -> ComponentDescriptor`

### `DirectFHE`

Selects component `pllm/direct-fhe` during `online`; it provides `direct-bfv-transformer-linear` for roles client, inference.

- Canonical object: `pllm.protocols.runtime_arms.DirectFHE`
- Kind: `class`
- Signature/type: `__init__(self) -> None`
- Public exports: `pllm.protocols.DirectFHE`
- Public members: `descriptor: ComponentDescriptor`; `__init__(self) -> None`; `classmethod describe(cls) -> ComponentDescriptor`

### `GuardedLinear`

Selects component `pllm/guarded-linear/v1` during `online`; it provides `guarded-proprietary-linear` for roles client, inference.

- Canonical object: `pllm.protocols.runtime_arms.GuardedLinear`
- Kind: `class`
- Signature/type: `__init__(self, *, max_rows_per_request: int=4096, max_rows_per_owner_stage: int=16384, max_requests_per_minute: int=4096, output_dither_bound: int=0) -> None`
- Public exports: `pllm.protocols.GuardedLinear`
- Public members: `descriptor: ComponentDescriptor`; `__init__(self, *, max_rows_per_request: int=4096, max_rows_per_owner_stage: int=16384, max_requests_per_minute: int=4096, output_dither_bound: int=0) -> None`; `classmethod describe(cls) -> ComponentDescriptor`

### `SecureLinear`

Selects component `pllm/secure-linear/v1` during `online`; it provides `bounded-authenticated-linear-preview` for roles client, inference.

- Canonical object: `pllm.protocols.runtime_arms.SecureLinear`
- Kind: `class`
- Signature/type: `__init__(self) -> None`
- Public exports: `pllm.protocols.SecureLinear`
- Public members: `descriptor: ComponentDescriptor`; `__init__(self) -> None`; `classmethod describe(cls) -> ComponentDescriptor`
