Files
project_bookworm/EverNote_To_OpenAI.ipynb
T

349 KiB

This is an experiment: create vectorized embeddings out of an EverNote DB (PDF, DOCX, HTML, TXT)

  • vectorize text, html files, pdfs and docx into one vector DB, split in tables (sqlite vss)
  • use local self-hosted embeddings (CPU computed)
    • for sentences
  • query a local sqlite vss vector db, use cache from LangChain (sqlite)
  • use OpenAI API and (Ollama op-prem self-hosted) Mistral for the response processing
  • compare with LLMware Bling

Due to cost reasons the OpenAI embeddings don't get used. So sorry :p

Dependencies

  • Cryptography is used to handle some PDF functions here (signatures)
In [1]:
%pip show cryptography
Name: cryptography
Version: 42.0.5
Summary: cryptography is a package which provides cryptographic recipes and primitives to Python developers.
Home-page: 
Author: 
Author-email: The Python Cryptographic Authority and individual contributors <[email protected]>
License: Apache-2.0 OR BSD-3-Clause
Location: /home/marius/miniconda3/envs/llm_langchain/lib/python3.11/site-packages
Requires: cffi
Required-by: 
Note: you may need to restart the kernel to use updated packages.
  • pikepdf is used to repair some PDFs
In [3]:
%pip show pikepdf
Name: pikepdf
Version: 8.13.0
Summary: Read and write PDFs with Python, powered by qpdf
Home-page: 
Author: 
Author-email: "James R. Barlow" <[email protected]>
License: MPL-2.0
Location: /home/marius/miniconda3/envs/llm_langchain/lib/python3.11/site-packages
Requires: Deprecated, lxml, packaging, Pillow
Required-by: 
Note: you may need to restart the kernel to use updated packages.
  • pypdf with all features is needed because this DB consists of 100+ PDFs
In [5]:
%pip show "pypdf"
Name: pypdf
Version: 4.0.2
Summary: A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files
Home-page: 
Author: 
Author-email: Mathieu Fenniak <[email protected]>
License: 
Location: /home/marius/miniconda3/envs/llm_langchain/lib/python3.11/site-packages
Requires: 
Required-by: 
Note: you may need to restart the kernel to use updated packages.

Text extraction

  • Here the html and text data is extracted into one txt
  • The PDF and DOCX data is extracted into another txt
  • the texts are normalized
  • different encodings get handled
  • difficult files get repaired
  • exceptions get handled (UTF-16 issues, PDF reference errors)
In [40]:
import glob
import os
from concurrent.futures import ThreadPoolExecutor
import unicodedata  # to normalize text
import html2text  # to convert html to text
from langchain.document_loaders import PyPDFLoader, Docx2txtLoader
import pikepdf  # to repair PDFs
from pathlib import Path
from tqdm.notebook import tqdm
from concurrent.futures import ThreadPoolExecutor, as_completed

# todo: hardcoded paths
output_path = "/home/marius/source/bookworm/export.txt"

def convert_html_to_text(html_blob: str) -> str:
    """
    Converts a html blob into a string.
    """
    h = html2text.HTML2Text()
    h.mark_code = True
    h.escape_snob = True
    h.unicode_snob = True
    # h.use_automatic_links = True 
    h.images_as_html = True
    h.single_line_break = True
    h.ignore_links = True
    return h.handle(html_blob)

def normalize_text(txt_blob: str) -> str:
    """
    Normalize a text blob using NFKD normalization.
    """
    return unicodedata.normalize("NFKD", txt_blob)

def repair_pdf(file_path: str) -> bool:
    """
    Attempts to repair a PDF file using pikepdf.
    """
    try:
        with pikepdf.open(file_path, allow_overwriting_input=True) as pdf:
            pdf.save(file_path)
        return True
    except pikepdf.PdfError as e:
        print(f"Failed to repair PDF {file_path}: {e}")
        return False

def read_and_convert_file(file_path: str, is_html: bool, is_pdf: bool, is_docx: bool) -> str:
    """
    Reads and converts a file from HTML, PDF, DOCX, or plain text to text.
    """
    content = ""
    if is_html:
        try:
            with open(file_path, 'r', encoding='utf-8') as file:
                content = file.read()
            return convert_html_to_text(content)
        except Exception as e:
            print(f"Error reading {file_path}: {e}")
            return ""

    elif is_pdf:
        try:
            loader = PyPDFLoader(file_path)
            # ... fixes "Multiple definitions in dictionary at byte 0xb32 for key /ExtGState" error
            documents = loader.load()
            content = "\n".join(doc.page_content for doc in documents if hasattr(doc, 'page_content'))
        except Exception as e:
            print(f"Error loading PDF {file_path}: {e}. Attempting to repair...")
            if repair_pdf(file_path):
                try:
                    loader = PyPDFLoader(file_path)
                    documents = loader.load()
                    content = "\n".join(doc.page_content for doc in documents if hasattr(doc, 'page_content'))
                except Exception as e:
                    print(f"Failed to process PDF {file_path} after repair: {e}")
                    return ""
        return normalize_text(content)

    elif is_docx:
        try:
            loader = Docx2txtLoader(file_path)
            content = loader.load()
            if isinstance(content, list):
                content = "\n".join(content)
        except Exception as e:
            print(f"Error reading DOCX {file_path}: {e}")
            return ""
        return normalize_text(content)

    else:  # For plain text files
        try:
            with open(file_path, 'r', encoding='utf-8') as file:
                return normalize_text(file.read())
        except Exception as e:
            print(f"Error reading {file_path}: {e}")
            return ""

def sanitize_text(text):
    """
    Removes or replaces surrogate characters from a string.
    """
    return text.encode('utf-8', 'replace').decode('utf-8')

def append_to_output(data: str, is_pdf: bool, is_docx: bool, output_path: str):
    """
    Appends sanitized data to an output file.
    """
    sanitized_data = sanitize_text(data)
    if is_pdf or is_docx:
        output_path = str(Path(output_path).with_suffix('')) + ".documents.txt"
    
    with open(output_path, "a", encoding='utf-8') as output_file:
        output_file.write(sanitized_data)

def process_file(file):
    is_html = file.endswith('.html')
    is_pdf = file.endswith('.pdf')
    is_docx = file.endswith('.docx')
    
    file_content = read_and_convert_file(file, is_html, is_pdf, is_docx)
    append_to_output(file_content, is_pdf, is_docx, output_path=output_path)

def process_files_in_directory(directory: str):
    txt_html_files = glob.glob(os.path.join(directory, "*.txt")) + glob.glob(os.path.join(directory, "*.html"))
    pdf_docx_files = glob.glob(os.path.join(directory, "img", "*.pdf")) + glob.glob(os.path.join(directory, "img", "*.docx"))
    all_files = txt_html_files + pdf_docx_files

    # Initialize the progress bar
    pbar = tqdm(total=len(all_files), desc="Processing files")

    with ThreadPoolExecutor(max_workers=3) as executor:
        # Submit all files to the executor and store future objects
        futures = [executor.submit(process_file, file) for file in all_files]
        
        # As tasks complete, update the progress bar
        for future in as_completed(futures):
            pbar.update(1)  # Update the progress bar by one for each task completed

    # Ensure the progress bar is closed upon completion
    pbar.close()

process_files_in_directory("/home/marius/data/it-sec-research-extracted/IT sec research")
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋| 4868/4877 [04:02<00:00, 20.10it/s]

