```python:inference/core/workflows/execution_engine/entities/base.py
from inference.core.workflows.execution_engine.entities.types import Kind, WILDCARD_KIND
from pydantic import BaseModel, Field
from typing import List

class OutputDefinition(BaseModel):
    name: str
    kind: List[Kind] = Field(default_factory=lambda: [WILDCARD_KIND])
```
```python:inference/core/workflows/core_steps/models/roboflow/semantic_segmentation/v1.py
from inference.core.workflows.execution_engine.constants import INFERENCE_ID_KEY
from inference.core.workflows.execution_engine.entities.base import OutputDefinition
from inference.core.workflows.execution_engine.entities.types import INFERENCE_ID_KIND, ROBOFLOW_MODEL_ID_KIND, SEMANTIC_SEGMENTATION_PREDICTION_KIND
from inference.core.workflows.prototypes.block import WorkflowBlockManifest
from typing import List

LONG_DESCRIPTION = """
Run inference on a semantic segmentation model hosted on or uploaded to Roboflow.

Semantic segmentation assigns a class label to every pixel in the image, producing a
dense segmentation mask rather than per-object bounding boxes or instance masks.

You can query any model that is private to your account, or any public model available
on [Roboflow Universe](https://universe.roboflow.com).

You will need to set your Roboflow API key in your Inference environment to use this
block. To learn more about setting your Roboflow API key, [refer to the Inference
documentation](https://inference.roboflow.com/quickstart/configure_api_key/).
"""

# Pre-construct output definitions to avoid repeated instantiation
_OUTPUT_DEFINITIONS = [
    OutputDefinition(name=INFERENCE_ID_KEY, kind=[INFERENCE_ID_KIND]),
    OutputDefinition(
        name="predictions",
        kind=[SEMANTIC_SEGMENTATION_PREDICTION_KIND],
    ),
    OutputDefinition(name="model_id", kind=[ROBOFLOW_MODEL_ID_KIND]),
]


class BlockManifest(WorkflowBlockManifest):

    @classmethod
    def describe_outputs(cls) -> List[OutputDefinition]:
        return _OUTPUT_DEFINITIONS
```