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
- Run at least one BAML function in the project to generate the profile store.
- Verify the profile store path/directory the profiler writes to actually matches the queried project.
- If the store was deleted, re-run your functions to regenerate it.
- 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
- Run at least one BAML function before querying telemetry
- Don't delete or relocate the profiler's store directory while the LSP is live
- Treat NoStore as empty data in UI code, not as an error
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
- {0}
- the project has no tests
- corrupt tail segment in profiling stream
- profiling store contains an unsupported file type
- invalid profiling usage ledger
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/dfdaa865a05b3a53.
Report an issue: GitHub.