A Tale of PGVector and Friends: The Joy Of Software Naming


Ah, the world of software! A place where creativity and collaboration come together to create amazing projects. But sometimes, this world can be a bit… confusing. Let me tell you a story about the frustration of open source naming, featuring our protagonist: PGVector.

Once upon a time, I though that pgvector was a postgresql extension. And that langchain did not support SQL storage out of the box. After reading the source, turned out there were three things named PGVector:

  1. A Postgres extension: pgvector/pgvector
  2. A Python SQLAlchemy(and friends) wrapper module for the above: pgvector/pgvector-python
  3. A Langchain wrapper for the above: Langchain PGVector

But wait, there’s more! The Python version of Langchain overloads PGVector, while Langchain.js doesn’t have PGVector at all. Instead, it calls it Prisma . Confused yet?

And let’s not forget that Langchain and Langchain.js are not quite the same thing. It’s like a never-ending maze of naming!

Here is a full list of langchain Indexes (which are actually databases!) in Langchain.js:

None of the names tell you if it’s an open source backend, a super-exotic cloud database or SQL-with-a-popular-extension. It’s like trying to find a needle in a haystack!

So, dear reader, the next time you get to name a project or a feature, remember the tale of PGVector and friends. May your users be less confused, and may your naming be clear and concise.

ps. Everyone who contributes to langchain, you guys are fantastic. Busted out laughing once I realized my main complaint about langchain was a reading-comprehension issue!