mono-kit
is a versatile machine learning library designed to help developers build advanced similarity retrieval systems such as Google Lens (image similarity retrieval), hum-to-search (audio similarity retrieval), and RAG-style retrieval systems. It supports document, audio, and image inputs, offering a suite of pretrained embedding models as well as finetunable custom built-in models. With mono-kit
, you can perform similarity-based retrieval effortlessly—no need to implement complex pipelines. Everything you need comes ready to use, right out of the box.
mono-kit
comes with powerful, production-ready models tailored for each modality:
-
Image
- Default:
ResNet-50
- Custom: Finetunable customized
ResNet-50
for domain-specific tasks
- Default:
-
Audio
- Default:
VGGish
- Custom: Finetunable custom Siamese network with a custom loss function for enhanced similarity learning
- Default:
-
Document
- Default:
all-MiniLM-L6-v2
– a compact and efficient transformer model ideal for semantic document embeddings
- Default:
Install the library via pip:
pip install mono-kit
mono-kit
uses ChromaDB by default for embedding storage and retrieval.
Start by initializing a chromadb
client:
import chromadb
client = chromadb.PersistentClient(path="path_to_save")
✅ You can use any
chromadb
client (e.g.,EphemeralClient
,HttpClient
, etc.), not justPersistentClient
.
⚠️ Collection Name Constraint: Each ofmono_document
,mono_audio
, andmono_image
must use unique collection names. You can reuse a collection name across default and custom models.
mono_docs = mono_document(client, "unique_text_collection")
text = """Your long text block here..."""
docs = mono_docs.text_splitter(text, (150, 200), 20, False)
for id, doc in enumerate(docs):
mono_docs.mount_document(doc, str(id))
(150, 200)
: Min/max character chunk size20
: Overlap in charactersFalse
: IfTrue
, will retain sentence boundaries (optional feature)
result = mono_docs.find_similar_documents("search query here", k=3)
print(result)
mono_aud = mono_audio(client, "unique_audio_collection")
mono_aud.mount_audio("path/to/audio1.mp3")
mono_aud.mount_audio("path/to/audio2.mp3")
mono_aud.mount_audio_batch("path/to/audio_directory")
result = mono_aud.find_similar_audio("path/to/query.mp3", k=3)
print(result)
x = "path/to/reference_audio"
y = "path/to/target_audio"
mono_aud.create_audio_model(directory_x=x, directory_y=y)
model_path = "custom_trained_audio_embedding_model/audio_model.keras"
mono_aud.mount_audio("audio.mp3", model_path=model_path)
mono_aud.mount_audio_batch("audio_directory", model_path=model_path)
result = mono_aud.find_similar_audio("query.mp3", k=2, model_path=model_path)
print(result)
mono_img = mono_image(client, "unique_image_collection")
mono_img.mount_image("path/to/image.jpg")
mono_img.mount_image_batch("path/to/image_directory")
result = mono_img.find_similar_image("path/to/query_image.jpg", k=3)
print(result)
x = "path/to/reference_images"
y = "path/to/target_images"
mono_img.create_image_model(directory_x=x, directory_y=y)
model = "/path/to/custom_trained_image_embedding_model/image_model.keras"
mono_img.mount_image_batch("image_directory", model_path=model)
result = mono_img.find_similar_image("query.jpg", k=3, model_path=model)
print(result)
Operation | Document | Audio | Image |
---|---|---|---|
Mount file | mount_document |
mount_audio |
mount_image |
Mount batch | — | mount_audio_batch |
mount_image_batch |
Similarity search | find_similar_documents |
find_similar_audio |
find_similar_image |
Train custom model | — | create_audio_model |
create_image_model |
Use custom model | — | via model_path |
via model_path |