Skip to main content

JSON Type Definitions

CyborgDB provides strongly-typed JSON types for improved type safety when working with metadata and other JSON-serializable data.

JsonPrimitive

type JsonPrimitive = string | number | boolean | null;
Represents any valid JSON primitive value.

JsonValue

type JsonValue = JsonPrimitive | JsonObject | JsonArray;
Represents any valid JSON value. This is a recursive type definition used for metadata and other JSON-serializable data throughout the SDK.

JsonObject

interface JsonObject {
  [key: string]: JsonValue;
}
Represents a JSON object with string keys and JsonValue values.

JsonArray

type JsonArray = JsonValue[];
Represents a JSON array containing any valid JSON values.

VectorMetadata

type VectorMetadata = JsonObject;
Type alias for metadata associated with vector items. Metadata must be a valid JSON object.

Example Usage

import { VectorMetadata, JsonValue } from 'cyborgdb';

const metadata: VectorMetadata = {
    title: 'Document Title',
    author: 'John Doe',
    tags: ['ai', 'vectors', 'database'],
    published: true,
    score: 0.95,
    nested: {
        category: 'technology',
        subcategory: 'ai'
    }
};

CreateIndexRequest

The CreateIndexRequest interface defines the parameters for creating a new encrypted index.

Properties

ParameterTypeRequiredDescription
indexConfigIndexConfigYesConfiguration model specifying index type and parameters
indexKeyUint8ArrayYes32-byte encryption key
indexNamestringYesUnique name/identifier for the index
embeddingModelstring | nullNoOptional embedding model name for automatic vector generation

Example Usage

import { CreateIndexRequest, IndexIVF } from 'cyborgdb';

const createRequest: CreateIndexRequest = {
    indexConfig: {
        type: 'ivf',
        dimension: 768
    },
    indexKey: Client.generateKey(), // Uint8Array (32 bytes)
    indexName: 'my-vector-index',
    embeddingModel: 'text-embedding-3-small'
};

UpsertRequest

Interface for adding or updating vectors in an encrypted index.

Properties

ParameterTypeRequiredDescription
itemsVectorItem[]YesArray of vector items to insert or update

Example Usage

import { UpsertRequest, VectorItem } from 'cyborgdb';

const upsertRequest: UpsertRequest = {
    items: [
        {
            id: 'doc1',
            vector: [0.1, 0.2, 0.3, /* ... */],
            contents: 'Document content',
            metadata: { title: 'Document 1', category: 'research' }
        }
    ]
};

QueryRequest

Interface for performing similarity search in the encrypted index.

Properties

ParameterTypeRequiredDefaultDescription
queryVectorsnumber[] | number[][] | nullNo-Vector(s) for similarity search
queryContentsstring | nullNo-Text content for semantic search (requires embedding model)
topKnumberNoundefined (server default: 100)Number of nearest neighbors to return
nProbesnumberNoundefined (auto)Number of lists to probe during query. Auto-determined when undefined for optimal performance.
greedybooleanNofalseWhether to use greedy search algorithm
filtersobject | nullNoundefinedJSON-like dictionary for metadata filtering (no filtering when undefined)
includestring[]Noundefined (server default: ["distance", "metadata"])Fields to include in response. Note: id is always included.

Example Usage

import { QueryRequest } from 'cyborgdb';

const queryRequest: QueryRequest = {
    queryVectors: [0.1, 0.2, 0.3, /* ... */],
    topK: 10,
    nProbes: 5,
    greedy: false,
    filters: { category: 'research' },
    include: ['distance', 'metadata', 'vector']
};

BatchQueryRequest

Interface for performing batch similarity searches with multiple vectors.

Properties

ParameterTypeRequiredDefaultDescription
queryVectorsnumber[][]Yes-Array of vectors for batch similarity search
topKnumberNoundefined (server default: 100)Number of nearest neighbors to return per query
nProbesnumberNoundefined (auto)Number of lists to probe during each query. Auto-determined when undefined.
greedybooleanNofalseWhether to use greedy search algorithm
filtersobjectNoundefinedJSON-like dictionary for metadata filtering (no filtering when undefined)
includestring[]Noundefined (server default: ["distance", "metadata"])Fields to include in response. Note: id is always included.

Example Usage

import { BatchQueryRequest } from 'cyborgdb';

const batchQueryRequest: BatchQueryRequest = {
    queryVectors: [
        [0.1, 0.2, 0.3, /* ... */],
        [0.4, 0.5, 0.6, /* ... */],
        [0.7, 0.8, 0.9, /* ... */]
    ],
    topK: 5,
    nProbes: 3,
    filters: { status: 'published' },
    include: ['distance', 'metadata']
};

TrainRequest

