Tahukah Anda? Dalam film Ragatouille, hidangan yang dibuat Remy sebenarnya bukan ratatouille, tetapi versi halus dari hidangan yang disebut "Confit Byaldi".

Bisaldi adalah proyek Mini Sister Ragatouille. Ini adalah pembungkus sederhana di sekitar repositori Colpali untuk memudahkan menggunakan model multi-modal interaksi akhir seperti Colpali dengan API yang akrab.
Pertama, peringatan: Ini adalah perpustakaan pra-rilis, menggunakan indeks yang tidak terkompresi dan tidak memiliki jenis penyempurnaan lainnya.
Saat ini, kami mendukung semua model yang didukung oleh colpali-engine yang mendasarinya, termasuk pos pemeriksaan Colqwen2 yang lebih baru, dan lebih baik, seperti vidore/colqwen2-v1.0 . Secara umum, tujuannya adalah agar Bisaldi mendukung semua model Colvlm.
Backend tambahan akan didukung dalam pembaruan mendatang. Karena Bisaldi ada untuk memfasilitasi adopsi pengambil multi-modal, kami bermaksud untuk juga menambahkan dukungan untuk model seperti Visrag.
Akhirnya, kami akan menambahkan mekanisme pengindeksan HNSW, pooling, dan, siapa tahu, mungkin kuantisasi 2-bit?
Ini akan diperbarui karena ekosistem multi-modal berkembang lebih lanjut!
Untuk mengonversi PDF menjadi gambar dengan lisensi yang ramah, kami menggunakan Pustak Besar pdf2image . Perpustakaan ini mengharuskan poppler diinstal pada sistem Anda. Poppler sangat mudah diinstal dengan mengikuti instruksi di situs web mereka. TL; DR adalah:
MacOS dengan homebrew
brew install popplerDebian/Ubuntu
sudo apt-get install -y poppler-utilsGemma menggunakan versi Flash Attention terbaru. Untuk membuat semuanya berjalan semulus mungkin, kami akan menyarankan Anda menginstalnya setelah menginstal perpustakaan:
pip install --upgrade byaldi
pip install flash-attnColpali menggunakan model parameter multi-miliar untuk menyandikan dokumen. Kami sarankan menggunakan GPU untuk operasi yang lancar, meskipun GPU lemah/lebih tua baik -baik saja! Pengkodean koleksi Anda akan menderita kinerja yang buruk pada CPU atau anggota parlemen.
byaldiBisaldi sebagian besar dimodelkan setelah Ragatouille, yang berarti bahwa semuanya dirancang untuk mengambil baris kode sececepat, sehingga Anda dapat dengan cepat membangun di atasnya daripada menghabiskan waktu mencari tahu cara membuat pipa pengambilan.
Memuat model dengan byaldi sangat mudah:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll save the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_pretrained ( "vidore/colqwen2-v1.0" )Jika Anda sudah memiliki indeks, dan ingin memuatnya bersama dengan model yang diperlukan untuk menanyakannya, Anda dapat melakukannya dengan mudah:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll look for the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_index ( "your_index_name" ) Membuat indeks dengan byaldi sederhana dan fleksibel. Anda dapat mengindeks satu file PDF, satu file gambar, atau direktori yang berisi banyak dari itu . Inilah cara membuat indeks:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll save the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_pretrained ( "vidore/colqwen2-v1.0" )
RAG . index (
input_path = "docs/" , # The path to your documents
index_name = index_name , # The name you want to give to your index. It'll be saved at `index_root/index_name/`.
store_collection_with_index = False , # Whether the index should store the base64 encoded documents.
doc_ids = [ 0 , 1 , 2 ], # Optionally, you can specify a list of document IDs. They must be integers and match the number of documents you're passing. Otherwise, doc_ids will be automatically created.
metadata = [{ "author" : "John Doe" , "date" : "2021-01-01" }], # Optionally, you can specify a list of metadata for each document. They must be a list of dictionaries, with the same length as the number of documents you're passing.
overwrite = True # Whether to overwrite an index if it already exists. If False, it'll return None and do nothing if `index_root/index_name` exists.
) Dan itu saja! Model akan mulai berputar dan membuat indeks Anda, mengekspor semua informasi yang diperlukan ke disk setelah selesai. Anda kemudian dapat menggunakan metode RAGMultiModalModel.from_index("your_index_name") yang disajikan di atas untuk memuatnya kapan pun diperlukan (Anda tidak perlu melakukan ini tepat setelah membuatnya - sudah dimuat dalam memori dan siap untuk pergi!).
Keputusan utama yang harus Anda buat di sini adalah apakah Anda ingin mengatur store_collection_with_index ke true atau tidak. Jika diatur ke True, itu sangat menyederhanakan alur kerja Anda: versi base64 dari dokumen yang relevan akan dikembalikan sebagai bagian dari hasil kueri, sehingga Anda dapat segera menyalakannya ke LLM Anda. Namun, ini menambahkan persyaratan memori dan penyimpanan yang cukup besar untuk indeks Anda, jadi Anda mungkin ingin mengaturnya menjadi false (pengaturan default) jika Anda kekurangan sumber daya tersebut, dan membuat versi yang dikodekan sendiri Base64 sendirian kapan pun diperlukan.
Setelah Anda membuat atau memuat indeks, Anda dapat mulai mencari dokumen yang relevan. Sekali lagi, itu adalah perintah tunggal, sangat mudah:
results = RAG . search ( query , k = 3 ) Hasilnya akan menjadi daftar objek Result , yang juga dapat Anda perlakukan sebagai kamus normal. Setiap hasil akan dalam format ini:
[
{
"doc_id" : 0 ,
"page_num" : 10 ,
"score" : 12.875 ,
"metadata" : {},
"base64" : None
},
...
] page_num diindeks 1, sedangkan doc_ids adalah 0-indeks. Ini untuk membuat lebih sederhana untuk beroperasi dengan alat manipulasi PDF lainnya, di mana halaman pertama umumnya halaman 1. page_num untuk gambar dan PDF satu halaman akan selalu 1, ini hanya berguna untuk PDF yang lebih lama.
Jika Anda telah melewati metadata atau dikodekan dengan bendera untuk menyimpan versi Base64, bidang -bidang ini akan diisi. Hasil diurutkan berdasarkan skor, jadi item 0 dari daftar akan selalu menjadi dokumen yang paling relevan, dll ...
Karena indeks dalam memori, mereka ramah tambahan! Jika Anda perlu menelan beberapa PDF baru, cukup muat indeks Anda dengan from_index , dan kemudian, panggil add_to_index , dengan parameter yang sama dengan metode index() asli:
RAG . add_to_index ( "path_to_new_docs" ,
store_collection_with_index : bool = False ,
...
)