Skip to main content

RAG Pipeline Utils v3.7: Weaviate, Pinecone Without an Embedder, and Answers Checked With Units

· 4 min read
Ali Kahwaji
Creator & Maintainer of RAG Pipeline Utils

v3.7.0 adds Weaviate. It also makes Pinecone work on the indexes its console creates for you, with no embedder needed. The answer check now reads units, fractions and times, and was measured against the Claude benchmarks before release. Nothing breaks for existing code.

npm install @devilsdev/rag-pipeline-utils@^3.7.0

Weaviate​

WeaviateRetriever keeps documents in a Weaviate collection. It uses the REST and GraphQL APIs with the built-in fetch, so there's nothing to install, and it runs on the edge build too.

const retriever = new WeaviateRetriever({
url: process.env.WEAVIATE_URL, // default http://localhost:8080
collection: "RagDocuments",
});

On the first store() it creates a collection for the vectors you provide. It also works with one created elsewhere, and it only touches the objects it wrote. It passes the same retriever contract as pgvector, Qdrant and Pinecone, against a real Weaviate 1.40.4 in CI. Weaviate

Pinecone, with no embedder​

Pinecone's console quick start creates an index that embeds text itself: you send text, and Pinecone runs the model. 3.6.0 refused those indexes, because they have no field for your vectors. 3.7.0 uses them as they are:

  • store() sends each document's text;
  • retrieve() searches by the query's text;
  • a pipeline needs no embedder.
const retriever = new PineconeRetriever({ index: "quickstart" });
const pipeline = createRagPipeline({ retriever, llm }); // no embedder

The CLI does the same: with such an index, .ragrc.json needs no embedder stage, and rag-pipeline ingest stores the text without computing vectors. Before this release the retriever ran its full test suite live on real indexes of all three kinds Pinecone offers:

  • document indexes with a vector field;
  • classic vector indexes;
  • indexes that embed text.

Pinecone

Answers checked with units​

The answer check compared numbers as bare numbers. So "2 pounds" passed against "2 kilograms", and "2 kg" failed against "2,000 grams". 3.7 reads a number with a unit as a quantity and converts it exactly within its kind: mass, length, durations from seconds to weeks, and months to years.

  • "90 minutes" matches "one and a half hours".
  • "3 weeks" no longer passes against "3 days".
  • "Three quarters of" reads as 75%.
  • "5 pm" and "9 to 5" match 17:00 and 9:00 to 17:00 when the source states clock times.
  • A month is not converted to days, because a month isn't a fixed number of days.

Two false alarms that 3.6's clause rule added are fixed too.

The method was the same as for 3.6:

  • the cases were written for this project and committed before any change;
  • the code was frozen;
  • the published sets were run.

That run found three regressions of our own, in Yelp answers: opening hours written "7:0-23:0", and "up to 8 people" read as a time. They were fixed, test cases first, and the sets were run once more.

The results:

  • SciFact citations: every claim the check flagged was reviewed by hand. False alarms fell from 43 to 35 across five Claude models, and the 3 real problems were still caught.
  • RAGTruth and HaluEval: barely move. They contain few units.

The full 3.6.0 vs 3.7 tables are on the Benchmarks page. Verdicts can change, so re-save the report you compare against with rag-pipeline eval --baseline.

Clearer CLI errors​

With no key or a refused one, the CLI now says it in one line, with no stack trace (unless --verbose). It never prints the key, even when the API's own error message echoes part of it.

❌ Query failed: no Anthropic API key. Set ANTHROPIC_API_KEY and run the command again.
❌ Query failed: Anthropic rejected the API key (401 authentication_error: invalid x-api-key). Check ANTHROPIC_API_KEY.

Also​

  • A DAG run with a timeout no longer keeps the process alive. This includes AgenticPipeline's 60-second default. The timer is now cleared when the run ends.
  • The logger writes synchronously, with no process exit listener, so repeated module loads, as in a test runner, no longer print warnings.
  • Qdrant and Pinecone are now checked in the Workers runtime on every change, from the installed package, on the main entry and on /edge.
  • Every release now gets a draft blog post as a pull request, written from the CHANGELOG.

The scoped packages, @devilsdev/rag-mcp-server and create-rag-pipeline are released at 3.7.0 too. Full details: CHANGELOG.