Skip to main content

Embed anything at lightning speed

Project description

Downloads gpu Open in Colab package roadmap roadmap

Inference, ingestion, and indexing – supercharged by Rust 🦀
Explore the docs »

View Demo · Benches · Vector Streaming Adapters . Search in Audio Space

EmbedAnything is a minimalist, highly performant, lightning-fast, lightweight, multisource, multimodal, and local embedding pipeline built in Rust. Whether you're working with text, images, audio, PDFs, websites, or other media, EmbedAnything streamlines the process of generating embeddings from various sources and seamlessly streaming (memory-efficient-indexing) them to a vector database. It supports dense, sparse, ONNX and late-interaction embeddings, offering flexibility for a wide range of use cases.

Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. How to add custom model and chunk size

🚀 Key Features

  • Local Embedding : Works with local embedding models like BERT and JINA
  • ONNX Models: Works with ONNX models for BERT and ColPali
  • ColPali : Support for ColPali in GPU version
  • Splade : Support for sparse embeddings for hybrid
  • Cloud Embedding Models:: Supports OpenAI and Cohere.
  • MultiModality : Works with text sources like PDFs, txt, md, Images JPG and Audio, .WAV
  • Rust : All the file processing is done in rust for speed and efficiency
  • Candle : We have taken care of hardware acceleration as well, with Candle.
  • Python Interface: Packaged as a Python library for seamless integration into your existing projects.
  • Vector Streaming: Continuously create and stream embeddings if you have low resource.

💡What is Vector Streaming

Vector Streaming enables you to process and generate embeddings for files and stream them, so if you have 10 GB of file, it can continuously generate embeddings Chunk by Chunk, that you can segment semantically, and store them in the vector database of your choice, Thus it eliminates bulk embeddings storage on RAM at once. The embedding process happens separetly from the main process, so as to maintain high performance enabled by rust MPSC.

EmbedAnythingXWeaviate

🦀 Why Embed Anything

➡️Faster execution.
➡️Memory Management: Rust enforces memory management simultaneously, preventing memory leaks and crashes that can plague other languages
➡️True multithreading
➡️Running language models or embedding models locally and efficiently
➡️Candle allows inferences on CUDA-enabled GPUs right out of the box.
➡️Decrease the memory usage of EmbedAnything.

⭐ Supported Models

We support any hugging-face models on Candle. And We also support ONNX runtime for BERT and ColPali.

How to add custom model on candle: from_pretrained_hf

model = EmbeddingModel.from_pretrained_hf(
    WhichModel.Bert, model_id="model link from huggingface"
)
config = TextEmbedConfig(chunk_size=200, batch_size=32)
data = embed_anything.embed_file("file_address", embedder=model, config=config)
Model Custom link
Jina jinaai/jina-embeddings-v2-base-en
jinaai/jina-embeddings-v2-small-en
Bert sentence-transformers/all-MiniLM-L6-v2
sentence-transformers/all-MiniLM-L12-v2
sentence-transformers/paraphrase-MiniLM-L6-v2
Clip openai/clip-vit-base-patch32
Whisper Most OpenAI Whisper from huggingface supported.

Splade Models:

model = EmbeddingModel.from_pretrained_hf(
    WhichModel.SparseBert, "prithivida/Splade_PP_en_v1"
)

ONNX-Runtime: from_pretrained_onnx

BERT

model = EmbeddingModel.from_pretrained_onnx(
  WhichModel.Bert, model_id="onnx_model_link"
)

ColPali

model: ColpaliModel = ColpaliModel.from_pretrained_onnx("starlight-ai/colpali-v1.2-merged-onnx", None)

For Semantic Chunking

model = EmbeddingModel.from_pretrained_hf(
    WhichModel.Bert, model_id="sentence-transformers/all-MiniLM-L12-v2"
)

# with semantic encoder
semantic_encoder = EmbeddingModel.from_pretrained_hf(WhichModel.Jina, model_id = "jinaai/jina-embeddings-v2-small-en")
config = TextEmbedConfig(chunk_size=256, batch_size=32, splitting_strategy = "semantic", semantic_encoder=semantic_encoder)

🧑‍🚀 Getting Started

💚 Installation

pip install embed-anything

For GPUs and using special models like ColPali

pip install embed-anything-gpu

Usage

➡️ Usage For 0.3 and later version

To use local embedding: we support Bert and Jina

model = EmbeddingModel.from_pretrained_local(
    WhichModel.Bert, model_id="Hugging_face_link"
)
data = embed_anything.embed_file("test_files/test.pdf", embedder=model)

For multimodal embedding: we support CLIP

