---
sidebar:
  hidden: true
title: roboto.domain.actions.invocation_record
---
## Module Contents

### ActionProvenance

```python
class roboto.domain.actions.invocation_record.ActionProvenance(/, **data: Any)
```

`from roboto import ActionProvenance`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L293-L299)

Bases: `pydantic.BaseModel`

Provenance information for an action

**Parameters**

- **data** (`Any`)

**Attributes**

- **ActionProvenance.digest** (`str | None`) = `None`
- **ActionProvenance.name** (`str`)
- **ActionProvenance.org_id** (`str`)

### DataSelector

```python
class roboto.domain.actions.invocation_record.DataSelector(/, **data: Any)
```

`from roboto.domain.actions import DataSelector`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L147-L175)

Bases: `pydantic.BaseModel`

Selector for inputs (e.g. files) to an action invocation.

**Parameters**

- **data** (`Any`)

**Attributes**

- **DataSelector.dataset_id** (`str | None`) = `None`: Dataset ID, needed for backward compatibility purposes. Prefer RoboQL: dataset_id = \<the ID in double quotes>
- **DataSelector.ids** (`list[str] | None`) = `None`: Specific input IDs (e.g. a dataset ID).
- **DataSelector.names** (`list[str] | None`) = `None`: Specific input names (e.g. topic names).
- **DataSelector.query** (`str | None`) = `None`: RoboQL query representing the desired inputs.

#### DataSelector.ensure_not_empty()

```python
def ensure_not_empty() -> DataSelector
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L171-L175)

**Returns**

- `DataSelector`

### ExecutableProvenance

```python
class roboto.domain.actions.invocation_record.ExecutableProvenance(/, **data: Any)
```

`from roboto import ExecutableProvenance`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L302-L307)

Bases: `pydantic.BaseModel`

Provenance information for an action executable

**Parameters**

- **data** (`Any`)

**Attributes**

- **ExecutableProvenance.container_image_digest** (`str | None`) = `None`
- **ExecutableProvenance.container_image_uri** (`str | None`) = `None`

### FileSelector

```python
class roboto.domain.actions.invocation_record.FileSelector(/, **data: Any)
```

`from roboto.domain.actions import FileSelector`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L178-L193)

Bases: [`DataSelector`](/reference/python-sdk/roboto/domain/actions/invocation_record#roboto.domain.actions.invocation_record.DataSelector)

Selector for file inputs to an action invocation.

This selector type exists for backward compatibility purposes. We encourage you to use the query field to scope your input query to any dataset and/or file paths.

**Parameters**

- **data** (`Any`)

**Attributes**

- **FileSelector.paths** (`list[str] | None`) = `None`: File paths or patterns. Prefer RoboQL: path LIKE \<path pattern in double quotes>

#### FileSelector.ensure_not_empty()

```python
def ensure_not_empty() -> FileSelector
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L189-L193)

**Returns**

- `FileSelector`

### InvocationDataSource

```python
class roboto.domain.actions.invocation_record.InvocationDataSource(/, **data: Any)
```

`from roboto import InvocationDataSource`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L36-L68)

Bases: `pydantic.BaseModel`

Abstracted data source that can be provided to an invocation.

Represents a source of input data for action invocations. The data source type determines how the ID should be interpreted (e.g., as a dataset ID).

**Parameters**

- **data** (`Any`)

**Attributes**

- **InvocationDataSource.data_source_id** (`str`): The ID of the data source. For Dataset type, this is a dataset ID.
- **InvocationDataSource.data_source_type** (`InvocationDataSourceType`): The type of data source (currently only Dataset).

#### InvocationDataSource.is_unspecified()

```python
def is_unspecified() -> bool
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L62-L68)

Check if this data source is unspecified.

**Returns**

- `bool`: True if this is an unspecified data source, False otherwise.

#### InvocationDataSource.unspecified()

```python
@staticmethod
def unspecified() -> InvocationDataSource
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L50-L60)

Returns a special value indicating that no invocation source is specified.

**Returns**

- `InvocationDataSource`: An InvocationDataSource instance representing an unspecified data source.

### InvocationDataSourceType

