BoundaryML/baml · error
failed to get output tokens
Error message
failed to get output tokens: %w
What it means
Analogous to InputTokens, OutputTokens() calls the 'output_tokens' method on the internal raw usage object; failure is wrapped with 'failed to get output tokens: %w'. Means the underlying usage data could not be retrieved.
Solutions
- Read usage only after the call or stream completes successfully
- Check errors from the LLM call first before usage access
- Upgrade/align BAML Go client and runtime versions
- Unwrap the error to diagnose the underlying method failure
Example fix
// before
go func() { u, _ := stream.Usage(); out, _ := u.OutputTokens() }()
// after
if err := stream.Done(); err != nil { return err }
out, err := stream.Usage().OutputTokens()
if err != nil { return err } Defensive patterns
Strategy: try-catch
Validate before calling
if err := stream.Done(); err != nil {
return fmt.Errorf("stream incomplete: %w", err)
} Try / catch
out, err := usage.OutputTokens()
if err != nil {
return 0, fmt.Errorf("output token read failed: %w", err)
} Prevention
- Await stream completion before usage reads
- Handle call errors first
- Verify provider returns usage data for your model
- Pin compatible client/runtime versions
When it happens
Trigger: Calling Usage().OutputTokens() on a call/stream that hasn't completed or failed, so the raw object lacks output_tokens.
Common situations: Reading token counts from streaming calls before Done(); usage stats absent from a provider response; runtime/client version mismatch.
Understand the failure class
Background: "invalid response format", "malformed payload", "missing data field": when an API returns 200 but the response shape is wrong — this error's family across 23 libraries.
Related errors
- failed to get input tokens
- failed to clear
- failed to create collector
- failed to encode kwargs
- failed to get cached input tokens
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/cfb69a9427b75edd.
Report an issue: GitHub.
Appendix: source
Thrown at engine/language_client_go/pkg/rawobjects_usage.go:44
func (u *usage) InputTokens() (int64, error) {
result, err := raw_objects.CallMethod(u, "input_tokens", nil)
if err != nil {
return 0, fmt.Errorf("failed to get input tokens: %w", err)
}
tokens, ok := result.(int64)
if !ok {
return 0, fmt.Errorf("unexpected type for input tokens: %T", result)
}
return tokens, nil
}
func (u *usage) OutputTokens() (int64, error) {
result, err := raw_objects.CallMethod(u, "output_tokens", nil)
if err != nil {
return 0, fmt.Errorf("failed to get output tokens: %w", err)
}
tokens, ok := result.(int64)
if !ok {
return 0, fmt.Errorf("unexpected type for output tokens: %T", result)
}
return tokens, nil
}
func (u *usage) CachedInputTokens() (int64, error) {
result, err := raw_objects.CallMethod(u, "cached_input_tokens", nil)
if err != nil {
return 0, fmt.Errorf("failed to get cached input tokens: %w", err)
}
tokens, ok := result.(int64)
if !ok {View on GitHub (pinned to bd85ce9dee)