I think that handle_input() executes the tool?
That's the intention and it should work but it hasn't been tested.
Also, separately there is a method called _run_tool() (although unlike _rerun_tool() I can't see anything that calls it).
Looks like _run_tool is almost a copy of what's in create(). This is probably legacy code from refactoring that hasn't been cleaned up yet.
So, I thought from looking at the surface, that the tool-running code was there and that I just didn't know what data structure to pass into payload['inputs'] . Is it not doing what I think?
I think your inference is correct, but, yes, there's the problem of specifying the tool input data structure. Tool inputs are specified as dictionaries (often with nested dictionaries for things like conditionals), so you could construct an appropriate input dictionary and could (likely) run a tool. However, there's no help in the API right now to help you construct an appropriate dictionary for a tool; this is the big missing piece in the tools API. Best, J.