I have tried using LLamaIndex and APIs are just aweful. It's a nightmare of class hierarchies and abstractions that only author can wrap their heads around. Comments are basically useless classic style of rewriting the function name. Just look at this example:
def get_context(self, response: Response) -> List[Document]:
"""Get context information from given Response object using source nodes.
To be honest - I had the opposite feeling - I found it pretty easy to wrap my head around their abstractions. If anything - I believe their abstractions are quite clean as I was able to navigate their codebase quite easily. Their "context" abstraction was an interesting choice admittedly but that's the only non-intuitive thing I found.
Disclaimer: I worked in this space for a few years as an ML engineer so it might be quite different for new entrants in the field.
Disclaimer: I worked in this space for a few years as an ML engineer so it might be quite different for new entrants in the field.