{"record":{"id":"511677f8eee657e6","repo":"BoundaryML/baml","slug":"unexpected-type-for-as-base64-t","errorCode":null,"errorMessage":"unexpected type for as_base64: %T","messagePattern":"unexpected type for as_base64: %T","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/language_client_go/pkg/rawobjects_media.go","lineNumber":148,"sourceCode":"\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unexpected type for as_url: %T\", result)\n\t}\n\n\treturn &as_url, nil\n}\nfunc (m *mediaHolder) AsBase64() (*string, error) {\n\tresult, err := raw_objects.CallMethod(m, \"as_base64\", nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to get as base64: %w\", err)\n\t}\n\n\tif result == nil {\n\t\treturn nil, nil\n\t}\n\n\tas_base64, ok := result.(string)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unexpected type for as_base64: %T\", result)\n\t}\n\n\treturn &as_base64, nil\n}\n\nfunc newMedia(ptr int64, rt unsafe.Pointer, mediaType MediaType) media {\n\tmedia := mediaHolder{raw_objects.FromPointer(ptr, rt), mediaType}\n\tswitch mediaType {\n\tcase MediaType_Image:\n\t\treturn &imageHolder{media}\n\tcase MediaType_Audio:\n\t\treturn &audioHolder{media}\n\tcase MediaType_PDF:\n\t\treturn &pdfHolder{media}\n\tcase MediaType_Video:\n\t\treturn &videoHolder{media}\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"invalid media type: '%s'\", mediaType))","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/language_client_go/pkg/rawobjects_media.go#L130-L166","documentation":"After the `as_base64` FFI call succeeds, the wrapper asserts the result is a Go string. Any non-nil result of another Go type raises this error with %T. This is an internal serde/FFI contract violation between the Go client and the Rust runtime — the installed components disagree on the method's return type.","triggerScenarios":"Calling AsBase64() when raw_objects.CallMethod returns a deserialized value that is not a string (e.g. []byte) because of a Go/runtime type-encoding mismatch.","commonSituations":"Partial upgrade: new native library with an older pinned Go module (or the reverse); custom builds of the runtime with altered return types.","solutions":["go get github.com/boundaryml/baml@latest and reinstall the matching baml-cli runtime","Verify versions with go list -m github.com/boundaryml/baml and baml-cli --version","Report the %T from the message to BAML maintainers if versions are aligned"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"b64, err := media.AsBase64()\nif err != nil && strings.Contains(err.Error(), \"unexpected type\") {\n    return fmt.Errorf(\"baml serde mismatch, upgrade components: %w\", err)\n}","preventionTips":["Align baml Go module and baml-cli versions","Avoid custom-built runtimes with altered return types","Report unexpected %T values upstream"],"tags":["go","ffi","type-mismatch","baml"],"backgroundTag":"type-mismatch","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"}