# Using Selector Shortcuts

The `Selector` class provides static methods that serve as shortcuts for commonly used span selections. These shortcuts are supported via `TruApp`, as well as `TruChain` and `TruLlama` when using `LangChain` and `LlamaIndex` frameworks, respectively.

## Evaluating App Input

To evaluate the application input, use `Selector.select_record_input()`:

```
from trulens.core import Metric, Selector

f_coherence = Metric(
    implementation=provider.coherence,
    name="Coherence",
    selectors={
        "text": Selector.select_record_input(),
    },
)
```

This is equivalent to the explicit selector:

```
from trulens.core import Metric, Selector
from trulens.otel.semconv.trace import SpanAttributes

f_coherence = Metric(
    implementation=provider.coherence,
    name="Coherence",
    selectors={
        "text": Selector(
            span_type=SpanAttributes.SpanType.RECORD_ROOT,
            span_attribute=SpanAttributes.RECORD_ROOT.INPUT,
        ),
    },
)
```

## Evaluating App Output

To evaluate the application output, use `Selector.select_record_output()`:

```
from trulens.core import Metric, Selector

f_coherence = Metric(
    implementation=provider.coherence,
    name="Coherence",
    selectors={
        "text": Selector.select_record_output(),
    },
)
```

This is equivalent to the explicit selector:

```
from trulens.core import Metric, Selector
from trulens.otel.semconv.trace import SpanAttributes

f_coherence = Metric(
    implementation=provider.coherence,
    name="Coherence",
    selectors={
        "text": Selector(
            span_type=SpanAttributes.SpanType.RECORD_ROOT,
            span_attribute=SpanAttributes.RECORD_ROOT.OUTPUT,
        ),
    },
)
```

## Evaluating Retrieved Context

To evaluate retrieved context, use `Selector.select_context()`:

```
from trulens.core import Metric, Selector

f_groundedness = Metric(
    implementation=provider.groundedness_measure_with_cot_reasons,
    name="Groundedness",
    selectors={
        "source": Selector.select_context(collect_list=True),
        "statement": Selector.select_record_output(),
    },
)
```

This is equivalent to the explicit selector:

```
from trulens.core import Metric, Selector
from trulens.otel.semconv.trace import SpanAttributes

f_groundedness = Metric(
    implementation=provider.groundedness_measure_with_cot_reasons,
    name="Groundedness",
    selectors={
        "source": Selector(
            span_type=SpanAttributes.SpanType.RETRIEVAL,
            span_attribute=SpanAttributes.RETRIEVAL.RETRIEVED_CONTEXTS,
            collect_list=True,
        ),
        "statement": Selector.select_record_output(),
    },
)
```

## Using `collect_list`

The `collect_list` parameter controls how multiple matching spans are handled:

- `collect_list=True`: Concatenates all matching span attributes into a single value for evaluation
- `collect_list=False`: Evaluates each span attribute individually and aggregates results

This is particularly useful for context relevance where you want to evaluate each context chunk separately:

```
from trulens.core import Metric, Selector
import numpy as np

f_context_relevance = Metric(
    implementation=provider.context_relevance_with_cot_reasons,
    name="Context Relevance",
    selectors={
        "question": Selector.select_record_input(),
        "context": Selector.select_context(collect_list=False),
    },
    agg=np.mean,
)
```

## Summary of Selector Shortcuts

| Shortcut | Span Type | Span Attribute |
| --- | --- | --- |
| `Selector.select_record_input()` | `RECORD_ROOT` | `RECORD_ROOT.INPUT` |
| `Selector.select_record_output()` | `RECORD_ROOT` | `RECORD_ROOT.OUTPUT` |
| `Selector.select_context(collect_list=...)` | `RETRIEVAL` | `RETRIEVAL.RETRIEVED_CONTEXTS` |
