diff --git a/lib/langchain/vectorsearch/milvus.rb b/lib/langchain/vectorsearch/milvus.rb index 4a6e77562..b2eb00116 100644 --- a/lib/langchain/vectorsearch/milvus.rb +++ b/lib/langchain/vectorsearch/milvus.rb @@ -39,6 +39,21 @@ def add_texts(texts:) ) end + # Deletes a list of texts in the index + # + # @param ids [Array] The ids of texts to delete + # @return [Boolean] The response from the server + def remove_texts(ids:) + raise ArgumentError, "ids must be an array" unless ids.is_a?(Array) + # Convert ids to integers if strings are passed + ids = ids.map(&:to_i) + + client.entities.delete( + collection_name: index_name, + expression: "id in #{ids}" + ) + end + # TODO: Add update_texts method # Create default schema @@ -83,7 +98,7 @@ def create_default_schema # @return [Boolean] The response from the server def create_default_index client.indices.create( - collection_name: "Documents", + collection_name: index_name, field_name: "vectors", extra_params: [ {key: "metric_type", value: "L2"}, diff --git a/spec/langchain/vectorsearch/milvus_spec.rb b/spec/langchain/vectorsearch/milvus_spec.rb index c4741c920..6a316ee69 100644 --- a/spec/langchain/vectorsearch/milvus_spec.rb +++ b/spec/langchain/vectorsearch/milvus_spec.rb @@ -89,6 +89,18 @@ end end + describe "remove_texts" do + let(:response) { {"status" => {}, "IDs" => {"IdField" => nil}, "delete_cnt" => 1} } + + before do + allow(subject.client).to receive_message_chain(:entities, :delete).and_return(response) + end + + it "adds texts" do + expect(subject.remove_texts(ids: [450847466900986695])).to eq(response) + end + end + describe "#similarity_search_by_vector" do before do allow(subject.client.collections).to receive(:load).and_return(true)