An implementation may put the content of the encrypted message wherever it wants, and format the encrypted message any way it wants, including different text encodings such as Base64
You will need to take that into account, when decrypting the message, the input must be formatted in the way that an implementation is expecting, and that may be very different than what you have, or that a different implementation may output.
There may also be other things which are not part of the message, such as the expected size of the auth tag or nonce, but all implementations following the spec will deal with variations in size correctly, as long as they are told to do so.
For example, implementation A may output the data in this way [nonce][message][tag], and it may expect 3 inputs for decryption, output data stream, auth data, and key, then extract the nonce and tag from the message automatically, since that implementation only uses 96-bit nonce and tag sizes.
Implementation B may output the message, tag, auth data, and nonce as a Base64 formatted strings inside an XML file, and only take the same XML file and the key as inputs, and will detect the size of the nonce and tags from their specified lengths in the file, decode from B64, and decrypt the message.
As long as you can translate the encoding from one to another, you should be able to make them compatible. The dev documentation of those projects should show what output format they use, and if there are runtime options to modify that format.