Vector Databases
Caskada does NOT provide built-in utilities
Instead, we offer examples that you can implement yourself. This approach gives you more flexibility and control over your project's dependencies and functionality.
Below is a table of the popular vector search solutions:
Tool
Free Tier
Pricing Model
Docs
Example Code
Below are basic usage snippets for each tool.
1. FAISS (Facebook AI Similarity Search)
FAISS is primarily a C++ library with Python bindings, optimized for performance. It's typically used for in-memory indexing or self-hosted scenarios. Direct usage from Node.js/TypeScript is less common without a dedicated server or WASM compilation.
# Requires: pip install faiss-cpu # or faiss-gpu
import faiss
import numpy as np
from typing import List, Tuple, Any # Added for type hints
def create_faiss_index(dimension: int) -> faiss.Index:
"""Creates a simple FAISS index."""
# Example: Flat L2 index
index = faiss.IndexFlatL2(dimension)
return index
def add_to_faiss_index(index: faiss.Index, vectors: np.ndarray):
"""Adds vectors to the FAISS index."""
# Ensure vectors are float32
if vectors.dtype != 'float32':
vectors = vectors.astype('float32')
index.add(vectors)
def search_faiss_index(index: faiss.Index, query_vector: np.ndarray, top_k: int = 5) -> Tuple[np.ndarray, np.ndarray]:
"""Searches the FAISS index."""
if query_vector.dtype != 'float32':
query_vector = query_vector.astype('float32')
# Ensure query is 2D array
if query_vector.ndim == 1:
query_vector = np.array([query_vector])
distances, indices = index.search(query_vector, top_k)
return distances, indices
# Example Usage:
# d = 128 # Dimensionality of embeddings
# index = create_faiss_index(d)
# print(f"Index created. Is trained: {index.is_trained}, Total vectors: {index.ntotal}")
# data_vectors = np.random.random((1000, d)).astype('float32')
# add_to_faiss_index(index, data_vectors)
# print(f"Added {data_vectors.shape[0]} vectors. Total vectors: {index.ntotal}")
# query = np.random.random((1, d)).astype('float32')
# D, I = search_faiss_index(index, query, k=5)
# print("Distances:", D)
# print("Neighbors:", I)
# In production, you would also add functions to:
# - save_index(index, filename) -> faiss.write_index(index, filename)
# - load_index(filename) -> faiss.read_index(filename)2. Pinecone
3. Qdrant
4. Weaviate
5. Milvus
6. Chroma
7. Redis Stack (with Vector Search)
Last updated