The converse API in AWS bedrock lets you use function calling across a number of different providers (doesn’t support OpenAI): https://docs.aws.amazon.com/bedrock/latest/userguide/convers...
I have been using it so that my agents aren’t specific to a particular model or api.
Like others have said many other providers already have function calling and json schema for structure outputs.