Skip to content

Recruiting

RecruitingMetrics dataclass #

RecruitingMetrics(
    graduated: int,
    distilling: int,
    dropped: int,
    inactive: int,
)

A snapshot of where a custom audience's annotators sit in the recruiting funnel.

A custom (distilling) audience recruits its own pool of annotators: candidates start in distilling, and each one eventually graduates into the eligible pool, is dropped, or goes inactive. These counts let you tell a healthy pool from one that is still filling up or has stalled — e.g. a job collecting no responses while graduated is still 0 is waiting on recruiting, not stuck.

The counts are mutually exclusive: each annotator is in exactly one bucket, so a graduated annotator who goes quiet moves out of graduated and into inactive.

Only custom audiences recruit, so this is empty (all zeros) for curated audiences.

Attributes:

Name Type Description
graduated int

Annotators who passed qualification and are eligible to work now.

distilling int

Annotators still going through qualification.

dropped int

Annotators removed from the pool (score too low, limits hit, etc.).

inactive int

Previously-graduated or distilling annotators who went quiet.

audience_will_never_produce_responses #

audience_will_never_produce_responses(
    status: AudienceStatus,
    metrics: RecruitingMetrics | None,
) -> bool

Whether an audience can never answer a job assigned to it without the caller acting.

A job only draws responses from graduated annotators, so this is True only when nobody has graduated and nobody ever will on the audience's own: recruiting was never started, or the audience is marked ready yet its pool is empty. An audience that is still recruiting (someone distilling, or status still Pending/Recruiting) is filling up — waiting, not stuck — and a curated audience (no funnel of its own, metrics is None) draws on its own ready pool, so neither returns True.

Source code in src/rapidata/rapidata_client/audience/recruiting.py
def audience_will_never_produce_responses(
    status: AudienceStatus, metrics: RecruitingMetrics | None
) -> bool:
    """Whether an audience can never answer a job assigned to it without the caller acting.

    A job only draws responses from graduated annotators, so this is ``True`` only when
    nobody has graduated *and* nobody ever will on the audience's own: recruiting was
    never started, or the audience is marked ready yet its pool is empty. An audience
    that is still recruiting (someone distilling, or status still Pending/Recruiting) is
    filling up — waiting, not stuck — and a curated audience (no funnel of its own,
    ``metrics is None``) draws on its own ready pool, so neither returns ``True``.
    """
    from rapidata.api_client.models.audience_status import AudienceStatus

    if metrics is not None and (metrics.graduated > 0 or metrics.distilling > 0):
        return False
    if status == AudienceStatus.CREATED:
        return True
    # Marked ready but the funnel confirms nobody graduated or is distilling.
    return status == AudienceStatus.READY and metrics is not None