This article maps out the landscape of programming abstractions for working with LLMs. Prior to this, there wasn't any thorough attempt that we know of to make sense of and organize all of these different approaches and philosophies for programmatically incorporating LLMs into larger systems or pipelines. Hopefully this is helpful to folks who are trying to make sense of the landscape of abstractions for working with LLMs!