Requirements Directory with pictures you want to search for example we have test_files with images of cat, dogs etc

import embed_anything
from embed_anything import EmbedData
model = embed_anything.EmbeddingModel.from_pretrained_local(
    embed_anything.WhichModel.Clip,
    model_id="openai/clip-vit-base-patch16",
    # revision="refs/pr/15",
)
data: list[EmbedData] = embed_anything.embed_directory("test_files", embedder=model)
embeddings = np.array([data.embedding for data in data])
query = ["Photo of a monkey?"]
query_embedding = np.array(
    embed_anything.embed_query(query, embedder=model)[0].embedding
)
similarities = np.dot(embeddings, query_embedding)
max_index = np.argmax(similarities)
Image.open(data[max_index].text).show()

Audio Embedding using Whisper

requirements: Audio .wav files.

import embed_anything
from embed_anything import (
    AudioDecoderModel,
    EmbeddingModel,
    embed_audio_file,
    TextEmbedConfig,
)
# choose any whisper or distilwhisper model from https://huggingface.co/distil-whisper or https://huggingface.co/collections/openai/whisper-release-6501bba2cf999715fd953013
audio_decoder = AudioDecoderModel.from_pretrained_hf(
    "openai/whisper-tiny.en", revision="main", model_type="tiny-en", quantized=False
)
embedder = EmbeddingModel.from_pretrained_hf(
    embed_anything.WhichModel.Bert,
    model_id="sentence-transformers/all-MiniLM-L6-v2",
    revision="main",
)
config = TextEmbedConfig(chunk_size=200, batch_size=32)
data = embed_anything.embed_audio_file(
    "test_files/audio/samples_hp0.wav",
    audio_decoder=audio_decoder,
    embedder=embedder,
    text_embed_config=config,
)
print(data[0].metadata)

🚧 Contributing to EmbedAnything

First of all, thank you for taking the time to contribute to this project. We truly appreciate your contributions, whether it's bug reports, feature suggestions, or pull requests. Your time and effort are highly valued in this project. 🚀