Processing files:   0%|                                                                                                                                                                   | 1/4877 [00:00<16:09,  5.03it/s]
Processing files:   5%|███████▎                                                                                                                                                        | 221/4877 [00:00<00:06, 731.58it/s]
Processing files:   6%|█████████▊                                                                                                                                                      | 301/4877 [00:01<00:30, 149.67it/s]
Processing files:   7%|███████████▍                                                                                                                                                    | 348/4877 [00:02<00:42, 105.60it/s]
Processing files:   8%|████████████▍                                                                                                                                                    | 378/4877 [00:03<00:46, 97.05it/s]
Processing files:   8%|█████████████▏                                                                                                                                                   | 400/4877 [00:03<00:50, 89.38it/s]
Processing files:   9%|█████████████▊                                                                                                                                                   | 417/4877 [00:04<01:14, 59.57it/s]
Processing files:   9%|██████████████▏                                                                                                                                                  | 429/4877 [00:04<01:12, 61.35it/s]
Processing files:   9%|██████████████▌                                                                                                                                                  | 440/4877 [00:04<01:13, 60.08it/s]
Processing files:   9%|██████████████▊                                                                                                                                                  | 449/4877 [00:04<01:13, 59.90it/s]
Processing files:   9%|███████████████                                                                                                                                                  | 457/4877 [00:04<01:13, 59.74it/s]
Processing files:  10%|███████████████▎                                                                                                                                                 | 465/4877 [00:05<01:23, 53.14it/s]
Processing files:  10%|███████████████▌                                                                                                                                                 | 472/4877 [00:05<01:24, 52.08it/s]
Processing files:  10%|███████████████▊                                                                                                                                                 | 478/4877 [00:05<01:23, 52.37it/s]
Processing files:  10%|███████████████▉                                                                                                                                                 | 484/4877 [00:05<01:40, 43.93it/s]
Processing files:  10%|████████████████▏                                                                                                                                                | 490/4877 [00:05<01:34, 46.36it/s]
Processing files:  10%|████████████████▍                                                                                                                                                | 497/4877 [00:05<01:26, 50.42it/s]
Processing files:  10%|████████████████▊                                                                                                                                                | 510/4877 [00:05<01:07, 65.13it/s]
Processing files:  11%|█████████████████                                                                                                                                                | 518/4877 [00:06<01:12, 59.99it/s]
Processing files:  11%|█████████████████▍                                                                                                                                               | 527/4877 [00:06<01:09, 62.34it/s]
Processing files:  11%|█████████████████▋                                                                                                                                               | 534/4877 [00:06<01:25, 50.93it/s]
Processing files:  11%|█████████████████▊                                                                                                                                               | 540/4877 [00:06<01:31, 47.22it/s]
Processing files:  11%|██████████████████                                                                                                                                               | 546/4877 [00:06<01:29, 48.47it/s]
Processing files:  11%|██████████████████▏                                                                                                                                              | 552/4877 [00:06<01:42, 42.22it/s]
Processing files:  11%|██████████████████▍                                                                                                                                              | 557/4877 [00:07<01:46, 40.47it/s]
Processing files:  12%|██████████████████▌                                                                                                                                              | 562/4877 [00:07<01:46, 40.50it/s]
Processing files:  12%|██████████████████▋                                                                                                                                              | 567/4877 [00:07<01:49, 39.28it/s]
Processing files:  12%|██████████████████▉                                                                                                                                              | 572/4877 [00:07<01:55, 37.37it/s]
Processing files:  12%|███████████████████                                                                                                                                              | 576/4877 [00:07<02:11, 32.80it/s]
Processing files:  12%|███████████████████▏                                                                                                                                             | 580/4877 [00:07<02:31, 28.42it/s]
Processing files:  12%|███████████████████▏                                                                                                                                             | 583/4877 [00:08<02:36, 27.52it/s]
Processing files:  12%|███████████████████▎                                                                                                                                             | 586/4877 [00:08<02:34, 27.77it/s]
Processing files:  12%|███████████████████▍                                                                                                                                             | 589/4877 [00:08<03:01, 23.58it/s]
Processing files:  13%|████████████████████▏                                                                                                                                            | 612/4877 [00:08<01:03, 67.43it/s]
Processing files:  13%|████████████████████▍                                                                                                                                            | 620/4877 [00:08<01:09, 61.13it/s]
Processing files:  13%|████████████████████▋                                                                                                                                            | 628/4877 [00:08<01:06, 63.84it/s]
Processing files:  13%|████████████████████▉                                                                                                                                            | 636/4877 [00:08<01:23, 51.04it/s]
Processing files:  13%|█████████████████████▏                                                                                                                                           | 643/4877 [00:09<01:22, 51.24it/s]
Processing files:  13%|█████████████████████▌                                                                                                                                           | 655/4877 [00:09<01:04, 65.29it/s]
Processing files:  14%|█████████████████████▉                                                                                                                                           | 665/4877 [00:09<00:59, 70.60it/s]
Processing files:  14%|██████████████████████▏                                                                                                                                          | 673/4877 [00:09<02:00, 34.76it/s]
Processing files:  14%|██████████████████████▍                                                                                                                                          | 679/4877 [00:09<01:56, 36.01it/s]
Processing files:  14%|██████████████████████▋                                                                                                                                          | 688/4877 [00:10<01:37, 42.97it/s]
Processing files:  14%|██████████████████████▉                                                                                                                                          | 696/4877 [00:10<01:29, 46.48it/s]
Processing files:  14%|███████████████████████▏                                                                                                                                         | 703/4877 [00:10<01:21, 51.02it/s]
Processing files:  15%|███████████████████████▍                                                                                                                                         | 710/4877 [00:10<01:18, 52.86it/s]
Processing files:  15%|███████████████████████▊                                                                                                                                         | 722/4877 [00:10<01:10, 59.09it/s]
Processing files:  15%|████████████████████████                                                                                                                                         | 729/4877 [00:10<01:23, 49.86it/s]
Processing files:  15%|████████████████████████▎                                                                                                                                        | 735/4877 [00:10<01:25, 48.25it/s]
Processing files:  15%|████████████████████████▍                                                                                                                                        | 741/4877 [00:11<01:27, 47.03it/s]
Processing files:  15%|████████████████████████▊                                                                                                                                        | 750/4877 [00:11<01:16, 54.12it/s]
Processing files:  16%|█████████████████████████                                                                                                                                        | 758/4877 [00:11<01:09, 59.23it/s]
Processing files:  16%|█████████████████████████▎                                                                                                                                       | 766/4877 [00:11<01:07, 60.58it/s]
Processing files:  16%|█████████████████████████▌                                                                                                                                       | 773/4877 [00:11<01:29, 45.79it/s]
Processing files:  16%|█████████████████████████▋                                                                                                                                       | 780/4877 [00:11<01:21, 50.34it/s]
Processing files:  16%|██████████████████████████                                                                                                                                       | 788/4877 [00:11<01:12, 56.10it/s]
Processing files:  16%|██████████████████████████▌                                                                                                                                      | 804/4877 [00:12<00:54, 74.41it/s]
Processing files:  17%|██████████████████████████▊                                                                                                                                      | 812/4877 [00:12<00:55, 73.20it/s]
Processing files:  17%|███████████████████████████                                                                                                                                      | 820/4877 [00:12<00:59, 67.93it/s]
Processing files:  17%|███████████████████████████▍                                                                                                                                     | 832/4877 [00:12<00:53, 75.87it/s]
Processing files:  17%|███████████████████████████▊                                                                                                                                     | 842/4877 [00:12<00:55, 72.26it/s]
Processing files:  17%|████████████████████████████                                                                                                                                     | 850/4877 [00:12<00:55, 72.96it/s]
Processing files:  18%|████████████████████████████▎                                                                                                                                    | 858/4877 [00:12<01:04, 62.03it/s]
Processing files:  18%|████████████████████████████▌                                                                                                                                    | 865/4877 [00:13<01:20, 49.57it/s]
Processing files:  18%|████████████████████████████▊                                                                                                                                    | 871/4877 [00:13<01:19, 50.31it/s]
Processing files:  18%|████████████████████████████▉                                                                                                                                    | 877/4877 [00:13<02:17, 29.09it/s]
Processing files:  18%|█████████████████████████████                                                                                                                                    | 882/4877 [00:13<02:15, 29.42it/s]
Processing files:  18%|█████████████████████████████▎                                                                                                                                   | 887/4877 [00:13<02:03, 32.41it/s]
Processing files:  18%|█████████████████████████████▍                                                                                                                                   | 892/4877 [00:14<01:51, 35.60it/s]
Processing files:  18%|█████████████████████████████▋                                                                                                                                   | 901/4877 [00:14<01:27, 45.63it/s]
Processing files:  19%|█████████████████████████████▉                                                                                                                                   | 907/4877 [00:14<01:34, 42.07it/s]
Processing files:  19%|██████████████████████████████▎                                                                                                                                  | 917/4877 [00:14<01:16, 51.43it/s]
Processing files:  19%|██████████████████████████████▍                                                                                                                                  | 923/4877 [00:14<01:20, 49.27it/s]
Processing files:  19%|██████████████████████████████▊                                                                                                                                  | 934/4877 [00:14<01:07, 58.26it/s]
Processing files:  19%|███████████████████████████████▏                                                                                                                                 | 944/4877 [00:14<01:00, 64.53it/s]
Processing files:  20%|███████████████████████████████▍                                                                                                                                 | 952/4877 [00:14<01:03, 62.07it/s]
Processing files:  20%|███████████████████████████████▋                                                                                                                                 | 959/4877 [00:15<01:01, 63.80it/s]
Processing files:  20%|███████████████████████████████▉                                                                                                                                 | 966/4877 [00:15<01:01, 64.05it/s]
Processing files:  20%|████████████████████████████████▎                                                                                                                                | 978/4877 [00:15<00:50, 77.28it/s]
Processing files:  20%|████████████████████████████████▌                                                                                                                                | 986/4877 [00:15<00:54, 71.40it/s]
Processing files:  20%|████████████████████████████████▊                                                                                                                                | 994/4877 [00:15<01:01, 62.73it/s]
Processing files:  21%|████████████████████████████████▊                                                                                                                               | 1001/4877 [00:15<01:07, 57.76it/s]
Processing files:  21%|█████████████████████████████████▏                                                                                                                              | 1011/4877 [00:15<00:57, 67.00it/s]
Processing files:  21%|█████████████████████████████████▍                                                                                                                              | 1019/4877 [00:16<01:10, 54.55it/s]
Processing files:  21%|█████████████████████████████████▋                                                                                                                              | 1028/4877 [00:16<01:04, 59.88it/s]
Processing files:  21%|█████████████████████████████████▉                                                                                                                              | 1035/4877 [00:16<01:03, 60.19it/s]
Processing files:  21%|██████████████████████████████████▏                                                                                                                             | 1043/4877 [00:16<01:01, 62.77it/s]
Processing files:  22%|██████████████████████████████████▍                                                                                                                             | 1050/4877 [00:16<01:18, 48.61it/s]
Processing files:  22%|██████████████████████████████████▋                                                                                                                             | 1057/4877 [00:16<01:11, 53.12it/s]
Processing files:  22%|██████████████████████████████████▉                                                                                                                             | 1065/4877 [00:16<01:04, 59.10it/s]
Processing files:  22%|███████████████████████████████████▏                                                                                                                            | 1072/4877 [00:16<01:03, 59.49it/s]
Processing files:  22%|███████████████████████████████████▍                                                                                                                            | 1079/4877 [00:17<01:06, 57.53it/s]
Processing files:  22%|███████████████████████████████████▋                                                                                                                            | 1086/4877 [00:17<01:13, 51.77it/s]
Processing files:  22%|███████████████████████████████████▊                                                                                                                            | 1092/4877 [00:17<01:13, 51.37it/s]
Processing files:  23%|████████████████████████████████████                                                                                                                            | 1101/4877 [00:17<01:03, 59.28it/s]
Processing files:  23%|████████████████████████████████████▍                                                                                                                           | 1111/4877 [00:17<00:54, 69.29it/s]
Processing files:  23%|████████████████████████████████████▊                                                                                                                           | 1121/4877 [00:17<00:48, 77.41it/s]
Processing files:  23%|█████████████████████████████████████                                                                                                                           | 1130/4877 [00:17<00:48, 76.92it/s]
Processing files:  23%|█████████████████████████████████████▎                                                                                                                          | 1138/4877 [00:17<00:55, 67.09it/s]
Processing files:  23%|█████████████████████████████████████▌                                                                                                                          | 1146/4877 [00:18<00:59, 62.20it/s]
Processing files:  24%|█████████████████████████████████████▉                                                                                                                          | 1155/4877 [00:18<00:56, 65.32it/s]
Processing files:  24%|██████████████████████████████████████▎                                                                                                                         | 1168/4877 [00:18<00:51, 72.04it/s]
Processing files:  24%|██████████████████████████████████████▋                                                                                                                         | 1179/4877 [00:18<00:46, 80.16it/s]
Processing files:  24%|██████████████████████████████████████▉                                                                                                                         | 1188/4877 [00:18<00:45, 80.44it/s]
Processing files:  25%|███████████████████████████████████████▎                                                                                                                        | 1197/4877 [00:18<01:09, 52.60it/s]
Processing files:  25%|███████████████████████████████████████▍                                                                                                                        | 1204/4877 [00:19<01:53, 32.25it/s]
Processing files:  25%|███████████████████████████████████████▋                                                                                                                        | 1211/4877 [00:19<01:41, 35.97it/s]
Processing files:  25%|███████████████████████████████████████▉                                                                                                                        | 1217/4877 [00:19<01:53, 32.33it/s]
Processing files:  25%|████████████████████████████████████████                                                                                                                        | 1223/4877 [00:19<01:40, 36.22it/s]
Processing files:  25%|████████████████████████████████████████▎                                                                                                                       | 1228/4877 [00:20<01:41, 36.05it/s]
Processing files:  25%|████████████████████████████████████████▍                                                                                                                       | 1233/4877 [00:20<01:47, 33.76it/s]
Processing files:  25%|████████████████████████████████████████▌                                                                                                                       | 1237/4877 [00:20<01:51, 32.69it/s]
Processing files:  25%|████████████████████████████████████████▋                                                                                                                       | 1241/4877 [00:20<02:31, 24.04it/s]
Processing files:  26%|████████████████████████████████████████▉                                                                                                                       | 1248/4877 [00:20<01:57, 30.88it/s]
Processing files:  26%|█████████████████████████████████████████▏                                                                                                                      | 1254/4877 [00:20<01:41, 35.67it/s]
Processing files:  26%|█████████████████████████████████████████▎                                                                                                                      | 1259/4877 [00:20<01:34, 38.20it/s]
Processing files:  26%|█████████████████████████████████████████▍                                                                                                                      | 1264/4877 [00:21<01:32, 39.10it/s]
Processing files:  26%|█████████████████████████████████████████▋                                                                                                                      | 1270/4877 [00:21<01:23, 43.01it/s]
Processing files:  26%|█████████████████████████████████████████▉                                                                                                                      | 1280/4877 [00:21<01:06, 54.33it/s]
Processing files:  26%|██████████████████████████████████████████▎                                                                                                                     | 1288/4877 [00:21<01:01, 58.46it/s]
Processing files:  27%|██████████████████████████████████████████▋                                                                                                                     | 1300/4877 [00:21<00:51, 69.19it/s]
Processing files:  27%|██████████████████████████████████████████▉                                                                                                                     | 1308/4877 [00:21<00:52, 68.36it/s]
Processing files:  27%|███████████████████████████████████████████▏                                                                                                                    | 1315/4877 [00:21<00:58, 60.84it/s]
Processing files:  27%|███████████████████████████████████████████▎                                                                                                                    | 1322/4877 [00:22<01:06, 53.52it/s]
Processing files:  27%|███████████████████████████████████████████▋                                                                                                                    | 1333/4877 [00:22<00:55, 63.33it/s]
Processing files:  27%|███████████████████████████████████████████▉                                                                                                                    | 1340/4877 [00:22<00:56, 62.99it/s]
Processing files:  28%|████████████████████████████████████████████▍                                                                                                                   | 1353/4877 [00:22<00:46, 75.10it/s]
Processing files:  28%|████████████████████████████████████████████▋                                                                                                                   | 1363/4877 [00:22<00:45, 76.91it/s]
Processing files:  28%|████████████████████████████████████████████▉                                                                                                                   | 1371/4877 [00:22<00:45, 76.29it/s]
Processing files:  28%|█████████████████████████████████████████████▏                                                                                                                  | 1379/4877 [00:22<00:53, 65.70it/s]
Processing files:  28%|█████████████████████████████████████████████▍                                                                                                                  | 1386/4877 [00:23<01:12, 48.21it/s]
Processing files:  29%|█████████████████████████████████████████████▊                                                                                                                  | 1395/4877 [00:23<01:03, 55.12it/s]
Processing files:  29%|██████████████████████████████████████████████                                                                                                                  | 1403/4877 [00:23<01:08, 50.81it/s]
Processing files:  29%|██████████████████████████████████████████████▏                                                                                                                 | 1409/4877 [00:23<01:23, 41.51it/s]
Processing files:  29%|██████████████████████████████████████████████▍                                                                                                                 | 1414/4877 [00:23<01:23, 41.53it/s]
Processing files:  29%|██████████████████████████████████████████████▌                                                                                                                 | 1419/4877 [00:23<01:26, 40.12it/s]
Processing files:  29%|██████████████████████████████████████████████▋                                                                                                                 | 1424/4877 [00:23<01:31, 37.60it/s]
Processing files:  29%|██████████████████████████████████████████████▊                                                                                                                 | 1428/4877 [00:24<02:07, 27.00it/s]
Processing files:  29%|███████████████████████████████████████████████                                                                                                                 | 1433/4877 [00:24<02:01, 28.36it/s]
Processing files:  30%|███████████████████████████████████████████████▏                                                                                                                | 1440/4877 [00:24<01:38, 34.76it/s]
Processing files:  30%|███████████████████████████████████████████████▎                                                                                                                | 1444/4877 [00:24<01:35, 35.82it/s]
Processing files:  30%|███████████████████████████████████████████████▌                                                                                                                | 1450/4877 [00:24<01:34, 36.07it/s]
Processing files:  30%|███████████████████████████████████████████████▋                                                                                                                | 1454/4877 [00:25<01:58, 28.94it/s]
Processing files:  30%|███████████████████████████████████████████████▊                                                                                                                | 1458/4877 [00:25<02:07, 26.78it/s]
Processing files:  30%|███████████████████████████████████████████████▉                                                                                                                | 1461/4877 [00:25<02:18, 24.65it/s]
Processing files:  30%|████████████████████████████████████████████████                                                                                                                | 1464/4877 [00:25<02:30, 22.67it/s]
Processing files:  30%|████████████████████████████████████████████████▏                                                                                                               | 1467/4877 [00:25<02:37, 21.69it/s]
Processing files:  30%|████████████████████████████████████████████████▏                                                                                                               | 1470/4877 [00:25<02:42, 21.03it/s]
Processing files:  30%|████████████████████████████████████████████████▎                                                                                                               | 1474/4877 [00:26<02:23, 23.64it/s]
Processing files:  30%|████████████████████████████████████████████████▋                                                                                                               | 1484/4877 [00:26<01:28, 38.17it/s]
Processing files:  31%|████████████████████████████████████████████████▉                                                                                                               | 1491/4877 [00:26<01:17, 43.96it/s]
Processing files:  31%|█████████████████████████████████████████████████▏                                                                                                              | 1498/4877 [00:26<01:09, 48.90it/s]
Processing files:  31%|█████████████████████████████████████████████████▌                                                                                                              | 1512/4877 [00:26<00:48, 69.68it/s]
Processing files:  31%|█████████████████████████████████████████████████▊                                                                                                              | 1520/4877 [00:26<00:59, 56.57it/s]
Processing files:  31%|██████████████████████████████████████████████████▏                                                                                                             | 1530/4877 [00:26<00:51, 64.71it/s]
Processing files:  32%|██████████████████████████████████████████████████▍                                                                                                             | 1538/4877 [00:26<00:51, 64.27it/s]
Processing files:  32%|██████████████████████████████████████████████████▊                                                                                                             | 1550/4877 [00:27<00:43, 75.69it/s]
Processing files:  32%|███████████████████████████████████████████████████▏                                                                                                            | 1559/4877 [00:27<00:52, 63.56it/s]
Processing files:  32%|███████████████████████████████████████████████████▍                                                                                                            | 1568/4877 [00:27<00:49, 66.67it/s]
Processing files:  32%|███████████████████████████████████████████████████▋                                                                                                            | 1576/4877 [00:27<00:49, 66.62it/s]
Processing files:  33%|████████████████████████████████████████████████████▏                                                                                                           | 1589/4877 [00:27<00:41, 78.87it/s]
Processing files:  33%|████████████████████████████████████████████████████▍                                                                                                           | 1599/4877 [00:27<00:41, 78.68it/s]
Processing files:  33%|████████████████████████████████████████████████████▊                                                                                                           | 1608/4877 [00:27<00:42, 77.05it/s]
Processing files:  33%|█████████████████████████████████████████████████████                                                                                                           | 1616/4877 [00:28<00:50, 64.42it/s]
Processing files:  33%|█████████████████████████████████████████████████████▍                                                                                                          | 1627/4877 [00:28<00:48, 66.45it/s]
Processing files:  34%|█████████████████████████████████████████████████████▌                                                                                                          | 1634/4877 [00:28<00:58, 55.22it/s]
Processing files:  34%|█████████████████████████████████████████████████████▊                                                                                                          | 1640/4877 [00:28<01:02, 51.41it/s]
Processing files:  34%|██████████████████████████████████████████████████████                                                                                                          | 1646/4877 [00:29<01:49, 29.63it/s]
Processing files:  34%|██████████████████████████████████████████████████████▏                                                                                                         | 1651/4877 [00:29<02:03, 26.04it/s]
Processing files:  34%|██████████████████████████████████████████████████████▎                                                                                                         | 1655/4877 [00:29<02:33, 21.01it/s]
Processing files:  34%|██████████████████████████████████████████████████████▍                                                                                                         | 1658/4877 [00:29<02:27, 21.85it/s]
Processing files:  34%|██████████████████████████████████████████████████████▌                                                                                                         | 1664/4877 [00:29<01:58, 27.16it/s]
Processing files:  34%|██████████████████████████████████████████████████████▉                                                                                                         | 1674/4877 [00:29<01:22, 38.69it/s]
Processing files:  35%|███████████████████████████████████████████████████████▎                                                                                                        | 1686/4877 [00:30<01:00, 52.93it/s]
Processing files:  35%|███████████████████████████████████████████████████████▋                                                                                                        | 1697/4877 [00:30<00:51, 61.43it/s]
Processing files:  35%|███████████████████████████████████████████████████████▉                                                                                                        | 1705/4877 [00:30<00:49, 64.31it/s]
Processing files:  35%|████████████████████████████████████████████████████████▎                                                                                                       | 1716/4877 [00:30<00:43, 72.88it/s]
Processing files:  35%|████████████████████████████████████████████████████████▌                                                                                                       | 1724/4877 [00:30<00:47, 66.66it/s]
Processing files:  36%|████████████████████████████████████████████████████████▊                                                                                                       | 1732/4877 [00:30<00:52, 59.58it/s]
Processing files:  36%|█████████████████████████████████████████████████████████                                                                                                       | 1740/4877 [00:30<00:50, 62.31it/s]
Processing files:  36%|█████████████████████████████████████████████████████████▍                                                                                                      | 1750/4877 [00:30<00:47, 65.83it/s]
Processing files:  36%|█████████████████████████████████████████████████████████▋                                                                                                      | 1757/4877 [00:31<00:47, 65.33it/s]
Processing files:  36%|█████████████████████████████████████████████████████████▊                                                                                                      | 1764/4877 [00:31<00:54, 57.02it/s]
Processing files:  36%|██████████████████████████████████████████████████████████                                                                                                      | 1770/4877 [00:31<00:55, 56.05it/s]
Processing files:  36%|██████████████████████████████████████████████████████████▎                                                                                                     | 1776/4877 [00:31<01:01, 50.62it/s]
Processing files:  37%|██████████████████████████████████████████████████████████▍                                                                                                     | 1782/4877 [00:31<01:06, 46.20it/s]
Processing files:  37%|██████████████████████████████████████████████████████████▋                                                                                                     | 1787/4877 [00:32<01:38, 31.34it/s]
Processing files:  37%|██████████████████████████████████████████████████████████▊                                                                                                     | 1791/4877 [00:32<01:35, 32.45it/s]
Processing files:  37%|██████████████████████████████████████████████████████████▉                                                                                                     | 1795/4877 [00:32<02:14, 22.91it/s]
Processing files:  37%|███████████████████████████████████████████████████████████                                                                                                     | 1799/4877 [00:32<02:25, 21.13it/s]
Processing files:  37%|███████████████████████████████████████████████████████████                                                                                                     | 1802/4877 [00:32<02:16, 22.47it/s]
Processing files:  37%|███████████████████████████████████████████████████████████▏                                                                                                    | 1806/4877 [00:33<02:17, 22.30it/s]
Processing files:  37%|███████████████████████████████████████████████████████████▎                                                                                                    | 1809/4877 [00:33<02:12, 23.14it/s]
Processing files:  37%|███████████████████████████████████████████████████████████▌                                                                                                    | 1817/4877 [00:33<01:34, 32.26it/s]
Processing files:  37%|███████████████████████████████████████████████████████████▋                                                                                                    | 1821/4877 [00:33<01:44, 29.26it/s]
Processing files:  37%|███████████████████████████████████████████████████████████▊                                                                                                    | 1825/4877 [00:33<01:40, 30.46it/s]
Processing files:  38%|████████████████████████████████████████████████████████████▎                                                                                                   | 1837/4877 [00:33<01:12, 41.98it/s]
Processing files:  38%|████████████████████████████████████████████████████████████▍                                                                                                   | 1843/4877 [00:33<01:06, 45.75it/s]
Processing files:  38%|████████████████████████████████████████████████████████████▋                                                                                                   | 1848/4877 [00:33<01:05, 46.47it/s]
Processing files:  38%|████████████████████████████████████████████████████████████▊                                                                                                   | 1853/4877 [00:34<01:17, 39.26it/s]
Processing files:  38%|████████████████████████████████████████████████████████████▉                                                                                                   | 1858/4877 [00:34<01:19, 37.89it/s]
Processing files:  38%|█████████████████████████████████████████████████████████████                                                                                                   | 1862/4877 [00:34<01:24, 35.72it/s]
Processing files:  38%|█████████████████████████████████████████████████████████████▏                                                                                                  | 1866/4877 [00:34<01:33, 32.09it/s]
Processing files:  38%|█████████████████████████████████████████████████████████████▎                                                                                                  | 1870/4877 [00:34<01:50, 27.24it/s]
Processing files:  38%|█████████████████████████████████████████████████████████████▍                                                                                                  | 1873/4877 [00:34<02:07, 23.62it/s]
Processing files:  38%|█████████████████████████████████████████████████████████████▌                                                                                                  | 1876/4877 [00:35<02:01, 24.66it/s]
Processing files:  39%|█████████████████████████████████████████████████████████████▋                                                                                                  | 1882/4877 [00:35<01:37, 30.80it/s]
Processing files:  39%|██████████████████████████████████████████████████████████████                                                                                                  | 1892/4877 [00:35<01:04, 46.25it/s]
Processing files:  39%|██████████████████████████████████████████████████████████████▎                                                                                                 | 1901/4877 [00:35<00:53, 56.07it/s]
Processing files:  39%|██████████████████████████████████████████████████████████████▌                                                                                                 | 1908/4877 [00:35<00:52, 56.30it/s]
Processing files:  39%|██████████████████████████████████████████████████████████████▊                                                                                                 | 1915/4877 [00:35<00:54, 54.27it/s]
Processing files:  39%|███████████████████████████████████████████████████████████████                                                                                                 | 1921/4877 [00:35<00:56, 52.77it/s]
Processing files:  40%|███████████████████████████████████████████████████████████████▏                                                                                                | 1927/4877 [00:35<01:01, 48.00it/s]
Processing files:  40%|███████████████████████████████████████████████████████████████▌                                                                                                | 1937/4877 [00:36<00:51, 57.28it/s]
Processing files:  40%|███████████████████████████████████████████████████████████████▋                                                                                                | 1943/4877 [00:36<00:51, 57.05it/s]
Processing files:  40%|███████████████████████████████████████████████████████████████▉                                                                                                | 1949/4877 [00:36<00:58, 50.29it/s]
Processing files:  40%|████████████████████████████████████████████████████████████████▏                                                                                               | 1955/4877 [00:36<00:57, 50.95it/s]
Processing files:  40%|████████████████████████████████████████████████████████████████▎                                                                                               | 1961/4877 [00:36<01:00, 47.99it/s]
Processing files:  40%|████████████████████████████████████████████████████████████████▍                                                                                               | 1966/4877 [00:36<01:07, 43.36it/s]
Processing files:  40%|████████████████████████████████████████████████████████████████▋                                                                                               | 1971/4877 [00:36<01:20, 36.12it/s]
Processing files:  41%|████████████████████████████████████████████████████████████████▉                                                                                               | 1978/4877 [00:37<01:10, 41.09it/s]
Processing files:  41%|█████████████████████████████████████████████████████████████████                                                                                               | 1983/4877 [00:37<01:11, 40.68it/s]
Processing files:  41%|█████████████████████████████████████████████████████████████████▏                                                                                              | 1988/4877 [00:37<01:30, 32.09it/s]
Processing files:  41%|█████████████████████████████████████████████████████████████████▎                                                                                              | 1992/4877 [00:37<01:52, 25.63it/s]
Processing files:  41%|█████████████████████████████████████████████████████████████████▌                                                                                              | 1997/4877 [00:37<01:39, 28.86it/s]
Processing files:  41%|█████████████████████████████████████████████████████████████████▋                                                                                              | 2004/4877 [00:37<01:18, 36.37it/s]
Processing files:  41%|██████████████████████████████████████████████████████████████████                                                                                              | 2012/4877 [00:37<01:03, 45.22it/s]
Processing files:  41%|██████████████████████████████████████████████████████████████████▎                                                                                             | 2022/4877 [00:38<00:49, 57.77it/s]
Processing files:  42%|██████████████████████████████████████████████████████████████████▊                                                                                             | 2035/4877 [00:38<00:41, 68.86it/s]
Processing files:  42%|███████████████████████████████████████████████████████████████████                                                                                             | 2043/4877 [00:38<00:46, 60.83it/s]
Processing files:  42%|███████████████████████████████████████████████████████████████████▎                                                                                            | 2050/4877 [00:38<00:46, 61.24it/s]
Processing files:  42%|███████████████████████████████████████████████████████████████████▍                                                                                            | 2057/4877 [00:38<00:45, 62.20it/s]
Processing files:  42%|███████████████████████████████████████████████████████████████████▋                                                                                            | 2064/4877 [00:39<01:15, 37.48it/s]
Processing files:  42%|███████████████████████████████████████████████████████████████████▉                                                                                            | 2070/4877 [00:39<01:21, 34.36it/s]
Processing files:  43%|████████████████████████████████████████████████████████████████████                                                                                            | 2075/4877 [00:39<01:19, 35.32it/s]
Processing files:  43%|████████████████████████████████████████████████████████████████████▎                                                                                           | 2082/4877 [00:39<01:11, 39.16it/s]
Processing files:  43%|████████████████████████████████████████████████████████████████████▋                                                                                           | 2092/4877 [00:39<00:55, 50.48it/s]
Processing files:  43%|████████████████████████████████████████████████████████████████████▉                                                                                           | 2100/4877 [00:39<00:50, 55.51it/s]
Processing files:  43%|█████████████████████████████████████████████████████████████████████▏                                                                                          | 2110/4877 [00:39<00:43, 63.74it/s]
Processing files:  43%|█████████████████████████████████████████████████████████████████████▌                                                                                          | 2119/4877 [00:39<00:39, 69.68it/s]
Processing files:  44%|█████████████████████████████████████████████████████████████████████▊                                                                                          | 2127/4877 [00:40<00:56, 48.98it/s]
Processing files:  44%|██████████████████████████████████████████████████████████████████████                                                                                          | 2134/4877 [00:40<00:51, 53.13it/s]
Processing files:  44%|██████████████████████████████████████████████████████████████████████▏                                                                                         | 2141/4877 [00:40<00:56, 48.60it/s]
Processing files:  44%|██████████████████████████████████████████████████████████████████████▌                                                                                         | 2150/4877 [00:40<00:48, 56.70it/s]
Processing files:  44%|██████████████████████████████████████████████████████████████████████▉                                                                                         | 2164/4877 [00:40<00:36, 73.84it/s]
Processing files:  45%|███████████████████████████████████████████████████████████████████████▍                                                                                        | 2178/4877 [00:40<00:32, 84.30it/s]
Processing files:  45%|███████████████████████████████████████████████████████████████████████▊                                                                                        | 2188/4877 [00:40<00:34, 77.53it/s]
Processing files:  45%|████████████████████████████████████████████████████████████████████████                                                                                        | 2197/4877 [00:41<00:35, 75.97it/s]
Processing files:  45%|████████████████████████████████████████████████████████████████████████▎                                                                                       | 2206/4877 [00:41<00:35, 74.56it/s]
Processing files:  45%|████████████████████████████████████████████████████████████████████████▋                                                                                       | 2214/4877 [00:41<00:39, 66.69it/s]
Processing files:  46%|████████████████████████████████████████████████████████████████████████▊                                                                                       | 2221/4877 [00:41<00:39, 66.91it/s]
Processing files:  46%|█████████████████████████████████████████████████████████████████████████                                                                                       | 2228/4877 [00:41<00:42, 62.19it/s]
Processing files:  46%|█████████████████████████████████████████████████████████████████████████▎                                                                                      | 2235/4877 [00:41<00:43, 61.30it/s]
Processing files:  46%|█████████████████████████████████████████████████████████████████████████▊                                                                                      | 2248/4877 [00:41<00:33, 77.70it/s]
Processing files:  46%|██████████████████████████████████████████████████████████████████████████                                                                                      | 2258/4877 [00:41<00:31, 82.44it/s]
Processing files:  46%|██████████████████████████████████████████████████████████████████████████▎                                                                                     | 2267/4877 [00:42<00:39, 66.16it/s]
Processing files:  47%|██████████████████████████████████████████████████████████████████████████▋                                                                                     | 2275/4877 [00:42<00:43, 60.00it/s]
Processing files:  47%|██████████████████████████████████████████████████████████████████████████▊                                                                                     | 2282/4877 [00:42<01:00, 43.00it/s]
Processing files:  47%|███████████████████████████████████████████████████████████████████████████                                                                                     | 2288/4877 [00:42<01:00, 43.00it/s]
Processing files:  47%|███████████████████████████████████████████████████████████████████████████▏                                                                                    | 2293/4877 [00:43<01:34, 27.46it/s]
Processing files:  47%|███████████████████████████████████████████████████████████████████████████▍                                                                                    | 2300/4877 [00:43<01:17, 33.11it/s]
Processing files:  47%|███████████████████████████████████████████████████████████████████████████▋                                                                                    | 2308/4877 [00:43<01:03, 40.50it/s]
Processing files:  47%|███████████████████████████████████████████████████████████████████████████▉                                                                                    | 2315/4877 [00:43<00:56, 45.56it/s]
Processing files:  48%|████████████████████████████████████████████████████████████████████████████▏                                                                                   | 2321/4877 [00:43<01:02, 40.93it/s]
Processing files:  48%|████████████████████████████████████████████████████████████████████████████▍                                                                                   | 2331/4877 [00:43<00:48, 52.78it/s]
Processing files:  48%|████████████████████████████████████████████████████████████████████████████▋                                                                                   | 2338/4877 [00:43<00:46, 54.25it/s]
Processing files:  48%|█████████████████████████████████████████████████████████████████████████████                                                                                   | 2349/4877 [00:44<00:38, 65.44it/s]
Processing files:  48%|█████████████████████████████████████████████████████████████████████████████▎                                                                                  | 2357/4877 [00:44<00:44, 56.47it/s]
Processing files:  48%|█████████████████████████████████████████████████████████████████████████████▌                                                                                  | 2365/4877 [00:44<00:41, 60.46it/s]
Processing files:  49%|█████████████████████████████████████████████████████████████████████████████▊                                                                                  | 2372/4877 [00:44<00:51, 48.86it/s]
Processing files:  49%|██████████████████████████████████████████████████████████████████████████████                                                                                  | 2378/4877 [00:44<00:53, 46.32it/s]
Processing files:  49%|██████████████████████████████████████████████████████████████████████████████▏                                                                                 | 2385/4877 [00:44<00:49, 50.68it/s]
Processing files:  49%|██████████████████████████████████████████████████████████████████████████████▌                                                                                 | 2394/4877 [00:44<00:45, 54.87it/s]
Processing files:  49%|██████████████████████████████████████████████████████████████████████████████▋                                                                                 | 2400/4877 [00:45<01:05, 37.96it/s]
Processing files:  49%|██████████████████████████████████████████████████████████████████████████████▉                                                                                 | 2405/4877 [00:45<01:02, 39.45it/s]
Processing files:  49%|███████████████████████████████████████████████████████████████████████████████                                                                                 | 2410/4877 [00:45<01:01, 40.42it/s]
Processing files:  50%|███████████████████████████████████████████████████████████████████████████████▏                                                                                | 2415/4877 [00:46<03:26, 11.95it/s]
Processing files:  50%|███████████████████████████████████████████████████████████████████████████████▍                                                                                | 2423/4877 [00:46<02:21, 17.32it/s]
Processing files:  50%|███████████████████████████████████████████████████████████████████████████████▊                                                                                | 2431/4877 [00:46<01:43, 23.53it/s]
Processing files:  50%|███████████████████████████████████████████████████████████████████████████████▉                                                                                | 2438/4877 [00:47<01:24, 28.89it/s]
Processing files:  50%|████████████████████████████████████████████████████████████████████████████████▎                                                                               | 2449/4877 [00:47<00:59, 40.65it/s]
Processing files:  51%|████████████████████████████████████████████████████████████████████████████████▊                                                                               | 2463/4877 [00:47<00:42, 57.21it/s]
Processing files:  51%|█████████████████████████████████████████████████████████████████████████████████                                                                               | 2472/4877 [00:47<00:41, 58.55it/s]
Processing files:  51%|█████████████████████████████████████████████████████████████████████████████████▎                                                                              | 2480/4877 [00:47<00:39, 60.15it/s]
Processing files:  51%|█████████████████████████████████████████████████████████████████████████████████▌                                                                              | 2488/4877 [00:47<00:38, 61.60it/s]
Processing files:  51%|█████████████████████████████████████████████████████████████████████████████████▉                                                                              | 2496/4877 [00:47<00:40, 59.09it/s]
Processing files:  51%|██████████████████████████████████████████████████████████████████████████████████                                                                              | 2503/4877 [00:47<00:39, 60.83it/s]
Processing files:  52%|██████████████████████████████████████████████████████████████████████████████████▍                                                                             | 2512/4877 [00:48<00:36, 65.61it/s]
Processing files:  52%|██████████████████████████████████████████████████████████████████████████████████▋                                                                             | 2520/4877 [00:48<00:35, 66.93it/s]
Processing files:  52%|██████████████████████████████████████████████████████████████████████████████████▉                                                                             | 2528/4877 [00:48<00:34, 67.38it/s]
Processing files:  52%|███████████████████████████████████████████████████████████████████████████████████▏                                                                            | 2535/4877 [00:48<00:34, 66.97it/s]
Processing files:  52%|███████████████████████████████████████████████████████████████████████████████████▍                                                                            | 2544/4877 [00:48<00:33, 69.41it/s]
Processing files:  52%|███████████████████████████████████████████████████████████████████████████████████▋                                                                            | 2552/4877 [00:48<00:37, 61.81it/s]
Processing files:  52%|███████████████████████████████████████████████████████████████████████████████████▉                                                                            | 2559/4877 [00:48<00:41, 56.48it/s]
Processing files:  53%|████████████████████████████████████████████████████████████████████████████████████▏                                                                           | 2567/4877 [00:48<00:41, 55.52it/s]
Processing files:  53%|████████████████████████████████████████████████████████████████████████████████████▍                                                                           | 2573/4877 [00:49<00:45, 51.10it/s]
Processing files:  53%|████████████████████████████████████████████████████████████████████████████████████▌                                                                           | 2579/4877 [00:49<00:52, 43.79it/s]
Processing files:  53%|████████████████████████████████████████████████████████████████████████████████████▊                                                                           | 2585/4877 [00:49<00:51, 44.53it/s]
Processing files:  53%|████████████████████████████████████████████████████████████████████████████████████▉                                                                           | 2590/4877 [00:49<00:57, 39.51it/s]
Processing files:  53%|█████████████████████████████████████████████████████████████████████████████████████▏                                                                          | 2595/4877 [00:49<01:02, 36.29it/s]
Processing files:  53%|█████████████████████████████████████████████████████████████████████████████████████▎                                                                          | 2601/4877 [00:49<00:56, 40.29it/s]
Processing files:  53%|█████████████████████████████████████████████████████████████████████████████████████▍                                                                          | 2606/4877 [00:50<01:23, 27.22it/s]
Processing files:  54%|█████████████████████████████████████████████████████████████████████████████████████▋                                                                          | 2610/4877 [00:50<01:44, 21.62it/s]
Processing files:  54%|█████████████████████████████████████████████████████████████████████████████████████▋                                                                          | 2613/4877 [00:50<01:45, 21.44it/s]
Processing files:  54%|█████████████████████████████████████████████████████████████████████████████████████▊                                                                          | 2617/4877 [00:50<01:42, 22.07it/s]
Processing files:  54%|█████████████████████████████████████████████████████████████████████████████████████▉                                                                          | 2621/4877 [00:50<01:29, 25.15it/s]
Processing files:  54%|██████████████████████████████████████████████████████████████████████████████████████                                                                          | 2625/4877 [00:51<01:40, 22.47it/s]
Processing files:  54%|██████████████████████████████████████████████████████████████████████████████████████▎                                                                         | 2630/4877 [00:51<01:29, 25.01it/s]
Processing files:  54%|██████████████████████████████████████████████████████████████████████████████████████▍                                                                         | 2633/4877 [00:51<02:10, 17.21it/s]
Processing files:  54%|██████████████████████████████████████████████████████████████████████████████████████▌                                                                         | 2639/4877 [00:51<01:42, 21.78it/s]
Processing files:  54%|██████████████████████████████████████████████████████████████████████████████████████▋                                                                         | 2643/4877 [00:52<01:38, 22.70it/s]
Processing files:  54%|██████████████████████████████████████████████████████████████████████████████████████▊                                                                         | 2646/4877 [00:52<01:40, 22.28it/s]
Processing files:  54%|██████████████████████████████████████████████████████████████████████████████████████▉                                                                         | 2649/4877 [00:52<01:51, 20.03it/s]
Processing files:  54%|███████████████████████████████████████████████████████████████████████████████████████                                                                         | 2652/4877 [00:52<01:47, 20.72it/s]
Processing files:  55%|███████████████████████████████████████████████████████████████████████████████████████▏                                                                        | 2659/4877 [00:52<01:25, 26.09it/s]
Processing files:  55%|███████████████████████████████████████████████████████████████████████████████████████▍                                                                        | 2667/4877 [00:52<01:02, 35.22it/s]
Processing files:  55%|███████████████████████████████████████████████████████████████████████████████████████▋                                                                        | 2671/4877 [00:52<01:03, 35.01it/s]
Processing files:  55%|███████████████████████████████████████████████████████████████████████████████████████▉                                                                        | 2679/4877 [00:53<00:49, 44.20it/s]
Processing files:  55%|████████████████████████████████████████████████████████████████████████████████████████                                                                        | 2684/4877 [00:53<00:51, 42.67it/s]
Processing files:  55%|████████████████████████████████████████████████████████████████████████████████████████▎                                                                       | 2691/4877 [00:53<00:45, 48.57it/s]
Processing files:  55%|████████████████████████████████████████████████████████████████████████████████████████▍                                                                       | 2697/4877 [00:53<00:45, 47.62it/s]
Processing files:  56%|████████████████████████████████████████████████████████████████████████████████████████▉                                                                       | 2710/4877 [00:53<00:32, 67.02it/s]
Processing files:  56%|█████████████████████████████████████████████████████████████████████████████████████████▏                                                                      | 2718/4877 [00:53<00:50, 42.46it/s]
Processing files:  56%|█████████████████████████████████████████████████████████████████████████████████████████▎                                                                      | 2724/4877 [00:53<00:48, 44.40it/s]
Processing files:  56%|█████████████████████████████████████████████████████████████████████████████████████████▊                                                                      | 2736/4877 [00:54<00:36, 59.21it/s]
Processing files:  56%|██████████████████████████████████████████████████████████████████████████████████████████                                                                      | 2744/4877 [00:54<00:43, 49.30it/s]
Processing files:  56%|██████████████████████████████████████████████████████████████████████████████████████████▎                                                                     | 2751/4877 [00:54<00:57, 36.92it/s]
Processing files:  57%|██████████████████████████████████████████████████████████████████████████████████████████▌                                                                     | 2760/4877 [00:54<00:47, 44.60it/s]
Processing files:  57%|██████████████████████████████████████████████████████████████████████████████████████████▉                                                                     | 2771/4877 [00:54<00:37, 55.99it/s]
Processing files:  57%|███████████████████████████████████████████████████████████████████████████████████████████▏                                                                    | 2781/4877 [00:54<00:34, 60.94it/s]
Processing files:  57%|███████████████████████████████████████████████████████████████████████████████████████████▌                                                                    | 2791/4877 [00:55<00:30, 67.42it/s]
Processing files:  57%|███████████████████████████████████████████████████████████████████████████████████████████▊                                                                    | 2799/4877 [00:55<00:31, 66.33it/s]
Processing files:  58%|████████████████████████████████████████████████████████████████████████████████████████████                                                                    | 2807/4877 [00:55<00:30, 67.29it/s]
Processing files:  58%|████████████████████████████████████████████████████████████████████████████████████████████▍                                                                   | 2816/4877 [00:55<00:30, 68.59it/s]
Processing files:  58%|████████████████████████████████████████████████████████████████████████████████████████████▋                                                                   | 2824/4877 [00:55<00:40, 51.28it/s]
Processing files:  58%|████████████████████████████████████████████████████████████████████████████████████████████▉                                                                   | 2834/4877 [00:55<00:36, 56.31it/s]
Processing files:  58%|█████████████████████████████████████████████████████████████████████████████████████████████▏                                                                  | 2841/4877 [00:56<00:51, 39.57it/s]
Processing files:  58%|█████████████████████████████████████████████████████████████████████████████████████████████▌                                                                  | 2850/4877 [00:56<00:43, 46.57it/s]
Processing files:  59%|█████████████████████████████████████████████████████████████████████████████████████████████▋                                                                  | 2857/4877 [00:56<00:39, 50.98it/s]
Processing files:  59%|█████████████████████████████████████████████████████████████████████████████████████████████▉                                                                  | 2864/4877 [00:56<00:50, 40.17it/s]
Processing files:  59%|██████████████████████████████████████████████████████████████████████████████████████████████▏                                                                 | 2870/4877 [00:56<00:46, 43.09it/s]
Processing files:  59%|██████████████████████████████████████████████████████████████████████████████████████████████▎                                                                 | 2876/4877 [00:56<00:49, 40.45it/s]
Processing files:  59%|██████████████████████████████████████████████████████████████████████████████████████████████▋                                                                 | 2886/4877 [00:57<00:38, 51.58it/s]
Processing files:  59%|██████████████████████████████████████████████████████████████████████████████████████████████▉                                                                 | 2893/4877 [00:57<00:39, 50.15it/s]
Processing files:  59%|███████████████████████████████████████████████████████████████████████████████████████████████                                                                 | 2899/4877 [00:57<00:48, 40.81it/s]
Processing files:  60%|███████████████████████████████████████████████████████████████████████████████████████████████▎                                                                | 2906/4877 [00:57<00:43, 45.38it/s]
Processing files:  60%|███████████████████████████████████████████████████████████████████████████████████████████████▌                                                                | 2913/4877 [00:57<00:39, 50.11it/s]
Processing files:  60%|███████████████████████████████████████████████████████████████████████████████████████████████▊                                                                | 2919/4877 [00:57<00:39, 49.92it/s]
Processing files:  60%|███████████████████████████████████████████████████████████████████████████████████████████████▉                                                                | 2925/4877 [00:57<00:40, 47.94it/s]
Processing files:  60%|████████████████████████████████████████████████████████████████████████████████████████████████▏                                                               | 2931/4877 [00:58<00:52, 37.38it/s]
Processing files:  60%|████████████████████████████████████████████████████████████████████████████████████████████████▌                                                               | 2943/4877 [00:58<00:36, 52.53it/s]
Processing files:  61%|████████████████████████████████████████████████████████████████████████████████████████████████▊                                                               | 2952/4877 [00:58<00:32, 58.79it/s]
Processing files:  61%|█████████████████████████████████████████████████████████████████████████████████████████████████                                                               | 2959/4877 [00:58<00:34, 55.31it/s]
Processing files:  61%|█████████████████████████████████████████████████████████████████████████████████████████████████▎                                                              | 2966/4877 [00:58<00:42, 44.77it/s]
Processing files:  61%|█████████████████████████████████████████████████████████████████████████████████████████████████▌                                                              | 2972/4877 [00:59<00:46, 41.26it/s]
Processing files:  61%|█████████████████████████████████████████████████████████████████████████████████████████████████▋                                                              | 2977/4877 [00:59<00:59, 32.08it/s]
Processing files:  61%|█████████████████████████████████████████████████████████████████████████████████████████████████▊                                                              | 2981/4877 [00:59<01:07, 28.10it/s]
Processing files:  61%|█████████████████████████████████████████████████████████████████████████████████████████████████▉                                                              | 2985/4877 [00:59<01:09, 27.18it/s]
Processing files:  61%|██████████████████████████████████████████████████████████████████████████████████████████████████                                                              | 2990/4877 [00:59<01:00, 31.32it/s]
Processing files:  61%|██████████████████████████████████████████████████████████████████████████████████████████████████▎                                                             | 2997/4877 [00:59<00:48, 38.96it/s]
Processing files:  62%|██████████████████████████████████████████████████████████████████████████████████████████████████▌                                                             | 3004/4877 [00:59<00:41, 44.92it/s]
Processing files:  62%|██████████████████████████████████████████████████████████████████████████████████████████████████▋                                                             | 3010/4877 [01:00<00:47, 39.57it/s]
Processing files:  62%|██████████████████████████████████████████████████████████████████████████████████████████████████▉                                                             | 3015/4877 [01:00<00:46, 40.19it/s]
Processing files:  62%|███████████████████████████████████████████████████████████████████████████████████████████████████▎                                                            | 3026/4877 [01:00<00:33, 55.80it/s]
Processing files:  62%|███████████████████████████████████████████████████████████████████████████████████████████████████▌                                                            | 3035/4877 [01:00<00:29, 62.35it/s]
Processing files:  62%|███████████████████████████████████████████████████████████████████████████████████████████████████▊                                                            | 3042/4877 [01:00<00:32, 56.07it/s]
Processing files:  63%|████████████████████████████████████████████████████████████████████████████████████████████████████                                                            | 3049/4877 [01:00<00:32, 57.00it/s]
Processing files:  63%|████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                           | 3056/4877 [01:00<00:30, 59.29it/s]
Processing files:  63%|████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                           | 3065/4877 [01:00<00:30, 59.39it/s]
Processing files:  63%|████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                           | 3072/4877 [01:01<00:34, 52.86it/s]
Processing files:  63%|█████████████████████████████████████████████████████████████████████████████████████████████████████                                                           | 3082/4877 [01:01<00:29, 61.06it/s]
Processing files:  63%|█████████████████████████████████████████████████████████████████████████████████████████████████████▍                                                          | 3093/4877 [01:01<00:25, 70.27it/s]
Processing files:  64%|█████████████████████████████████████████████████████████████████████████████████████████████████████▋                                                          | 3101/4877 [01:01<00:24, 71.88it/s]
Processing files:  64%|█████████████████████████████████████████████████████████████████████████████████████████████████████▉                                                          | 3109/4877 [01:01<00:24, 71.52it/s]
Processing files:  64%|██████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                         | 3117/4877 [01:01<00:24, 73.27it/s]
Processing files:  64%|██████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                         | 3125/4877 [01:01<00:29, 59.03it/s]
Processing files:  64%|██████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                         | 3132/4877 [01:02<00:31, 56.11it/s]
Processing files:  64%|██████████████████████████████████████████████████████████████████████████████████████████████████████▉                                                         | 3138/4877 [01:02<00:33, 51.69it/s]
Processing files:  64%|███████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                        | 3144/4877 [01:02<00:40, 42.55it/s]
Processing files:  65%|███████████████████████████████████████████████████████████████████████████████████████████████████████▍                                                        | 3151/4877 [01:02<00:38, 44.87it/s]
Processing files:  65%|███████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                        | 3165/4877 [01:02<00:26, 63.44it/s]
Processing files:  65%|████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                       | 3176/4877 [01:02<00:24, 70.74it/s]
Processing files:  65%|████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                                       | 3185/4877 [01:02<00:24, 69.97it/s]
Processing files:  65%|████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                       | 3193/4877 [01:03<00:25, 66.42it/s]
Processing files:  66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████                                                       | 3202/4877 [01:03<00:23, 71.42it/s]
Processing files:  66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                      | 3210/4877 [01:03<00:25, 64.16it/s]
Processing files:  66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                      | 3217/4877 [01:03<00:31, 52.18it/s]
Processing files:  66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                                      | 3223/4877 [01:03<00:46, 35.52it/s]
Processing files:  66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                                      | 3229/4877 [01:03<00:41, 39.37it/s]
Processing files:  66%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                     | 3241/4877 [01:04<00:30, 53.55it/s]
Processing files:  67%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                     | 3254/4877 [01:04<00:23, 68.02it/s]
Processing files:  67%|███████████████████████████████████████████████████████████████████████████████████████████████████████████                                                     | 3263/4877 [01:04<00:23, 70.01it/s]
Processing files:  67%|███████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                                    | 3271/4877 [01:04<00:32, 48.80it/s]
Processing files:  67%|███████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                                    | 3279/4877 [01:04<00:29, 53.59it/s]
Processing files:  67%|███████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                    | 3286/4877 [01:04<00:28, 56.55it/s]
Processing files:  68%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                   | 3296/4877 [01:04<00:24, 65.30it/s]
Processing files:  68%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                                   | 3305/4877 [01:05<00:22, 68.40it/s]
Processing files:  68%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                                   | 3313/4877 [01:05<00:22, 70.71it/s]
Processing files:  68%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                                   | 3321/4877 [01:05<00:27, 55.90it/s]
Processing files:  68%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                  | 3328/4877 [01:05<00:37, 40.92it/s]
Processing files:  68%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                                  | 3334/4877 [01:06<00:53, 28.86it/s]
Processing files:  69%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                                  | 3343/4877 [01:06<00:40, 37.55it/s]
Processing files:  69%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                                 | 3357/4877 [01:06<00:28, 54.22it/s]
Processing files:  69%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                                 | 3367/4877 [01:06<00:24, 62.64it/s]
Processing files:  69%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                 | 3377/4877 [01:06<00:22, 66.00it/s]
Processing files:  69%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████                                                 | 3387/4877 [01:06<00:20, 72.89it/s]
Processing files:  70%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                                | 3398/4877 [01:06<00:19, 76.09it/s]
Processing files:  70%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                                | 3407/4877 [01:07<00:35, 41.29it/s]
Processing files:  70%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                                | 3415/4877 [01:07<00:31, 45.93it/s]
Processing files:  70%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                               | 3428/4877 [01:07<00:25, 56.90it/s]
Processing files:  70%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                               | 3436/4877 [01:07<00:33, 43.56it/s]
Processing files:  71%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                               | 3442/4877 [01:08<00:34, 41.44it/s]
Processing files:  71%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                              | 3450/4877 [01:08<00:30, 47.49it/s]
Processing files:  71%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                              | 3456/4877 [01:08<00:37, 38.09it/s]
Processing files:  71%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                              | 3461/4877 [01:08<00:38, 37.05it/s]
Processing files:  71%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                              | 3466/4877 [01:08<00:36, 38.21it/s]
Processing files:  71%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                              | 3471/4877 [01:08<00:35, 39.63it/s]
Processing files:  71%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                              | 3476/4877 [01:08<00:41, 33.86it/s]
Processing files:  71%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                             | 3480/4877 [01:09<00:41, 33.89it/s]
Processing files:  71%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                             | 3486/4877 [01:09<00:36, 38.05it/s]
Processing files:  72%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                             | 3491/4877 [01:09<00:35, 38.51it/s]
Processing files:  72%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                             | 3497/4877 [01:09<00:33, 41.61it/s]
Processing files:  72%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                             | 3504/4877 [01:09<00:28, 47.61it/s]
Processing files:  72%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                             | 3509/4877 [01:09<00:32, 41.57it/s]
Processing files:  72%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                            | 3516/4877 [01:09<00:28, 46.94it/s]
Processing files:  72%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                            | 3533/4877 [01:09<00:18, 71.33it/s]
Processing files:  73%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                           | 3541/4877 [01:10<00:18, 72.63it/s]
Processing files:  73%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                           | 3549/4877 [01:10<00:18, 72.75it/s]
Processing files:  73%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                           | 3560/4877 [01:10<00:16, 81.78it/s]
Processing files:  73%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                           | 3569/4877 [01:10<00:17, 74.52it/s]
Processing files:  73%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                          | 3577/4877 [01:10<00:19, 65.90it/s]
Processing files:  73%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                          | 3584/4877 [01:10<00:24, 53.22it/s]
Processing files:  74%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                          | 3590/4877 [01:10<00:27, 47.13it/s]
Processing files:  74%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                          | 3597/4877 [01:11<00:25, 50.56it/s]
Processing files:  74%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                         | 3603/4877 [01:11<00:29, 43.26it/s]
Processing files:  74%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                         | 3612/4877 [01:11<00:25, 49.21it/s]
Processing files:  74%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                         | 3619/4877 [01:11<00:30, 41.01it/s]
Processing files:  74%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                         | 3624/4877 [01:11<00:32, 38.41it/s]
Processing files:  74%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                         | 3629/4877 [01:12<00:43, 28.93it/s]
Processing files:  74%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                        | 3633/4877 [01:12<00:43, 28.32it/s]
Processing files:  75%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                        | 3637/4877 [01:12<00:40, 30.33it/s]
Processing files:  75%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                        | 3641/4877 [01:12<00:40, 30.59it/s]
Processing files:  75%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                        | 3645/4877 [01:12<00:44, 27.44it/s]
Processing files:  75%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                        | 3653/4877 [01:12<00:32, 38.11it/s]
Processing files:  75%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                        | 3659/4877 [01:12<00:29, 40.89it/s]
Processing files:  75%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                       | 3664/4877 [01:13<00:36, 33.42it/s]
Processing files:  75%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                       | 3668/4877 [01:13<00:35, 34.45it/s]
Processing files:  75%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                       | 3677/4877 [01:13<00:25, 46.32it/s]
Processing files:  76%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                       | 3688/4877 [01:13<00:23, 51.56it/s]
Processing files:  76%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                                      | 3700/4877 [01:13<00:19, 60.77it/s]
Processing files:  76%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                                      | 3708/4877 [01:13<00:17, 65.09it/s]
Processing files:  76%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                      | 3715/4877 [01:13<00:17, 65.78it/s]
Processing files:  76%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                     | 3723/4877 [01:14<00:19, 59.34it/s]
Processing files:  76%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                     | 3730/4877 [01:14<00:20, 57.08it/s]
Processing files:  77%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                     | 3736/4877 [01:14<00:20, 55.68it/s]
Processing files:  77%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                     | 3744/4877 [01:14<00:18, 60.10it/s]
Processing files:  77%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                     | 3753/4877 [01:14<00:18, 62.12it/s]
Processing files:  77%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                    | 3765/4877 [01:14<00:15, 74.08it/s]
Processing files:  77%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                    | 3774/4877 [01:14<00:15, 69.54it/s]
Processing files:  78%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                    | 3782/4877 [01:14<00:16, 66.79it/s]
Processing files:  78%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                   | 3790/4877 [01:15<00:16, 65.00it/s]
Processing files:  78%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                   | 3797/4877 [01:15<00:17, 60.76it/s]
Processing files:  78%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                   | 3809/4877 [01:15<00:14, 74.13it/s]
Processing files:  78%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                                  | 3818/4877 [01:15<00:14, 72.79it/s]
Processing files:  78%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                  | 3827/4877 [01:15<00:13, 76.95it/s]
Processing files:  79%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                  | 3837/4877 [01:15<00:12, 81.41it/s]
Processing files:  79%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                 | 3847/4877 [01:15<00:12, 80.45it/s]
Processing files:  79%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                 | 3856/4877 [01:15<00:13, 74.25it/s]
Processing files:  79%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                 | 3864/4877 [01:16<00:15, 66.42it/s]
Processing files:  79%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                                 | 3871/4877 [01:16<00:23, 43.61it/s]
Processing files:  79%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                                | 3877/4877 [01:16<00:22, 44.16it/s]
Processing files:  80%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                                | 3889/4877 [01:16<00:17, 57.98it/s]
Processing files:  80%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                                | 3896/4877 [01:16<00:16, 59.50it/s]
Processing files:  80%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                                | 3903/4877 [01:16<00:19, 50.56it/s]
Processing files:  80%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                               | 3909/4877 [01:17<00:19, 50.91it/s]
Processing files:  80%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                               | 3920/4877 [01:17<00:15, 60.35it/s]
Processing files:  81%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                               | 3927/4877 [01:17<00:17, 53.46it/s]
Processing files:  81%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                               | 3935/4877 [01:17<00:16, 57.04it/s]
Processing files:  81%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                              | 3942/4877 [01:17<00:15, 58.79it/s]
Processing files:  81%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                              | 3954/4877 [01:17<00:13, 70.97it/s]
Processing files:  81%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                              | 3962/4877 [01:17<00:15, 59.37it/s]
Processing files:  81%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                             | 3969/4877 [01:18<00:16, 54.87it/s]
Processing files:  82%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                             | 3978/4877 [01:18<00:14, 62.21it/s]
Processing files:  82%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                             | 3985/4877 [01:18<00:15, 59.21it/s]
Processing files:  82%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                            | 3997/4877 [01:18<00:13, 67.54it/s]
Processing files:  82%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                            | 4005/4877 [01:18<00:12, 68.06it/s]
Processing files:  82%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                            | 4017/4877 [01:18<00:10, 79.89it/s]
Processing files:  83%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                            | 4026/4877 [01:18<00:10, 82.11it/s]
Processing files:  83%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                           | 4038/4877 [01:18<00:09, 87.58it/s]
Processing files:  83%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                           | 4052/4877 [01:18<00:08, 92.68it/s]
Processing files:  83%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                          | 4062/4877 [01:19<00:08, 93.45it/s]
Processing files:  83%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                          | 4072/4877 [01:19<00:10, 73.42it/s]
Processing files:  84%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                          | 4081/4877 [01:19<00:12, 62.43it/s]
Processing files:  84%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                         | 4089/4877 [01:19<00:12, 65.25it/s]
Processing files:  84%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                         | 4097/4877 [01:19<00:12, 60.43it/s]
Processing files:  84%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                         | 4106/4877 [01:19<00:11, 66.33it/s]
Processing files:  84%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                         | 4115/4877 [01:19<00:10, 70.09it/s]
Processing files:  85%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                        | 4125/4877 [01:20<00:10, 74.37it/s]
Processing files:  85%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                        | 4133/4877 [01:20<00:10, 71.00it/s]
Processing files:  85%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                        | 4141/4877 [01:20<00:15, 46.67it/s]
Processing files:  85%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                        | 4147/4877 [01:20<00:14, 49.00it/s]
Processing files:  85%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                       | 4155/4877 [01:20<00:13, 55.13it/s]
Processing files:  85%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                       | 4162/4877 [01:20<00:15, 46.99it/s]
Processing files:  85%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                       | 4169/4877 [01:21<00:13, 51.71it/s]
Processing files:  86%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                       | 4175/4877 [01:21<00:13, 51.51it/s]
Processing files:  86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                      | 4181/4877 [01:21<00:13, 53.27it/s]
Processing files:  86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                      | 4188/4877 [01:21<00:12, 53.04it/s]
Processing files:  86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                      | 4194/4877 [01:21<00:13, 48.82it/s]
Processing files:  86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                      | 4200/4877 [01:21<00:14, 47.73it/s]
Processing files:  86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                      | 4205/4877 [01:21<00:14, 45.10it/s]
Processing files:  86%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                     | 4213/4877 [01:21<00:13, 50.33it/s]
Processing files:  87%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍                     | 4219/4877 [01:22<00:13, 50.39it/s]
Processing files:  87%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                     | 4225/4877 [01:22<00:12, 52.12it/s]
Processing files:  87%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                     | 4231/4877 [01:22<00:12, 53.16it/s]
Processing files:  87%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                     | 4238/4877 [01:22<00:13, 46.93it/s]
Processing files:  87%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                    | 4243/4877 [01:22<00:15, 40.90it/s]
Processing files:  87%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                    | 4253/4877 [01:22<00:12, 50.13it/s]
Processing files:  87%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋                    | 4259/4877 [01:23<00:15, 40.54it/s]
Processing files:  87%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                    | 4264/4877 [01:23<00:16, 37.16it/s]
Processing files:  88%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                    | 4269/4877 [01:23<00:15, 39.52it/s]
Processing files:  88%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                   | 4274/4877 [01:23<00:15, 38.76it/s]
Processing files:  88%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                   | 4286/4877 [01:23<00:10, 55.81it/s]
Processing files:  88%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                   | 4293/4877 [01:23<00:12, 45.66it/s]
Processing files:  88%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                   | 4299/4877 [01:23<00:15, 38.10it/s]
Processing files:  88%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                  | 4304/4877 [01:24<00:14, 39.54it/s]
Processing files:  88%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                  | 4309/4877 [01:24<00:13, 40.89it/s]
Processing files:  89%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                  | 4322/4877 [01:24<00:09, 59.74it/s]
Processing files:  89%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████                  | 4331/4877 [01:24<00:08, 66.52it/s]
Processing files:  89%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                 | 4339/4877 [01:24<00:07, 67.29it/s]
Processing files:  89%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                 | 4347/4877 [01:24<00:07, 67.23it/s]
Processing files:  89%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                 | 4356/4877 [01:24<00:07, 66.35it/s]
Processing files:  89%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏                | 4363/4877 [01:25<00:09, 56.20it/s]
Processing files:  90%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎                | 4370/4877 [01:25<00:08, 56.37it/s]
Processing files:  90%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌                | 4376/4877 [01:25<00:09, 54.55it/s]
Processing files:  90%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊                | 4382/4877 [01:25<00:10, 47.58it/s]
Processing files:  90%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉                | 4388/4877 [01:25<00:09, 50.01it/s]
Processing files:  90%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏               | 4394/4877 [01:25<00:11, 42.43it/s]
Processing files:  90%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍               | 4402/4877 [01:25<00:09, 50.23it/s]
Processing files:  90%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋               | 4411/4877 [01:26<00:12, 38.18it/s]
Processing files:  91%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉               | 4416/4877 [01:27<00:28, 16.28it/s]
Processing files:  91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏              | 4424/4877 [01:27<00:20, 21.93it/s]
Processing files:  91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌              | 4436/4877 [01:27<00:14, 31.38it/s]
Processing files:  91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊              | 4444/4877 [01:27<00:11, 36.24it/s]
Processing files:  91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉              | 4450/4877 [01:27<00:14, 30.46it/s]
Processing files:  91%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏             | 4455/4877 [01:27<00:12, 33.17it/s]
Processing files:  91%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎             | 4460/4877 [01:28<00:13, 30.88it/s]
Processing files:  92%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋             | 4471/4877 [01:28<00:09, 44.17it/s]
Processing files:  92%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉             | 4477/4877 [01:28<00:10, 38.92it/s]
Processing files:  92%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏            | 4485/4877 [01:28<00:08, 46.59it/s]
Processing files:  92%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎            | 4491/4877 [01:28<00:08, 47.89it/s]
Processing files:  92%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉            | 4508/4877 [01:28<00:04, 75.12it/s]
Processing files:  93%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏           | 4517/4877 [01:28<00:05, 63.65it/s]
Processing files:  93%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍           | 4525/4877 [01:29<00:05, 64.78it/s]
Processing files:  93%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋           | 4534/4877 [01:29<00:05, 68.25it/s]
Processing files:  93%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏          | 4548/4877 [01:29<00:03, 85.29it/s]
Processing files:  93%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌          | 4558/4877 [01:29<00:03, 83.73it/s]
Processing files:  94%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉          | 4570/4877 [01:29<00:03, 90.24it/s]
Processing files:  94%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎         | 4580/4877 [01:29<00:03, 86.85it/s]
Processing files:  94%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌         | 4590/4877 [01:29<00:03, 77.73it/s]
Processing files:  94%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉         | 4599/4877 [01:30<00:05, 55.07it/s]
Processing files:  94%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████         | 4606/4877 [01:30<00:07, 38.39it/s]
Processing files:  95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎        | 4612/4877 [01:30<00:06, 41.53it/s]
Processing files:  95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌        | 4621/4877 [01:30<00:05, 49.55it/s]
Processing files:  95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊        | 4628/4877 [01:30<00:04, 51.50it/s]
Processing files:  95%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎       | 4641/4877 [01:30<00:03, 65.01it/s]
Processing files:  95%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌       | 4649/4877 [01:31<00:04, 53.61it/s]
Processing files:  95%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋       | 4656/4877 [01:31<00:03, 56.60it/s]
Processing files:  96%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉       | 4663/4877 [01:31<00:04, 51.69it/s]
Processing files:  96%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎      | 4675/4877 [01:31<00:03, 64.86it/s]
Processing files:  96%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋      | 4683/4877 [01:31<00:02, 64.94it/s]
Processing files:  96%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉      | 4691/4877 [01:31<00:02, 64.90it/s]
Processing files:  96%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏     | 4698/4877 [01:31<00:03, 52.37it/s]
Processing files:  96%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎     | 4704/4877 [01:32<00:04, 41.00it/s]
Processing files:  97%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌     | 4711/4877 [01:32<00:03, 44.31it/s]
Processing files:  97%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉     | 4721/4877 [01:32<00:02, 52.76it/s]
Processing files:  97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏    | 4730/4877 [01:32<00:02, 58.76it/s]
Processing files:  97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍    | 4737/4877 [01:32<00:02, 55.67it/s]
Processing files:  97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌    | 4743/4877 [01:32<00:02, 48.62it/s]
Processing files:  97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊    | 4749/4877 [01:37<00:28,  4.55it/s]
Processing files:  97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉    | 4753/4877 [01:43<01:00,  2.04it/s]
Processing files:  97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉    | 4754/4877 [01:58<01:00,  2.04it/s]
Processing files:  97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉    | 4755/4877 [02:02<03:12,  1.58s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████    | 4756/4877 [02:08<03:52,  1.92s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████    | 4758/4877 [02:08<03:09,  1.60s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏   | 4760/4877 [02:09<02:41,  1.38s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏   | 4762/4877 [02:13<02:51,  1.49s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎   | 4763/4877 [02:17<03:23,  1.79s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎   | 4764/4877 [02:17<02:57,  1.58s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎   | 4765/4877 [02:18<02:29,  1.33s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎   | 4766/4877 [02:18<02:11,  1.18s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍   | 4767/4877 [02:18<01:45,  1.05it/s]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍   | 4768/4877 [02:19<01:43,  1.06it/s]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍   | 4769/4877 [02:26<04:19,  2.40s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍   | 4770/4877 [02:28<04:00,  2.25s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌   | 4771/4877 [02:31<04:20,  2.46s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌   | 4772/4877 [02:31<03:24,  1.95s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌   | 4773/4877 [02:33<03:23,  1.96s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌   | 4774/4877 [02:35<03:28,  2.03s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋   | 4775/4877 [02:36<02:32,  1.49s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋   | 4776/4877 [02:37<02:29,  1.48s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋   | 4777/4877 [02:39<02:39,  1.59s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊   | 4778/4877 [02:39<01:58,  1.19s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊   | 4779/4877 [02:42<02:56,  1.80s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊   | 4780/4877 [02:43<02:26,  1.51s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊   | 4781/4877 [02:45<02:42,  1.70s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉   | 4782/4877 [02:48<03:14,  2.05s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉   | 4783/4877 [02:52<04:00,  2.56s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉   | 4784/4877 [02:52<02:57,  1.91s/it]
Processing files:  98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉   | 4785/4877 [02:54<02:55,  1.91s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████   | 4786/4877 [02:55<02:14,  1.48s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████   | 4787/4877 [02:56<01:51,  1.24s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████   | 4788/4877 [02:56<01:22,  1.08it/s]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████   | 4789/4877 [03:00<02:54,  1.99s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏  | 4791/4877 [03:02<02:10,  1.52s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏  | 4792/4877 [03:03<01:58,  1.39s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏  | 4793/4877 [03:04<01:41,  1.20s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎  | 4794/4877 [03:05<01:39,  1.20s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎  | 4795/4877 [03:07<01:50,  1.35s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎  | 4796/4877 [03:10<02:28,  1.84s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍  | 4797/4877 [03:12<02:29,  1.86s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍  | 4798/4877 [03:14<02:30,  1.91s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍  | 4799/4877 [03:15<02:11,  1.69s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍  | 4800/4877 [03:17<02:10,  1.70s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌  | 4801/4877 [03:17<01:48,  1.42s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌  | 4802/4877 [03:18<01:39,  1.33s/it]
Processing files:  98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌  | 4803/4877 [03:22<02:35,  2.10s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌  | 4804/4877 [03:24<02:23,  1.97s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋  | 4805/4877 [03:26<02:17,  1.92s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋  | 4807/4877 [03:31<02:31,  2.16s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋  | 4808/4877 [03:32<02:05,  1.82s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊  | 4809/4877 [03:32<01:39,  1.46s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊  | 4810/4877 [03:33<01:22,  1.23s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊  | 4811/4877 [03:34<01:32,  1.40s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊  | 4812/4877 [03:42<03:29,  3.22s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉  | 4813/4877 [03:42<02:31,  2.36s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉  | 4814/4877 [03:43<01:58,  1.88s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉  | 4815/4877 [03:51<03:49,  3.69s/it]
Processing files:  99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉  | 4816/4877 [03:54<03:24,  3.35s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████  | 4817/4877 [03:59<03:57,  3.96s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████  | 4818/4877 [04:00<02:54,  2.96s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████  | 4819/4877 [04:01<02:20,  2.43s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4821/4877 [04:06<02:16,  2.43s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4822/4877 [04:09<02:28,  2.70s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4823/4877 [04:12<02:23,  2.65s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4825/4877 [04:17<02:18,  2.67s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4826/4877 [04:20<02:18,  2.72s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4827/4877 [04:21<01:49,  2.18s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4828/4877 [04:23<01:46,  2.17s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4829/4877 [04:23<01:23,  1.74s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4830/4877 [04:34<03:11,  4.08s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4831/4877 [04:39<03:32,  4.63s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4832/4877 [04:40<02:30,  3.33s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4833/4877 [04:40<01:52,  2.56s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4834/4877 [04:43<01:49,  2.54s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4835/4877 [04:52<03:04,  4.39s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4836/4877 [04:52<02:08,  3.14s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4837/4877 [04:53<01:40,  2.52s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4838/4877 [04:54<01:23,  2.15s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4839/4877 [04:56<01:19,  2.08s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4840/4877 [04:58<01:18,  2.11s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4841/4877 [05:00<01:14,  2.08s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4842/4877 [05:01<01:03,  1.82s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4843/4877 [05:03<01:03,  1.88s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4844/4877 [05:04<00:50,  1.53s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4845/4877 [05:05<00:44,  1.40s/it]
Processing files:  99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4846/4877 [05:09<01:01,  1.98s/it]
Processing files:  99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4847/4877 [05:10<00:58,  1.94s/it]
Processing files:  99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4848/4877 [05:12<00:54,  1.86s/it]
Processing files:  99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4849/4877 [05:13<00:48,  1.72s/it]
Processing files:  99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4850/4877 [05:15<00:47,  1.75s/it]
Processing files:  99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏| 4851/4877 [05:17<00:46,  1.77s/it]
Processing files:  99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏| 4852/4877 [05:19<00:43,  1.73s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏| 4853/4877 [05:27<01:30,  3.78s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏| 4854/4877 [05:28<01:06,  2.90s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎| 4855/4877 [05:30<00:53,  2.44s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎| 4856/4877 [05:36<01:13,  3.52s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎| 4857/4877 [05:46<01:51,  5.55s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍| 4858/4877 [05:51<01:42,  5.38s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍| 4859/4877 [05:53<01:20,  4.48s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍| 4860/4877 [06:07<02:05,  7.36s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍| 4861/4877 [06:11<01:37,  6.10s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌| 4862/4877 [06:25<02:09,  8.66s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌| 4863/4877 [06:33<01:56,  8.35s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌| 4864/4877 [06:43<01:55,  8.88s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌| 4865/4877 [06:50<01:39,  8.33s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋| 4866/4877 [06:51<01:07,  6.16s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋| 4867/4877 [06:52<00:47,  4.70s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋| 4868/4877 [06:55<00:36,  4.04s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋| 4869/4877 [07:13<01:06,  8.37s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊| 4870/4877 [07:15<00:45,  6.45s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊| 4871/4877 [07:16<00:27,  4.61s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊| 4872/4877 [07:17<00:18,  3.69s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊| 4873/4877 [07:20<00:13,  3.26s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉| 4874/4877 [07:21<00:08,  2.81s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉| 4875/4877 [07:42<00:16,  8.24s/it]
Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉| 4876/4877 [07:46<00:06,  6.88s/it]
Processing files: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4877/4877 [08:15<00:00,  9.83it/s]

Chunking of the texts

The texts need to get chunked (pre-processing) before the embedding process.

In [51]:
os.chdir("/home/marius/source/bookworm")
In [6]:
from langchain.text_splitter import RecursiveCharacterTextSplitter

def chunk_text_data():
    
    with open('/home/marius/source/bookworm/export.txt') as f:
        text_notes = f.read()
    
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=100,
        chunk_overlap=20,
        length_function=len
    )
    
    chunks = text_splitter.create_documents([text_notes])
    print(f'Now you have {len(chunks)} chunks')
    return chunks
    
chunks = chunk_text_data()
Now you have 723845 chunks

Embedding costs - why no OpenAI?

The OpenAI API has a cost for the embeddings. At this point there seems to be no way to pre-estimate the costs reliably. The following calculation is flawed:

In [7]:
def print_embedding_cost(texts):
    import tiktoken
    enc = tiktoken.encoding_for_model('gpt-4')
    total_tokens = sum([len(enc.encode(page.page_content)) for page in texts])
    print(f'Total Tokens: {total_tokens}')
    print(f'Embedding Cost in USD: { (0.03 / 1_000) * total_tokens}')
    
print_embedding_cost(chunks)
Total Tokens: 15769414
Embedding Cost in USD: 473.08241999999996

Use Hugging Face Embeddings Sentence Transformers

  • use a self-hosted on-premises model for the embedding and vectorization
  • configure it for the use with the CPU

This model is from the Beijing Academy of Artificial Intelligence

It will produce embeddings of 1024 dimensions, roughly 500 less than OpenAI.

In [8]:
from langchain.embeddings import HuggingFaceEmbeddings

modelPath = "BAAI/bge-large-en-v1.5"

# Create a dictionary with model configuration options, specifying to use the CPU for computations
model_kwargs = {'device':'cpu'}

# Create a dictionary with encoding options, specifically setting 'normalize_embeddings' to False
encode_kwargs = {'normalize_embeddings': True}
In [25]:
# Initialize an instance of HuggingFaceEmbeddings with the specified parameters
# this model requires sentence_transformers

embeddings = HuggingFaceEmbeddings(
    model_name=modelPath,     # Provide the pre-trained model's path
    model_kwargs=model_kwargs, # Pass the model configuration options
    encode_kwargs=encode_kwargs # Pass the encoding options
 )
In [39]:
vector = embeddings.embed_query(chunks[0].page_content)
print(vector)
print(len(vector))
[0.02669697254896164, 0.017016947269439697, -0.0252668596804142, 0.027562297880649567, -0.036536093801259995, -0.04702713340520859, -0.008289276622235775, 0.027264799922704697, 0.0193538386374712, 0.09645088016986847, 0.04814787581562996, 0.020076178014278412, 0.04018039628863335, -0.05319904163479805, -0.0018393148202449083, 0.0004135535564273596, 0.0056005921214818954, -0.0007755732513032854, -0.01713593304157257, 0.046697087585926056, 0.02949507348239422, -0.002135329181328416, -0.06421148031949997, -0.0025980528444051743, -0.002175381872802973, -0.016258634626865387, 0.03560303896665573, 0.025036070495843887, 0.03057222068309784, 0.07080159336328506, -0.03819547966122627, -0.009489326737821102, 0.018622957170009613, -0.02314341999590397, -0.01928570494055748, 0.008893653750419617, 0.020412752404808998, -0.0026669444050639868, -0.04702509567141533, -0.07154359668493271, -0.00985659845173359, 0.0010672420030459762, 0.007422462571412325, -0.027616797015070915, -0.037166301161050797, -0.03903781622648239, -0.021067800000309944, 0.023234857246279716, -0.02984745241701603, -0.0003557372256182134, -0.0062873163260519505, 0.017065711319446564, 0.04882030934095383, -0.021840935572981834, 0.012029100209474564, 0.033996764570474625, -0.006590498611330986, 0.026026088744401932, -0.01962001994252205, 0.010742586106061935, 0.038518138229846954, -0.009543508291244507, 0.006120799575001001, -0.04429181292653084, 0.016838695853948593, 0.012138907797634602, -0.05647517368197441, 0.012697356753051281, -0.039533913135528564, 0.01181220356374979, -0.002553032711148262, 0.02627074159681797, -0.003673797706142068, -0.019179729744791985, -0.012743696570396423, 0.017957448959350586, -0.002778472378849983, 0.027680017054080963, -0.04603710398077965, 0.03110506199300289, -0.014483182691037655, 0.0061340732499957085, 0.023356124758720398, -0.027098359540104866, 0.025932958349585533, -0.054804012179374695, 0.021440045908093452, -0.0021313962060958147, 0.008103386498987675, -0.004042080603539944, 0.07958704978227615, 0.04686443880200386, 0.0025805693585425615, -0.024902688339352608, 0.0027323083486407995, 0.012498576194047928, -0.007472028490155935, 0.04842745512723923, -0.009689773432910442, -0.002272476674988866, 0.049017928540706635, 0.009563890285789967, -0.02213067188858986, 0.046894025057554245, -0.016963794827461243, -0.001712314086034894, -0.007016458548605442, 0.027962010353803635, -0.0058366162702441216, -0.03457598388195038, 0.026866907253861427, -0.0060468679293990135, 0.00999391358345747, 0.006039618514478207, -0.01602409966289997, 0.026533283293247223, -0.01798826828598976, 0.024779003113508224, 0.007074084132909775, -0.030575281009078026, 0.007484155241400003, 0.009421328082680702, 0.018538348376750946, -0.008937075734138489, -0.0016853661509230733, -0.037765245884656906, -0.008333210833370686, 0.029538191854953766, -0.05277511849999428, -0.008469143882393837, -0.011122306808829308, -0.013142808340489864, 0.018477508798241615, 0.029102321714162827, -0.050660859793424606, 0.020982826128602028, 0.02953541837632656, 0.009202391840517521, 0.005015721544623375, -0.014471577480435371, 0.005917319096624851, -0.02452758327126503, 0.034311287105083466, 0.06870651245117188, -0.004787039011716843, 0.03030187450349331, 0.02345900796353817, 0.00826261192560196, -0.008425573818385601, 0.019262364134192467, -0.041782982647418976, -0.01021308172494173, 0.020281389355659485, 0.05825428292155266, -0.02157139964401722, -0.004128106404095888, -0.0027353025507181883, 0.03297201544046402, -0.014398119412362576, 0.014553392305970192, 0.03983527049422264, 0.04522328823804855, -0.0227439533919096, 0.0208287313580513, -0.048643942922353745, 0.0009082997567020357, -0.006951106246560812, -0.035037606954574585, 0.01375054381787777, -0.01445818692445755, 0.029134731739759445, -0.022526120766997337, -0.008102713152766228, 0.003899186383932829, 0.041013214737176895, 0.01703835278749466, -0.0017122626304626465, -0.0034106560051441193, 0.004580703563988209, 0.04692504554986954, -0.015334389172494411, -0.04048878699541092, 0.013905854895710945, 0.04545815661549568, 0.02637609839439392, -0.024876520037651062, -0.005942529067397118, -0.035456329584121704, 0.009055763483047485, -0.003815994132310152, 0.03349251672625542, 0.042250510305166245, -0.04088624566793442, 0.036475807428359985, 0.0007867470849305391, 0.05007680505514145, -0.07930241525173187, 0.03347087278962135, 0.03613167628645897, -0.060714807361364365, 0.03500999137759209, -0.014432381838560104, -0.0076517025008797646, 0.009959816001355648, -0.0038949432782828808, -0.01840951293706894, 0.01927584409713745, 0.03663628175854683, -0.012195618823170662, 0.017108391970396042, 0.03935955464839935, 0.010515953414142132, -0.022479452192783356, 0.00810861773788929, 0.02403416484594345, -0.005666147451847792, -0.055953241884708405, 0.014511264860630035, 0.012436958961188793, 0.03502621874213219, -0.004479735158383846, 0.07306241244077682, 0.04001001641154289, 0.04705096036195755, 0.0067836446687579155, -0.004997556563466787, 0.03392943739891052, 0.0458277128636837, -0.02476787008345127, 0.043228670954704285, -0.005533190444111824, 0.02507350966334343, -0.012362728826701641, 0.038104090839624405, -0.0025492957793176174, 0.022532207891345024, 0.06112735718488693, 0.03815532103180885, -0.012957833707332611, 0.017975619062781334, -0.026928512379527092, 0.013103673234581947, -0.018832556903362274, -0.008338217623531818, 0.007081938441842794, -0.04475143924355507, -0.002573468955233693, 0.009175730869174004, -0.030792048200964928, -0.002042366424575448, -0.04541337862610817, 0.062379419803619385, 0.04580432549118996, -0.03932073339819908, -0.05788600444793701, -0.0036043403670191765, 0.025394434109330177, 0.014875992201268673, -0.08662696182727814, -0.01726602204144001, 0.04318573325872421, 0.01600872166454792, -0.044153034687042236, -0.03258882835507393, 0.010971899144351482, 0.03985709697008133, -0.02512078918516636, -0.021587109193205833, -0.04905792325735092, -0.02657529152929783, -0.033135440200567245, -0.041421979665756226, -0.04792818799614906, -0.02431047335267067, -0.01573329046368599, 0.019172240048646927, 0.03384144976735115, -0.08682779967784882, 0.016425080597400665, -0.05333607271313667, 0.0033381932880729437, 0.060447193682193756, 0.017225999385118484, 0.04338442161679268, 0.008887093514204025, -0.011700304225087166, -0.030784783884882927, 0.029799390584230423, -0.03854043781757355, 0.049850620329380035, 0.004930292721837759, -0.01851404272019863, -0.020112883299589157, -0.014539582654833794, -0.01787666045129299, 0.009195232763886452, 0.01050050463527441, 0.03788701444864273, 0.0012937176506966352, -0.02818729355931282, -0.04917585849761963, 0.007781427353620529, 0.0019566104747354984, -0.012814824469387531, -0.004947727080434561, 0.045950356870889664, 0.03646671772003174, 0.002791403094306588, 0.004697783850133419, 0.012815515510737896, -0.01621047966182232, 0.062401182949543, 0.02047150954604149, 0.05026695504784584, -0.03780040517449379, 0.0667409673333168, 0.00224861572496593, 0.010478171519935131, -0.015742754563689232, 0.001655526808463037, -0.04362569749355316, 0.0034662846010178328, -0.005219882819801569, -0.03515452519059181, -0.020455151796340942, 0.047166526317596436, -0.02139909565448761, -0.07183513790369034, 0.046170882880687714, -0.029244720935821533, -0.02688049152493477, 0.014976671896874905, 0.0026486904826015234, 0.03429925814270973, -0.005890225525945425, 0.04202268272638321, -0.018020452931523323, -0.026976708322763443, -0.019771136343479156, -0.01675950177013874, -0.014742839150130749, -0.015525337308645248, -0.0006239615031518042, 0.009381762705743313, -0.008762863464653492, -0.03805861622095108, 0.012787258252501488, -0.015712112188339233, -0.003921184688806534, -0.005539625883102417, -0.005669189151376486, 0.00488162599503994, -0.006071238778531551, -0.03561935946345329, 0.019709182903170586, 0.08087684214115143, -0.06412699073553085, -0.0018153585260733962, -0.010365016758441925, -0.04116988182067871, 0.010356743820011616, 0.0435556024312973, 0.030156446620821953, -0.030642440542578697, -0.012417435646057129, -0.033950094133615494, 0.002666833810508251, 0.01121507491916418, 0.04220520704984665, -0.03539181128144264, 0.03651658818125725, 0.00986762810498476, -0.03320850059390068, 0.021042536944150925, 0.012748521752655506, -0.020613038912415504, 0.01267313864082098, 0.0024715387262403965, 0.0433194562792778, -0.03464338928461075, -0.0238817036151886, -0.0015052399830892682, -0.00813769269734621, 0.04605727642774582, -0.027353445068001747, 0.06496832519769669, -0.03492479398846626, -0.045068010687828064, -0.03321715444326401, -0.015229083597660065, -0.008961583487689495, -0.0526081845164299, 0.005047208163887262, -0.030239446088671684, -0.04611031711101532, -0.039567962288856506, 0.07561783492565155, 0.036560021340847015, 0.01159034762531519, 0.0036433383356779814, 0.024782907217741013, 0.005812737625092268, 0.04545712098479271, 0.027075251564383507, 0.01286619994789362, 0.024930741637945175, -0.0288272462785244, 0.05911048501729965, 0.07540696859359741, 0.010551726445555687, -0.006818344816565514, 0.02673436515033245, -0.019977428019046783, -0.008833578787744045, -0.033249977976083755, -0.016189124435186386, -0.014444072730839252, 0.01637876033782959, -0.005723794922232628, 0.023274188861250877, -0.032903142273426056, -0.045395225286483765, -0.017752068117260933, 0.0721108615398407, 0.049269575625658035, -0.03940099477767944, 0.007023515645414591, -0.0543445460498333, 0.0143172862008214, 0.03877531737089157, 0.026651587337255478, 0.03261725232005119, -0.02641334943473339, -0.03475888818502426, -0.06196092814207077, -0.007730958051979542, 0.02938351035118103, 0.04688352346420288, 0.001492986804805696, -0.052002474665641785, 0.011494527570903301, -0.0059143840335309505, -0.009254072792828083, 0.04071874916553497, -0.01937096193432808, -0.01605319045484066, 0.021356504410505295, 0.010376271791756153, 0.058524928987026215, 0.0370134562253952, 0.03336495906114578, -0.048666149377822876, 0.015760764479637146, -0.02909715287387371, 0.001060734037309885, 0.012889999896287918, 0.032121844589710236, 0.013724256306886673, 0.031370609998703, 0.007055149879306555, -0.02331012301146984, 0.020068591460585594, 0.02982570417225361, -0.01615154929459095, 0.012022043578326702, 0.019594961777329445, 0.004770875908434391, 0.002515221945941448, -0.014973344281315804, 0.03073306567966938, 0.03203507512807846, -0.0029318509623408318, 0.009544199332594872, -0.050643883645534515, 0.002601445419713855, -0.0004585186834447086, 0.0448162779211998, -0.01774679683148861, -0.016735566779971123, -0.02339322306215763, -0.026880457997322083, 0.05137190222740173, 0.029895957559347153, 0.00011596392141655087, 0.011301418766379356, -0.02502586506307125, 0.00284388056024909, 0.0031197925563901663, 0.00524180056527257, 0.0222946610301733, 0.0036125867627561092, -0.012878148816525936, -0.00956246443092823, -0.027970684692263603, -0.011681201867759228, 0.024373246356844902, -0.005530762951821089, -0.05088534951210022, 0.05565162003040314, 0.018190396949648857, 0.018322333693504333, -0.0008641738095320761, -0.016653986647725105, -0.00699530728161335, -0.03933033347129822, -0.003116237698122859, -0.04750656336545944, -0.0035764453932642937, -0.022624090313911438, -0.0008451906032860279, -0.0022958663757890463, 0.05381815508008003, -0.023221293464303017, 0.014970600605010986, 0.0403008870780468, 0.0064455182291567326, 0.06484071165323257, -0.019952522590756416, -0.037979792803525925, 0.061297088861465454, 0.05363653600215912, -0.04460182040929794, -0.010982992127537727, 0.002395677613094449, 0.018435178324580193, 0.02920987270772457, -0.011680102907121181, -0.08589381724596024, -0.029022831469774246, -0.03032723255455494, 0.033892858773469925, -0.03672119975090027, -0.022506827488541603, -0.013491013087332249, -0.016303280368447304, -0.01263154111802578, 0.0426502525806427, -0.008024784736335278, -0.07593175023794174, -0.0127875292673707, -0.02627779170870781, 0.021790960803627968, 0.022001486271619797, 0.04400036484003067, -0.016813144087791443, -0.017746321856975555, 0.014189604669809341, 0.0027446087915450335, -0.03549749404191971, 0.02558237686753273, 0.00542211439460516, 0.019051723182201385, 0.004861325956881046, 0.03930363059043884, -0.04968566447496414, -0.049693383276462555, 0.026898667216300964, 0.009030058979988098, -0.05464783310890198, -0.0030248991679400206, -0.007074778899550438, 0.027226950973272324, -0.045234616845846176, 0.006987966597080231, -0.024752477183938026, -0.02165602706372738, -0.04195421561598778, 0.01698700711131096, 0.009086058475077152, -0.04968562722206116, -0.014020346105098724, 0.019671428948640823, -0.019008539617061615, 0.004943450912833214, 0.03402810916304588, -0.01245468482375145, -0.023897185921669006, -0.04492456093430519, -0.0672251284122467, 0.02267123945057392, 0.020500896498560905, -0.007905700244009495, -0.05864157900214195, -0.017291076481342316, -0.022529250010848045, -0.07144097238779068, 0.03627387434244156, 0.05300053581595421, -0.01996050402522087, 0.026578404009342194, -0.027966128662228584, 0.017535410821437836, 0.003619209863245487, -0.009975985623896122, 0.016709165647625923, 0.006767536047846079, -0.012295933440327644, -0.03252935782074928, -0.0308682881295681, -0.008659521117806435, -0.004427710548043251, -0.016697656363248825, 0.0846182107925415, -0.071721650660038, 0.03372944891452789, 0.010209917090833187, -0.034838251769542694, 0.0033220346085727215, 0.014964933507144451, 0.0036047310568392277, 0.030168497934937477, 0.0021488042548298836, 0.0211726613342762, -0.0097010787576437, -0.019522184506058693, -0.00899591390043497, -0.0331675224006176, -0.04197953641414642, 0.05111600086092949, -0.006391274277120829, -0.012627888470888138, 0.06245993822813034, 0.027174271643161774, -0.00580727681517601, -0.05560539290308952, 0.03141642361879349, 0.009324997663497925, -0.003272688016295433, -0.047126710414886475, 0.024162929505109787, -0.009179646149277687, -0.04455089196562767, 0.0017887114081531763, 0.0033528197091072798, 0.02224148064851761, 0.0030729654245078564, 0.017404256388545036, 0.029646797105669975, -0.005246543325483799, 0.002203059382736683, 0.060110725462436676, 0.028904344886541367, -0.03258912265300751, -0.09100892394781113, -0.018463512882590294, -0.02261725813150406, 0.039159584790468216, 0.05506680905818939, 0.011777144856750965, -0.011479132808744907, 0.01948135904967785, -0.018709277734160423, 0.062444720417261124, -0.028424400836229324, -0.009348088875412941, 0.060308896005153656, -0.04960506036877632, -0.052798304706811905, 0.030832994729280472, -0.023405568674206734, -0.012619088403880596, 0.019418999552726746, -0.04199061542749405, 0.012573529966175556, -0.008077583275735378, 0.03233648091554642, -0.06048568710684776, -0.037223659455776215, -0.006776227615773678, -0.0765281617641449, -0.02046184055507183, -0.028335049748420715, -0.03072420135140419, -0.015347683802247047, 0.00011257602454861626, -0.006173537578433752, -0.06329714506864548, -0.038208477199077606, 0.007293719798326492, 0.016451958566904068, -0.009434198029339314, -0.036277417093515396, 0.031770799309015274, -0.05689932778477669, 0.0050352588295936584, 0.017117278650403023, 0.023538224399089813, -0.017084859311580658, -0.029851967468857765, 0.0034172760788351297, -0.022277364507317543, 0.01787102408707142, 0.044267136603593826, -0.016108497977256775, 0.0018049232894554734, -0.06561078876256943, -0.008170049637556076, 0.020584596320986748, -0.03578933700919151, -0.008622702211141586, 0.0041429148986935616, 0.01321740634739399, 0.005637933500111103, 0.027713214978575706, -0.03736696019768715, -0.012070078402757645, -0.024344071745872498, 0.0038054941687732935, 0.04483693093061447, -0.00929549615830183, -0.06807441264390945, -0.014590064994990826, -0.0012703625252470374, -0.05199921503663063, -0.021045329049229622, 0.0017236988060176373, 0.020581327378749847, 0.00310335261747241, 0.014803273603320122, 0.007082259748131037, 0.018589694052934647, -0.020445356145501137, 0.005138273350894451, 0.04842124134302139, 0.01742020808160305, 0.030288565903902054, -0.0038397167809307575, 0.035734400153160095, 0.005221309140324593, 0.009709448553621769, 0.0009714406332932413, -0.003338858485221863, -0.009880861267447472, -0.0354900136590004, 0.04243701323866844, -0.02065272442996502, -0.033083800226449966, -0.01976737193763256, 0.03881418704986572, -0.015840662643313408, -0.014110976830124855, 0.02787899598479271, 0.015958787873387337, -0.024252016097307205, 0.018708642572164536, -0.05208557844161987, 0.009075745940208435, -0.06176981329917908, 0.0020644953474402428, -0.02534164860844612, -0.009223466739058495, -0.013906687498092651, -0.006282609421759844, -0.033772144466638565, -0.004664893262088299, -0.03690044581890106, 0.014286994934082031, -0.013754536397755146, -0.02677650935947895, -0.004116437863558531, 0.03696655482053757, -0.05480392277240753, 0.0025101948995143175, -0.02389528602361679, -0.002059308346360922, -0.00986967608332634, -0.06474544107913971, 0.002008399460464716, 0.04639190435409546, 0.02575313299894333, -0.03954186290502548, -0.04276818782091141, -0.0003671206359285861, 0.038086578249931335, 0.08546829968690872, 0.002681935206055641, 0.005467512179166079, -0.07309430092573166, 0.03508995473384857, -0.011109807528555393, 0.04884098097681999, -0.015379451215267181, 0.021916523575782776, 0.006058952771127224, 0.025333305820822716, -0.03931069001555443, 0.011501088738441467, 0.08444537222385406, -0.019699491560459137, 0.03001621551811695, 0.04052627459168434, 0.01509734708815813, -0.0036059776321053505, 0.0024216563906520605, -0.03624400123953819, 0.06096984073519707, 0.026573486626148224, 0.028464647009968758, 0.005288115702569485, 0.013628870248794556, 0.03701353818178177, -0.04464303329586983, -0.020769106224179268, 0.0007852627313695848, 0.0073068286292254925, -0.04131774231791496, -0.017183959484100342, 0.00045813480392098427, 0.04228818416595459, 0.00895351730287075, 0.0029041890520602465, 0.0013040080666542053, -0.028432169929146767, -0.03928574174642563, 0.0279998779296875, -0.01892475038766861, 0.03696105256676674, -0.04983842000365257, 0.022238286212086678, -0.00751550542190671, -0.06007396802306175, 0.059541404247283936, 0.03675074875354767, -0.05834772065281868, -0.015122296288609505, 0.02690679021179676, 0.043969638645648956, 0.03015589341521263, 0.01313701830804348, 0.02406138740479946, 0.021920770406723022, -0.045081283897161484, 0.01872667483985424, -0.016369646415114403, 0.03949194774031639, -0.01271951012313366, 0.009316700510680676, -0.06436794996261597, 0.039648935198783875, -0.0453445203602314, -0.015228724107146263, 0.022167755290865898, -0.026275550946593285, -0.015110056847333908, -0.03270441293716431, 0.04136410355567932, 0.014791132882237434, 0.016533788293600082, 0.04523699730634689, 0.005338069051504135, 0.012556244619190693, -0.011820793151855469, -0.02688733860850334, -0.013957234099507332, 0.027324875816702843, 0.0016771637601777911, -0.01908678561449051, 0.0879625678062439, -0.017585109919309616, 0.001506523578427732, 0.014244329184293747, -0.016734294593334198, -0.04028971865773201, -0.011828437447547913, 0.044278573244810104, -0.04623398929834366, -0.015288792550563812, 0.018561312928795815, -0.05677640065550804, 0.03038403019309044, 0.01473618857562542, 0.004557834006845951, -0.010420982725918293, 0.01662040688097477, -0.021740473806858063, -0.02423125132918358, 0.0002266458614030853, 0.03118511661887169, 0.03346552327275276, -0.02155519463121891, -0.046199776232242584, -0.009229421615600586, -0.02052953839302063, -0.030543895438313484, -0.044173769652843475, -0.0064188409596681595, -0.019747091457247734, -0.002618914470076561, -0.03886003792285919, -0.0005130494828335941, -0.03990660607814789, -0.05446924641728401, 0.0008680057944729924, -0.022065455093979836, 0.000695459486451, 0.024503331631422043, 0.02740980125963688, 0.0306197889149189, -0.02932315692305565, 0.035693682730197906, 0.025483516976237297, 0.04890481382608414, -0.023647328838706017, 0.05986616015434265, 0.04637400060892105, 0.015953946858644485, 0.001707101590000093, -0.020600399002432823, 0.013272842392325401, -0.019768258556723595, 0.0003686780692078173, -0.02926027588546276, 0.008464827202260494, -0.055541615933179855, -0.008259587921202183, 0.027637088671326637, 0.04876914620399475, -0.008188378997147083, -0.049882255494594574, -0.0046189576387405396, -0.034740377217531204, -0.06877958029508591, -0.033453308045864105, -0.057299237698316574, 0.04424375668168068, 0.009012886323034763, -0.006461849436163902, 0.004532593302428722, -0.06137078255414963, 0.17926841974258423, 0.04031744226813316, 0.020939242094755173, 0.01988190971314907, 0.0009072233224287629, -0.005762910004705191, 0.03745949640870094, -0.019865624606609344, -0.008318456821143627, -0.04051871597766876, 0.029783369973301888, 0.004821800626814365, 0.007900829426944256, 0.032089006155729294, 0.021734507754445076, 0.01714659295976162, -0.01962159015238285, -0.020563235506415367, 0.03429047018289566, -0.017661085352301598, -0.040097665041685104, 0.00648909155279398, -0.009551159106194973, 0.02434762567281723, 0.012318463996052742, 0.014526142738759518, 0.011561332270503044, -0.03873499855399132, -0.03418339416384697, -0.0007731473306193948, 0.003652141662314534, 0.009530676528811455, 0.027439458295702934, -0.007102441508322954, -0.0400245375931263, 0.03153190389275551, 0.014316375367343426, -0.025393975898623466, 0.01789182424545288, 0.016893461346626282, -0.009018915705382824, -0.008043519221246243, -0.021284257993102074, 0.002061843406409025, -0.0010233575012534857, 0.06653787940740585, 0.008115660399198532, 0.010903468355536461, 0.0010773276444524527, -0.0525977797806263, -0.0018644867232069373, -0.044708263128995895, 0.011509076692163944, -0.0441756471991539, 0.004411631729453802, -0.003872891655191779, 0.02756294049322605, 0.016089696437120438, 0.024755354970693588, -0.01461919117718935, 0.010851399973034859, 0.01563720591366291, -0.026414982974529266, 0.03514556959271431, -0.036658551543951035, -0.008005528710782528, -0.019284449517726898, 0.049641821533441544, 0.005416483618319035, 0.004511935170739889, -0.008117018267512321, -0.023252980783581734, -0.018745051696896553, 0.00846992526203394, 0.012148547917604446, -0.006063555832952261, -0.00444689579308033, -0.019263027235865593, 0.011437769047915936, -0.00979433674365282, -0.019153140485286713, -0.0344361774623394, -0.060506489127874374, -0.03711846098303795, 0.02680795267224312, 0.028888490051031113, 0.004586066119372845, 0.03112998977303505, 0.011415940709412098, 0.0645357221364975, 0.03468457981944084, 0.037274934351444244, -0.019164782017469406, -0.04222643002867699, -0.015291324816644192]
1024

Batch process the embedding

Many data-science tasks require to split a larger processing operation into batch jobs. Like in the good old Mainframe days.

The vector DB: https://github.com/asg017/sqlite-vss Basis: https://faiss.ai/ - a library for efficient similarity search and clustering of dense vectors.

We add vectors of 1024 dimensions per chunk (sentence, line break delimited) to the DB. The processing is done in batches of 50 chunks, using 3 threads.

In [33]:
# we can use concurrent processing to speed up the embedding process
from concurrent.futures import ThreadPoolExecutor, as_completed

from langchain_community.vectorstores import SQLiteVSS
import os
from tqdm.notebook import tqdm  # Import tqdm for notebook
from typing import List
from langchain.schema.document import Document
In [38]:
def add_texts_in_batches(batch: List[Document], sqlite_table: str = "evernote", embeddings=embeddings) -> None:
    """
    Using type hints is a good idea here, because error messages get swallowed by the ThreadPoolExecutor.
    
    The exception handling serves the same purpose. 
    
    Create a new connection to the database within each thread,
    then add a batch of texts. This ensures that the SQLite connection
    is used in the thread where it was created.
    
    This needs sqlite-vss . 
    """
    try:
        # Create a new connection for each batch
        # sqlite isn't thread-safe afaik
        
        connection = SQLiteVSS.create_connection(db_file="/home/marius/source/bookworm/evernote.db")

        local_db = SQLiteVSS(
            table=sqlite_table,
            embedding=embeddings,
            connection=connection
        )
        local_db.add_documents(batch)
        # sqlite here doesn't get closed.

    except Exception as e:
        print(f"Exception occurred in add_texts_in_batches: {e}")

def divide_chunks(chunks, n):
    """
    Divide and conquer
    """
    for i in range(0, len(chunks), n):
        yield chunks[i:i + n]

def vectorize_data_in_batches(chunks, embeddings):
    num_workers = 3
    batch_size = 50  # Adjust based on your needs and memory constraints

    batches = list(divide_chunks(chunks, batch_size))

    with ThreadPoolExecutor(max_workers=num_workers) as executor:
        # Wrap the 'submit' calls with 'tqdm' for immediate feedback
        futures = [executor.submit(add_texts_in_batches, batch) for batch in batches]
        
        # Setup the tqdm progress bar
        progress_bar = tqdm(total=len(futures), desc="Processing batches")
        
        for future in as_completed(futures):
            # Each time a future completes, update the progress
            progress_bar.update(1)
        
        progress_bar.close()  # Ensure the progress bar is closed at the end

    print("All texts have been added to the database.")
    
vectorize_data_in_batches(chunks=chunks, embeddings=embeddings)
Processing batches:   0%|          | 0/14477 [00:00<?, ?it/s]
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
Cell In[38], line 44, in vectorize_data_in_batches(chunks, embeddings)
     42 progress_bar = tqdm(total=len(futures), desc="Processing batches")
---> 44 for future in as_completed(futures):
     45     # Each time a future completes, update the progress
     46     progress_bar.update(1)

File ~/miniconda3/envs/llm_langchain/lib/python3.11/concurrent/futures/_base.py:243, in as_completed(fs, timeout)
    239         raise TimeoutError(
    240                 '%d (of %d) futures unfinished' % (
    241                 len(pending), total_futures))
--> 243 waiter.event.wait(wait_timeout)
    245 with waiter.lock:

File ~/miniconda3/envs/llm_langchain/lib/python3.11/threading.py:629, in Event.wait(self, timeout)
    628 if not signaled:
--> 629     signaled = self._cond.wait(timeout)
    630 return signaled

File ~/miniconda3/envs/llm_langchain/lib/python3.11/threading.py:327, in Condition.wait(self, timeout)
    326 if timeout is None:
--> 327     waiter.acquire()
    328     gotit = True

KeyboardInterrupt: 

During handling of the above exception, another exception occurred:

KeyboardInterrupt                         Traceback (most recent call last)
Cell In[38], line 52
     48         progress_bar.close()  # Ensure the progress bar is closed at the end
     50     print("All texts have been added to the database.")
---> 52 vectorize_data_in_batches(chunks=chunks, embeddings=embeddings)
     53 # todo : documents go to different table. 
     54 # todo: similarity queries

Cell In[38], line 37, in vectorize_data_in_batches(chunks, embeddings)
     33 batch_size = 50  # Adjust based on your needs and memory constraints
     35 batches = list(divide_chunks(chunks, batch_size))
---> 37 with ThreadPoolExecutor(max_workers=num_workers) as executor:
     38     # Wrap the 'submit' calls with 'tqdm' for immediate feedback
     39     futures = [executor.submit(add_texts_in_batches, batch) for batch in batches]
     41     # Setup the tqdm progress bar

File ~/miniconda3/envs/llm_langchain/lib/python3.11/concurrent/futures/_base.py:647, in Executor.__exit__(self, exc_type, exc_val, exc_tb)
    646 def __exit__(self, exc_type, exc_val, exc_tb):
--> 647     self.shutdown(wait=True)
    648     return False

File ~/miniconda3/envs/llm_langchain/lib/python3.11/concurrent/futures/thread.py:235, in ThreadPoolExecutor.shutdown(self, wait, cancel_futures)
    233 if wait:
    234     for t in self._threads:
--> 235         t.join()

File ~/miniconda3/envs/llm_langchain/lib/python3.11/threading.py:1119, in Thread.join(self, timeout)
   1116     raise RuntimeError("cannot join current thread")
   1118 if timeout is None:
-> 1119     self._wait_for_tstate_lock()
   1120 else:
   1121     # the behavior of a negative timeout isn't documented, but
   1122     # historically .join(timeout=x) for x<0 has acted as if timeout=0
   1123     self._wait_for_tstate_lock(timeout=max(timeout, 0))

File ~/miniconda3/envs/llm_langchain/lib/python3.11/threading.py:1139, in Thread._wait_for_tstate_lock(self, block, timeout)
   1136     return
   1138 try:
-> 1139     if lock.acquire(block, timeout):
   1140         lock.release()
   1141         self._stop()

KeyboardInterrupt: 
In [ ]:
# todo : documents go to different table. 
# todo: similarity queries