Skip to content

SupabaseVectorStore lacks metadata filter support #2008

Open
@navjot227

Description

@navjot227

Describe the bug
Adding metadata filter to supabase vector store doesn't take effect.

To Reproduce
Code to reproduce the behavior:

export async function chatWithLlama(workspaceId: string, userMessage: string, chatHistory: LlamaChatMessage[]) {
    Settings.embedModel = new OpenAIEmbedding();
    Settings.llm = new LlamaOpenAI({ model: process.env.LLM_MODEL! });
    const supabaseClient = createAdminClient();
    const vectorStore = new SupabaseVectorStore({
        client: supabaseClient,
        table: "document",
    });

    index = await VectorStoreIndex.fromVectorStore(vectorStore);
    const retriever = index.asRetriever({
        filters: {
            filters: [{
                key: "workspaceId",
                operator: "==",
                value: "abc"
            }]
        }
    })

    const chatEngine = index.asChatEngine({
        retriever,
        chatHistory: chatHistory,
        systemPrompt: `You are a helpful assistant that can answer questions about the documents provided. 
                       You can use the documents to answer questions. 
                       Say 'I don't know' if you can't find enough information in the provided documents.`
    });
    const response = await chatEngine.chat({ message: userMessage });
    console.log(JSON.stringify(response));
    return { response: response.message.content };
}

Expected a filter to have shown up in the logs. No filter shows up in the logs and records are not filtered as expected

create or replace function match_documents (
  match_count int,
  query_embedding vector(1536),
  filter jsonb default '{}'
)
returns table (
  id uuid,
  content text,
  metadata jsonb,
  similarity float
)
language plpgsql stable
as $$
begin
  -- This line will print the received filter 
  raise warning 'match_documents received filter: %', filter;

  return query
    select
      d.id,
      d.content,
      d.metadata,
      1 - (d.embedding <=> query_embedding) as similarity
    from document as d
    where d.metadata @> filter
    order by d.embedding <=> query_embedding
    limit match_count;
end;
$$;

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. macOS, Linux]
  • JS Runtime / Framework / Bundler (select all applicable)
  • Node.js
  • Deno
  • Bun
  • Next.js
  • ESBuild
  • Rollup
  • Webpack
  • Turbopack
  • Vite
  • Waku
  • Edge Runtime
  • AWS Lambda
  • Cloudflare Worker
  • Others (please elaborate on this)
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

I would have expected filters be handled in SupabaseVectorStore, but that doesn't seem to be the case.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinggood first issueGood for newcomershelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions