{"record":{"id":"cfb69a9427b75edd","repo":"BoundaryML/baml","slug":"failed-to-get-output-tokens-w","errorCode":null,"errorMessage":"failed to get output tokens: %w","messagePattern":"failed to get output tokens: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/language_client_go/pkg/rawobjects_usage.go","lineNumber":44,"sourceCode":"\nfunc (u *usage) InputTokens() (int64, error) {\n\tresult, err := raw_objects.CallMethod(u, \"input_tokens\", nil)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"failed to get input tokens: %w\", err)\n\t}\n\n\ttokens, ok := result.(int64)\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"unexpected type for input tokens: %T\", result)\n\t}\n\n\treturn tokens, nil\n}\n\nfunc (u *usage) OutputTokens() (int64, error) {\n\tresult, err := raw_objects.CallMethod(u, \"output_tokens\", nil)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"failed to get output tokens: %w\", err)\n\t}\n\n\ttokens, ok := result.(int64)\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"unexpected type for output tokens: %T\", result)\n\t}\n\n\treturn tokens, nil\n}\n\nfunc (u *usage) CachedInputTokens() (int64, error) {\n\tresult, err := raw_objects.CallMethod(u, \"cached_input_tokens\", nil)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"failed to get cached input tokens: %w\", err)\n\t}\n\n\ttokens, ok := result.(int64)\n\tif !ok {","sourceCodeStart":26,"sourceCodeEnd":62,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/language_client_go/pkg/rawobjects_usage.go#L26-L62","documentation":"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.","triggerScenarios":"Calling Usage().OutputTokens() on a call/stream that hasn't completed or failed, so the raw object lacks output_tokens.","commonSituations":"Reading token counts from streaming calls before Done(); usage stats absent from a provider response; runtime/client version mismatch.","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"],"exampleFix":"// before\ngo func() { u, _ := stream.Usage(); out, _ := u.OutputTokens() }()\n// after\nif err := stream.Done(); err != nil { return err }\nout, err := stream.Usage().OutputTokens()\nif err != nil { return err }","handlingStrategy":"try-catch","validationCode":"if err := stream.Done(); err != nil {\n    return fmt.Errorf(\"stream incomplete: %w\", err)\n}","typeGuard":null,"tryCatchPattern":"out, err := usage.OutputTokens()\nif err != nil {\n    return 0, fmt.Errorf(\"output token read failed: %w\", err)\n}","preventionTips":["Await stream completion before usage reads","Handle call errors first","Verify provider returns usage data for your model","Pin compatible client/runtime versions"],"tags":["go","usage","collector","raw-objects"],"backgroundTag":"unexpected-api-response-shape","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}