AFAIK llamaindex is built on langchain to save you a lot of time and lines of code, and also constantly adding new stuff (as does langchain) as dataloaders, different indeces, all kinds of cool stuff like nodes pre and post processing, reranking, query optimization, query decomposition, custom query engines and whatnot. you can still use langchain, for example when using agents or more realistically when going the route of textsplitting by token size. I'd say its complementary, do whatever you can do with llama_index and whatever you cant use langchain.