BoundaryML/baml · warning · BamlAbortError
BamlAbortError: Operation was aborted: {msg}
Error message
BamlAbortError: Operation was aborted: {msg} What it means
BamlAbortError indicates the LLM call was cancelled: from_anyhow_error maps LLMResponse::Cancelled to this message. It signals the request was aborted (by the caller or the runtime) rather than failing at the provider.
Source
Thrown at engine/language_client_typescript/src/errors.rs:128
failed.client.as_str(),
failed.message.as_str(),
&failed.code,
None,
failed.raw_response.as_deref(),
)
}
},
LLMResponse::UserFailure(msg) => napi::Error::new(
napi::Status::GenericFailure,
format!("BamlError: BamlInvalidArgumentError: {msg}"),
),
LLMResponse::InternalFailure(_) => napi::Error::new(
napi::Status::GenericFailure,
format!(
"BamlError: BamlClientError: Something went wrong with the LLM client: {err}"
),
),
LLMResponse::Cancelled(msg) => napi::Error::new(
napi::Status::GenericFailure,
format!("BamlAbortError: Operation was aborted: {msg}"),
),
}
} else {
napi::Error::new(napi::Status::GenericFailure, format!("BamlError: {err:?}"))
}
}
fn throw_baml_validation_error(
prompt: &str,
raw_output: &str,
message: &str,
detailed_message: Option<&str>,
) -> napi::Error {
let error_json = serde_json::json!({
"type": "BamlValidationError",
"prompt": prompt,View on GitHub (pinned to bd85ce9dee)
Solutions
- Check whether your own code (AbortController, request cancellation) triggered the abort
- If the abort is unexpected, review timeout/shutdown handling around the BAML call
- Re-run the request; aborted calls are safe to retry
- If aborts are legitimate, catch BamlAbortError and treat it as a user-initiated cancellation
Example fix
// before
const result = await b.MyFunction(args); // caller abort propagates as thrown error
// after
try {
const result = await b.MyFunction(args);
} catch (e) {
if (String(e).startsWith('BamlAbortError')) return null; // treat as cancellation
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
// ensure the AbortSignal is still alive before the call if (signal?.aborted) return null;
Type guard
const isAbortError = (e: unknown): boolean => String(e).startsWith('BamlAbortError'); Try / catch
try {
const result = await b.MyFunction(args, { abortSignal });
} catch (e) {
if (isAbortError(e)) return null; // user cancellation, not a failure
throw e;
} Prevention
- Treat BamlAbortError as user-initiated cancellation, not a bug
- Reuse a single AbortController per logical request and only abort it deliberately
- Add retries only for non-abort failures
- Log aborts at info level to distinguish them from real errors
When it happens
Trigger: Aborting an in-flight generated-function call (AbortSignal / cancellation token), dropping the awaiting task, or the runtime cancelling the request so the driver returns LLMResponse::Cancelled.
Common situations: Users cancel a request in the UI and the app propagates the abort; request timeouts implemented via AbortController; server shutdown mid-call.
Understand the failure class
Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.
Related errors
- AbortError: {detailed_message}
- Operation was aborted
- {self}\n\nDetailed message: {detailed_message}
- Operation cancelled: {message}
- AbortError: {detailed_message}
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/221b3482ef34b65d.
Report an issue: GitHub.