You are viewing documentation for our open source project which is maintained by the community. If you want to get started building assistants with Rasa please check out our latest [documentation here](/content/docs/index.html).

## Fingerprintable Objects [\#](https://legacy-docs-oss.rasa.com/docs/rasa/reference/rasa/engine/training/fingerprinting/\#fingerprintable-objects "Direct link to heading")

### `@runtime_checkable`

#### class Fingerprintable(Protocol)

Interface that enforces training data can be fingerprinted.

#### fingerprint [\#](https://legacy-docs-oss.rasa.com/docs/rasa/reference/rasa/engine/training/fingerprinting/\#fingerprint "Direct link to heading")

```python
def fingerprint() -> Text:
    Returns a unique stable fingerprint of the data.
```

#### calculate_fingerprint_key [\#](https://legacy-docs-oss.rasa.com/docs/rasa/reference/rasa/engine/training/fingerprinting/\#calculate_fingerprint_key "Direct link to heading")

```python
def calculate_fingerprint_key(graph_component_class: Type[GraphComponent],
                               config: Dict[Text, Any],
                               inputs: Dict[Text, Fingerprintable]) -> Text:
    Calculates a fingerprint key that uniquely represents a single node's execution.
```

**Arguments**:

- `graph_component_class` – The graph component class.
- `config` – The component config.
- `inputs` – The inputs as a mapping of parent node name to input value.

**Returns**:

The fingerprint key.
