Files
rag/rag_fr_3.ipynb
T
2024-01-03 21:36:33 +01:00

139 KiB
Raw Blame History

In [136]:
from transformers import AutoTokenizer
from sentence_transformers import SentenceTransformer
import os
import chromadb
import re
import html
import copy
from llama_cpp import Llama
import gradio as gr
from IPython.display import Markdown, display

Embed a folder of CERA webpages in txt format

Embedding model and tokenizer

In [3]:
#embed_model_name = "dangvantuan/sentence-camembert-large"
#embed_model = HuggingFaceEmbedding(model_name=embed_model_name)

embed_model_name = 'intfloat/multilingual-e5-large'
tokenizer = AutoTokenizer.from_pretrained(embed_model_name)
embed_model = SentenceTransformer(embed_model_name)
/Users/peportier/miniforge3/envs/RAG_ENV/lib/python3.9/site-packages/transformers/utils/generic.py:309: UserWarning: torch.utils._pytree._register_pytree_node is deprecated. Please use torch.utils._pytree.register_pytree_node instead.
  _torch_pytree._register_pytree_node(

Initialize a ChromaDB persistent collection

In [58]:
chroma_client = chromadb.PersistentClient(path="./chromadb")
#chroma_client.delete_collection(name="cera")
collection = chroma_client.get_or_create_collection(name="cera")

Embed the text of a particular web page

In [43]:
def token_length(str):
  return len(tokenizer.encode(str, add_special_tokens=False))

def passage_str(paragraphs, title):
    return f"passage: {title}\n" + '\n'.join(paragraphs)
In [57]:
def embed_page(filename, url, title, contents, tags, chroma_collection, embed_model, max_chunk_size=512):
    
    documents = []
    contents_to_embed = [contents]
    
    while contents_to_embed:
        last_item = contents_to_embed.pop()
        # (1) For the `multilingual-e5-large` embedding model, 
        # the string of a document must be prepended with "passage:"
        # (2) Since the text of a webpage may have to be cut into many documents,
        # we always add the title of the webpage at the top of a document
        last_item_str = passage_str(last_item, title)
        last_item_token_length = token_length(last_item_str)
        
        if last_item_token_length > max_chunk_size:
            # If the text of the webpage, present in file `filename`, 
            # contains more than `max_chunk_size` tokens, it must be divided 
            # into multiple documents
            if len(last_item) > 1:
                # If there are many paragraphs in `last_item`, i.e. the current
                # part of the webpage for which an embedding will be made,
                # the length of `last_item` can be reduced by dividing its set of
                # paragraphs in half
                h = len(last_item) // 2
                last_item_h1 = last_item[:h]
                last_item_h2 = last_item[h:]
                contents_to_embed.append(last_item_h1)
                contents_to_embed.append(last_item_h2)
            else:
                # If `last_item` is made of only one long paragraph whose length is
                # larger than `chunk_size`, this paragraph will be divided into two parts.
                sentences = re.split(r'(?<=[.!?]) +', last_item[0])
                
                if len(sentences) > 1:
                    # If there are multiple sentences, try to split into two parts
                    i = 1
                    while True:
                        part1 = ' '.join(sentences[:i])
                        part2 = ' '.join(sentences[i:])
                        token_length_part_1 = token_length(passage_str([part1], title))
                        token_length_part_2 = token_length(passage_str([part2], title))
                        if (token_length_part_1 <= max_chunk_size and
                            token_length_part_2 <= max_chunk_size) or \
                           token_length_part_1 > max_chunk_size:
                            break
                        i += 1
                else:
                    # If there's only one long sentence or no suitable split found, split by words
                    words = last_item[0].split()
                    h = len(words) // 2
                    part1 = ' '.join(words[:h])
                    part2 = ' '.join(words[h:])
                    
                contents_to_embed.append([part1])
                contents_to_embed.append([part2])
        else:
            documents.append(last_item_str)

    # We want the documents into which a webpage has been divided 
    # to be in the natural reading order
    documents.reverse()
    embeddings = embed_model.encode(documents, normalize_embeddings=True)
    embeddings = embeddings.tolist()

    # We consider the subpart of an URL as tags describing the webpage
    # For example, 
    # "https://www.caisse-epargne.fr/rhone-alpes/professionnels/financer-projets-optimiser-tresorerie/"
    # is associated to the tags:
    # tags[0] == 'rhone-alpes'
    # tags[1] == 'professionnels'
    # tags[2] == 'financer-projets-optimiser-tresorerie'
    if len(tags) < 2:
        category = ''
    else:
        if tags[0] == 'rhone-alpes':
            category = tags[1]
        else: category = tags[0]
    metadata = {'category': category, 'url': url}
    # All the documents corresponding to a same webpage have the same metadata, i.e. URL and category
    metadatas = [copy.deepcopy(metadata) for _ in range(len(documents))]

    ids = [filename + '-' + str(i+1) for i in range(len(documents))]

    chroma_collection.add(embeddings=embeddings, documents=documents, metadatas=metadatas, ids=ids)

Embed all the webpages in a folder

In [45]:
def embed_folder(folder_path, chroma_collection, embed_model):
    for filename in os.listdir(folder_path):
        if filename.endswith('.txt'):
            file_path = os.path.join(folder_path, filename)
            with open(file_path, 'r') as file:
                file_contents = file.read()
            contents_lst = [str.replace('\n',' ').replace('\xa0', ' ') for str in file_contents.split('\n\n')]
            if len(contents_lst) < 3: # contents_lst[0] is the URL, contents_lst[1] is the title, the rest is the content
                continue
            url = contents_lst[0]
            if '?' in url: # URLs with a '?' corresponds to call to services and have no useful content
                continue
            title = contents_lst[1]
            if not title: # when the title is absent (or empty), the page has no interest
                continue
            print(f"{filename} : Start")
            prefix = 'https://www.caisse-epargne.fr/'
            suffix = url.replace(prefix, '')
            tags = suffix.split('/')
            tags = [tag for tag in tags if tag] # remove empty parts
            embed_page(filename, url, title, contents_lst[2:], tags, chroma_collection, embed_model)
            print(f"{filename} : Done")

Proceed to the embedding

In [59]:
embed_folder('docs/cera2', collection, embed_model)
255a0eb096.txt : Start
255a0eb096.txt : Done
ce79680ee7.txt : Start
ce79680ee7.txt : Done
565b28a75b.txt : Start
565b28a75b.txt : Done
173fc21d3a.txt : Start
173fc21d3a.txt : Done
b3bd1cf160.txt : Start
b3bd1cf160.txt : Done
f73fb80f59.txt : Start
f73fb80f59.txt : Done
2b45bc13c2.txt : Start
2b45bc13c2.txt : Done
48787daff9.txt : Start
48787daff9.txt : Done
5f21a01035.txt : Start
5f21a01035.txt : Done
aa1030c5fd.txt : Start
aa1030c5fd.txt : Done
a040c90b55.txt : Start
a040c90b55.txt : Done
c3d469cbdb.txt : Start
c3d469cbdb.txt : Done
a6a1d2fea0.txt : Start
a6a1d2fea0.txt : Done
42a2928ef0.txt : Start
42a2928ef0.txt : Done
4eda4de449.txt : Start
4eda4de449.txt : Done
8cce840558.txt : Start
8cce840558.txt : Done
4a06529f5f.txt : Start
4a06529f5f.txt : Done
898d33ba09.txt : Start
898d33ba09.txt : Done
518b61af48.txt : Start
518b61af48.txt : Done
585b794776.txt : Start
585b794776.txt : Done
be98b7bc33.txt : Start
be98b7bc33.txt : Done
2e77392d24.txt : Start
2e77392d24.txt : Done
2db068af5c.txt : Start
2db068af5c.txt : Done
e6642ab0c4.txt : Start
e6642ab0c4.txt : Done
29e0f10548.txt : Start
29e0f10548.txt : Done
daa79fb76c.txt : Start
daa79fb76c.txt : Done
ba68c7b5b1.txt : Start
ba68c7b5b1.txt : Done
e9d58e832a.txt : Start
e9d58e832a.txt : Done
d950f8cfcf.txt : Start
d950f8cfcf.txt : Done
63fe8d8ecf.txt : Start
63fe8d8ecf.txt : Done
33337c3b38.txt : Start
33337c3b38.txt : Done
bd4b626414.txt : Start
bd4b626414.txt : Done
4c0e6dbaa6.txt : Start
4c0e6dbaa6.txt : Done
55262bf6bd.txt : Start
55262bf6bd.txt : Done
10edea0734.txt : Start
10edea0734.txt : Done
6035d44943.txt : Start
6035d44943.txt : Done
0480b7e99c.txt : Start
0480b7e99c.txt : Done
13e8a0bf51.txt : Start
13e8a0bf51.txt : Done
f03e1574c2.txt : Start
f03e1574c2.txt : Done
d5069cd6b3.txt : Start
d5069cd6b3.txt : Done
743fc26faf.txt : Start
743fc26faf.txt : Done
a164829b41.txt : Start
a164829b41.txt : Done
167def23bd.txt : Start
167def23bd.txt : Done
ac97457567.txt : Start
ac97457567.txt : Done
99bab73424.txt : Start
99bab73424.txt : Done
8c445da076.txt : Start
8c445da076.txt : Done
5f103512e6.txt : Start
5f103512e6.txt : Done
68b67c1aed.txt : Start
68b67c1aed.txt : Done
7a083e9237.txt : Start
7a083e9237.txt : Done
5883f2daa0.txt : Start
5883f2daa0.txt : Done
4aac6081e0.txt : Start
4aac6081e0.txt : Done
f74f2366a0.txt : Start
f74f2366a0.txt : Done
5a62906c0c.txt : Start
5a62906c0c.txt : Done
f66629c8b6.txt : Start
f66629c8b6.txt : Done
f6badfbd1a.txt : Start
f6badfbd1a.txt : Done
02c2716018.txt : Start
02c2716018.txt : Done
a3d470b7a1.txt : Start
a3d470b7a1.txt : Done
fe7a283831.txt : Start
fe7a283831.txt : Done
d850e8fd61.txt : Start
d850e8fd61.txt : Done
60465f4946.txt : Start
60465f4946.txt : Done
055634c516.txt : Start
055634c516.txt : Done
3241ba4473.txt : Start
3241ba4473.txt : Done
b236716617.txt : Start
b236716617.txt : Done
83b03c7962.txt : Start
83b03c7962.txt : Done
4bcb190e00.txt : Start
4bcb190e00.txt : Done
cd53afe27d.txt : Start
cd53afe27d.txt : Done
a4217688fc.txt : Start
a4217688fc.txt : Done
f8fbe32801.txt : Start
f8fbe32801.txt : Done
46b1703611.txt : Start
46b1703611.txt : Done
e5c158a765.txt : Start
e5c158a765.txt : Done
ee3c97b958.txt : Start
ee3c97b958.txt : Done
d482034404.txt : Start
d482034404.txt : Done
ad509b796a.txt : Start
ad509b796a.txt : Done
79e77efef1.txt : Start
79e77efef1.txt : Done
76675b7013.txt : Start
76675b7013.txt : Done
2f0acaea22.txt : Start
2f0acaea22.txt : Done
4c10109965.txt : Start
4c10109965.txt : Done
f311309f86.txt : Start
f311309f86.txt : Done
b176019d5a.txt : Start
b176019d5a.txt : Done
351e959cf7.txt : Start
351e959cf7.txt : Done
65d86a3b7f.txt : Start
65d86a3b7f.txt : Done
4bdc40e75b.txt : Start
4bdc40e75b.txt : Done
a31b7de525.txt : Start
a31b7de525.txt : Done
b7e3354b7b.txt : Start
b7e3354b7b.txt : Done
0b5be6abc0.txt : Start
0b5be6abc0.txt : Done
37a7d20803.txt : Start
37a7d20803.txt : Done
8ec5dbe18a.txt : Start
8ec5dbe18a.txt : Done
3bb79284a3.txt : Start
3bb79284a3.txt : Done
a6c4cc430f.txt : Start
a6c4cc430f.txt : Done
215d3fc7da.txt : Start
215d3fc7da.txt : Done
c776277507.txt : Start
c776277507.txt : Done
7526cecc15.txt : Start
7526cecc15.txt : Done
624a63445d.txt : Start
624a63445d.txt : Done
e9e060442f.txt : Start
e9e060442f.txt : Done
347dd2758c.txt : Start
347dd2758c.txt : Done
c37a229373.txt : Start
c37a229373.txt : Done
6f1b7077d4.txt : Start
6f1b7077d4.txt : Done
35d30e0ade.txt : Start
35d30e0ade.txt : Done
80bbbcbf2c.txt : Start
80bbbcbf2c.txt : Done
7ba26ad0e8.txt : Start
7ba26ad0e8.txt : Done
182588fbbf.txt : Start
182588fbbf.txt : Done
de94e4b189.txt : Start
de94e4b189.txt : Done
e45b0e5b68.txt : Start
e45b0e5b68.txt : Done
e2638b3436.txt : Start
e2638b3436.txt : Done
dd0a2ca5ac.txt : Start
dd0a2ca5ac.txt : Done
2e078d988f.txt : Start
2e078d988f.txt : Done
23746976e8.txt : Start
23746976e8.txt : Done
b4ab821d94.txt : Start
b4ab821d94.txt : Done
25dcc77e00.txt : Start
25dcc77e00.txt : Done
c7eb6cf9c8.txt : Start
c7eb6cf9c8.txt : Done
16e59d18b0.txt : Start
16e59d18b0.txt : Done
364b4d5147.txt : Start
364b4d5147.txt : Done
faf51f605e.txt : Start
faf51f605e.txt : Done
84d61f33dc.txt : Start
84d61f33dc.txt : Done
4c578fd78c.txt : Start
4c578fd78c.txt : Done
489cc63745.txt : Start
489cc63745.txt : Done
acdf6c334e.txt : Start
acdf6c334e.txt : Done
d720fc241d.txt : Start
d720fc241d.txt : Done
9c16ef30f1.txt : Start
9c16ef30f1.txt : Done
2426f559ec.txt : Start
2426f559ec.txt : Done
a0cabc58ba.txt : Start
a0cabc58ba.txt : Done
aabc3549f4.txt : Start
aabc3549f4.txt : Done
3bbb946fb3.txt : Start
3bbb946fb3.txt : Done
4a5736d002.txt : Start
4a5736d002.txt : Done
b986d4224b.txt : Start
b986d4224b.txt : Done
acd10eaae3.txt : Start
acd10eaae3.txt : Done
6bac4f4e5a.txt : Start
6bac4f4e5a.txt : Done
edea3bec7b.txt : Start
edea3bec7b.txt : Done
6611e528c9.txt : Start
6611e528c9.txt : Done
54ce3f1081.txt : Start
54ce3f1081.txt : Done
1843d92a2e.txt : Start
1843d92a2e.txt : Done
69f0b5362f.txt : Start
69f0b5362f.txt : Done
2ac98f70a3.txt : Start
2ac98f70a3.txt : Done
4d4eef5de1.txt : Start
4d4eef5de1.txt : Done
3598605354.txt : Start
3598605354.txt : Done
8d9da55793.txt : Start
8d9da55793.txt : Done
90efeedace.txt : Start
90efeedace.txt : Done
b222a935a2.txt : Start
b222a935a2.txt : Done
9a54cdc2d6.txt : Start
9a54cdc2d6.txt : Done
7d9e416887.txt : Start
7d9e416887.txt : Done
a2f809e07a.txt : Start
a2f809e07a.txt : Done
f82f526635.txt : Start
f82f526635.txt : Done
49fc042883.txt : Start
49fc042883.txt : Done
401b54bb3a.txt : Start
401b54bb3a.txt : Done
e88e322e77.txt : Start
e88e322e77.txt : Done
9ff584c6a9.txt : Start
9ff584c6a9.txt : Done
77dd96cdb0.txt : Start
77dd96cdb0.txt : Done
d49e768bef.txt : Start
d49e768bef.txt : Done
c145d2aa96.txt : Start
c145d2aa96.txt : Done
618b26d15d.txt : Start
618b26d15d.txt : Done
d609cf2c68.txt : Start
d609cf2c68.txt : Done
3d159cbe89.txt : Start
3d159cbe89.txt : Done
e53a699f5b.txt : Start
e53a699f5b.txt : Done
7bee3a53d3.txt : Start
7bee3a53d3.txt : Done
40e0072e9e.txt : Start
40e0072e9e.txt : Done
55da73699b.txt : Start
55da73699b.txt : Done
e60e8a6463.txt : Start
e60e8a6463.txt : Done
5e0583f23a.txt : Start
5e0583f23a.txt : Done
b2be33ebf5.txt : Start
b2be33ebf5.txt : Done
ad5d201dda.txt : Start
ad5d201dda.txt : Done
d48b16c825.txt : Start
d48b16c825.txt : Done
2a518c5c8a.txt : Start
2a518c5c8a.txt : Done
88346ffb46.txt : Start
88346ffb46.txt : Done
3f3e46760c.txt : Start
3f3e46760c.txt : Done
dbbeb6c739.txt : Start
dbbeb6c739.txt : Done
8e6a00bdc1.txt : Start
8e6a00bdc1.txt : Done
80a9d4e127.txt : Start
80a9d4e127.txt : Done
833d60cb6c.txt : Start
833d60cb6c.txt : Done
2c55313e35.txt : Start
2c55313e35.txt : Done
cd62a89eed.txt : Start
cd62a89eed.txt : Done
78686c36f9.txt : Start
78686c36f9.txt : Done
e688957c46.txt : Start
e688957c46.txt : Done
7aa9e50a1f.txt : Start
7aa9e50a1f.txt : Done
51e2ac338a.txt : Start
51e2ac338a.txt : Done
51a68d9313.txt : Start
51a68d9313.txt : Done
5fb7a523a7.txt : Start
5fb7a523a7.txt : Done
f49d62acf6.txt : Start
f49d62acf6.txt : Done
3ced86d1db.txt : Start
3ced86d1db.txt : Done
debbca28fa.txt : Start
debbca28fa.txt : Done
bfeaa8b440.txt : Start
bfeaa8b440.txt : Done
9ddab20d94.txt : Start
9ddab20d94.txt : Done
66df15f567.txt : Start
66df15f567.txt : Done
f42bf02416.txt : Start
f42bf02416.txt : Done
c8234b7b50.txt : Start
c8234b7b50.txt : Done
4c0aba7cbb.txt : Start
4c0aba7cbb.txt : Done
2e41ac0342.txt : Start
2e41ac0342.txt : Done
00e9b7dba8.txt : Start
00e9b7dba8.txt : Done
3add1ed406.txt : Start
3add1ed406.txt : Done
69f188b16a.txt : Start
69f188b16a.txt : Done
73b277c156.txt : Start
73b277c156.txt : Done
d2ad8952b8.txt : Start
d2ad8952b8.txt : Done
f77eddd823.txt : Start
f77eddd823.txt : Done
07852c3122.txt : Start
07852c3122.txt : Done
966c432839.txt : Start
966c432839.txt : Done
8ced9fefee.txt : Start
8ced9fefee.txt : Done
06c152d200.txt : Start
06c152d200.txt : Done
f11b7b8fce.txt : Start
f11b7b8fce.txt : Done
09b3f765cf.txt : Start
09b3f765cf.txt : Done
861738ff97.txt : Start
861738ff97.txt : Done
c98c007358.txt : Start
c98c007358.txt : Done
1e209c2f7c.txt : Start
1e209c2f7c.txt : Done
34dc461327.txt : Start
34dc461327.txt : Done
592a315fc4.txt : Start
592a315fc4.txt : Done
f8f9a61e79.txt : Start
f8f9a61e79.txt : Done
49f945e30f.txt : Start
49f945e30f.txt : Done
b39e06064b.txt : Start
b39e06064b.txt : Done
6b44932499.txt : Start
6b44932499.txt : Done
3bb5f27823.txt : Start
3bb5f27823.txt : Done
a54dfc4265.txt : Start
a54dfc4265.txt : Done
3bbe30b18a.txt : Start
3bbe30b18a.txt : Done
27582f5949.txt : Start
27582f5949.txt : Done
ac82a34e3e.txt : Start
ac82a34e3e.txt : Done
cbd0706bd5.txt : Start
cbd0706bd5.txt : Done
d38e72ab4a.txt : Start
d38e72ab4a.txt : Done
d6b0c46314.txt : Start
d6b0c46314.txt : Done
7549112ce8.txt : Start
7549112ce8.txt : Done
c64375ea25.txt : Start
c64375ea25.txt : Done
5242939ba7.txt : Start
5242939ba7.txt : Done
51e1e6a825.txt : Start
51e1e6a825.txt : Done
7cde74e885.txt : Start
7cde74e885.txt : Done
d8adaab329.txt : Start
d8adaab329.txt : Done
79f444033c.txt : Start
79f444033c.txt : Done
75bef15d20.txt : Start
75bef15d20.txt : Done
ab8dbcdc59.txt : Start
ab8dbcdc59.txt : Done
ed1f98efc6.txt : Start
ed1f98efc6.txt : Done
a20a7a7bb1.txt : Start
a20a7a7bb1.txt : Done
c3d7990cb5.txt : Start
c3d7990cb5.txt : Done
ba4dbfd475.txt : Start
ba4dbfd475.txt : Done
059eb08b87.txt : Start
059eb08b87.txt : Done
df20818635.txt : Start
df20818635.txt : Done
4eff143f3f.txt : Start
4eff143f3f.txt : Done
eff4b7ddd6.txt : Start
eff4b7ddd6.txt : Done
0e81a328c1.txt : Start
0e81a328c1.txt : Done
75b4d7d9a7.txt : Start
75b4d7d9a7.txt : Done
5e2ba7946b.txt : Start
5e2ba7946b.txt : Done
d0043c604c.txt : Start
d0043c604c.txt : Done
e7c857ad2b.txt : Start
e7c857ad2b.txt : Done
a8c6752cce.txt : Start
a8c6752cce.txt : Done
165517dfe7.txt : Start
165517dfe7.txt : Done
61d25d4835.txt : Start
61d25d4835.txt : Done
9e3c26ac16.txt : Start
9e3c26ac16.txt : Done
e6bb195473.txt : Start
e6bb195473.txt : Done
836c1b074b.txt : Start
836c1b074b.txt : Done
83e2969710.txt : Start
83e2969710.txt : Done
644186a433.txt : Start
644186a433.txt : Done
a75aa7df01.txt : Start
a75aa7df01.txt : Done
a0398ee914.txt : Start
a0398ee914.txt : Done
bc2a847131.txt : Start
bc2a847131.txt : Done
7868bec686.txt : Start
7868bec686.txt : Done
63f1d8dabd.txt : Start
63f1d8dabd.txt : Done
ce669e66f8.txt : Start
ce669e66f8.txt : Done
792190c4e9.txt : Start
792190c4e9.txt : Done
29c3723901.txt : Start
29c3723901.txt : Done
8ae6d05877.txt : Start
8ae6d05877.txt : Done
dd05acb3cb.txt : Start
dd05acb3cb.txt : Done
a817449f48.txt : Start
a817449f48.txt : Done
967cdecccf.txt : Start
967cdecccf.txt : Done
4ebd32b3b4.txt : Start
4ebd32b3b4.txt : Done
a60556b6b3.txt : Start
a60556b6b3.txt : Done
a719b96889.txt : Start
a719b96889.txt : Done
c079c36809.txt : Start
c079c36809.txt : Done
c0a4d8856e.txt : Start
c0a4d8856e.txt : Done
e707711e05.txt : Start
e707711e05.txt : Done
f7217535d5.txt : Start
f7217535d5.txt : Done
09bb9ce67b.txt : Start
09bb9ce67b.txt : Done
c6e4320cce.txt : Start
c6e4320cce.txt : Done
1255f41d67.txt : Start
1255f41d67.txt : Done
d84a0d7a60.txt : Start
d84a0d7a60.txt : Done
e912b95fb7.txt : Start
e912b95fb7.txt : Done
6c91560cb6.txt : Start
6c91560cb6.txt : Done
23d4b1a861.txt : Start
23d4b1a861.txt : Done
56fcef62ef.txt : Start
56fcef62ef.txt : Done
8ef40bc843.txt : Start
8ef40bc843.txt : Done
ee1f44ee32.txt : Start
ee1f44ee32.txt : Done
6667c30343.txt : Start
6667c30343.txt : Done
a6472532fd.txt : Start
a6472532fd.txt : Done
d47b684de9.txt : Start
d47b684de9.txt : Done
a6e9d84a26.txt : Start
a6e9d84a26.txt : Done
8cb1148ce2.txt : Start
8cb1148ce2.txt : Done
2041450bbc.txt : Start
2041450bbc.txt : Done
c9b741cf85.txt : Start
c9b741cf85.txt : Done
3b494f8454.txt : Start
3b494f8454.txt : Done
7b58b43097.txt : Start
7b58b43097.txt : Done
f6d921ced8.txt : Start
f6d921ced8.txt : Done
a774f5dcb0.txt : Start
a774f5dcb0.txt : Done
a607314ff3.txt : Start
a607314ff3.txt : Done
47d6b05426.txt : Start
47d6b05426.txt : Done
7f501b252e.txt : Start
7f501b252e.txt : Done
6d23b1599b.txt : Start
6d23b1599b.txt : Done
e854f24006.txt : Start
e854f24006.txt : Done
02b3aa0475.txt : Start
02b3aa0475.txt : Done
0bb6c71f04.txt : Start
0bb6c71f04.txt : Done
b23bb1811f.txt : Start
b23bb1811f.txt : Done
d7e4d2661b.txt : Start
d7e4d2661b.txt : Done
d1b7f85297.txt : Start
d1b7f85297.txt : Done
5007221a16.txt : Start
5007221a16.txt : Done
e3e5d4095f.txt : Start
e3e5d4095f.txt : Done
6a5a514a6d.txt : Start
6a5a514a6d.txt : Done
b679419d52.txt : Start
b679419d52.txt : Done
beb8106365.txt : Start
beb8106365.txt : Done
56b5faeff6.txt : Start
56b5faeff6.txt : Done
f4e750afc4.txt : Start
f4e750afc4.txt : Done
13880701f6.txt : Start
13880701f6.txt : Done
28c6c56435.txt : Start
28c6c56435.txt : Done
318852640c.txt : Start
318852640c.txt : Done
062719aca5.txt : Start
062719aca5.txt : Done
0e46adf00f.txt : Start
0e46adf00f.txt : Done
6507087bb8.txt : Start
6507087bb8.txt : Done
f72f737ba9.txt : Start
f72f737ba9.txt : Done
ad1b4fddea.txt : Start
ad1b4fddea.txt : Done
2c8100c054.txt : Start
2c8100c054.txt : Done
a21f6dd6e2.txt : Start
a21f6dd6e2.txt : Done
c98558432b.txt : Start
c98558432b.txt : Done
25594d754c.txt : Start
25594d754c.txt : Done
f378d7a627.txt : Start
f378d7a627.txt : Done
00de2ed323.txt : Start
00de2ed323.txt : Done
c548857fc6.txt : Start
c548857fc6.txt : Done
fda6960842.txt : Start
fda6960842.txt : Done
3dbfdeb28e.txt : Start
3dbfdeb28e.txt : Done
667b92c747.txt : Start
667b92c747.txt : Done
2f45fbeb96.txt : Start
2f45fbeb96.txt : Done
ea8ade1ec9.txt : Start
ea8ade1ec9.txt : Done
2500693c8c.txt : Start
2500693c8c.txt : Done
b3ec5aec10.txt : Start
b3ec5aec10.txt : Done
c7c60ec498.txt : Start
c7c60ec498.txt : Done
2639b3f232.txt : Start
2639b3f232.txt : Done
05cebd07f6.txt : Start
05cebd07f6.txt : Done
2c70d7a211.txt : Start
2c70d7a211.txt : Done
c482ae0d6a.txt : Start
c482ae0d6a.txt : Done
c8b2e1ea64.txt : Start
c8b2e1ea64.txt : Done
cc6023fd33.txt : Start
cc6023fd33.txt : Done
66dcfdc952.txt : Start
66dcfdc952.txt : Done
db3997fa66.txt : Start
db3997fa66.txt : Done
5cc73e5eb8.txt : Start
5cc73e5eb8.txt : Done
e2c63447a3.txt : Start
e2c63447a3.txt : Done
bf9981f1c7.txt : Start
bf9981f1c7.txt : Done
f9c1d63857.txt : Start
f9c1d63857.txt : Done
f5ad27d7c0.txt : Start
f5ad27d7c0.txt : Done
9c6cf67aa0.txt : Start
9c6cf67aa0.txt : Done
2a6ed256ac.txt : Start
2a6ed256ac.txt : Done
a0bc734be1.txt : Start
a0bc734be1.txt : Done
84aa61e2cd.txt : Start
84aa61e2cd.txt : Done
94a849a3dd.txt : Start
94a849a3dd.txt : Done
d17d48de9f.txt : Start
d17d48de9f.txt : Done
441b6dd9fb.txt : Start
441b6dd9fb.txt : Done
81ef81f563.txt : Start
81ef81f563.txt : Done
d5be4d3e85.txt : Start
d5be4d3e85.txt : Done
a968ac3598.txt : Start
a968ac3598.txt : Done
bd56123a22.txt : Start
bd56123a22.txt : Done
f93308201d.txt : Start
f93308201d.txt : Done
0b8e6baade.txt : Start
0b8e6baade.txt : Done
5ef2ba0d6f.txt : Start
5ef2ba0d6f.txt : Done
f07322d8df.txt : Start
f07322d8df.txt : Done
ef44110d87.txt : Start
ef44110d87.txt : Done
cf19743995.txt : Start
cf19743995.txt : Done
c073cfa358.txt : Start
c073cfa358.txt : Done
5f9c4f1f1f.txt : Start
5f9c4f1f1f.txt : Done
4de1c37ee8.txt : Start
4de1c37ee8.txt : Done
694551449e.txt : Start
694551449e.txt : Done
4adf02d48f.txt : Start
4adf02d48f.txt : Done
75ed4241e1.txt : Start
75ed4241e1.txt : Done
e73d5574d3.txt : Start
e73d5574d3.txt : Done
7e75ecd1e8.txt : Start
7e75ecd1e8.txt : Done
de31d88f0f.txt : Start
de31d88f0f.txt : Done
a7b7f0cf8b.txt : Start
a7b7f0cf8b.txt : Done
385444771f.txt : Start
385444771f.txt : Done
55022ab079.txt : Start
55022ab079.txt : Done
849689b4a1.txt : Start
849689b4a1.txt : Done
b278eed9ba.txt : Start
b278eed9ba.txt : Done
9e3e6ecdc1.txt : Start
9e3e6ecdc1.txt : Done
e37b2c1048.txt : Start
e37b2c1048.txt : Done
b366762650.txt : Start
b366762650.txt : Done
3c25273538.txt : Start
3c25273538.txt : Done
00c24abbbd.txt : Start
00c24abbbd.txt : Done
a6320d9006.txt : Start
a6320d9006.txt : Done
56a7a9450b.txt : Start
56a7a9450b.txt : Done
73f0b14dc0.txt : Start
73f0b14dc0.txt : Done
940cb1ea4b.txt : Start
940cb1ea4b.txt : Done
753aefd89c.txt : Start
753aefd89c.txt : Done
b56d0efe5f.txt : Start
b56d0efe5f.txt : Done
a6575b6354.txt : Start
a6575b6354.txt : Done
ff15e2aa90.txt : Start
ff15e2aa90.txt : Done
4aeb967bdb.txt : Start
4aeb967bdb.txt : Done
e8e3f5c3da.txt : Start
e8e3f5c3da.txt : Done
84fd5c6c82.txt : Start
84fd5c6c82.txt : Done
ba21aab5a7.txt : Start
ba21aab5a7.txt : Done
0eb135a63b.txt : Start
0eb135a63b.txt : Done
01f4ec6a93.txt : Start
01f4ec6a93.txt : Done
c96f15eb18.txt : Start
c96f15eb18.txt : Done
d36c2f7f4a.txt : Start
d36c2f7f4a.txt : Done
474efbd959.txt : Start
474efbd959.txt : Done
191dd3cd6e.txt : Start
191dd3cd6e.txt : Done
586213807b.txt : Start
586213807b.txt : Done
abc07266f1.txt : Start
abc07266f1.txt : Done
4dc74ef251.txt : Start
4dc74ef251.txt : Done
4c0f76583e.txt : Start
4c0f76583e.txt : Done
dafc4b7fbb.txt : Start
dafc4b7fbb.txt : Done
6123ccc4f8.txt : Start
6123ccc4f8.txt : Done
b4ecf8ff62.txt : Start
b4ecf8ff62.txt : Done
b1a1fbb48b.txt : Start
b1a1fbb48b.txt : Done
436afdfd4e.txt : Start
436afdfd4e.txt : Done
5edd73f58b.txt : Start
5edd73f58b.txt : Done
e495483bdd.txt : Start
e495483bdd.txt : Done

Query the ChromaDB collection

In [114]:
def query_collection(query, n_results=3):
    query = 'query: ' + query
    query_embedding = embed_model.encode(query, normalize_embeddings=True)
    query_embedding = query_embedding.tolist()
    results = collection.query(
        query_embeddings=[query_embedding],
        n_results=n_results,
    )
    return results
In [401]:
query = "Comment la Caisse d'Epargne Rhône-Alpes peut-elle aider une entreprise qui rencontre des problèmes de trésorerie ?"
query_results = query_collection(query)

LLM model

In [9]:
llm = Llama(model_path='/Users/peportier/llm/a/a/zephyr-7b-beta.Q5_K_M.gguf', 
            n_gpu_layers=1, use_mlock=True, n_ctx=4096)

system_prompt = """\
Vous fournissez avec soin des réponses précises, factuelles, réfléchies et nuancées, et vous êtes doué pour le raisonnement. \
Si vous pensez qu'il n'y a peut-être pas de bonne réponse, vous le dites. \
Ne soyez pas verbeux dans vos réponses, mais donnez des détails et des exemples lorsque cela peut aider à l'explication. \
Vous rédigez vos réponses en français. \
"""

def format_prompt(question):
    prompt = ""
    prompt = f"<|system|>\n {system_prompt.strip()} </s>\n"
    prompt += f"<|user|>\n {question} </s>\n"
    prompt += f"<|assistant|>\n"
    return prompt

def answer(question):
    response = llm(prompt = question,
        temperature = 0.1,
        mirostat_mode = 2,
        max_tokens = -1,
        stop = ['</s>'])
    return response["choices"][0]["text"]
llama_model_loader: loaded meta data with 21 key-value pairs and 291 tensors from /Users/peportier/llm/a/a/zephyr-7b-beta.Q5_K_M.gguf (version GGUF V3 (latest))
llama_model_loader: - tensor    0:                token_embd.weight q5_K     [  4096, 32000,     1,     1 ]
llama_model_loader: - tensor    1:           blk.0.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor    2:            blk.0.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor    3:            blk.0.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor    4:              blk.0.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor    5:            blk.0.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor    6:              blk.0.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor    7:         blk.0.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor    8:              blk.0.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor    9:              blk.0.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   10:           blk.1.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   11:            blk.1.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor   12:            blk.1.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   13:              blk.1.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   14:            blk.1.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   15:              blk.1.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   16:         blk.1.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   17:              blk.1.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   18:              blk.1.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   19:           blk.2.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   20:            blk.2.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor   21:            blk.2.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   22:              blk.2.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   23:            blk.2.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   24:              blk.2.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   25:         blk.2.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   26:              blk.2.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   27:              blk.2.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   28:            blk.3.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   29:              blk.3.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   30:              blk.3.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   31:         blk.3.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   32:              blk.3.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   33:              blk.3.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   34:           blk.3.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   35:            blk.3.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor   36:            blk.3.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   37:           blk.4.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   38:            blk.4.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor   39:            blk.4.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   40:              blk.4.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   41:            blk.4.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   42:              blk.4.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   43:         blk.4.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   44:              blk.4.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   45:              blk.4.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   46:           blk.5.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   47:            blk.5.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor   48:            blk.5.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   49:              blk.5.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   50:            blk.5.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   51:              blk.5.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   52:         blk.5.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   53:              blk.5.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   54:              blk.5.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   55:           blk.6.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   56:            blk.6.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor   57:            blk.6.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   58:              blk.6.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   59:            blk.6.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   60:              blk.6.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   61:         blk.6.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   62:              blk.6.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   63:              blk.6.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   64:           blk.7.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   65:            blk.7.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor   66:            blk.7.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   67:              blk.7.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   68:            blk.7.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   69:              blk.7.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   70:         blk.7.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   71:              blk.7.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   72:              blk.7.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   73:              blk.8.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   74:         blk.8.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   75:              blk.8.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   76:              blk.8.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   77:          blk.10.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   78:           blk.10.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor   79:           blk.10.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   80:             blk.10.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   81:           blk.10.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   82:             blk.10.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   83:        blk.10.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   84:             blk.10.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   85:             blk.10.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   86:          blk.11.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   87:           blk.11.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor   88:           blk.11.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   89:             blk.11.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   90:           blk.11.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor   91:             blk.11.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   92:        blk.11.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   93:             blk.11.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   94:             blk.11.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   95:           blk.12.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   96:             blk.12.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor   97:             blk.12.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor   98:        blk.12.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor   99:             blk.12.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  100:             blk.12.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  101:           blk.8.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  102:            blk.8.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  103:            blk.8.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  104:              blk.8.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  105:            blk.8.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  106:           blk.9.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  107:            blk.9.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  108:            blk.9.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  109:              blk.9.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  110:            blk.9.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  111:              blk.9.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  112:         blk.9.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  113:              blk.9.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  114:              blk.9.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  115:          blk.12.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  116:           blk.12.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  117:           blk.12.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  118:          blk.13.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  119:           blk.13.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  120:           blk.13.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  121:             blk.13.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  122:           blk.13.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  123:             blk.13.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  124:        blk.13.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  125:             blk.13.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  126:             blk.13.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  127:          blk.14.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  128:           blk.14.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  129:           blk.14.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  130:             blk.14.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  131:           blk.14.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  132:             blk.14.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  133:        blk.14.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  134:             blk.14.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  135:             blk.14.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  136:          blk.15.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  137:           blk.15.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  138:           blk.15.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  139:             blk.15.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  140:           blk.15.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  141:             blk.15.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  142:        blk.15.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  143:             blk.15.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  144:             blk.15.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  145:          blk.16.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  146:           blk.16.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  147:           blk.16.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  148:             blk.16.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  149:           blk.16.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  150:             blk.16.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  151:        blk.16.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  152:             blk.16.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  153:             blk.16.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  154:             blk.17.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  155:        blk.17.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  156:             blk.17.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  157:             blk.17.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  158:          blk.17.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  159:           blk.17.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  160:           blk.17.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  161:             blk.17.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  162:           blk.17.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  163:          blk.18.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  164:           blk.18.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  165:           blk.18.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  166:             blk.18.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  167:           blk.18.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  168:             blk.18.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  169:        blk.18.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  170:             blk.18.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  171:             blk.18.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  172:          blk.19.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  173:           blk.19.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  174:           blk.19.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  175:             blk.19.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  176:           blk.19.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  177:             blk.19.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  178:        blk.19.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  179:             blk.19.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  180:             blk.19.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  181:          blk.20.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  182:           blk.20.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  183:           blk.20.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  184:             blk.20.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  185:           blk.20.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  186:             blk.20.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  187:        blk.20.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  188:             blk.20.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  189:             blk.20.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  190:           blk.21.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  191:             blk.21.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  192:             blk.21.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  193:        blk.21.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  194:             blk.21.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  195:             blk.21.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  196:          blk.21.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  197:           blk.21.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  198:           blk.21.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  199:          blk.22.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  200:           blk.22.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  201:           blk.22.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  202:             blk.22.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  203:           blk.22.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  204:             blk.22.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  205:        blk.22.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  206:             blk.22.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  207:             blk.22.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  208:          blk.23.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  209:           blk.23.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  210:           blk.23.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  211:             blk.23.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  212:           blk.23.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  213:             blk.23.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  214:        blk.23.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  215:             blk.23.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  216:             blk.23.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  217:          blk.24.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  218:           blk.24.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  219:           blk.24.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  220:             blk.24.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  221:           blk.24.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  222:             blk.24.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  223:        blk.24.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  224:             blk.24.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  225:             blk.24.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  226:          blk.25.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  227:           blk.25.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  228:           blk.25.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  229:             blk.25.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  230:           blk.25.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  231:             blk.25.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  232:        blk.25.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  233:             blk.25.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  234:             blk.25.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  235:             blk.26.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  236:        blk.26.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  237:             blk.26.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  238:             blk.26.attn_v.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  239:          blk.26.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  240:           blk.26.ffn_down.weight q5_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  241:           blk.26.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  242:             blk.26.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  243:           blk.26.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  244:          blk.27.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  245:           blk.27.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  246:           blk.27.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  247:             blk.27.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  248:           blk.27.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  249:             blk.27.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  250:        blk.27.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  251:             blk.27.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  252:             blk.27.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  253:          blk.28.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  254:           blk.28.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  255:           blk.28.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  256:             blk.28.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  257:           blk.28.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  258:             blk.28.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  259:        blk.28.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  260:             blk.28.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  261:             blk.28.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  262:          blk.29.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  263:           blk.29.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  264:           blk.29.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  265:             blk.29.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  266:           blk.29.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  267:             blk.29.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  268:        blk.29.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  269:             blk.29.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  270:             blk.29.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  271:           blk.30.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  272:             blk.30.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  273:             blk.30.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  274:        blk.30.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  275:             blk.30.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  276:             blk.30.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  277:                    output.weight q6_K     [  4096, 32000,     1,     1 ]
llama_model_loader: - tensor  278:          blk.30.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  279:           blk.30.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  280:           blk.30.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  281:          blk.31.attn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  282:           blk.31.ffn_down.weight q6_K     [ 14336,  4096,     1,     1 ]
llama_model_loader: - tensor  283:           blk.31.ffn_gate.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  284:             blk.31.ffn_up.weight q5_K     [  4096, 14336,     1,     1 ]
llama_model_loader: - tensor  285:           blk.31.ffn_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - tensor  286:             blk.31.attn_k.weight q5_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  287:        blk.31.attn_output.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  288:             blk.31.attn_q.weight q5_K     [  4096,  4096,     1,     1 ]
llama_model_loader: - tensor  289:             blk.31.attn_v.weight q6_K     [  4096,  1024,     1,     1 ]
llama_model_loader: - tensor  290:               output_norm.weight f32      [  4096,     1,     1,     1 ]
llama_model_loader: - kv   0:                       general.architecture str              = llama
llama_model_loader: - kv   1:                               general.name str              = huggingfaceh4_zephyr-7b-beta
llama_model_loader: - kv   2:                       llama.context_length u32              = 32768
llama_model_loader: - kv   3:                     llama.embedding_length u32              = 4096
llama_model_loader: - kv   4:                          llama.block_count u32              = 32
llama_model_loader: - kv   5:                  llama.feed_forward_length u32              = 14336
llama_model_loader: - kv   6:                 llama.rope.dimension_count u32              = 128
llama_model_loader: - kv   7:                 llama.attention.head_count u32              = 32
llama_model_loader: - kv   8:              llama.attention.head_count_kv u32              = 8
llama_model_loader: - kv   9:     llama.attention.layer_norm_rms_epsilon f32              = 0.000010
llama_model_loader: - kv  10:                       llama.rope.freq_base f32              = 10000.000000
llama_model_loader: - kv  11:                          general.file_type u32              = 17
llama_model_loader: - kv  12:                       tokenizer.ggml.model str              = llama
llama_model_loader: - kv  13:                      tokenizer.ggml.tokens arr[str,32000]   = ["<unk>", "<s>", "</s>", "<0x00>", "<...
llama_model_loader: - kv  14:                      tokenizer.ggml.scores arr[f32,32000]   = [0.000000, 0.000000, 0.000000, 0.0000...
llama_model_loader: - kv  15:                  tokenizer.ggml.token_type arr[i32,32000]   = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...
llama_model_loader: - kv  16:                tokenizer.ggml.bos_token_id u32              = 1
llama_model_loader: - kv  17:                tokenizer.ggml.eos_token_id u32              = 2
llama_model_loader: - kv  18:            tokenizer.ggml.unknown_token_id u32              = 0
llama_model_loader: - kv  19:            tokenizer.ggml.padding_token_id u32              = 2
llama_model_loader: - kv  20:               general.quantization_version u32              = 2
llama_model_loader: - type  f32:   65 tensors
llama_model_loader: - type q5_K:  193 tensors
llama_model_loader: - type q6_K:   33 tensors
llm_load_vocab: special tokens definition check successful ( 259/32000 ).
llm_load_print_meta: format           = GGUF V3 (latest)
llm_load_print_meta: arch             = llama
llm_load_print_meta: vocab type       = SPM
llm_load_print_meta: n_vocab          = 32000
llm_load_print_meta: n_merges         = 0
llm_load_print_meta: n_ctx_train      = 32768
llm_load_print_meta: n_embd           = 4096
llm_load_print_meta: n_head           = 32
llm_load_print_meta: n_head_kv        = 8
llm_load_print_meta: n_layer          = 32
llm_load_print_meta: n_rot            = 128
llm_load_print_meta: n_gqa            = 4
llm_load_print_meta: f_norm_eps       = 0.0e+00
llm_load_print_meta: f_norm_rms_eps   = 1.0e-05
llm_load_print_meta: f_clamp_kqv      = 0.0e+00
llm_load_print_meta: f_max_alibi_bias = 0.0e+00
llm_load_print_meta: n_ff             = 14336
llm_load_print_meta: rope scaling     = linear
llm_load_print_meta: freq_base_train  = 10000.0
llm_load_print_meta: freq_scale_train = 1
llm_load_print_meta: n_yarn_orig_ctx  = 32768
llm_load_print_meta: rope_finetuned   = unknown
llm_load_print_meta: model type       = 7B
llm_load_print_meta: model ftype      = mostly Q5_K - Medium
llm_load_print_meta: model params     = 7.24 B
llm_load_print_meta: model size       = 4.78 GiB (5.67 BPW) 
llm_load_print_meta: general.name   = huggingfaceh4_zephyr-7b-beta
llm_load_print_meta: BOS token = 1 '<s>'
llm_load_print_meta: EOS token = 2 '</s>'
llm_load_print_meta: UNK token = 0 '<unk>'
llm_load_print_meta: PAD token = 2 '</s>'
llm_load_print_meta: LF token  = 13 '<0x0A>'
llm_load_tensors: ggml ctx size =    0.11 MiB
llm_load_tensors: mem required  = 4893.10 MiB
...................................................................................................
llama_new_context_with_model: n_ctx      = 4096
llama_new_context_with_model: freq_base  = 10000.0
llama_new_context_with_model: freq_scale = 1
llama_new_context_with_model: kv self size  =  512.00 MiB
llama_build_graph: non-view tensors processed: 740/740
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M2 Max
ggml_metal_init: picking default device: Apple M2 Max
ggml_metal_init: default.metallib not found, loading from source
ggml_metal_init: loading '/Users/peportier/miniforge3/envs/RAG_ENV/lib/python3.9/site-packages/llama_cpp/ggml-metal.metal'
ggml_metal_init: GPU name:   Apple M2 Max
ggml_metal_init: GPU family: MTLGPUFamilyApple8 (1008)
ggml_metal_init: hasUnifiedMemory              = true
ggml_metal_init: recommendedMaxWorkingSetSize  = 49152.00 MiB
ggml_metal_init: maxTransferRate               = built-in GPU
llama_new_context_with_model: compute buffer total size = 291.07 MiB
llama_new_context_with_model: max tensor size =   102.54 MiB
ggml_metal_add_buffer: allocated 'data            ' buffer, size =  4893.70 MiB, (10588.06 / 49152.00)
ggml_metal_add_buffer: allocated 'kv              ' buffer, size =   512.02 MiB, (11100.08 / 49152.00)
ggml_metal_add_buffer: allocated 'alloc           ' buffer, size =   288.02 MiB, (11388.09 / 49152.00)
AVX = 0 | AVX2 = 0 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | SSSE3 = 0 | VSX = 0 | 
ggml_metal_free: deallocating

Test LLM model

In [11]:
print(answer(format_prompt("Quels sont les philosophes les plus influencés par Hegel ?")))
Le philosophe allemand Georg Wilhelm Friedrich Hegel (1770-1831) a exercé une influence considérable sur la philosophie moderne, particulièrement dans le domaine de l'idéalisme et du marxisme. Voici quelques philosophes qui ont été fortement influencés par Hegel :

1. Karl Marx (1818-1883) : Le fondateur du marxisme a été profondément inspiré par la philosophie de Hegel, en particulier son concept d'histoire comme processus dialectique. Marx a critiqué et développé l'idée hégélienne de la dialectique pour expliquer le fonctionnement de la société et les lois de l'évolution historique.

2. Friedrich Engels (1820-1895) : Le collaborateur de Marx a également été influencé par Hegel, en particulier son concept d'histoire comme processus dialectique. Engels a développé cette idée dans son ouvrage "L'origine de la famille, de la propriété privée et de l'État" (1884), où il explique comment les relations sociales ont évolué en fonction des conditions historiques.

3. G.W.F. Hegel lui-même : Certains philosophes ont été influencés par Hegel à tel point qu'ils ont développé leur propre philosophie dans le cadre de l'hégélianisme, une école de pensée qui a été dominante en Allemagne au XIXe siècle. Parmi ces philosophes, on peut citer Arthur Schopenhauer (1788-1860), qui a critiqué et modifié les idées hégéliennes pour développer sa propre philosophie de l'art et du pessimisme, ainsi que Ludwig Feuerbach (1804-1872), qui a développé une critique de la religion et de la philosophie hégélienne.

4. Jean-Paul Sartre (1905-1980) : Le philosophe existentialiste français a été influencé par Hegel dans son travail sur l'histoire et la dialectique, en particulier dans son ouvrage "L'existentialisme est un humanisme" (1946), où il développe une vision de l'histoire comme processus dialectique. Sartre a également critiqué les idées hégéliennes sur le sujet et la conscience, en particulier dans son ouvrage "L'être et le néant" (1943).

5. Slavoj Žižek (né en 1949) : Le philosophe slovène a été influencé par Hegel dans son travail sur la psychanalyse, la politique et la culture populaire, en particulier dans son ouvrage "Le Sublime Object de l'Idée" (1981), où il développe une vision dialectique de la culture populaire. Žižek a également critiqué les idées hégéliennes sur le sujet et la conscience, en particulier dans son ouvrage "Le Pouvoir politique et la Formation du Sujet" (1976).

Ces philosophes ont été influencés par Hegel dans des domaines variés de la philosophie moderne, mais ils ont tous reconnu l'importance de ses idées sur l'histoire, la dialectique et le sujet.
llama_print_timings:        load time =     575.42 ms
llama_print_timings:      sample time =    2695.33 ms /   804 runs   (    3.35 ms per token,   298.29 tokens per second)
llama_print_timings: prompt eval time =     574.33 ms /   165 tokens (    3.48 ms per token,   287.29 tokens per second)
llama_print_timings:        eval time =   22009.23 ms /   803 runs   (   27.41 ms per token,    36.48 tokens per second)
llama_print_timings:       total time =   24988.34 ms

RAG prompt

In [402]:
def format_passages(query_results):
    result = []
    for i in range(len(query_results["documents"][0])):
        passage = query_results["documents"][0][i]
        url = query_results["metadatas"][0][i]["url"]
        category = query_results["metadatas"][0][i]["category"]
        lines = passage.split('\n')
        if lines[0].startswith('passage: '):
            lines[0] = lines[0].replace('passage: ', '')
        lines.insert(0, "###")
        lines.insert(1, f"Passage {i+1}")
        lines.insert(2, "Titre :")
        lines.insert(4, "")
        lines.insert(5, "Catégorie :")
        lines.insert(6, category)
        lines.insert(7, "")
        lines.insert(8, "URL :")
        lines.insert(9, url)
        lines.insert(10, "")
        lines.insert(11, "Contenu : ")
        lines += ['']
        result += lines
    result = '\n'.join(result)
    return result
        
In [417]:
rag_system_prompt = """
Vous êtes un assistant IA qui répond à la question posée par l'utilisateur en utilisant un contexte répertorié ci-dessous dans la rubrique Contexte.
Le contexte est formé de passages exraits du site web commercial de la Caisse d'Epargne Rhône-Alpes, une banque française régionale.
Votre réponse ne doit pas mentionner des informations déjà présentes dans l'historique de la conversation qui est répertorié ci-dessous dans la rubrique Historique.
Vous fournissez avec soin des réponses précises, factuelles, réfléchies et nuancées, et vous êtes doué pour le raisonnement.
Toutes les informations factuelles que vous utilisez pour répondre proviennent exclusivement du contexte.
Si vous ne pouvez pas répondre à la question sur la base des éléments du contexte, dites simplement que vous ne savez pas, n'essayez pas d'inventer une réponse.
Vos réponses doivent être brèves.
Vous rédigez vos réponses en français au format markdown sous forme d'une liste d'au plus 7 éléments.
Voici le format que doit prendre votre réponse :
```
1. Elément de réponse. (Passage 1)
2. Elément de réponse. (Passage 1)
3. Elément de réponse. (Passage 2)
4. ...
```

----------------------------------------
Historique :
{history}
----------------------------------------
Contexte :
{context}
"""

def format_rag_prompt(query, context="", history=""):
    global chat_history
    
    user_query = f"Question de l'utilisateur : \n{query}\n\n"
    assistant_answer = f"Réponse de l'assistant : \n 1. "
    chat_history.append({'user': user_query, 'assistant': assistant_answer})

    system_prompt = rag_system_prompt.format(history=history, context=context)
    
    prompt = ""
    prompt = f"<|system|>\n{system_prompt.strip()} \n</s>\n"
    prompt += f"<|user|>\n{query} \n</s>\n"
    prompt += f"<|assistant|>\n Voici des éléments de réponse : \n 1. "
    
    return prompt
In [418]:
def answer_rag_prompt(query, query_results):
    global chat_history
    
    query_context = format_passages(query_results)

    history = ""
    for i in reversed(range(len(chat_history))):
        history += chat_history[i]["user"]
        history += chat_history[i]["assistant"]
        history += "\n\n"
    
    prompt = format_rag_prompt(query, query_context, history)
    
    ans = answer(prompt)
    chat_history[-1]['assistant'] += ans
    ans = '1. ' + ans
    
    return ans
In [419]:
chat_history = []
In [420]:
ans = answer_rag_prompt(query, query_results)
Llama.generate: prefix-match hit

llama_print_timings:        load time =     575.42 ms
llama_print_timings:      sample time =    7686.78 ms /  2270 runs   (    3.39 ms per token,   295.31 tokens per second)
llama_print_timings: prompt eval time =    4638.92 ms /  1729 tokens (    2.68 ms per token,   372.72 tokens per second)
llama_print_timings:        eval time =   80992.02 ms /  2269 runs   (   35.70 ms per token,    28.02 tokens per second)
llama_print_timings:       total time =   93681.23 ms
In [421]:
display(Markdown(ans))
<IPython.core.display.Markdown object>
In [221]:
# len(llm.tokenize(format_rag_prompt_init(query, query_results).encode(encoding='utf-8')))
Out [221]:
1889
In [422]:
# reformulate query

query_reformulate_system_prompt = """\
Vous êtes un interprète conversationnel pour une conversation entre un utilisateur et \
un assistant IA spécialiste des produits et services de la Caisse d'Epargne Rhône-Alpes, \
une banque régionale française. \n \
L'utilisateur vous posera une question sans contexte. \
Vous devez reformuler la question pour prendre en compte le contexte de la conversation. \n \
Vous devez supposer que la question est liée aux produits et services de la Caisse d'Epargne Rhône-Alpes. \n \
Vous devez également consulter l'historique de la conversation ci-dessous lorsque vous reformulez la question. \
Par exemple, vous remplacerez les pronoms par les noms les plus probables dans l'historique de la conversation. \n \
Lorsque vous reformulez la question, accordez plus d'importance à la dernière question et \
à la dernière réponse dans l'historique des conversations. \n \
L'historique des conversations est présenté dans l'ordre chronologique inverse, \
de sorte que l'échange le plus récent se trouve en haut de la page. \n \
Répondez en seulement une phrase avec la question reformulée. \n\n \
\
Historique de la conversation : \n\n \
"""

def format_prompt_reformulate_query(query):

    system_prompt = query_reformulate_system_prompt

    for i in reversed(range(len(chat_history))):
        system_prompt += chat_history[i]["user"]
        system_prompt += chat_history[i]["assistant"]
    
    prompt = ""
    prompt = f"<|system|>\n{system_prompt.strip()} \n</s>\n"
    prompt += f"<|user|>\nPeux-tu reformuler la question suivante : \n \"{query}\" \n</s>\n"
    prompt += f"<|assistant|> Question reformulée : \n\""
    
    return prompt
In [423]:
query2 = "Peux-tu m'en dire plus au sujet de l'affacturage ?"
# print(format_prompt_reformulate_query(query2))
In [424]:
def answer_reformulate_query(query):
    
    prompt = format_prompt_reformulate_query(query)
    
    ans = answer(prompt)

    if ans.endswith('"'):
        ans = ans[:-1]
    
    return ans
In [425]:
query2_reformulated = answer_reformulate_query(query2)
Llama.generate: prefix-match hit

llama_print_timings:        load time =     575.42 ms
llama_print_timings:      sample time =     194.11 ms /    57 runs   (    3.41 ms per token,   293.65 tokens per second)
llama_print_timings: prompt eval time =    2261.49 ms /   923 tokens (    2.45 ms per token,   408.14 tokens per second)
llama_print_timings:        eval time =    1376.69 ms /    56 runs   (   24.58 ms per token,    40.68 tokens per second)
llama_print_timings:       total time =    3800.97 ms
In [426]:
query2_results = query_collection(query2_reformulated)
In [413]:
# TEST

query2_context = format_passages(query2_results)

history = ""
for i in reversed(range(len(chat_history))):
    history += chat_history[i]["user"]
    history += chat_history[i]["assistant"]
    history += "\n-----\n"

prompt = format_rag_prompt(query2_reformulated, query2_context, history)
In [414]:
print(prompt)
<|system|>
Vous êtes un assistant IA qui répond à la question posée par l'utilisateur en utilisant un contexte répertorié ci-dessous dans la rubrique Contexte.
Le contexte est formé de passages exraits du site web commercial de la Caisse d'Epargne Rhône-Alpes, une banque française régionale.
Pour répondre, tenez également compte de l'historique de la conversation qui est répertorié ci-dessous dans la rubrique Historique.
Votre réponse ne doit pas introduire des informations déjà présentes dans l'historique.
Vous recevez une pénalité de $100 à chaque fois que votre réponse répète une information déjà présente dans l'historique.
Vous fournissez avec soin des réponses précises, factuelles, réfléchies et nuancées, et vous êtes doué pour le raisonnement.
Toutes les informations factuelles que vous utilisez pour répondre proviennent exclusivement du contexte.
Si vous ne pouvez pas répondre à la question sur la base des éléments du contexte, dites simplement que vous ne savez pas, n'essayez pas d'inventer une réponse.
Vos réponses doivent être brèves.
Vous rédigez vos réponses en français au format markdown sous forme d'une liste.
Voici le format que doit prendre votre réponse :
```
1. Elément de réponse. (Passage 1)
2. Elément de réponse. (Passage 1)
3. Elément de réponse. (Passage 2)
4. ...
```

----------------------------------------
Historique :
Question de l'utilisateur : 
Comment la Caisse d'Epargne Rhône-Alpes peut-elle aider une entreprise qui rencontre des problèmes de trésorerie ?

Réponse de l'assistant : 
 1.  La Caisse d'Epargne Rhône Alpes propose un ensemble de solutions pour optimiser votre trésorerie sans attendre le règlement de vos factures clients, appelé l'affacturage. (Passage 1)
  2. Vous pouvez également accéder à leur simulateur et obtenir une préconisation sur le mode de financement le plus adapté à votre usage ainsi que de nombreuses informations sur la fiscalité automobile. (Passage 1)
  3. À taux fixe ou variable, les prêts classiques vous accompagnent dans le développement de votre entreprise. (Passage 1)
  4. De plus, avec l'affacturage, vous pouvez optimiser votre trésorerie sans attendre le règlement de vos factures clients. (Passage 1)
  5. La Caisse d'Epargne Rhône Alpes vous propose également un financement adapté pour votre projet de création, de reprise ou dinvestissement (acquisition de nouveaux locaux, renouvellement de vos équipements, ...) grâce à des offres et des conseils pour vous accompagner dans le financement de vos projets. (Passage 1)
  6. Enfin, la Caisse d'Epargne Rhône Alpes vous accompagne dans votre transition énergétique avec des offres sur mesure en fonction de vos besoins. (Passage 1)

 Les éléments ci-dessus montrent que la Caisse d'Epargne Rhône Alpes propose plusieurs solutions pour optimiser votre trésorerie et vous aider dans le financement de vos projets, ce qui peut être utile pour une entreprise qui rencontre des problèmes de trésorerie.
-----

----------------------------------------
Contexte :
###
Passage 1
Titre :
Financer vos projets & optimiser votre trésorerie

Catégorie :
professionnels

URL :
https://www.caisse-epargne.fr/rhone-alpes/professionnels/financer-projets-optimiser-tresorerie/

Contenu : 
Vous avez un projet de création, de reprise ou dinvestissement (acquisition de nouveaux locaux, renouvellement de vos équipements, ...) ou vous souhaitez assouplir votre trésorerie ? La Caisse dEpargne Rhône Alpes vous propose un ensemble de solutions pour un financement adapté.
À taux fixe ou variable,  les prêts classiques vous accompagnent dans le développement de votre entreprise.
Accédez à notre simulateur et obtenez une préconisation sur le mode de financement le plus adapté à votre usage ainsi que de nombreuses informations sur la fiscalité automobile.
Avec laffacturage, optimisez votre trésorerie sans attendre le règlement de vos factures clients.
Vous souhaitez
Financer votre projet
Découvrez un ensemble doffres et de conseils pour vous accompagner dans le financement de vos projets de création, reprise ou développement de votre activité professionnelle.
Prêt Décollage Pro
Un soutien financier complémentaire aux porteurs de projets accompagnés.
Crédit-Bail Mobilier
Une solution pour financer votre équipement à 100% sans immobiliser vos capitaux.
Financer votre transition énergétique
La Caisse dEpargne vous accompagne dans votre transition énergétique avec des offres sur mesure en fonction de vos besoins.
Acquérir un véhicule professionnel
Gagnez en mobilité et changez rapidement de véhicule grâce aux offres de financement de la Caisse dEpargne.
Location Longue Durée avec MyCarLease
Besoin dune voiture, découvrez le service sur-mesure Location Longue Durée. Des prestations adaptées à vos besoins.
Financement de votre équipement

###
Passage 2
Titre :
Garanties Assurances et Assistance des cartes Visa

Catégorie :
comptes-cartes

URL :
https://www.caisse-epargne.fr/rhone-alpes/comptes-cartes/garanties-assurances-et-assistances-des-cartes-visa/

Contenu : 
Caisse d'Epargne
Rhône Alpes
Prendre rendez-vous en ligne
En agence ou par téléphone à l'horaire de votre choix
Vous êtes déjà client ?
Connectez-vous sur votre espace personnel pour consulter les coordonnées de votre conseiller.

###
Passage 3
Titre :
Formule Famille

Catégorie :
comptes-cartes

URL :
https://www.caisse-epargne.fr/rhone-alpes/comptes-cartes/formule-famille/

Contenu : 
Caisse d'Epargne
Rhône Alpes
Prendre rendez-vous en ligne
En agence ou par téléphone à l'horaire de votre choix
Vous êtes déjà client ?
Connectez-vous sur votre espace personnel pour consulter les coordonnées de votre conseiller. 
</s>
<|user|>
Pouvez-vous me présenter les solutions d'affacturage proposées par la Caisse d'Epargne Rhône Alpes pour optimiser ma trésorerie sans attendre le règlement de mes factures clients? 
</s>
<|assistant|>
 Voici des éléments de réponse : 
 1. 
In [427]:
ans = answer_rag_prompt(query2_reformulated, query2_results)
Llama.generate: prefix-match hit

llama_print_timings:        load time =     575.42 ms
llama_print_timings:      sample time =    1201.36 ms /   353 runs   (    3.40 ms per token,   293.83 tokens per second)
llama_print_timings: prompt eval time =   13189.84 ms /  3730 tokens (    3.54 ms per token,   282.79 tokens per second)
llama_print_timings:        eval time =   13559.00 ms /   352 runs   (   38.52 ms per token,    25.96 tokens per second)
llama_print_timings:       total time =   27777.04 ms
In [428]:
display(Markdown(ans))
<IPython.core.display.Markdown object>

Generate a HTML representation of the tree structure of the webages by categories

Create the tree structure of the tags (i.e., subparts of the URLs)

In [ ]:
tags = {}

txt_folder = 'docs/cera2'

for filename in os.listdir(txt_folder):
    if filename.endswith('.txt'):
        file_path = os.path.join(txt_folder, filename)
        with open(file_path, 'r') as file:
            file_contents = file.read()
            contents_lst = [str.replace('\n',' ').replace('\xa0', ' ') for str in file_contents.split('\n\n')]
            url = contents_lst[0]
            if '?' in url: # URLs with a '?' corresponds to call to services and have no useful content
                continue
            title = contents_lst[1]
            if not title: # when the title is absent (or empty), the page has no interest
                continue
            prefix = 'https://www.caisse-epargne.fr/'
            suffix = url.replace(prefix, '')
            parts = suffix.split('/')
            parts = [part for part in parts if part] # remove empty parts
            dic = tags
            for i, part in enumerate(parts):
                if part in dic:
                    dic[part]['nb'] = dic[part]['nb'] + 1
                else:
                    dic[part] = {'nb': 1, 'sub': {}}
                if i == len(parts)-1: # last part of an url
                    dic[part]['file'] = file_path
                
                dic = dic[part]['sub']

Transform to HTML the tree structure of the tags

In [ ]:
def read_file_content(file_path):
    try:
        with open(file_path, 'r') as file:
            return html.escape(file.read())
    except IOError:
        return "File not found or unable to read."

def dict_to_html(d):
    html = '<ul>'
    for key, value in d.items():
        file_path = value.get('file', '')
        if 'sub' in value and value['sub']:
            html += f'<li>{key} (nb: {value["nb"]})</li>'
            html += dict_to_html(value['sub'])
        else:
            content = read_file_content(file_path) if file_path else ''
            html += f'<li data-file="{file_path}">{key} (nb: {value["nb"]})</li>'
            html += f'<pre class="file-content" style="display: none;">{content}</pre>'
    html += '</ul>'
    return html

Add styling and javascript navigation to the HTML tree of the tags

In [ ]:
def save_html_file(content, filename):
    html_template = f"""
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Website Hierarchy</title>
        <style>
            ul ul {{
                display: none;
            }}
            li {{
                cursor: pointer;
            }}
            .file-content {{
                display: none;
                margin-left: 20px;
                white-space: pre-wrap; /* Ensures formatting of text files is preserved */
            }}
        </style>
    </head>
    <body>
        {content}
        <script>
            document.addEventListener('DOMContentLoaded', (event) => {{
                document.querySelectorAll('li').forEach(item => {{
                    item.addEventListener('click', (e) => {{
                        e.stopPropagation();
                        let nextElement = item.nextElementSibling;
                        if (nextElement && nextElement.tagName === 'UL') {{
                            nextElement.style.display = nextElement.style.display === 'none' ? 'block' : 'none';
                        }}
                    }});
                }});
                document.querySelectorAll('li[data-file]').forEach(item => {{
                    item.addEventListener('click', (e) => {{
                        e.stopPropagation();
                        let nextElement = item.nextElementSibling;
                        if (nextElement && nextElement.tagName === 'PRE') {{
                            nextElement.style.display = nextElement.style.display === 'none' ? 'block' : 'none';
                        }}
                    }});
                }});
            }});
        </script>
    </body>
    </html>
    """
    with open(filename, 'w') as file:
        file.write(html_template)

Generate the HTML representation of the tree of tags

In [ ]:
html_content = dict_to_html(tags)
save_html_file(html_content, 'cera_hierarchy.html')
In [ ]:
query = "query: En tant que professionnel, comment mieux gérer sa trésorerie ?"
query_embedding = embed_model.encode(query, normalize_embeddings=True)
query_embedding = query_embedding.tolist()
collection.query(
    query_embeddings=query_embedding,
    n_results=10,
    where={"category": "professionnels"},
)

Chat interface

Generate an answer taking into account the history of interactions

In [ ]:
history_trace = []
In [ ]:
def generate_text(message, history):
    history_trace = history
    temp = ""
    prompt = f"<|system|>\n{system_prompt}</s>\n"
    for interaction in history:
        prompt += "<|user|>\n"      + str(interaction[0]) + " </s>\n "
        prompt += "<|assistant|>\n" + str(interaction[1]) + " </s>\n"

    prompt += "<|user|>\n" + str(message) + " </s>\n <|assistant|>\n "

    output = llm(
        prompt = prompt,
        temperature=0.1,
        mirostat_mode = 2,
        max_tokens=-1,
        stop=['</s>'],
        stream=True,
    )
    for out in output:
        stream = copy.deepcopy(out)
        temp += stream["choices"][0]["text"]
        yield temp
In [ ]:
prompt = "Connais-tu des répliques dites par Charlie Munger lors des rencontres annuels organisées par Berkshire Hathaway ?"
prompt_encoded = prompt.encode(encoding='utf-8')
len(llm.tokenize(prompt_encoded))

Gradio interface

In [ ]:
demo = gr.ChatInterface(
    generate_text,
    title="CERA",
    description="CERA RAG",
    examples=["Qui sont les philosophes les plus influencés par Hegel ?"],
    cache_examples=False,
    retry_btn=None,
    undo_btn="Delete Previous",
    clear_btn="Clear",
)
demo.queue()
demo.launch()
In [ ]:
In [ ]: