Вы знали? В фильме Ragatouille, блюдо Реми, на самом деле не является Ratatouille, а изысканной версией блюда под названием «Confit Byaldi».

Бьяльди - мини -сестринский проект Рагатуля. Это простая обертка вокруг репозитория Кольпали, чтобы облегчить использование многомодальных моделей позднего взаимодействия, таких как кольпали, с знакомым API.
Во-первых, предупреждение: это библиотека перед выпуском, использующая несжатые индексы и не имея других видов усовершенствований.
В настоящее время мы поддерживаем все модели, поддерживаемые базовым кольпали-инжеужением, включая более новые и лучше, Colqwen2 контрольно-пропускные пункты, такие как vidore/colqwen2-v1.0 . В целом, цель состоит в том, чтобы Byaldi поддерживать все модели COLVLM.
Дополнительные бэкэнды будут поддерживаться в будущих обновлениях. Поскольку Byaldi существует, чтобы облегчить принятие мультимодальных ретриверов, мы намерены также добавить поддержку для таких моделей, как висраг.
В конце концов, мы добавим механизм индексации HNSW, объединение и, кто знает, может быть, 2-битная квантование?
Он будет обновлен по мере развития мультимодальной экосистемы!
Чтобы преобразовать PDF в изображения с дружественной лицензией, мы используем библиотеку pdf2image . Эта библиотека требует, чтобы poppler был установлен в вашей системе. Poppler очень легко установить, следуя инструкциям на их веб -сайте. TL; DR - это:
Macos с домашним заводом
brew install popplerDebian/Ubuntu
sudo apt-get install -y poppler-utilsДжемма использует недавнюю версию Flash Attity. Чтобы все было как можно более плавно, мы рекомендуем установить его после установки библиотеки:
pip install --upgrade byaldi
pip install flash-attnColpali использует многомиллиардные модели параметров для кодирования документов. Мы рекомендуем использовать графический процессор для плавных операций, хотя слабые/более старые графические процессоры вполне хороши! Кодирование вашей коллекции будет страдать от плохой производительности на процессоре или депутатах.
byaldiByaldi в значительной степени смоделирован после Ragatouille, что означает, что все предназначено для того, чтобы взять наименьшее возможное строки кода, поэтому вы можете очень быстро построить его сверху, а не тратить время на то, как создать конвейер поиска.
Загрузка модели с byaldi очень проста:
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" )Если у вас уже есть индекс, и вы хотите загрузить его вместе с моделью, необходимой для его запроса, вы можете сделать это так же легко:
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" ) Создание индекса с byaldi просто и гибко. Вы можете индексировать один файл PDF, один файл изображения или каталог, содержащий кратный из них . Вот как создать индекс:
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.
) И это все! Модель начнет вращение и создает ваш индекс, экспортируя всю необходимую информацию в диск, когда это будет сделано. Затем вы можете использовать метод RAGMultiModalModel.from_index("your_index_name") представленный выше, чтобы загрузить его, когда это необходимо (вам не нужно делать это сразу после создания - он уже загружен в память и готов к работе!).
Основное решение, которое вам нужно принять здесь, - хотите ли вы установить store_collection_with_index true или нет. Если установлено в True, он значительно упрощает ваш рабочий процесс: кодируемая Base64 версия соответствующих документов будет возвращена как часть результатов запроса, так что вы можете немедленно поднять его в свой LLM. Тем не менее, он добавляет значительные требования к памяти и хранению к вашему индексу, поэтому вы можете установить его на FALSE (настройка по умолчанию), если у вас не хватает этих ресурсов, и создать кодируемые версии BASE64 самостоятельно, когда это необходимо.
После того, как вы создали или загрузили индекс, вы можете начать поиск соответствующих документов. Опять же, это одиночная, очень простая команда:
results = RAG . search ( query , k = 3 ) Результаты будут списком объектов Result , которые вы также можете рассматривать как нормальные словарры. Каждый результат будет в этом формате:
[
{
"doc_id" : 0 ,
"page_num" : 10 ,
"score" : 12.875 ,
"metadata" : {},
"base64" : None
},
...
] page_num 1-индексированные, а doc_ids-0-индексированы. Это означает, что упростить работу с другими инструментами манипуляции PDF, где 1-я страница обычно представляет собой страницу 1. page_num для изображений и одностраничных PDF-файлов всегда будет 1, она полезна только для более длинных PDF.
Если вы проходили метаданные или закодировали с флагом для хранения версий Base64, эти поля будут заполнены. Результаты отсортированы по оценке, поэтому пункт 0 из списка всегда будет наиболее релевантным документом и т. Д.
Поскольку индексы находятся в памяти, они дружелюбны! Если вам нужно пригласить некоторые новые PDF -файлы, просто загрузите свой индекс с помощью from_index , а затем вызовите add_to_index , с аналогичными параметрами в метод исходного index() :
RAG . add_to_index ( "path_to_new_docs" ,
store_collection_with_index : bool = False ,
...
)