Adds or updates vector embeddings in the index. If an item already exists at id, then it will be overwritten.

void Upsert(Array2D<float>& vectors,
            const std::vector<std::string>& ids,
            const std::vector<std::vector<uint8_t>>& contents = {},
            const std::vector<std::string>& json_metadata_array = {});

Parameters

ParameterTypeDescription
idsstd::vector<std::string>&Unique identifiers for each vector.
vectorsArray2D<float>2D container with vector embeddings to index.
contentsstd::vector<std::vector<uint8_t>>&(Optional) Item contents in bytes.
json_metadata_arraystd::vector<std::string>&(Optional) Item metadata in serialized JSON strings.
For more info on metadata, see Metadata Filtering.

Exceptions

Example Usage

cyborg::Array2D<float> embeddings{{0.1, 0.2, 0.3}, {0.4, 0.5, 0.6}};
std::vector<std::string> ids = {"item_1", "item_2"};

// Upsert without additional item data
index->Upsert(ids, embeddings);

// Upsert with associated items
std::vector<std::vector<uint8_t>> items = {
    {'a', 'b', 'c'}, {'d', 'e', 'f'}, {'g', 'h', 'i'}
};
index->Upsert(ids, embeddings, items);

// Upsert with metadata
std::vector<std::string> metadata = {"\"type\": \"image\"", "\"type\": \"text\""}
index->Upsert(ids, embeddings, items, metadata);