139 KiB
139 KiB
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, displayIn [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(
In [58]:
chroma_client = chromadb.PersistentClient(path="./chromadb")
#chroma_client.delete_collection(name="cera")
collection = chroma_client.get_or_create_collection(name="cera")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)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")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
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 resultsIn [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)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
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
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 promptIn [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 ansIn [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 promptIn [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 ansIn [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 d’investissement (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 d’investissement (acquisition de nouveaux locaux, renouvellement de vos équipements, ...) ou vous souhaitez assouplir votre trésorerie ? La Caisse d’Epargne 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 l’affacturage, optimisez votre trésorerie sans attendre le règlement de vos factures clients. Vous souhaitez Financer votre projet Découvrez un ensemble d’offres 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 d’Epargne 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 d’Epargne. Location Longue Durée avec MyCarLease Besoin d’une 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>
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']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 htmlIn [ ]:
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)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"},
)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 tempIn [ ]:
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))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 [ ]: