Llm Message Sender
Framework-agnostic interface for making a single LLM inference call.
Implementations handle the actual LLM communication (Spring AI, LangChain4j, etc.) but do NOT execute tools - they just return the LLM's response including any tool call requests.
This allows the tool loop to be framework-agnostic while delegating the actual LLM communication to framework-specific implementations.