Interface for training an index to optimize query performance.

Properties

ParameterTypeRequiredDescription
nListsnumberNoNumber of inverted lists for indexing
batchSizenumberNoSize of each batch for training
maxItersnumberNoMaximum iterations for training
tolerancenumberNoConvergence tolerance for training

Example Usage

import { TrainRequest } from 'cyborgdb';

const trainRequest: TrainRequest = {
    nLists: 8192,
    batchSize: 4096,
    maxIters: 150,
    tolerance: 1e-8,
};

DeleteRequest

Interface for deleting vectors from the encrypted index.

Properties

ParameterTypeRequiredDescription
idsstring[]YesArray of vector IDs to delete

Example Usage

import { DeleteRequest } from 'cyborgdb';

const deleteRequest: DeleteRequest = {
    ids: ['doc1', 'doc2', 'doc3']
};

GetRequest

Interface for retrieving specific vectors from the index.

Properties

ParameterTypeRequiredDefaultDescription
idsstring[]Yes-Array of vector IDs to retrieve
includestring[]No["vector", "contents", "metadata"]Fields to include in response

Example Usage

import { GetRequest } from 'cyborgdb';

const getRequest: GetRequest = {
    ids: ['doc1', 'doc2'],
    include: ['vector', 'metadata']
};

VectorItem

Class representing a vectorized item for storage in the encrypted index.

Properties

ParameterTypeRequiredDescription
idstringYesUnique identifier for the vector item
vectornumber[] | nullNo*Vector representation of the item. *Required for upsert operations unless using embedding model
contentsstring | nullNoOriginal text or associated content
metadataVectorMetadata | nullNoAdditional structured metadata (must be valid JSON)

Example Usage

import { VectorItem } from 'cyborgdb';

const vectorItem: VectorItem = {
    id: 'article_123',
    vector: [0.1, 0.2, 0.3, /* ... 768 dimensions */],
    contents: 'This is the content of the article...',
    metadata: {
        title: 'Introduction to Vector Databases',
        author: 'Dr. Smith',
        published_date: '2024-01-15',
        category: 'technology',
        tags: ['vectors', 'database', 'ai']
    }
};

Index Configuration Types

IndexIVF

Standard IVF (Inverted File) index configuration, ideal for balanced performance:
SpeedAccuracyMemory Usage
FastGoodMedium

Properties

ParameterTypeRequiredDefaultDescription
type'ivf'Yes-Index type identifier
dimensionnumber | nullNo-Dimensionality of vector embeddings

Example Usage

import { IndexIVF } from 'cyborgdb';

const indexConfig: IndexIVF = {
    type: 'ivf',
    dimension: 768
};

IndexIVFFlat

IVFFlat index configuration, suitable for highest accuracy requirements:
SpeedAccuracyMemory Usage
MediumHighestHigh

Properties

ParameterTypeRequiredDefaultDescription
type'ivfflat'Yes-Index type identifier
dimensionnumber | nullNo-Dimensionality of vector embeddings

Example Usage

import { IndexIVFFlat } from 'cyborgdb';

const indexConfig: IndexIVFFlat = {
    type: 'ivfflat',
    dimension: 1536
};

IndexIVFPQ

IVFPQ (Product Quantization) index configuration, optimized for memory efficiency:
SpeedAccuracyMemory Usage
FastGoodLow

Properties

ParameterTypeRequiredDefaultDescription
type'ivfpq'Yes-Index type identifier
pqDimnumberYes-Dimensionality after quantization
pqBitsnumberYes-Number of bits per quantizer (1-16)
dimensionnumber | nullNo-Dimensionality of vector embeddings

Example Usage

import { IndexIVFPQ } from 'cyborgdb';

const indexConfig: IndexIVFPQ = {
    type: 'ivfpq',
    pqDim: 64,
    pqBits: 8,
    dimension: 768
};

Response Types

UpsertResponse

Response interface for upsert operations.

Properties

ParameterTypeDescription
statusstringStatus of the operation
upsertedCountnumber (optional)Number of vectors upserted
messagestring (optional)Additional message or details

Example Usage

import { UpsertResponse } from 'cyborgdb';

const response: UpsertResponse = await index.upsert({
    items: [
        { id: 'doc1', vector: [0.1, 0.2, 0.3], contents: 'Content 1' },
        { id: 'doc2', vector: [0.4, 0.5, 0.6], contents: 'Content 2' }
    ]
});

console.log(`Upserted ${response.upsertedCount} vectors`);

DeleteResponse

Response interface for delete operations.

Properties

ParameterTypeDescription
statusstringStatus of the operation
deletedCountnumber (optional)Number of vectors deleted
messagestring (optional)Additional message or details

