llm.invoke() does not actually call a Langchain Tool. It only generates a ToolCall as part of the response's .tool_calls property. This ToolCall then needs to be manually invoked on a Tool.
See here:
https://python.langchain.com/docs/how_to/tool_results_pass_to_model/ https://python.langchain.com/docs/how_to/tool_calling/#defining-tool-schemas