For Unary methods, if you throw an exception which is not SRE/SE (e.g. throw new NullPointerException()), it is wrapped to SRE Internal exception. This happens here: scalapb.grpc.Grpc.completeObserver
When you operate with ResponseObserver (e.g. server streaming method), and pass the same exception (e.g. responseObserver.onError(new NullPointerException())), you end up with Unknown SRE instead of Internal, because such exceptions are not mapped.