run-llama/LlamaIndexTS

SupabaseVectorStore lacks metadata filter support

开放

#2,008 创建于 2025年6月9日

 (4 条评论) (0 个反应) (0 位负责人)TypeScript (524 个派生)auto 404
buggood first issuehelp wanted

仓库指标

星标
 (3,078 个星标)
PR 合并指标
 (30 天内没有已合并 PR)

描述

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.

贡献者指南