Inférence, ingestion et indexation - suralimentée par rouille?
Explorez les documents »
Afficher la démo · Bancs · Adaptateurs de streaming vectoriel. Recherche dans l'espace audio
L'intégration est un minimaliste, très performant, rapide, léger, multisource, multimodal et un pipeline d'incorporation local construit dans la rouille. Que vous travailliez avec du texte, des images, de l'audio, des PDF, des sites Web ou d'autres supports, l'intégration rationalise le processus de génération d'incorporation à partir de diverses sources et de streaming de manière transparente (l'indexation économe en mémoire) dans une base de données vectorielle. Il prend en charge des intégres denses, clairsemées, onnx et à interaction tardive, offrant une flexibilité pour un large éventail de cas d'utilisation.
Le streaming vectoriel vous permet de traiter et de générer des intégres pour les fichiers et de les diffuser, donc si vous avez 10 Go de fichiers, il peut en continuation de morceaux d'incorporation par morceau, que vous pouvez segmenter sémantiquement, et les stocker dans la base de données vectorielle de votre choix, donc il élimine donc les intégres en vrac dans la RAM à la fois. Le processus d'incorporation se produit séparément du processus principal, afin de maintenir des performances élevées activées par la rouille MPSC.
➡️ Exécution de la direction.
➡️ Gestion des femmes: Rust applique la gestion de la mémoire simultanément, empêchant les fuites de mémoire et les accidents qui peuvent affliger d'autres langues
➡️True multithreading
➡️Running Language Modèles ou Modèles d'intégration localement et efficiente
➡️Candle permet les inférences sur les GPU compatibles Cuda dès la sortie de la boîte.
➡️ Décrivez l'utilisation de la mémoire de l'intégration.
Nous soutenons tous les modèles d'étreinte sur la bougie. Et nous prenons également en charge ONNX Runtime pour Bert et Colpali.
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 )| Modèle | Lien personnalisé |
|---|---|
| Jina | Jinaai / Jina-Embeddings-V2-Base-en |
| Jinaai / Jina-Embeddings-V2-Small-en | |
| Bert | Transformateurs de phrases / All-Minilm-L6-V2 |
| Transformateurs de phrases / All-Minilm-L12-V2 | |
| Transformateurs de phrases / paraphrase-miniilm-l6-v2 | |
| Agrafe | openai / clip-vit-base-Patch32 |
| Chuchoter | La plupart des chuchotements d'Openai de Huggingface ont pris en charge. |
model = EmbeddingModel.from_pretrained_hf(
WhichModel.SparseBert, "prithivida/Splade_PP_en_v1"
)
model = EmbeddingModel.from_pretrained_onnx(
WhichModel.Bert, model_id="onnx_model_link"
)
model: ColpaliModel = ColpaliModel.from_pretrained_onnx("starlight-ai/colpali-v1.2-merged-onnx", None)
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 ) pip install embed-anything
Pour les GPU et utiliser des modèles spéciaux comme Colpali
pip install embed-anything-gpu
model = EmbeddingModel . from_pretrained_local (
WhichModel . Bert , model_id = "Hugging_face_link"
)
data = embed_anything . embed_file ( "test_files/test.pdf" , embedder = model ) 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 () 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 )Tout d'abord, merci d'avoir pris le temps de contribuer à ce projet. Nous apprécions vraiment vos contributions, qu'il s'agisse de rapports de bogues, de suggestions de fonctionnalités ou de demandes de traction. Votre temps et vos efforts sont très appréciés dans ce projet.
Ce document fournit des directives et des meilleures pratiques pour vous aider à contribuer efficacement. Ceux-ci sont censés servir de directives, et non de règles strictes. Nous vous encourageons à utiliser votre meilleur jugement et à vous sentir à l'aise de proposer des modifications à ce document grâce à une demande de traction.
L'un des objectifs de l'intégration est de permettre aux ingénieurs d'IA d'utiliser facilement des modèles d'intégration de pointe dans des fichiers et des documents typiques. Beaucoup de choses ont déjà été accomplies ici et ce sont les formats que nous soutenons en ce moment et quelques autres doivent être faits.
Nous sommes ravis de partager que nous avons élargi notre plateforme pour prendre en charge plusieurs modalités, notamment:
Fichiers audio
Marquage
Sites Web
Images
Vidéos
Graphique
Cela vous donne la flexibilité de travailler avec divers types de données en un seul endroit!
Nous avons déployé des mises à jour majeures dans la version 0.3 pour améliorer à la fois les fonctionnalités et les performances. Voici ce qui est nouveau:
Chunking sémantique: stratégie de section optimisée pour une meilleure génération de génération (RAG) de récupération (RAG).
Streaming pour une indexation efficace: nous avons introduit le streaming pour l'indexation économe en mémoire dans les bases de données vectorielles. Vous voulez en savoir plus? Consultez notre article sur cette fonctionnalité ici: https://www.analyticsvidhya.com/blog/2024/09/vector-streaming/
Applications zéro-shot: explorez nos démos d'applications zéro-shot pour voir la puissance de ces mises à jour en action.
Fonctions intuitives: la version 0.3 comprend un refacteur complet pour des fonctions plus intuitives, ce qui rend la plate-forme plus facile à utiliser.
Chunkwise Streaming: au lieu du streaming fichier par fichier, nous prenons désormais en charge le streaming en cours de chunkwise, permettant un traitement de données plus flexible et efficace.
Consultez la dernière version: et voyez comment ces fonctionnalités peuvent suralimenter votre pipeline Generativeai!
Nous avons reçu pas mal de questions sur les raisons pour lesquelles nous utilisons une bougie, alors voici une explication rapide:
L'une des principales raisons est que la bougie ne nécessite aucun modèle de format ONNX spécifique, ce qui signifie qu'il peut fonctionner de manière transparente avec tout modèle de visage étreint. Cette flexibilité a été un facteur clé pour nous. Cependant, nous reconnaissons également que nous avons compromis un peu sur la vitesse en faveur de cette flexibilité.
Quelle est la prochaine étape? Pour y remédier, nous sommes ravis d'annoncer que nous présentons Candle-onNx avec notre cadre précédent sur les câlins,
➡️ Prise en charge des modèles GGUF
Nous avions la multimodalité du premier jour pour notre infrastructure. Nous l'avons déjà inclus pour les sites Web, les images et les audios, mais nous voulons l'étendre davantage.
☑️GRAPH GRAPH - Construisez les profondeurs de profondeur de profondeur et le mot pour Vec
☑️Video Incorpore
Clip Yolo
Nous prenons actuellement en charge une large gamme de bases de données vectorielles pour les intérêts en streaming, notamment:
Mais nous ne nous arrêtons pas là! Nous travaillons activement pour étendre cette liste.
Vous voulez contribuer? Si vous souhaitez ajouter une prise en charge de votre base de données vectorielle préférée, nous aimerions avoir votre aide! Consultez notre contribution.md pour les lignes directrices, ou n'hésitez pas à atteindre directement [email protected]. Construisons quelque chose d'incroyable ensemble!