```python
class roboto.domain.actions.invocation_record.InvocationDataSourceType(*args, **kwds)
```

`from roboto import InvocationDataSourceType`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L25-L33)

Bases: `enum.Enum`

Source of data for an action's input binding.

Defines the type of data source that provides input data to an action invocation. Currently supports datasets, with potential for future expansion to other data source types.

**Attributes**

- **InvocationDataSourceType.Dataset** = `'Dataset'`

### InvocationInput

```python
class roboto.domain.actions.invocation_record.InvocationInput(/, **data: Any)
```

`from roboto.domain.actions import InvocationInput`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L196-L290)

Bases: `pydantic.BaseModel`

Input specification for an action invocation.

An invocation may require no inputs at all, or some combination of Roboto files, topics, events, etc. Those are specified using selectors, which tell the invocation how to locate inputs. Selector choices include RoboQL queries (for maximum flexibility), as well as unique IDs or friendly names.

Note: support for certain input types is a work in progress, and will be offered in future Roboto platform releases.

At least one data selector must be provided in order to construct a valid InvocationInput instance.

**Parameters**

- **data** (`Any`)

**Attributes**

- **InvocationInput.files** (`FileSelector | list[FileSelector] | None`) = `None`: File selectors.
- **InvocationInput.sessions** (`DataSelector | list[DataSelector] | None`) = `None`: Session selectors.
- **InvocationInput.topics** (`DataSelector | list[DataSelector] | None`) = `None`: Topic selectors.

**Properties**

- **InvocationInput.file_paths** (`list[str]`)
- **InvocationInput.safe_files** (`list[FileSelector]`): File selectors as a list. Empty if no such selectors are specified.
- **InvocationInput.safe_sessions** (`list[DataSelector]`): Session selectors as a list. Empty if no such selectors are specified.
- **InvocationInput.safe_topics** (`list[DataSelector]`): Topic selectors as a list. Empty if no such selectors are specified.

#### InvocationInput.ensure_not_empty()

```python
def ensure_not_empty() -> InvocationInput
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L221-L231)

**Returns**

- `InvocationInput`

#### InvocationInput.file_query()

```python
@classmethod
def file_query(roboql_query: str) -> InvocationInput
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L244-L246)

Specify file inputs using a RoboQL query.

**Parameters**

- **roboql_query** (`str`)

**Returns**

- `InvocationInput`

#### InvocationInput.from_dataset_file_paths()

```python
@classmethod
def from_dataset_file_paths(dataset_id: str, file_paths: list[str]) -> InvocationInput
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L234-L236)

Specify file input by dataset ID and dataset-relative file paths or globs.

**Parameters**

- **dataset_id** (`str`)
- **file_paths** (`list[str]`)

**Returns**

- `InvocationInput`

#### InvocationInput.from_session_id()

```python
@classmethod
def from_session_id(session_id: str) -> InvocationInput
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L239-L241)

Specify session input by session ID.

**Parameters**

- **session_id** (`str`)

**Returns**

- `InvocationInput`

#### InvocationInput.session_query()

```python
@classmethod
def session_query(roboql_query: str) -> InvocationInput
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L249-L251)

Specify session inputs using a RoboQL query.

**Parameters**

- **roboql_query** (`str`)

**Returns**

- `InvocationInput`

#### InvocationInput.topic_query()

```python
@classmethod
def topic_query(roboql_query: str) -> InvocationInput
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L254-L256)

Specify topic inputs using a RoboQL query.

**Parameters**

- **roboql_query** (`str`)

**Returns**

- `InvocationInput`

### InvocationProvenance

```python
class roboto.domain.actions.invocation_record.InvocationProvenance(/, **data: Any)
```

`from roboto import InvocationProvenance`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L327-L337)

Bases: `pydantic.BaseModel`

Provenance information for an invocation

**Parameters**

- **data** (`Any`)

**Attributes**

- **InvocationProvenance.action** (`ActionProvenance`): The Action that was invoked.
- **InvocationProvenance.executable** (`ExecutableProvenance`): The underlying executable (e.g., Docker image) that was run.
- **InvocationProvenance.source** (`SourceProvenance`): The source of the invocation.

