Programmatically Interacting with LLMS different techniques for local, remote, rag and function calling