Swarms Memory - Pytorch
Project description
The Enterprise-Grade Production-Ready RAG Framework
🐦 Twitter • 📢 Discord • Swarms Platform • 📙 Documentation
Here's a more detailed and larger table with descriptions and website links for each RAG system:
| RAG System | Status | Description | Website |
|---|---|---|---|
| ChromaDB | Available | A high-performance, distributed database optimized for handling large-scale AI tasks. | ChromaDB |
| Pinecone | Available | A fully managed vector database that makes it easy to add vector search to your applications. | Pinecone |
| Redis | Coming Soon | An open-source, in-memory data structure store, used as a database, cache, and message broker. | Redis |
| Faiss | Available | A library for efficient similarity search and clustering of dense vectors, developed by Facebook AI. | Faiss |
| SingleStore | Available | A distributed SQL database that provides high-performance vector similarity search. | SingleStore |
| Qdrant | Available | An open-source, massive scale vector search engine written in Rust | Qdrant |
| HNSW | Coming Soon | A graph-based algorithm for approximate nearest neighbor search. | HNSW |
This table includes a brief description of each system, their current status, links to their documentation, and their respective websites for further information.
Requirements:
python 3.10.envwith your respective keys likePINECONE_API_KEYcan be found in the.env.examples
Install
$ pip install swarms-memory
Usage
Pinecone
from typing import List, Dict, Any
from swarms_memory import PineconeMemory
# Example usage
if __name__ == "__main__":
from transformers import AutoTokenizer, AutoModel
import torch
# Custom embedding function using a HuggingFace model
def custom_embedding_function(text: str) -> List[float]:
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")
inputs = tokenizer(
text,
return_tensors="pt",
padding=True,
truncation=True,
max_length=512,
)
with torch.no_grad():
outputs = model(**inputs)
embeddings = (
outputs.last_hidden_state.mean(dim=1).squeeze().tolist()
)
return embeddings
# Custom preprocessing function
def custom_preprocess(text: str) -> str:
return text.lower().strip()
# Custom postprocessing function
def custom_postprocess(
results: List[Dict[str, Any]],
) -> List[Dict[str, Any]]:
for result in results:
result["custom_score"] = (
result["score"] * 2
) # Example modification
return results
# Initialize the wrapper with custom functions
wrapper = PineconeMemory(
api_key="your-api-key",
environment="your-environment",
index_name="your-index-name",
embedding_function=custom_embedding_function,
preprocess_function=custom_preprocess,
postprocess_function=custom_postprocess,
logger_config={
"handlers": [
{
"sink": "custom_rag_wrapper.log",
"rotation": "1 GB",
},
{
"sink": lambda msg: print(
f"Custom log: {msg}", end=""
)
},
],
},
)
# Adding documents
wrapper.add(
"This is a sample document about artificial intelligence.",
{"category": "AI"},
)
wrapper.add(
"Python is a popular programming language for data science.",
{"category": "Programming"},
)
# Querying
results = wrapper.query("What is AI?", filter={"category": "AI"})
for result in results:
print(
f"Score: {result['score']}, Custom Score: {result['custom_score']}, Text: {result['metadata']['text']}"
)
ChromaDB
from swarms_memory import ChromaDB
chromadb = ChromaDB(
metric="cosine",
output_dir="results",
limit_tokens=1000,
n_results=2,
docs_folder="path/to/docs",
verbose=True,
)
# Add a document
doc_id = chromadb.add("This is a test document.")
# Query the document
result = chromadb.query("This is a test query.")
# Traverse a directory
chromadb.traverse_directory()
# Display the result
print(result)
Faiss
from typing import List, Dict, Any
from swarms_memory.faiss_wrapper import FAISSDB
from transformers import AutoTokenizer, AutoModel
import torch
# Custom embedding function using a HuggingFace model
def custom_embedding_function(text: str) -> List[float]:
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")
inputs = tokenizer(
text,
return_tensors="pt",
padding=True,
truncation=True,
max_length=512,
)
with torch.no_grad():
outputs = model(**inputs)
embeddings = (
outputs.last_hidden_state.mean(dim=1).squeeze().tolist()
)
return embeddings
# Custom preprocessing function
def custom_preprocess(text: str) -> str:
return text.lower().strip()
# Custom postprocessing function
def custom_postprocess(
results: List[Dict[str, Any]],
) -> List[Dict[str, Any]]:
for result in results:
result["custom_score"] = (
result["score"] * 2
) # Example modification
return results
# Initialize the wrapper with custom functions
wrapper = FAISSDB(
dimension=768,
index_type="Flat",
embedding_function=custom_embedding_function,
preprocess_function=custom_preprocess,
postprocess_function=custom_postprocess,
metric="cosine",
logger_config={
"handlers": [
{
"sink": "custom_faiss_rag_wrapper.log",
"rotation": "1 GB",
},
{"sink": lambda msg: print(f"Custom log: {msg}", end="")},
],
},
)
# Adding documents
wrapper.add(
"This is a sample document about artificial intelligence.",
{"category": "AI"},
)
wrapper.add(
"Python is a popular programming language for data science.",
{"category": "Programming"},
)
# Querying
results = wrapper.query("What is AI?")
for result in results:
print(
f"Score: {result['score']}, Custom Score: {result['custom_score']}, Text: {result['metadata']['text']}"
)
SingleStore
from swarms_memory.vector_dbs.singlestore_wrapper import SingleStoreDB
# Initialize SingleStore with environment variables
db = SingleStoreDB(
host="your_host",
port=3306,
user="your_user",
password="your_password",
database="your_database",
table_name="example_vectors",
dimension=768, # Default dimension for all-MiniLM-L6-v2
namespace="example"
)
# Custom embedding function example (optional)
def custom_embedding_function(text: str) -> List[float]:
# Your custom embedding logic here
return embeddings
# Initialize with custom functions
db = SingleStoreDB(
host="your_host",
port=3306,
user="your_user",
password="your_password",
database="your_database",
table_name="example_vectors",
dimension=768,
namespace="example",
embedding_function=custom_embedding_function,
preprocess_function=lambda x: x.lower(), # Simple preprocessing
postprocess_function=lambda x: sorted(x, key=lambda k: k['similarity'], reverse=True) # Sort by similarity
)
# Add documents with metadata
doc_id = db.add(
document="SingleStore is a distributed SQL database that combines horizontal scalability with ACID guarantees.",
metadata={"source": "docs", "category": "database"}
)
# Query similar documents
results = db.query(
query="How does SingleStore scale?",
top_k=3,
metadata_filter={"source": "docs"}
)
# Process results
for result in results:
print(f"Document: {result['document']}")
print(f"Similarity: {result['similarity']:.4f}")
print(f"Metadata: {result['metadata']}\n")
# Delete a document
db.delete(doc_id)
# Key features:
# - Built on SingleStore's native vector similarity search
# - Supports custom embedding models and functions
# - Automatic table creation with optimized vector indexing
# - Metadata filtering for refined searches
# - Document preprocessing and postprocessing
# - Namespace support for document organization
# - SSL support for secure connections
# For more examples, see the [SingleStore example](examples/singlestore_wrapper_example.py).
Qdrant with Flexible Embeddings
Qdrant now supports any embedding model through LiteLLM, providing maximum flexibility for local, cloud, and in-memory deployments:
import os
from qdrant_client import QdrantClient, models
from swarms_memory.vector_dbs import QdrantDB
# Example 1: In-memory Qdrant (for experimentation)
in_memory_client = QdrantClient(":memory:")
qdrant_memory = QdrantDB(
client=in_memory_client,
collection_name="demo_collection",
model_name="sentence-transformers/all-MiniLM-L6-v2",
distance=models.Distance.COSINE,
n_results=3,
)
# Example 2: Qdrant Cloud with OpenAI embeddings
cloud_client = QdrantClient(
url=os.getenv("QDRANT_URL"), # Your cluster URL
api_key=os.getenv("QDRANT_API_KEY"), # Your API key
)
rag_db = QdrantDB(
client=cloud_client,
embedding_model="text-embedding-3-small",
collection_name="openai_collection",
distance=models.Distance.COSINE,
n_results=1, # Return only most relevant result
)
# Example 3: Local Qdrant server
# Start with: docker run -p 6333:6333 qdrant/qdrant
local_client = QdrantClient("localhost", port=6333)
local_db = QdrantDB(
client=local_client,
collection_name="local_collection",
model_name="sentence-transformers/all-MiniLM-L6-v2",
distance=models.Distance.COSINE,
n_results=3,
)
# Supports Azure OpenAI, Cohere, Voyage AI, AWS Bedrock, and custom embedding functions
# See examples/qdrant_wrapper_example.py for additional embedding model examples
# Add test documents
knowledge_docs = [
"Qdrant is a vector database for similarity search.",
"Vector embeddings represent text as numerical vectors.",
"Similarity search finds related documents using vector distance.",
"Qdrant supports in-memory, local, and cloud deployments.",
]
for doc in knowledge_docs:
rag_db.add(doc)
# Query similar documents
results = rag_db.query("What is vector search?")
print(f"Results: {results}")
Qdrant Deployment Options
In-Memory: Perfect for testing and experimentation
client = QdrantClient(":memory:")
Local Server: For production workloads with full control
docker run -p 6333:6333 qdrant/qdrant
Qdrant Cloud: Managed service with scalability and reliability
client = QdrantClient(url="https://your-cluster.qdrant.tech", api_key="your-key")
For comprehensive examples including all deployment types, see examples/qdrant_wrapper_example.py.
Supported Embedding Models
| Provider | Model(s) / Integration |
|---|---|
| OpenAI | "text-embedding-3-small", "text-embedding-3-large" |
| Azure OpenAI | "azure/your-deployment-name" |
| Cohere | "cohere/embed-english-v3.0", "cohere/embed-multilingual-v3.0" |
| Voyage AI | "voyage/voyage-3-large", "voyage/voyage-code-2" |
| AWS Bedrock | "bedrock/amazon.titan-embed-text-v1" |
| Custom Functions | Any callable that takes text and returns a vector |
| Qdrant Built-in | "qdrant:sentence-transformers/all-MiniLM-L6-v2" |
For other vector databases (Pinecone, FAISS, SingleStore), you can use LiteLLM embeddings through their embedding_function parameter:
from swarms_memory.embeddings import LiteLLMEmbeddings
# Create embedder
embedder = LiteLLMEmbeddings(model="text-embedding-3-small")
# Use with any vector DB
faiss_db = FAISSDB(embedding_function=embedder.embed_query)
pinecone_db = PineconeMemory(embedding_function=embedder.embed_query)
License
MIT
Citation
Please cite Swarms in your paper or your project if you found it beneficial in any way! Appreciate you.
@misc{swarms,
author = {Gomez, Kye},
title = {{Swarms: The Multi-Agent Collaboration Framework}},
howpublished = {\url{https://github.com/kyegomez/swarms}},
year = {2023},
note = {Accessed: Date}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file swarms_memory-0.1.3.tar.gz.
File metadata
- Download URL: swarms_memory-0.1.3.tar.gz
- Upload date:
- Size: 34.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.3 Darwin/24.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
88a5d183baee72d27a85aa76ba7911266a8aeeace5bd4fdecedd07d64e0a7566
|
|
| MD5 |
7ec98f5ee7364c0e9f7be256c83b257d
|
|
| BLAKE2b-256 |
41e4c21d6a174149aad122793c16046e0418a266ae6f496325225111d694814b
|
File details
Details for the file swarms_memory-0.1.3-py3-none-any.whl.
File metadata
- Download URL: swarms_memory-0.1.3-py3-none-any.whl
- Upload date:
- Size: 40.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.3 Darwin/24.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8850b82bcc209d5804c06309de0337b7a2b11c4a973f6f4c2e419788069dcf45
|
|
| MD5 |
61f61c0949e05186703aa0f54ec196ea
|
|
| BLAKE2b-256 |
8ae81107538663d36c71ef4d2b098b6543a2ce05618128e1541b520a44917c3d
|