Skip to content

Migration from VectorDB

beginner

Move from Pinecone, Weaviate, or ChromaDB to Engramma. Map concepts, export data, and start using cognitive memory in under an hour.

What you'll build

A migration script that moves your vectors and metadata from your current vector database to Engramma — plus a concept mapping to understand what you gain.

Prerequisites

RequirementDetails
AccountStarter tier or above (for bulk import)
API keyFrom your dashboard
SDKPython or JavaScript
Existing dataAn active Pinecone, Weaviate, or ChromaDB instance
Time~30-60 minutes (depends on data volume)

Concept mapping

Your existing knowledge translates directly:

Vector DB conceptEngramma equivalentWhat changes
Vector/EmbeddingPatternEngramma also stores text, not just vectors
Index/CollectionMemory SpaceOne per API key (or use metadata for namespaces)
NamespaceMetadata filterUse metadata_filter to segment data
Cosine similarityConfidence scoreConfidence combines 3 pathways, not just cosine
UpsertStoreSame operation, richer result
QueryRetrieveReturns confidence + pathway + causal chain
MetadataMetadataCarries over directly
ConsolidationNew: memory quality improves over time
Causal linksNew: facts connect automatically
ExplainabilityNew: every result has a reason

Steps

1

Export from your current database

Extract your vectors, text, and metadata from Pinecone, Weaviate, or ChromaDB.
2

Transform to Engramma format

Map your data to Engramma's store format. If you have raw text, use the text endpoint. If you only have embeddings, use the embedding endpoint.
3

Import into Engramma

Batch-store your data into Engramma.
4

Consolidate

Run a consolidation cycle to let the engine organize, deduplicate, and build causal links.
5

Validate

Run your existing queries against Engramma and compare results.

Migration from Pinecone

import os
import pinecone
from engramma_cloud import EngrammaClient

# Source: Pinecone
pinecone.init(api_key=os.environ["PINECONE_API_KEY"])
index = pinecone.Index("my-index")

# Destination: Engramma
engramma = EngrammaClient(api_key=os.environ["ENGRAMMA_API_KEY"])

# Export from Pinecone (paginated)
def export_pinecone(namespace="", batch_size=100):
    results = index.query(
        vector=[0.0] * 1536,  # dummy vector to fetch all
        top_k=batch_size,
        include_metadata=True,
        include_values=True,
        namespace=namespace
    )
    return results.matches

# Import into Engramma
matches = export_pinecone()
for match in matches:
    text = match.metadata.get("text", "")
    if text:
        # Prefer text store (re-encodes with Engramma's encoding)
        engramma.store(text, metadata=match.metadata)
    else:
        # Fallback: store raw embedding
        engramma.store_embedding(
            embedding=match.values,
            metadata=match.metadata
        )

print(f"Migrated {len(matches)} vectors from Pinecone")

# Consolidate after import
result = engramma.consolidate()
print(f"Consolidated: {result.merged} merged, {result.pruned} pruned")

Migration from Weaviate

import os
import weaviate
from engramma_cloud import EngrammaClient

# Source: Weaviate
weaviate_client = weaviate.Client("http://localhost:8080")

# Destination: Engramma
engramma = EngrammaClient(api_key=os.environ["ENGRAMMA_API_KEY"])

# Export from Weaviate
result = weaviate_client.query.get(
    "Document", ["content", "title", "category"]
).with_limit(1000).do()

documents = result["data"]["Get"]["Document"]

# Import into Engramma
for doc in documents:
    engramma.store(
        doc["content"],
        metadata={
            "title": doc.get("title"),
            "category": doc.get("category"),
            "source": "weaviate_migration"
        }
    )

print(f"Migrated {len(documents)} documents from Weaviate")

# Consolidate
result = engramma.consolidate()
print(f"Consolidated: {result.merged} merged, {result.pruned} pruned")

Migration from ChromaDB

import os
import chromadb
from engramma_cloud import EngrammaClient

# Source: ChromaDB
chroma = chromadb.Client()
collection = chroma.get_collection("my-collection")

# Destination: Engramma
engramma = EngrammaClient(api_key=os.environ["ENGRAMMA_API_KEY"])

# Export from ChromaDB
results = collection.get(
    include=["documents", "metadatas", "embeddings"]
)

# Import into Engramma
for i, doc in enumerate(results["documents"]):
    metadata = results["metadatas"][i] if results["metadatas"] else {}
    metadata["source"] = "chromadb_migration"
    
    if doc:
        engramma.store(doc, metadata=metadata)
    elif results["embeddings"] and results["embeddings"][i]:
        engramma.store_embedding(
            embedding=results["embeddings"][i],
            metadata=metadata
        )

print(f"Migrated {len(results['documents'])} items from ChromaDB")

# Consolidate
result = engramma.consolidate()
print(f"Consolidated: {result.merged} merged, {result.pruned} pruned")

Validating your migration

After importing, verify that your existing queries work as expected:

# Run your most important queries and compare
test_queries = [
    "What is our deployment process?",
    "Who is responsible for the billing system?",
    "What are the main risks in Q2?"
]

for query in test_queries:
    results = engramma.retrieve(query, top_k=3)
    print(f"\nQuery: {query}")
    for r in results:
        print(f"  [{r.confidence:.2f}|{r.pathway}] {r.text[:80]}...")

What you gain after migration

Before (Vector DB)After (Engramma)
Cosine similarity onlyThree pathways + Confidence Router
No explanationFull explainability at 3 levels
Static storageSelf-improving via consolidation
Manual deduplicationAutomatic merging
No causal reasoning"What if?" and "why?" queries
Same behavior alwaysRegime-adaptive behavior
Tip

After migration, give Engramma a few days of normal usage. Consolidation cycles will build causal links, strengthen important memories, and prune duplicates — things your vector database never did.

Next steps