firebase / genkit

An open source framework for building AI-powered apps with familiar code-centric patterns. Genkit makes it easy to integrate, test, and deploy sophisticated AI features to Firebase or Google Cloud.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Type error in retrievers [JS]

cabljac opened this issue · comments

Describe the bug
The types should complain in the options for the pinecone retriever. I get a runtime error:

Using DevFlowStateStore. Root: /var/folders/y9/0j765brj643gjz3ggwkpn2740000gn/T/.genkit/47a1bd8a68530c0ff153aeb3c40b4c32/flows
Error[/dev-run-action-wrapper/filmRetrieverFlow/filmRetrieverFlow, TypeError] {
  path: '/dev-run-action-wrapper/filmRetrieverFlow/filmRetrieverFlow',
  name: 'TypeError',
  message: "Cannot read properties of undefined (reading 'namespace')",
  stack: "TypeError: Cannot read properties of undefined (reading 'namespace')\n" +
    '    at /Users/jacob/invertase/genkit/genkit-samples/naive-rag/pinecone/node_modules/genkitx-pinecone/lib/index.js:156:37\n' +
    '    at Generator.next (<anonymous>)\n' +
    '    at fulfilled (/Users/jacob/invertase/genkit/genkit-samples/naive-rag/pinecone/node_modules/genkitx-pinecone/lib/index.js:47:24)\n' +
    '    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)',
  source: 'ts',
  sourceVersion: '0.5.0'
}

To Reproduce

The following code gives no type errors, but it should. The retriever won't work unless you specify k which is the number of results you wish to return.

import { config } from "dotenv";
config();
import { index, retrieve } from "@genkit-ai/ai/retriever";
import { configureGenkit } from "@genkit-ai/core";
import { defineFlow } from "@genkit-ai/flow";
import { textEmbeddingGecko, vertexAI } from "@genkit-ai/vertexai";
import { z } from "zod";
import { pineconeRetrieverRef } from "genkitx-pinecone";
import { pineconeIndexerRef } from "genkitx-pinecone";
import { pinecone } from "genkitx-pinecone";

if (!process.env.PINECONE_API_KEY) {
  throw new Error("PINECONE_API_KEY is required");
}

const fakeData = [
  {
    content: [
      {
        text: "A film about dodging bullets",
      },
    ],
    metadata: {
      name: "The Matrix",
    },
  },
  {
    content: [
      {
        text: "A film about a space opera",
      },
    ],
    metadata: {
      name: "Star Wars",
    },
  },
  {
    content: [
      {
        text: "A film about a young wizard",
      },
    ],
    metadata: {
      name: "Harry Potter",
    },
  },
];

export default configureGenkit({
  plugins: [
    vertexAI(),
    pinecone([
      {
        indexId: "films",
        embedder: textEmbeddingGecko,
        clientParams: {
          apiKey: process.env.PINECONE_API_KEY,
        },
      },
    ]),
  ],
});

export const filmRetriever = pineconeRetrieverRef({
  indexId: "films",
});

export const filmIndexer = pineconeIndexerRef({
  indexId: "films",
});

export const filmIndexerFlow = defineFlow(
  {
    name: "filmIndexerFlow",
  },
  async () => {
    const documents = fakeData;

    await index({ indexer: filmIndexer, documents });
  }
);

export const filmRetrieverFlow = defineFlow(
  {
    name: "filmRetrieverFlow",
    inputSchema: z.object({ query: z.string() }),
    // outputSchema: z.array(z.string()),
  },
  async ({ query, k }) => {
    const docs = await retrieve({ retriever: filmRetriever, query });

    console.log(docs);

    // return docs.map((d) => d.metadata!.name!);
  }
);

Expected behavior
A type error about not having k in the options of retrieve.

Runtime (please complete the following information):

  • OS: MacOS
  • Version [e.g. 0.5.2]

** Node version

  • run node --version at paste here
20.11.1

Additional context
genkit is on 0.5.2

I had some other issues with retrievers, will open new issues for them at a later point

same here