### InvocationRecord

```python
class roboto.domain.actions.invocation_record.InvocationRecord(/, **data: Any)
```

`from roboto import InvocationRecord`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L436-L484)

Bases: `pydantic.BaseModel`

A wire-transmissible representation of an invocation.

**Parameters**

- **data** (`Any`)

**Attributes**

- **InvocationRecord.compute_requirements** (`roboto.domain.actions.action_record.ComputeRequirements`)
- **InvocationRecord.container_parameters** (`roboto.domain.actions.action_record.ContainerParameters`)
- **InvocationRecord.created** (`datetime.datetime`)
- **InvocationRecord.data_source** (`InvocationDataSource`)
- **InvocationRecord.duration** (`datetime.timedelta`) = `None`
- **InvocationRecord.idempotency_id** (`str | None`) = `None`
- **InvocationRecord.input_data** (`list[str]`)
- **InvocationRecord.invocation_id** (`str`)
- **InvocationRecord.last_heartbeat** (`datetime.datetime | None`) = `None`
- **InvocationRecord.last_status** (`InvocationStatus`)
- **InvocationRecord.org_id** (`str`)
- **InvocationRecord.parameter_values** (`dict[str, Any]`) = `None`
- **InvocationRecord.provenance** (`InvocationProvenance`)
- **InvocationRecord.rich_input_data** (`InvocationInput | None`) = `None`
- **InvocationRecord.status** (`list[InvocationStatusRecord]`) = `None`
- **InvocationRecord.timeout** (`int`)
- **InvocationRecord.upload_destination** (`InvocationUploadDestination | None`) = `None`

### InvocationSource

```python
class roboto.domain.actions.invocation_record.InvocationSource(*args, **kwds)
```

`from roboto import InvocationSource`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L310-L314)

Bases: `enum.Enum`

Method by which an invocation was run

**Attributes**

- **InvocationSource.Manual** = `'Manual'`
- **InvocationSource.Trigger** = `'Trigger'`

### InvocationStatus

```python
class roboto.domain.actions.invocation_record.InvocationStatus
```

`from roboto import InvocationStatus`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L340-L407)

Bases: `int`, `enum.Enum`

Invocation status enum

**Attributes**

- **InvocationStatus.Cancelled** = `997`
- **InvocationStatus.Completed** = `5`
- **InvocationStatus.Deadly** = `999`
- **InvocationStatus.Downloading** = `2`
- **InvocationStatus.Failed** = `998`
- **InvocationStatus.Processing** = `3`
- **InvocationStatus.Queued** = `0`
- **InvocationStatus.Scheduled** = `1`
- **InvocationStatus.Uploading** = `4`

#### InvocationStatus.can_transition_to()

```python
def can_transition_to(other: InvocationStatus) -> bool
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L365-L387)

**Parameters**

- **other** (`InvocationStatus`)

**Returns**

- `bool`

#### InvocationStatus.from_value()

```python
@staticmethod
def from_value(v: Union[int, str]) -> InvocationStatus
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L358-L363)

**Parameters**

- **v** (`Union[int, str]`)

**Returns**

- `InvocationStatus`

#### InvocationStatus.is_running()

```python
def is_running() -> bool
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L389-L394)

**Returns**

- `bool`

#### InvocationStatus.is_terminal()

```python
def is_terminal() -> bool
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L396-L402)

**Returns**

- `bool`

#### InvocationStatus.next()

```python
def next() -> Optional[InvocationStatus]
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L404-L407)

**Returns**

- `Optional[InvocationStatus]`

### InvocationStatusRecord

```python
class roboto.domain.actions.invocation_record.InvocationStatusRecord(/, **data: Any)
```

`from roboto import InvocationStatusRecord`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L410-L424)

Bases: `pydantic.BaseModel`

A wire-transmissible representation of an invocation status.

**Parameters**

- **data** (`Any`)

**Attributes**

- **InvocationStatusRecord.detail** (`str | None`) = `None`
- **InvocationStatusRecord.status** (`InvocationStatus`)
- **InvocationStatusRecord.timestamp** (`datetime.datetime`)

#### InvocationStatusRecord.to_presentable_dict()

```python
def to_presentable_dict() -> dict[str, Optional[str]]
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L419-L424)

