Your amps use a serial connection, which wouldn’t be able to be supported directly from a SmartThings driver running on the SmartThings hub. So that means you’d need to repurpose your Pi app to become kind of a server to process commands from SmartThings and do the necessary interfacing with the amp. You probably already know all this…
One option, which could avoid any kind of custom Edge driver altogether, might be to have your Pi app use the SmartThings RESTful API to monitor some virtual device states to control you amps. The downsides of that is a convoluted set of virtual devices within the SmartThings app (no convenient single interface), and your Pi app would actually need to to poll the API, which is usually not a great design.
Another option could be to set up your Pi to run a native SmartThings SmartApp (typically in nodeJS). This would allow you to ‘subscribe’ to SmartThings device states and have a nice way to trigger commands to the amp. But this requires a lot of setup, an internet connection, and this also doesn’t address your need of having a customized device within SmartThings to interact with. And you’d still be faced with the work of implementing an Edge driver to actually implement the SmartThings device - unless you come up with some combination of virtual devices to achieve your needs.
Another option is to implement a direct-connected device on your Pi. It takes a bit of setup, and also requires an internet connection. I used to have a github project to enable this, but it is no longer needed, as Pi support is now built into the Core SDK for direct connected devices. One advantage of this approach is that you avoid having to do an Edge driver and the learning curve that would entail.
Creating a custom Edge driver would allow you to optimize a SmartThings device specific to your needs. But you still have the need to interface to your Pi app from the hub. You could implement your own HTTP-based API, or use something like MQTT if you don’t mind installing the Mosquitto MQTT broker on your Pi (a fairly simple thing to do). Using MQTT could alleviate you from a lot of headaches of implementing a custom communication interface.
You mentioned the Rules API: no, that’s not going to help you. That’s just a slightly more sophisticated method of creating automations.
So all things considered, I’d say if you don’t mind depending on an internet connection, then a direct connected device may be the best fit for you. If keeping everything running on your local LAN is a priority, then implementing a custom Edge driver and using MQTT might be a way to go.
There are other third party tools like Action Tiles or Node Red that might help you, but I’m not familiar enough with them to comment.