Annotation

Purpose

Add natural-language supervision to an existing RFGen dataset without rewriting its I/Q samples, structured labels, or source metadata. I/Q means the complex in-phase and quadrature sample values that represent the received signal. Annotation is a supported manual workflow, not a production-qualified Golden Path.

What annotation writes

RFGen has one rfgen annotate lifecycle. execution_mode and backend are chosen independently of each other.

One source: a published Signal Dataset snapshot, which is what rfgen generate writes. It publishes a dense annotation set under the snapshot root and rewrites no signal shard. Where annotation runs owns the mode matrix, and Annotate an existing dataset carries the configuration.

Inputs and safety boundary

The inference boundary receives only documented facts recoverable from a signal representation or calibrated labels. It excludes raw I/Q arrays and spectrograms, seeds, opaque identifiers, hashes, and operational metadata. This is an input-policy boundary, not a determination that generated prose is true.

Direct Gemini needs GEMINI_API_KEY in the driver environment. Live provider work is manually gated and can incur cost. Bounded qualifications are recorded under Evidence, which lists what each run covers. None qualifies hosted text semantically or establishes fleet reliability, and annotation is not production-qualified.

Run and recover

Save one YAML configuration in a directory, then name that file without its .yaml suffix when submitting it:

mkdir -p ./annotation-config
# Save the selected configuration as ./annotation-config/caption.yaml.
rfgen annotate submit --config-dir ./annotation-config --config-name caption

A local run is synchronous and has no asynchronous recovery step. A snapshot submitted to Dataproc Serverless returns a handle on stdout; pass that complete value unchanged to wait, which is the only continuation it supports. See Annotate an existing dataset for the configuration and sample-ID discovery.

Output and interpretation

The run publishes a dense annotation set under the snapshot root, one row per source ordinal, without rewriting a signal shard. Each row preserves provider, model, request, token-use, schema-version, and persistence provenance. Hosted text is supervision generated from a bounded metadata projection, not an authoritative measurement of semantic truth.