**Returns**

- `dict[str, Optional[str]]`

### InvocationUploadDestination

```python
class roboto.domain.actions.invocation_record.InvocationUploadDestination(
    /,
    **data: Any,
)
```

`from roboto import InvocationUploadDestination`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L92-L144)

Bases: `pydantic.BaseModel`

Default destination to which invocation outputs - if any - should be uploaded.

Specifies where files generated during action execution should be stored. Actions can write files to their output directory, and this destination determines where those files are uploaded after execution completes.

**Parameters**

- **data** (`Any`)

**Attributes**

- **InvocationUploadDestination.destination_id** (`str | None`) = `None`: Optional identifier for the upload destination. In the case of a dataset, it would be the dataset ID.
- **InvocationUploadDestination.destination_type** (`UploadDestinationType`): Type of upload destination. By default, outputs are uploaded to a dataset.

**Properties**

- **InvocationUploadDestination.is_dataset** (`bool`): True if this is a dataset destination with a dataset ID, False otherwise.

  **Returns**

  - `bool`: True if this destination is configured for a dataset with a valid ID.

- **InvocationUploadDestination.is_unknown** (`bool`): True if the upload destination is not of a supported type, False otherwise.

#### InvocationUploadDestination.dataset()

```python
@classmethod
def dataset(dataset_id: str) -> InvocationUploadDestination
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L118-L128)

Create a dataset upload destination with the given ID.

**Parameters**

- **dataset_id** (`str`): The ID of the dataset where outputs should be uploaded.

**Returns**

- `InvocationUploadDestination`: An InvocationUploadDestination configured for the specified dataset.

#### InvocationUploadDestination.pre_validate_destination_type()

```python
@classmethod
def pre_validate_destination_type(value: Any) -> Any
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L108-L115)

**Parameters**

- **value** (`Any`)

**Returns**

- `Any`

### LogRecord

```python
class roboto.domain.actions.invocation_record.LogRecord(/, **data: Any)
```

`from roboto import LogRecord`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L487-L497)

Bases: `pydantic.BaseModel`

A wire-transmissible representation of a log record.

**Parameters**

- **data** (`Any`)

**Attributes**

- **LogRecord.log** (`str`)
- **LogRecord.partial_id** (`str | None`) = `None`
- **LogRecord.process** (`roboto.domain.actions.action_record.ExecutorContainer`)
- **LogRecord.timestamp** (`datetime.datetime`)

### LogsLocation

```python
class roboto.domain.actions.invocation_record.LogsLocation(/, **data: Any)
```

`from roboto import LogsLocation`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L427-L433)

Bases: `pydantic.BaseModel`

Invocation log storage location

**Parameters**

- **data** (`Any`)

**Attributes**

- **LogsLocation.bucket** (`str`)
- **LogsLocation.prefix** (`str`)

### SourceProvenance

```python
class roboto.domain.actions.invocation_record.SourceProvenance(/, **data: Any)
```

`from roboto import SourceProvenance`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L317-L324)

Bases: `pydantic.BaseModel`

Provenance information for an invocation source

**Parameters**

- **data** (`Any`)

**Attributes**

- **SourceProvenance.source_id** (`str`)
- **SourceProvenance.source_type** (`InvocationSource`)

### UploadDestinationType

```python
class roboto.domain.actions.invocation_record.UploadDestinationType(*args, **kwds)
```

`from roboto import UploadDestinationType`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/actions/invocation_record.py#L71-L89)

Bases: `enum.Enum`

Type of upload destination for invocation outputs.

Defines where files generated by action invocations should be uploaded. Currently supports datasets as the primary destination type.

**Attributes**

- **UploadDestinationType.Dataset** = `'Dataset'`: Outputs will be uploaded to a dataset. This is the default.

- **UploadDestinationType.Unknown** = `'Unknown'`: The output destination is unknown.

  This destination type exists for compatibility between different versions of the Roboto SDK and the Roboto service backend. It should not be used directly in action invocation requests. If you encounter it in an SDK response, consider upgrading to the latest available SDK version.