Example Usage

import { DeleteResponse } from 'cyborgdb';

const response: DeleteResponse = await index.delete({
    ids: ['doc1', 'doc2', 'doc3']
});

console.log(`Deleted ${response.deletedCount} vectors`);

TrainResponse

Response interface for training operations.

Properties

ParameterTypeDescription
statusstringStatus of the training operation
messagestring (optional)Additional message or details

Example Usage

import { TrainResponse } from 'cyborgdb';

const response: TrainResponse = await index.train({
    nLists: 8192,
    batchSize: 4096
});

console.log(`Training status: ${response.status}`);

HealthResponse

Response interface for health check operations.

Properties

ParameterTypeDescription
statusstringStatus of the service
[key: string]stringOptional additional health information

Example Usage

import { HealthResponse } from 'cyborgdb';

const health: HealthResponse = await client.getHealth();
console.log(`Service status: ${health.status}`);

TrainingStatus

Response interface for training status queries.

Properties

ParameterTypeDescription
training_indexesstring[]Array of index names currently being trained
retrain_thresholdnumberThe multiplier used for the retraining threshold

Example Usage

import { TrainingStatus } from 'cyborgdb';

const status: TrainingStatus = await client.isTraining();
console.log(`Training indexes: ${status.training_indexes.join(', ')}`);

GetResponseModel

Response class for vector retrieval operations.

Properties

ParameterTypeDescription
resultsGetResultItemModel[]Array of retrieved items with requested fields

GetResultItem

Enhanced type-safe result item for get operations. This type extends GetResultItemModel with proper typing for metadata and contents fields.

Properties

ParameterTypeDescription
idstringUnique identifier for the vector item
vectornumber[] (optional)Vector data (if included in response)
contentsBuffer | Blob | string (optional)The original content
metadataVectorMetadata (optional)Metadata associated with the vector

Example Usage

import { GetResultItem } from 'cyborgdb';

const response = await index.get({
    ids: ['doc1', 'doc2'],
    include: ['vector', 'metadata', 'contents']
});

// Use GetResultItem for type-safe access
response.results.forEach((item: GetResultItem) => {
    console.log(`ID: ${item.id}`);
    if (item.metadata) {
        console.log(`Title: ${item.metadata.title}`);
    }
    if (item.contents) {
        console.log(`Content: ${item.contents}`);
    }
});

QueryResponse

Response class for similarity search operations.

Properties

ParameterTypeDescription
resultsQueryResultItem[] | QueryResultItem[][]Search results (flat array for single queries, nested array for batch queries)

Example Usage

import { QueryResponse } from 'cyborgdb';

function processQueryResults(response: QueryResponse) {
    // Check if batch response by inspecting the structure
    if (Array.isArray(response.results) &&
        response.results.length > 0 &&
        Array.isArray(response.results[0])) {
        // Handle batch results
        const batchResults = response.results as QueryResultItem[][];
        batchResults.forEach((batch, index) => {
            console.log(`Batch ${index}:`, batch);
        });
    } else {
        // Handle single query results
        const singleResults = response.results as QueryResultItem[];
        console.log('Results:', singleResults);
    }
}

QueryResultItem

Class representing a single result from similarity search.

Properties

ParameterTypeDescription
idstringIdentifier of the retrieved item
distancenumber | nullDistance from query vector (lower = more similar)
metadataobject | nullAdditional metadata for the result
vectornumber[] | nullRetrieved vector (if included in response)

Error Types

ErrorResponseModel

Standard error response class for API errors.

Properties

ParameterTypeDescription
statusCodenumberHTTP status code of the error
detailstringDetailed message describing the error

HTTPValidationError

Class for validation errors with detailed field information.

Properties

ParameterTypeDescription
detailValidationError[]Array of validation errors with field details

Metadata Filtering

The filters parameter in query operations supports a subset of MongoDB query operators for flexible metadata filtering:

Supported Operators

  • $eq: Equality ({ "category": "research" })
  • $ne: Not equal ({ "status": { "$ne": "draft" } })
  • $gt: Greater than ({ "score": { "$gt": 0.8 } })
  • $gte: Greater than or equal ({ "year": { "$gte": 2020 } })
  • $lt: Less than ({ "price": { "$lt": 100 } })
  • $lte: Less than or equal ({ "rating": { "$lte": 4.5 } })
  • $in: In array ({ "tag": { "$in": ["ai", "ml"] } })
  • $nin: Not in array ({ "category": { "$nin": ["spam", "deleted"] } })
  • $and: Logical AND ({ "$and": [{"a": 1}, {"b": 2}] })
  • $or: Logical OR ({ "$or": [{"x": 1}, {"y": 2}] })

Filter Examples

