Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.cyborg.co/llms.txt

Use this file to discover all available pages before exploring further.

Adds or updates vector embeddings in the index. If an item already exists at id, then it will be overwritten.
void Upsert(const std::vector<cyborg::ItemID>& ids,
            Array2D<float>& vectors,
            const std::vector<std::vector<uint8_t>>& contents = {},
            const std::vector<std::string>& json_metadata_array = {});

Parameters

ParameterTypeDescription
idsstd::vector<cyborg::ItemID>&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

  • Throws if vector dimensions are incompatible with the index configuration.
  • Throws if index was not created or loaded yet.
  • Throws if there is a mismatch between the number of vectors, ids, contents or metadata.
  • Throws if the vectors could not be upserted.

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);