This document provides guidelines and best practices to help you to contribute effectively. These are meant to serve as guidelines, not strict rules. We encourage you to use your best judgment and feel comfortable proposing changes to this document through a pull request.

  • Roadmap
  • Quick Start
  • Guidelines
  • 🏎️ RoadMap

    Accomplishments

    One of the aims of EmbedAnything is to allow AI engineers to easily use state of the art embedding models on typical files and documents. A lot has already been accomplished here and these are the formats that we support right now and a few more have to be done.

    🖼️ Modalities and Source

    We’re excited to share that we've expanded our platform to support multiple modalities, including:

    • Audio files

    • Markdowns

    • Websites

    • Images

    • Videos

    • Graph

    This gives you the flexibility to work with various data types all in one place! 🌐

    💜 Product

    We’ve rolled out some major updates in version 0.3 to improve both functionality and performance. Here’s what’s new:

    • Semantic Chunking: Optimized chunking strategy for better Retrieval-Augmented Generation (RAG) workflows.

    • Streaming for Efficient Indexing: We’ve introduced streaming for memory-efficient indexing in vector databases. Want to know more? Check out our article on this feature here: https://www.analyticsvidhya.com/blog/2024/09/vector-streaming/

    • Zero-Shot Applications: Explore our zero-shot application demos to see the power of these updates in action.

    • Intuitive Functions: Version 0.3 includes a complete refactor for more intuitive functions, making the platform easier to use.

    • Chunkwise Streaming: Instead of file-by-file streaming, we now support chunkwise streaming, allowing for more flexible and efficient data processing.

    Check out the latest release : and see how these features can supercharge your GenerativeAI pipeline! ✨

    🚀Coming Soon

    ⚙️ Performance

    We've received quite a few questions about why we're using Candle, so here's a quick explanation:

    One of the main reasons is that Candle doesn't require any specific ONNX format models, which means it can work seamlessly with any Hugging Face model. This flexibility has been a key factor for us. However, we also recognize that we’ve been compromising a bit on speed in favor of that flexibility.

    What’s Next? To address this, we’re excited to announce that we’re introducing Candle-ONNX along with our previous framework on hugging-face ,

    ➡️ Support for GGUF models

    • Significantly faster performance
    • Stay tuned for these exciting updates! 🚀

    🫐Embeddings:

    We had multimodality from day one for our infrastructure. We have already included it for websites, images and audios but we want to expand it further to.

    ☑️Graph embedding -- build deepwalks embeddings depth first and word to vec
    ☑️Video Embedding
    ☑️ Yolo Clip

    🌊Expansion to other Vector Adapters

    We currently support a wide range of vector databases for streaming embeddings, including:

    • Elastic: thanks to amazing and active Elastic team for the contribution
    • Weaviate
    • Pinecone

    But we're not stopping there! We're actively working to expand this list.

    Want to Contribute? If you’d like to add support for your favorite vector database, we’d love to have your help! Check out our contribution.md for guidelines, or feel free to reach out directly starlight-search@proton.me. Let's build something amazing together! 💡

    Project details


    Download files

    Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

    Source Distribution

    embed_anything-0.4.17.tar.gz (953.9 kB view details)

    Uploaded Source

    Built Distributions

    embed_anything-0.4.17-cp313-cp313-macosx_11_0_arm64.whl (11.5 MB view details)

    Uploaded CPython 3.13 macOS 11.0+ ARM64

    embed_anything-0.4.17-cp312-cp312-win_amd64.whl (15.2 MB view details)

    Uploaded CPython 3.12 Windows x86-64

    embed_anything-0.4.17-cp312-cp312-manylinux_2_39_x86_64.whl (18.6 MB view details)

    Uploaded CPython 3.12 manylinux: glibc 2.39+ x86-64

    embed_anything-0.4.17-cp312-cp312-macosx_11_0_arm64.whl (11.5 MB view details)

    Uploaded CPython 3.12 macOS 11.0+ ARM64

    embed_anything-0.4.17-cp311-cp311-win_amd64.whl (15.2 MB view details)

    Uploaded CPython 3.11 Windows x86-64

    embed_anything-0.4.17-cp311-cp311-manylinux_2_39_x86_64.whl (18.6 MB view details)

    Uploaded CPython 3.11 manylinux: glibc 2.39+ x86-64

    embed_anything-0.4.17-cp311-cp311-macosx_11_0_arm64.whl (11.5 MB view details)

    Uploaded CPython 3.11 macOS 11.0+ ARM64

    embed_anything-0.4.17-cp310-cp310-win_amd64.whl (15.2 MB view details)

    Uploaded CPython 3.10 Windows x86-64

    embed_anything-0.4.17-cp310-cp310-manylinux_2_39_x86_64.whl (18.6 MB view details)

    Uploaded CPython 3.10 manylinux: glibc 2.39+ x86-64

    embed_anything-0.4.17-cp39-cp39-win_amd64.whl (15.2 MB view details)

    Uploaded CPython 3.9 Windows x86-64

    embed_anything-0.4.17-cp39-cp39-manylinux_2_39_x86_64.whl (18.6 MB view details)

    Uploaded CPython 3.9 manylinux: glibc 2.39+ x86-64

    embed_anything-0.4.17-cp38-cp38-win_amd64.whl (15.2 MB view details)

    Uploaded CPython 3.8 Windows x86-64

    File details

    Details for the file embed_anything-0.4.17.tar.gz.

    File metadata

    • Download URL: embed_anything-0.4.17.tar.gz
    • Upload date:
    • Size: 953.9 kB
    • Tags: Source
    • Uploaded using Trusted Publishing? Yes
    • Uploaded via: maturin/1.8.0

    File hashes

    Hashes for embed_anything-0.4.17.tar.gz
    Algorithm Hash digest
    SHA256 204ca390d38af7f7b9c021ee06be6e0b97f6c27226f037feebfb46405a851768
    MD5 992ad799aae45df6bd9936c30d2c374b
    BLAKE2b-256 cd2cc46ecbb16cac6fde99a0117b793d4c436665f9481995602b203a0a92ec37

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp313-cp313-macosx_11_0_arm64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp313-cp313-macosx_11_0_arm64.whl
    Algorithm Hash digest
    SHA256 8e480449cdf1e03bd5904bbf655b9497c20a53543b99567a20ebc7a89d67bf8d
    MD5 bc3dde04519ec28b8532e60a36dc34c6
    BLAKE2b-256 d1f02e7ba141c9cc09498622bbfbefd0dad7f62659d4fac51a8a6aad60842e24

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp312-cp312-win_amd64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp312-cp312-win_amd64.whl
    Algorithm Hash digest
    SHA256 bd56859c8b9b6b32a22bf18bbb7093155e0d05dd714a9410ca731178fd7327ab
    MD5 f7b300a2b93daadc26c61a511135ee17
    BLAKE2b-256 76adfccfdc18411ae3730cecea642073b000be096d46074c77af95bce1edd583

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp312-cp312-manylinux_2_39_x86_64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp312-cp312-manylinux_2_39_x86_64.whl
    Algorithm Hash digest
    SHA256 99b2dff86b79bb13ae60721d7ea14f52d3d93682056ce3a4c9f9f77262d09c6e
    MD5 a39df62427741cc0f0aedeb63a23fb00
    BLAKE2b-256 97a6302d3f3d0509d3d4616fbdc55a30b69efb373103fc68d83da5aa2b07cd5b

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp312-cp312-macosx_11_0_arm64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp312-cp312-macosx_11_0_arm64.whl
    Algorithm Hash digest
    SHA256 fd85a1bd8a7294c8887bd0b4cd516c7d9ef71c1a2c38ffdb669ecb0b66af48b2
    MD5 60e37ffc7f83be525393f373cdd9f9ba
    BLAKE2b-256 7e6dfddea5a9a14f8b3fd9ccc613e3f8526233b66d506db103c767eb48564217

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp311-cp311-win_amd64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp311-cp311-win_amd64.whl
    Algorithm Hash digest
    SHA256 3023a86b1b51aa7f0d822d60a35a379491f32ba99e06d6f962ff141abe8cba8e
    MD5 756628ec6e1c75c9c9860e03c4019f67
    BLAKE2b-256 8835e1df2c89cc3016bac89f132eee8883a4d856716ad71939a73364e6d75395

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp311-cp311-manylinux_2_39_x86_64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp311-cp311-manylinux_2_39_x86_64.whl
    Algorithm Hash digest
    SHA256 d081fbdb81b57987c670018c4707aa6c5d49cb09c554a1cf41d4e7fa80e95a7f
    MD5 7fcc29fce004eb955c35daf49ca22f73
    BLAKE2b-256 204b022b5ae1ae4548f70cf85c9dc255d359e81f05df8ea1514db66bb48ddd4b

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp311-cp311-macosx_11_0_arm64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp311-cp311-macosx_11_0_arm64.whl
    Algorithm Hash digest
    SHA256 e5cb6d3f3930f507f6bf04f18e019238baeed4af271cc03931976d39eb26b72d
    MD5 3c5d59fb7792e3b3df7b52de4cf6bb17
    BLAKE2b-256 11f6f085080c56a9006be37c1d7c4f26997e57b04908f24fed7863d183d394f0

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp310-cp310-win_amd64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp310-cp310-win_amd64.whl
    Algorithm Hash digest
    SHA256 f32bb90196abba3c2f3efbefd76b166993cad1a5a504b440dcc6e613967b1b9d
    MD5 04643998c296abeec3c3a65c722d423e
    BLAKE2b-256 4027d08e7b5f8a2f9e96450f2a62f7ade4d5762819c5c388c1da0c0d9819c3ce

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp310-cp310-manylinux_2_39_x86_64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp310-cp310-manylinux_2_39_x86_64.whl
    Algorithm Hash digest
    SHA256 01de7fe0310c70f00ae5df184186b292077d0cc938fd1af6cf5806f7b152c93d
    MD5 864773b57e8884c641e3b8d0cc98b00f
    BLAKE2b-256 b8e544dcc6caabd8d812ab6ef6bda55ab1a4c9c7bc8975b6a83dc7f50be39c88

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp39-cp39-win_amd64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp39-cp39-win_amd64.whl
    Algorithm Hash digest
    SHA256 0ad945b7bcab40f5bdeaf80bd7609bead7960361611de023ca6eed5181661bd2
    MD5 57eb045d27e9e35f3b898e7a26210a31
    BLAKE2b-256 1d7875e6b6802fd95e00101afa108b0ba6de22b0c09717f993a896393a21f717

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp39-cp39-manylinux_2_39_x86_64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp39-cp39-manylinux_2_39_x86_64.whl
    Algorithm Hash digest
    SHA256 c95be0669968e552f8ed633883218d51c91816d84b21385cd030d0ac69f73e6d
    MD5 a3f11d9f3b635eec70bbd5e9efee9a7b
    BLAKE2b-256 5ccc53075510e1af42aa15b797f1167622fa1a1634ea0091dda164d025df84fa

    See more details on using hashes here.

    File details

    Details for the file embed_anything-0.4.17-cp38-cp38-win_amd64.whl.

    File metadata

    File hashes

    Hashes for embed_anything-0.4.17-cp38-cp38-win_amd64.whl
    Algorithm Hash digest
    SHA256 a43bbec748ff9cb0a4c2b42d0bf958deed8e6f082296478819c469f936571c64
    MD5 25186abb54900723a385ea9e21f2ffe3
    BLAKE2b-256 0583b155ac054e57cc41237d3cd16fd21d4f77b1ae1e1b2f348824e67c47e2bf

    See more details on using hashes here.

    Supported by

    AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page