// Simple equality filter
const simpleFilter = { "category": "research" };

// Range filter
const rangeFilter = { 
    "published_year": { "$gte": 2020, "$lte": 2024 } 
};

// Complex compound filter
const complexFilter = {
    "$and": [
        { "category": "research" },
        { "confidence": { "$gte": 0.9 } },
        { "$or": [
            { "language": "en" },
            { "translated": true }
        ]}
    ]
};
For more information on metadata filtering, see Metadata Filtering.

Field Selection

Many operations support field selection through the include parameter:

Available Fields

  • vector: The vector data itself
  • contents: Text or binary content associated with the vector
  • metadata: Structured metadata object
  • distance: Similarity distance (query operations only)

Example Usage

// Include only metadata (efficient for existence checks)
const metadataOnly = { include: ['metadata'] };

// Include vectors and distances (for similarity analysis)
const vectorsAndDistances = { include: ['vector', 'distance'] };

// Include all available fields
const allFields = { include: ['vector', 'contents', 'metadata', 'distance'] };
Selecting only necessary fields improves performance by reducing data transfer and processing overhead.

Filter Types

FilterExpression

type FilterExpression = {
  [key: string]: FilterValue | FilterOperator;
};
Type for constructing MongoDB-style filter expressions for querying vectors. Supports nested logical operators and field comparisons.

FilterValue

type FilterValue = JsonPrimitive | JsonArray;
Represents possible filter values in filter expressions - can be any JSON primitive or array.

FilterOperator

interface FilterOperator {
  $eq?: FilterValue;
  $ne?: FilterValue;
  $gt?: number;
  $gte?: number;
  $lt?: number;
  $lte?: number;
  $in?: JsonArray;
  $nin?: JsonArray;
  $and?: FilterExpression[];
  $or?: FilterExpression[];
  $not?: FilterExpression;
  $exists?: boolean;
}
Interface defining MongoDB-style query operators for metadata filtering. See the Metadata Filtering section for detailed examples.

Example Usage

import { FilterExpression } from 'cyborgdb';

// Type-safe filter construction
const filter: FilterExpression = {
    category: "research",
    published_year: { $gte: 2020, $lte: 2024 },
    $and: [
        { confidence: { $gte: 0.9 } },
        { $or: [
            { language: "en" },
            { translated: true }
        ]}
    ]
};

const results = await index.query({
    queryVectors: [0.1, 0.2, 0.3],
    topK: 10,
    filters: filter
});

Utility Functions

The SDK provides type guard and utility functions for safer type checking and error handling.

isJsonValue

function isJsonValue(value: unknown, visited?: WeakSet<object>): value is JsonValue
Type guard function to check if a value is a valid JSON value. Handles circular references by tracking visited objects.

Parameters

ParameterTypeRequiredDescription
valueunknownYesThe value to check
visitedWeakSet<object>NoInternal parameter for tracking circular references

Returns

boolean: Returns true if the value is a valid JSON value, false otherwise.

Example Usage

import { isJsonValue } from 'cyborgdb';

const data = {
    name: "John",
    age: 30,
    tags: ["developer", "typescript"]
};

if (isJsonValue(data)) {
    // Safe to use as metadata
    const item = {
        id: 'user1',
        vector: [0.1, 0.2, 0.3],
        metadata: data
    };
}

// Detects invalid JSON (circular references, functions, etc.)
const circular: any = {};
circular.self = circular;
console.log(isJsonValue(circular)); // false

isError

function isError(error: unknown): error is Error
Type guard to check if an error is an Error instance.

Parameters

ParameterTypeRequiredDescription
errorunknownYesThe value to check

Returns

boolean: Returns true if the value is an Error instance, false otherwise.

Example Usage

import { isError } from 'cyborgdb';

try {
    await index.query({ queryVectors: [0.1, 0.2] });
} catch (error) {
    if (isError(error)) {
        console.error(`Error message: ${error.message}`);
        console.error(`Stack trace: ${error.stack}`);
    } else {
        console.error('Unknown error type:', error);
    }
}

getErrorMessage

function getErrorMessage(error: unknown): string
Helper function to safely extract error messages from unknown error types.

Parameters

ParameterTypeRequiredDescription
errorunknownYesThe error to extract a message from

Returns

string: A string message extracted from the error. Returns the error’s message property if it’s an Error, converts to string otherwise.

Example Usage

import { getErrorMessage } from 'cyborgdb';

try {
    await index.upsert({ items: [] });
} catch (error) {
    // Safely get error message regardless of error type
    const message = getErrorMessage(error);
    console.error(`Operation failed: ${message}`);

    // Log to monitoring service
    logger.error({
        operation: 'upsert',
        error: message
    });
}