It should most definitely be a valid assumption.
If the key passes through their servers at all (and it probably does,) then they have access to the keys and sufficient information to decrypt it. it’s possible the app does send keys independent of their server- I don’t know- but I very much doubt it.
The keys shouldn’t be on or go through a server anywhere, that would be an absolute joke.
What makes you think that private keys are being sent anywhere? This app uses a slightly modified version of the Signal protocol (because of course it does), as they describe here, section 27, page 90. Only public keys should ever leave your device, otherwise no amount of showing the code would make it secure. That’s the whole point.
Again, with the client code you should be able to tell that the keys are generated there and not sent anywhere.
As I said, with any app, just because they publish some server code does not mean that that’s what they’re running on their server - for security you have to be sure that the app is sufficiently secure on its own. Even if they were running the exact public code that “didn’t save the keys” the server could harvest them from memory.
You seem to be a bit confused about how asymmetric encryption works. There is no need for private keys to be transmitted for a messaging service to work. I encourage you to read about the difference between public and private keys in asymmetric encryption. They are generated in pairs, such that when something is encrypted using a public key, it can only be decrypted using the corresponding private key. So it’s not correct to say that the message can’t be decrypted by the intended recipient - they are in fact the only party who can, but even the sender can not.