BoundaryML/baml · info · TelemetryError

no profile store at {0}

Error message

no profile store at {0}

What it means

TelemetryError::NoStore is returned when the playground telemetry endpoint is queried but no profiler store file exists yet for the project. Per its doc comment this is an empty state, not a failure: nothing has executed under this project since the profiler started writing.

Source

Thrown at baml_language/crates/baml_lsp_server/src/playground_telemetry.rs:191

    }
    let others: Vec<String> = workspace_roots[1..]
        .iter()
        .map(|root| root.display().to_string())
        .collect();
    tracing::warn!(
        "Telemetry: the profiler writes one store per process, so runs started \
         here for {} are recorded under {}. Those projects will look empty in \
         the Telemetry tab; run them from the CLI to record them in place.",
        others.join(", "),
        workspace_roots[0].display()
    );
}

#[derive(Debug, thiserror::Error)]
pub enum TelemetryError {
    /// No store yet: nothing has run under this project since the profiler
    /// started writing. This is an empty state, not a failure.
    #[error("no profile store at {0}")]
    NoStore(PathBuf),
    #[error("{0}")]
    Query(String),
}

/// One execution: a row in the executions table.
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ExecutionRow {
    pub execution_id: String,
    pub entry_fqn: Option<String>,
    pub source_label: Option<String>,
    pub revision_id: Option<String>,
    pub status: Option<String>,
    /// `complete` | `no_root_ended` | `root_started_lost` | `index_corrupt`.
    /// Anything but `complete` means the row below it is partial evidence.
    pub index_state: Option<String>,
    /// `complete` | `partial` | `none` — whether captured values survived.

View on GitHub (pinned to bd85ce9dee)

Solutions

  1. Run at least one BAML function in the project to generate the profile store.
  2. Verify the profile store path/directory the profiler writes to actually matches the queried project.
  3. If the store was deleted, re-run your functions to regenerate it.
  4. Treat this as an empty state in UI code — display 'no data yet' rather than an error.

Example fix

// before
let rows = telemetry.latest_executions()?; // Err(NoStore(path))

// after
match telemetry.latest_executions() {
    Ok(rows) => render(rows),
    Err(TelemetryError::NoStore(_)) => render_empty(),
    Err(e) => return Err(e.into()),
}
Defensive patterns

Strategy: fallback

Validate before calling

let store_exists = profile_store_path
    .map(|p| p.exists())
    .unwrap_or(false);
if !store_exists { show_empty_state(); }

Try / catch

match telemetry.query_executions() {
    Ok(rows) => render(rows),
    Err(TelemetryError::NoStore(_)) => render("No runs yet — execute a BAML function first"),
    Err(e) => warn(e),
}

Prevention

When it happens

Trigger: Requesting telemetry data (executions table) before any BAML function has run in the project; pointing the telemetry query at a project directory with no profile store written yet; wiping/rotating the store directory while the server is up.

Common situations: Freshly opened project queried by the playground UI before the first run; tests hitting the telemetry endpoint with no prior executions; deleted or relocated .baml profile store files.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12). Data as JSON: /api/errors/dfdaa865a05b3a53. Report an issue: GitHub.