From b40b631f272b1b23f918554425e4160cf475d9b4 Mon Sep 17 00:00:00 2001 From: Pierre-Edouard Portier Date: Wed, 3 Jan 2024 08:46:11 +0100 Subject: [PATCH] 20240103 --- .gitignore | 11 + PAD | 65 + rag.ipynb | 997 ++++++++++++ rag_fr.ipynb | 1120 +++++++++++++ rag_fr_2.ipynb | 1209 ++++++++++++++ rag_fr_3.ipynb | 4220 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 7622 insertions(+) create mode 100644 .gitignore create mode 100644 PAD create mode 100644 rag.ipynb create mode 100644 rag_fr.ipynb create mode 100644 rag_fr_2.ipynb create mode 100644 rag_fr_3.ipynb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e47f3a8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +.DS_Store +.ipynb_checkpoints/ +cera_hierarchy.html +chromadb/ +chromadb_copie_20231230/ +docs/ +gradio_cached_examples/ +index/ +index_cera1/ +index_cera2/ +index_cera2_distiluse/ diff --git a/PAD b/PAD new file mode 100644 index 0000000..95f6b74 --- /dev/null +++ b/PAD @@ -0,0 +1,65 @@ +# create llama env for llama-cpp OpenAI compatible webserver + +Xcode must be installed + +(base) > xcode-select -p +/Applications/Xcode.app/Contents/Developer + +— + +Conda with Metal GPU support must be installed + +wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh +bash Miniforge3-MacOSX-arm64.sh + +— + +Create a Python env + +conda create -n llama python=3.9.16 +conda activate llama + +— + +Install the LATEST llama-cpp-python + +pip uninstall llama-cpp-python -y +CMAKE_ARGS="-DLLAMA_METAL=on" +pip install -U llama-cpp-python --no-cache-dir +pip install 'llama-cpp-python[server]' + +— + +Run OpenAI API compatible server + +export MODEL=zephyr-7b-beta.Q5_K_M.gguf +python -m llama_cpp.server --model $MODEL --n_gpu_layers 1 + +# Create Python env for the RAG app + +conda create --name RAG_ENV python=3.9 +pip install ipykernel +python -m ipykernel install --user --name=RAG_ENV + +pip install llama-index + +pip uninstall llama-cpp-python -y +CMAKE_ARGS="-DLLAMA_METAL=on" +pip install -U llama-cpp-python --no-cache-dir +pip install 'llama-cpp-python[server]' + +pip install transformers + +pip install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu + +pip install pypdf + +pip install sentencepiece + +pip install chromadb + +pip install gradio + +pip install langchain + +pip install -U sentence-transformers diff --git a/rag.ipynb b/rag.ipynb new file mode 100644 index 0000000..8ff13b5 --- /dev/null +++ b/rag.ipynb @@ -0,0 +1,997 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 43, + "id": "6503d5b0-6cf3-42d8-982c-353eb42d9d26", + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index import (\n", + " SimpleDirectoryReader,\n", + " VectorStoreIndex,\n", + " ServiceContext,\n", + " set_global_tokenizer,\n", + " load_index_from_storage,\n", + ")\n", + "from llama_index.llms import LlamaCPP\n", + "from llama_index.llms.llama_utils import (\n", + " messages_to_prompt,\n", + " completion_to_prompt,\n", + ")\n", + "from llama_index.vector_stores import ChromaVectorStore\n", + "from llama_index.storage.storage_context import StorageContext\n", + "from llama_index.embeddings import HuggingFaceEmbedding\n", + "from llama_index.query_engine import CitationQueryEngine\n", + "from llama_index.prompts import PromptTemplate\n", + "\n", + "from IPython.display import Markdown, display\n", + "\n", + "from transformers import AutoTokenizer\n", + "\n", + "import os\n", + "\n", + "import chromadb" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "15e2462f-5d5b-4f4b-8119-de782c400d78", + "metadata": {}, + "outputs": [], + "source": [ + "def messages_to_prompt(messages):\n", + " prompt = \"\"\n", + " for message in messages:\n", + " if message.role == 'system':\n", + " prompt += f\"<|system|>\\n{message.content}\\n\"\n", + " elif message.role == 'user':\n", + " prompt += f\"<|user|>\\n{message.content}\\n\"\n", + " elif message.role == 'assistant':\n", + " prompt += f\"<|assistant|>\\n{message.content}\\n\"\n", + "\n", + " # ensure we start with a system prompt, insert blank if needed\n", + " if not prompt.startswith(\"<|system|>\\n\"):\n", + " prompt = \"<|system|>\\n\\n\" + prompt\n", + "\n", + " # add final assistant prompt\n", + " prompt = prompt + \"<|assistant|>\\n\"\n", + "\n", + " return prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "373e13fb-9233-4b0b-8dc3-a1e24117bd76", + "metadata": {}, + "outputs": [], + "source": [ + "def completion_to_prompt(completion, system_prompt=None):\n", + " prompt = \"\"\n", + " system_prompt_str = system_prompt or \"\"\"\\\n", + "You carefully provide accurate, factual, thoughtful, nuanced answers, and are brilliant at reasoning. \\\n", + "If you think there might not be a correct answer, you say so. \\\n", + "Don't be verbose in your answers, but do provide details and examples where it might help the explanation. \\\n", + "\"\"\"\n", + " prompt = f\"<|system|>\\n {system_prompt_str.strip()} \\n\"\n", + " prompt += f\"<|user|>\\n {completion} \\n\"\n", + " prompt += f\"<|assistant|>\\n\"\n", + " return prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "05f54aec-f155-4f4b-9b19-874c13db87cc", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "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))\n", + "llama_model_loader: - tensor 0: token_embd.weight q5_K [ 4096, 32000, 1, 1 ]\n", + "llama_model_loader: - tensor 1: blk.0.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 2: blk.0.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 3: blk.0.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 4: blk.0.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 5: blk.0.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 6: blk.0.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 7: blk.0.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 8: blk.0.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 9: blk.0.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 10: blk.1.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 11: blk.1.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 12: blk.1.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 13: blk.1.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 14: blk.1.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 15: blk.1.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 16: blk.1.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 17: blk.1.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 18: blk.1.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 19: blk.2.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 20: blk.2.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 21: blk.2.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 22: blk.2.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 23: blk.2.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 24: blk.2.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 25: blk.2.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 26: blk.2.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 27: blk.2.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 28: blk.3.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 29: blk.3.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 30: blk.3.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 31: blk.3.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 32: blk.3.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 33: blk.3.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 34: blk.3.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 35: blk.3.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 36: blk.3.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 37: blk.4.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 38: blk.4.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 39: blk.4.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 40: blk.4.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 41: blk.4.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 42: blk.4.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 43: blk.4.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 44: blk.4.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 45: blk.4.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 46: blk.5.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 47: blk.5.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 48: blk.5.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 49: blk.5.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 50: blk.5.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 51: blk.5.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 52: blk.5.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 53: blk.5.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 54: blk.5.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 55: blk.6.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 56: blk.6.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 57: blk.6.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 58: blk.6.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 59: blk.6.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 60: blk.6.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 61: blk.6.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 62: blk.6.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 63: blk.6.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 64: blk.7.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 65: blk.7.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 66: blk.7.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 67: blk.7.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 68: blk.7.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 69: blk.7.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 70: blk.7.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 71: blk.7.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 72: blk.7.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 73: blk.8.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 74: blk.8.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 75: blk.8.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 76: blk.8.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 77: blk.10.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 78: blk.10.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 79: blk.10.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 80: blk.10.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 81: blk.10.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 82: blk.10.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 83: blk.10.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 84: blk.10.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 85: blk.10.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 86: blk.11.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 87: blk.11.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 88: blk.11.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 89: blk.11.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 90: blk.11.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 91: blk.11.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 92: blk.11.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 93: blk.11.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 94: blk.11.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 95: blk.12.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 96: blk.12.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 97: blk.12.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 98: blk.12.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 99: blk.12.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 100: blk.12.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 101: blk.8.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 102: blk.8.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 103: blk.8.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 104: blk.8.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 105: blk.8.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 106: blk.9.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 107: blk.9.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 108: blk.9.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 109: blk.9.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 110: blk.9.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 111: blk.9.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 112: blk.9.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 113: blk.9.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 114: blk.9.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 115: blk.12.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 116: blk.12.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 117: blk.12.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 118: blk.13.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 119: blk.13.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 120: blk.13.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 121: blk.13.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 122: blk.13.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 123: blk.13.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 124: blk.13.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 125: blk.13.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 126: blk.13.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 127: blk.14.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 128: blk.14.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 129: blk.14.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 130: blk.14.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 131: blk.14.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 132: blk.14.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 133: blk.14.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 134: blk.14.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 135: blk.14.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 136: blk.15.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 137: blk.15.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 138: blk.15.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 139: blk.15.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 140: blk.15.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 141: blk.15.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 142: blk.15.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 143: blk.15.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 144: blk.15.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 145: blk.16.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 146: blk.16.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 147: blk.16.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 148: blk.16.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 149: blk.16.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 150: blk.16.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 151: blk.16.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 152: blk.16.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 153: blk.16.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 154: blk.17.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 155: blk.17.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 156: blk.17.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 157: blk.17.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 158: blk.17.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 159: blk.17.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 160: blk.17.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 161: blk.17.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 162: blk.17.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 163: blk.18.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 164: blk.18.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 165: blk.18.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 166: blk.18.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 167: blk.18.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 168: blk.18.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 169: blk.18.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 170: blk.18.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 171: blk.18.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 172: blk.19.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 173: blk.19.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 174: blk.19.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 175: blk.19.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 176: blk.19.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 177: blk.19.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 178: blk.19.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 179: blk.19.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 180: blk.19.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 181: blk.20.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 182: blk.20.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 183: blk.20.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 184: blk.20.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 185: blk.20.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 186: blk.20.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 187: blk.20.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 188: blk.20.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 189: blk.20.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 190: blk.21.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 191: blk.21.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 192: blk.21.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 193: blk.21.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 194: blk.21.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 195: blk.21.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 196: blk.21.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 197: blk.21.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 198: blk.21.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 199: blk.22.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 200: blk.22.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 201: blk.22.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 202: blk.22.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 203: blk.22.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 204: blk.22.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 205: blk.22.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 206: blk.22.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 207: blk.22.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 208: blk.23.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 209: blk.23.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 210: blk.23.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 211: blk.23.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 212: blk.23.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 213: blk.23.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 214: blk.23.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 215: blk.23.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 216: blk.23.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 217: blk.24.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 218: blk.24.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 219: blk.24.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 220: blk.24.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 221: blk.24.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 222: blk.24.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 223: blk.24.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 224: blk.24.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 225: blk.24.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 226: blk.25.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 227: blk.25.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 228: blk.25.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 229: blk.25.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 230: blk.25.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 231: blk.25.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 232: blk.25.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 233: blk.25.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 234: blk.25.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 235: blk.26.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 236: blk.26.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 237: blk.26.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 238: blk.26.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 239: blk.26.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 240: blk.26.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 241: blk.26.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 242: blk.26.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 243: blk.26.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 244: blk.27.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 245: blk.27.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 246: blk.27.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 247: blk.27.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 248: blk.27.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 249: blk.27.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 250: blk.27.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 251: blk.27.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 252: blk.27.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 253: blk.28.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 254: blk.28.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 255: blk.28.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 256: blk.28.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 257: blk.28.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 258: blk.28.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 259: blk.28.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 260: blk.28.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 261: blk.28.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 262: blk.29.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 263: blk.29.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 264: blk.29.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 265: blk.29.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 266: blk.29.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 267: blk.29.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 268: blk.29.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 269: blk.29.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 270: blk.29.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 271: blk.30.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 272: blk.30.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 273: blk.30.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 274: blk.30.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 275: blk.30.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 276: blk.30.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 277: output.weight q6_K [ 4096, 32000, 1, 1 ]\n", + "llama_model_loader: - tensor 278: blk.30.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 279: blk.30.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 280: blk.30.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 281: blk.31.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 282: blk.31.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 283: blk.31.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 284: blk.31.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 285: blk.31.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 286: blk.31.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 287: blk.31.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 288: blk.31.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 289: blk.31.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 290: output_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - kv 0: general.architecture str = llama\n", + "llama_model_loader: - kv 1: general.name str = huggingfaceh4_zephyr-7b-beta\n", + "llama_model_loader: - kv 2: llama.context_length u32 = 32768\n", + "llama_model_loader: - kv 3: llama.embedding_length u32 = 4096\n", + "llama_model_loader: - kv 4: llama.block_count u32 = 32\n", + "llama_model_loader: - kv 5: llama.feed_forward_length u32 = 14336\n", + "llama_model_loader: - kv 6: llama.rope.dimension_count u32 = 128\n", + "llama_model_loader: - kv 7: llama.attention.head_count u32 = 32\n", + "llama_model_loader: - kv 8: llama.attention.head_count_kv u32 = 8\n", + "llama_model_loader: - kv 9: llama.attention.layer_norm_rms_epsilon f32 = 0.000010\n", + "llama_model_loader: - kv 10: llama.rope.freq_base f32 = 10000.000000\n", + "llama_model_loader: - kv 11: general.file_type u32 = 17\n", + "llama_model_loader: - kv 12: tokenizer.ggml.model str = llama\n", + "llama_model_loader: - kv 13: tokenizer.ggml.tokens arr[str,32000] = [\"\", \"\", \"\", \"<0x00>\", \"<...\n", + "llama_model_loader: - kv 14: tokenizer.ggml.scores arr[f32,32000] = [0.000000, 0.000000, 0.000000, 0.0000...\n", + "llama_model_loader: - kv 15: tokenizer.ggml.token_type arr[i32,32000] = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...\n", + "llama_model_loader: - kv 16: tokenizer.ggml.bos_token_id u32 = 1\n", + "llama_model_loader: - kv 17: tokenizer.ggml.eos_token_id u32 = 2\n", + "llama_model_loader: - kv 18: tokenizer.ggml.unknown_token_id u32 = 0\n", + "llama_model_loader: - kv 19: tokenizer.ggml.padding_token_id u32 = 2\n", + "llama_model_loader: - kv 20: general.quantization_version u32 = 2\n", + "llama_model_loader: - type f32: 65 tensors\n", + "llama_model_loader: - type q5_K: 193 tensors\n", + "llama_model_loader: - type q6_K: 33 tensors\n", + "llm_load_vocab: special tokens definition check successful ( 259/32000 ).\n", + "llm_load_print_meta: format = GGUF V3 (latest)\n", + "llm_load_print_meta: arch = llama\n", + "llm_load_print_meta: vocab type = SPM\n", + "llm_load_print_meta: n_vocab = 32000\n", + "llm_load_print_meta: n_merges = 0\n", + "llm_load_print_meta: n_ctx_train = 32768\n", + "llm_load_print_meta: n_embd = 4096\n", + "llm_load_print_meta: n_head = 32\n", + "llm_load_print_meta: n_head_kv = 8\n", + "llm_load_print_meta: n_layer = 32\n", + "llm_load_print_meta: n_rot = 128\n", + "llm_load_print_meta: n_gqa = 4\n", + "llm_load_print_meta: f_norm_eps = 0.0e+00\n", + "llm_load_print_meta: f_norm_rms_eps = 1.0e-05\n", + "llm_load_print_meta: f_clamp_kqv = 0.0e+00\n", + "llm_load_print_meta: f_max_alibi_bias = 0.0e+00\n", + "llm_load_print_meta: n_ff = 14336\n", + "llm_load_print_meta: rope scaling = linear\n", + "llm_load_print_meta: freq_base_train = 10000.0\n", + "llm_load_print_meta: freq_scale_train = 1\n", + "llm_load_print_meta: n_yarn_orig_ctx = 32768\n", + "llm_load_print_meta: rope_finetuned = unknown\n", + "llm_load_print_meta: model type = 7B\n", + "llm_load_print_meta: model ftype = mostly Q5_K - Medium\n", + "llm_load_print_meta: model params = 7.24 B\n", + "llm_load_print_meta: model size = 4.78 GiB (5.67 BPW) \n", + "llm_load_print_meta: general.name = huggingfaceh4_zephyr-7b-beta\n", + "llm_load_print_meta: BOS token = 1 ''\n", + "llm_load_print_meta: EOS token = 2 ''\n", + "llm_load_print_meta: UNK token = 0 ''\n", + "llm_load_print_meta: PAD token = 2 ''\n", + "llm_load_print_meta: LF token = 13 '<0x0A>'\n", + "llm_load_tensors: ggml ctx size = 0.11 MiB\n", + "llm_load_tensors: mem required = 4893.10 MiB\n", + "...................................................................................................\n", + "llama_new_context_with_model: n_ctx = 3900\n", + "llama_new_context_with_model: freq_base = 10000.0\n", + "llama_new_context_with_model: freq_scale = 1\n", + "llama_new_context_with_model: kv self size = 487.50 MiB\n", + "llama_build_graph: non-view tensors processed: 740/740\n", + "ggml_metal_init: allocating\n", + "ggml_metal_init: found device: Apple M2 Max\n", + "ggml_metal_init: picking default device: Apple M2 Max\n", + "ggml_metal_init: default.metallib not found, loading from source\n", + "ggml_metal_init: loading '/Users/peportier/miniforge3/envs/RAG_ENV/lib/python3.9/site-packages/llama_cpp/ggml-metal.metal'\n", + "ggml_metal_init: GPU name: Apple M2 Max\n", + "ggml_metal_init: GPU family: MTLGPUFamilyApple8 (1008)\n", + "ggml_metal_init: hasUnifiedMemory = true\n", + "ggml_metal_init: recommendedMaxWorkingSetSize = 49152.00 MiB\n", + "ggml_metal_init: maxTransferRate = built-in GPU\n", + "llama_new_context_with_model: compute buffer total size = 278.43 MiB\n", + "llama_new_context_with_model: max tensor size = 102.54 MiB\n", + "ggml_metal_add_buffer: allocated 'data ' buffer, size = 4893.70 MiB, ( 4894.20 / 49152.00)\n", + "ggml_metal_add_buffer: allocated 'kv ' buffer, size = 487.52 MiB, ( 5381.72 / 49152.00)\n", + "ggml_metal_add_buffer: allocated 'alloc ' buffer, size = 275.38 MiB, ( 5657.09 / 49152.00)\n" + ] + } + ], + "source": [ + "llm = LlamaCPP(\n", + " # You can pass in the URL to a GGML model to download it automatically\n", + " model_url=None,\n", + " # optionally, you can set the path to a pre-downloaded model instead of model_url\n", + " # model_path='/Users/peportier/llm/a/a/mistral-7b-openorca.Q4_K_M.gguf',\n", + " model_path='/Users/peportier/llm/a/a/zephyr-7b-beta.Q5_K_M.gguf',\n", + " temperature=0.1,\n", + " max_new_tokens=1024,\n", + " # llama2 has a context window of 4096 tokens, but we set it lower to allow for some wiggle room\n", + " context_window=3900,\n", + " # kwargs to pass to __call__()\n", + " # https://llama-cpp-python.readthedocs.io/en/latest/api-reference/#llama_cpp.Llama.__call__\n", + " generate_kwargs={\n", + " \"temperature\": 0.1,\n", + " \"mirostat_mode\": 2,\n", + " },\n", + " # kwargs to pass to __init__()\n", + " # https://llama-cpp-python.readthedocs.io/en/latest/api-reference/#llama_cpp.Llama.__init__\n", + " # set to at least 1 to use GPU\n", + " model_kwargs={\n", + " \"n_gpu_layers\": 1,\n", + " },\n", + " # transform inputs into Llama2 format\n", + " messages_to_prompt=messages_to_prompt,\n", + " completion_to_prompt=completion_to_prompt,\n", + " verbose=False,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "42734468-f0c4-46ff-8676-98d4bde99a86", + "metadata": {}, + "outputs": [], + "source": [ + "model_name = \"HuggingFaceH4/zephyr-7b-beta\"\n", + "set_global_tokenizer(\n", + " AutoTokenizer.from_pretrained(model_name).encode\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "39fadac2-a30e-41ca-85b5-35fc49f9842c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/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.\n", + " _torch_pytree._register_pytree_node(\n" + ] + } + ], + "source": [ + "# embed_model = HuggingFaceEmbedding(model_name=\"BAAI/bge-small-en-v1.5\")\n", + "# embed_model = HuggingFaceEmbedding(model_name=\"sentence-transformers/all-MiniLM-L6-v2\")\n", + "embed_model = HuggingFaceEmbedding(model_name=\"sentence-transformers/distiluse-base-multilingual-cased-v1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fbb8f6f3-9175-4f90-bd67-be8efb37ae17", + "metadata": {}, + "outputs": [], + "source": [ + "service_context = ServiceContext.from_defaults(\n", + " llm=llm,\n", + " embed_model=embed_model,\n", + " chunk_size=512,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c06f2c57-8f7b-41ad-9053-bdfefc80fd98", + "metadata": {}, + "outputs": [], + "source": [ + "if not os.path.exists(\"./index\"):\n", + " documents = SimpleDirectoryReader(\"./docs/env\").load_data()\n", + " index = VectorStoreIndex.from_documents(\n", + " documents, service_context=service_context\n", + " )\n", + " index.storage_context.persist(persist_dir=\"./index\")\n", + "else:\n", + " index = load_index_from_storage(\n", + " StorageContext.from_defaults(persist_dir=\"./index\"),\n", + " service_context=service_context,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b583c0c0-85a1-4384-83de-0001c9452a3f", + "metadata": {}, + "outputs": [], + "source": [ + "# db = chromadb.PersistentClient(path=\"./chroma_db\")\n", + "# chroma_collection = db.get_or_create_collection(\"env\")\n", + "# vector_store = ChromaVectorStore(chroma_collection=chroma_collection)\n", + "# storage_context = StorageContext.from_defaults(vector_store=vector_store)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7a6a9f9-a3d6-47fe-8cd8-13384e07f16a", + "metadata": {}, + "outputs": [], + "source": [ + "# # Create chroma index\n", + "# index = VectorStoreIndex.from_documents(\n", + "# documents, storage_context=storage_context,\n", + "# service_context=service_context\n", + "# )" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "176a1285-bb3c-46a4-892a-1957ccb74c99", + "metadata": {}, + "outputs": [], + "source": [ + "text_qa_template_str_fr = (\n", + " \"<|system|>: Vous êtes un assistant IA qui répond à la question posée à la fin en utilisant le contexte suivant. Toutes les informations factuelles que vous utilisez pour répondre proviennent exclusivement du contexte. Si vous ne connaissez pas la réponse, dites simplement que vous ne savez pas, n'essayez pas d'inventer une réponse. Veuillez répondre exclusivement en français. \\n\"\n", + " \"<|user|>: {context_str}\\n\"\n", + " \"Question: {query_str} \\n\"\n", + " \"<|assistant|>:\"\n", + ")\n", + "text_qa_template_str_en = (\n", + " \"<|system|>: You are an AI assistant who answers the question posed at the end using the following context. All the factual information you use to answer comes exclusively from the context, do not use prior knowledge. If you don't know the answer, just say you don't know, don't try to invent an answer. \\n\"\n", + " \"<|user|>: {context_str}\\n\"\n", + " \"Question: {query_str} \\n\"\n", + " \"<|assistant|>:\"\n", + ")\n", + "text_qa_template = PromptTemplate(text_qa_template_str_en)\n", + "\n", + "refine_template_str_en = (\n", + " \"<|user|>: The original query is as follows: {query_str}\\n\"\n", + " \"We have provided an existing answer: {existing_answer}\\n\"\n", + " \"We have the opportunity to refine the existing answer (only if needed) with some more context below.\\n\"\n", + " \"------------\\n\"\n", + " \"{context_msg}\\n\"\n", + " \"------------\\n\"\n", + " \"Given the new context, refine the original answer to better answer the query. If the context isn't useful, return the original answer. \\n\"\n", + " \"<|assistant|>:\"\n", + ")\n", + "refine_template = PromptTemplate(refine_template_str_en)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "02350391-a152-4b70-8ed4-a8a3dde96728", + "metadata": {}, + "outputs": [], + "source": [ + "query_engine = index.as_query_engine(\n", + " text_qa_template=text_qa_template,\n", + " refine_template=refine_template,\n", + " #response_mode=\"compact\",\n", + " response_mode=\"refine\",\n", + " similarity_top_k=5,\n", + " streaming=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "f979bd65-217d-480b-a377-5b3a58593156", + "metadata": {}, + "outputs": [], + "source": [ + "def display_prompt_dict(prompts_dict):\n", + " for k, p in prompts_dict.items():\n", + " text_md = f\"**Prompt Key**: {k}
\" f\"**Text:**
\"\n", + " display(Markdown(text_md))\n", + " print(p.get_template())\n", + " display(Markdown(\"

\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "37ba2a5d-5eca-43aa-ac28-b071e1cbfba4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "**Prompt Key**: response_synthesizer:text_qa_template
**Text:**
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<|system|>: You are an AI assistant who answers the question posed at the end using the following context. All the factual information you use to answer comes exclusively from the context, do not use prior knowledge. If you don't know the answer, just say you don't know, don't try to invent an answer. \n", + "<|user|>: {context_str}\n", + "Question: {query_str} \n", + "<|assistant|>:\n" + ] + }, + { + "data": { + "text/markdown": [ + "

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Prompt Key**: response_synthesizer:refine_template
**Text:**
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<|user|>: The original query is as follows: {query_str}\n", + "We have provided an existing answer: {existing_answer}\n", + "We have the opportunity to refine the existing answer (only if needed) with some more context below.\n", + "------------\n", + "{context_msg}\n", + "------------\n", + "Given the new context, refine the original answer to better answer the query. If the context isn't useful, return the original answer. \n", + "<|assistant|>:\n" + ] + }, + { + "data": { + "text/markdown": [ + "

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_prompt_dict(query_engine.get_prompts())" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "8bcff0b7-300b-4698-86df-f36171b1ee02", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The green premium is a concept used to compare the additional cost of choosing a zero-carbon alternative over its fossil fuel counterpart. It helps in deciding which clean alternatives should be deployed now and where innovation is needed because the clean alternatives are not yet cheap enough. The calculation of green premiums involves various assumptions, and different well-informed people may arrive at different numbers.\n", + "\n", + "In the context provided, we can see that while electric vehicles (EVs) have become more affordable in recent years due to a significant decrease in battery costs and government incentives, they still come with a modest Green Premium compared to their gas-powered counterparts. For example, the Chevrolet Bolt EV is $14,000 more expensive than the gas-powered Malibu before any tax credits, but when accounting for factors such as maintenance costs and fuel expenses, the Bolt will cost 10 cents more per mile driven.\n", + "\n", + "It's essential to understand whether a given green technology is close to being as cheap as its fossil fuel counterpart, and for those that aren't close, thinking about how innovation might bring their prices down. While the Green Premium is an imperfect tool, it's better than no tool at all, and it helps in putting time, attention, and money to their best use.\n", + "\n", + "In summary, the green premium is a useful concept for comparing costs and making informed decisions about which zero-carbon solutions to deploy now and where innovation is needed. While EVs have become more affordable, they still come with a Green Premium, but as technology continues to improve, this gap may narrow, making zero-carbon alternatives more competitive in the market." + ] + } + ], + "source": [ + "response = query_engine.query('''What is a green premium?''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "4586e568-5dcf-481b-8512-a27695bbbe69", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Le \"green premium\" désigne la différence de prix entre les technologies écologiques et leurs contreparties traditionnelles. Il s'agit de l'augmentation supplémentaire que les consommateurs doivent payer pour choisir des options écologiques plutôt que des solutions conventionnelles. Dans le cadre de cet document, l'auteur calcule ces différences de prix pour diverses technologies vertes et évalue si elles sont abordables suffisamment pour une adoption mondiale généralisée. L'auteur souligne l'importance d'avoir des primes basses pour permettre à tous les pays de respecter les normes environnementales sans coûts prohibitifs.\n", + "\n", + "L'exemple du carburant jet d'avion illustre le calcul direct des primes vertes, mais lorsque nous appliquons ce calcul de manière plus générale, nous rencontrons un problème : nous n'avons pas actuellement une équivalent vert direct dans tous les cas. Il n'y a pas de ciment à faible émission de carbone (au moins non encore). Comment obtenir un sens du coût d'une solution écologique dans ces cas ?\n", + "\n", + "Nous pouvons le faire en menant une expérience de pensée : \"Combien coûterait-il de retirer directement le carbone de l'atmosphère ?\" Cette idée a un nom ; c'est la capture directe de l'air (DAC). Le seul centre DAC en opération actuellement est basé en Suisse et absorbe du gaz qui aurait pu être émis par une centrale à charbon au Texas il y a 10 ans. Pour déterminer combien cela coûterait, nous avons besoin de deux données : les émissions mondiales et le coût de la capture directe de l'air.\n", + "\n", + "Le DAC est une technologie coûteuse et peu développée, mais si elle peut fonctionner à grande échelle, elle permettra de capturer du dioxyde de carbone qu'importe quand ou où il a été produit. Le centre DAC en opération actuellement, basé en Suisse, capture le gaz qui aurait pu être émis par une centrale à charbon au Texas il y a 10 ans.\n", + "\n", + "Voici les Green Premiums pour remplacer les combustibles fossiles avec des alternatives sans émission de carbone :\n", + "\n", + "- Pour le gazole, les biofuels avancés coûtent 103% de plus que le gazole traditionnel, et les electrofuels coûtent 234% de plus.\n", + "- Pour l'essence, les biofuels avancés coûtent 106% de plus que l'essence traditionnelle, et les electrofuels coûtent 237% de plus.\n", + "- Pour le carburant jet d'avion, les biofuels avancés coûtent 141% de plus que le carburant jet d'avion traditionnel, et les electrofuels coûtent 296% de plus.\n", + "\n", + "Ces Green Premiums montrent qu'il y a encore beaucoup de travail à faire pour rendre les technologies vertes abordables suffisamment pour une adoption mondiale généralisée. Cependant, l'auteur souligne l'importance d'avoir des primes basses pour permettre à tous les pays de respecter les normes environnementales sans coûts prohibitifs. Les calculs de ces Green Premiums fournissent des informations utiles aux décisions d'investissement dans le secteur de l'énergie en aidant à déterminer quelles technologies vertes devraient être priorisées pour le déploiement et où il est nécessaire de poursuivre les efforts de recherche et de développement car des options écologiques alternatives sont encore trop coûteuses.CPU times: user 12.6 s, sys: 2.07 s, total: 14.7 s\n", + "Wall time: 2min 16s\n" + ] + } + ], + "source": [ + "%%time\n", + "response = query_engine.query('''Qu'est-ce que le \"green premium\". Réponds en français.''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "7c7f1e8b-cb21-4cc6-8d51-8e29ced1ba6a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "65\n", + "How_to_Avoid_a_Climate_Disaster_for_9712958_compressed.pdf\n", + "64\n", + "How_to_Avoid_a_Climate_Disaster_for_9712958_compressed.pdf\n", + "66\n", + "How_to_Avoid_a_Climate_Disaster_for_9712958_compressed.pdf\n", + "67\n", + "How_to_Avoid_a_Climate_Disaster_for_9712958_compressed.pdf\n", + "150\n", + "How_to_Avoid_a_Climate_Disaster_for_9712958_compressed.pdf\n" + ] + } + ], + "source": [ + "for node in response.source_nodes:\n", + " print(node.metadata[\"page_label\"] + \"\\n\" + node.metadata[\"file_name\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "7ead638c-fa97-4664-88b6-2c3ebaff7f91", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A carbon tax is a policy tool that places a price on greenhouse gas emissions, specifically carbon dioxide (CO2). It aims to reduce greenhouse gas emissions by making high-carbon alternatives like traditional steel production and coal-based plastics more expensive. By doing so, governments can incentivize the adoption of low-carbon alternatives such as electric arc furnace (EAF) steel and zero-carbon plastics made from renewable sources or captured CO2. This policy tool sends a market signal to individuals and businesses to reduce greenhouse gas emissions and contributes to mitigating climate change while promoting the development of clean energy technology and breakthroughs that generate and store lots of zero-carbon electricity inexpensively. A carbon tax can also help ensure that the transition to a low-carbon economy is both effective and equitable as we pursue electrification as another way to reduce emissions. By making carbon-free things cheaper and carbon-emitting things more expensive, governments can nudge producers and consumers toward more efficient decisions and encourage innovation that reduces Green Premiums. This policy tool is a way to create an incentive for inventors to create competitive carbon-free alternatives by progressively increasing the price of carbon to reflect its true cost, which reflects the external costs borne by society due to greenhouse gas emissions. It's not about punishing people for their greenhouse gases but rather creating an incentive for more efficient decisions and innovation that reduces Green Premiums." + ] + } + ], + "source": [ + "response = query_engine.query('''What is a carbon tax?''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "ac5d3d94-218a-466b-a8f4-ee68a90ffc68", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Critical biospheric boundaries refer to limits beyond which human activities could cause irreversible and potentially catastrophic environmental changes that threaten the stability and functioning of Earth's ecosystems. These boundaries include climate change, ocean acidification, loss of biodiversity, land use changes, freshwater consumption, introduction of novel entities (such as chemicals and genetically modified organisms), atmospheric aerosol loading, stratospheric ozone depletion, and global nitrogen and phosphorus cycles. It's crucial to maintain these boundaries within safe limits because they represent the most significant, persistent, existential concerns related to environmental change.\n", + "\n", + "However, it's essential to remain skeptical and doubtful while continuously reassessing our understanding of environmental issues as some critical problems, such as acid rain and stratospheric ozone depletion, were not yet recognized 40 years ago. This list would have been different back then because we didn't fully comprehend the extent and complexity of environmental challenges at that time. As we continue to learn more about these critical biospheric boundaries, it's crucial to remain skeptical and doubtful while continuously reassessing our understanding of environmental issues. This will help us to better address these concerns in a timely and effective manner.\n", + "\n", + "In addressing these critical biospheric boundaries, we must recognize that some of these issues have been better understood than others over time. For example, the negative effects of excessive water extraction from ancient deep aquifers and serious water pollution generated by food production, cities, and industries have become more apparent in recent years. Meanwhile, issues like acid rain and stratospheric ozone depletion were not fully recognized 40 years ago due to a lack of understanding about the extent and complexity of environmental challenges at that time. As we continue to learn more about these critical biospheric boundaries, it's crucial to remain skeptical and doubtful while continuously reassessing our understanding of environmental issues. This will help us to better address these concerns in a timely and effective manner.\n", + "\n", + "The author's interdisciplinary background in energy studies has led them to prefer scanning wide horizons over drilling ever-deeper holes. Their work, which spans various aspects of energy, history, social, economic, and political factors, advocates for moving away from extreme views. The author's latest book, \"SMIL_2022_how_the_world_really_works,\" continues this quest to understand the basic realities of the biosphere, history, and the world we have created while strongly advocating for addressing environmental concerns in a timely and effective manner." + ] + } + ], + "source": [ + "response = query_engine.query('''What are critical biospheric boundaries?''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c4ca60d8-e4c6-4348-ba47-386733a92c72", + "metadata": {}, + "outputs": [], + "source": [ + "query_engine_cit = CitationQueryEngine.from_args(\n", + " index,\n", + " similarity_top_k=3,\n", + " citation_chunk_size=512,\n", + " streaming=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d26b3519-1bd3-45ff-8ea5-2c924cbc70e3", + "metadata": {}, + "outputs": [], + "source": [ + "response = query_engine_cit.query('''What is a green premium?''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ace3c7b0-46e1-4a37-abfb-02ac795fdf50", + "metadata": {}, + "outputs": [], + "source": [ + "len(response.source_nodes)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d77a0f58-5cbe-49d9-8358-5294d647cf5f", + "metadata": {}, + "outputs": [], + "source": [ + "print(response.source_nodes[0].node.get_text())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4fc14351-32d5-4cdc-9c5f-3c6d38c5dfef", + "metadata": {}, + "outputs": [], + "source": [ + "print(response.source_nodes[0].node.metadata)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ad77a1b3-a1e0-49ac-ba6b-0d7eb7852ffd", + "metadata": {}, + "outputs": [], + "source": [ + "response.response_txt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d1469839-9453-4e6e-b471-1103d9a18a47", + "metadata": {}, + "outputs": [], + "source": [ + "response = query_engine_cit.query('''How are fossil fuels related to food production?''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fc62ed24-51c7-4c96-bf57-025f8db29270", + "metadata": {}, + "outputs": [], + "source": [ + "print(response.source_nodes[1].node.metadata)\n", + "print(response.source_nodes[1].node.get_text())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "876154c4-2dbb-4170-a244-98f17e763955", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "RAG_ENV", + "language": "python", + "name": "rag_env" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/rag_fr.ipynb b/rag_fr.ipynb new file mode 100644 index 0000000..27d0814 --- /dev/null +++ b/rag_fr.ipynb @@ -0,0 +1,1120 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "6503d5b0-6cf3-42d8-982c-353eb42d9d26", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/peportier/miniforge3/envs/RAG_ENV/lib/python3.9/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n", + "/Users/peportier/miniforge3/envs/RAG_ENV/lib/python3.9/site-packages/transformers/utils/generic.py:441: UserWarning: torch.utils._pytree._register_pytree_node is deprecated. Please use torch.utils._pytree.register_pytree_node instead.\n", + " _torch_pytree._register_pytree_node(\n" + ] + } + ], + "source": [ + "from llama_index import (\n", + " SimpleDirectoryReader,\n", + " VectorStoreIndex,\n", + " ServiceContext,\n", + " set_global_tokenizer,\n", + " load_index_from_storage,\n", + ")\n", + "from llama_index.llms import LlamaCPP\n", + "from llama_index.llms.llama_utils import (\n", + " messages_to_prompt,\n", + " completion_to_prompt,\n", + ")\n", + "from llama_index.vector_stores import ChromaVectorStore\n", + "from llama_index.storage.storage_context import StorageContext\n", + "from llama_index.embeddings import HuggingFaceEmbedding\n", + "from llama_index.query_engine import CitationQueryEngine\n", + "from llama_index.prompts import PromptTemplate\n", + "\n", + "from IPython.display import Markdown, display\n", + "\n", + "from transformers import AutoTokenizer\n", + "\n", + "import os\n", + "\n", + "import chromadb" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "15e2462f-5d5b-4f4b-8119-de782c400d78", + "metadata": {}, + "outputs": [], + "source": [ + "def messages_to_prompt(messages):\n", + " prompt = \"\"\n", + " for message in messages:\n", + " if message.role == 'system':\n", + " prompt += f\"<|system|>\\n{message.content}\\n\"\n", + " elif message.role == 'user':\n", + " prompt += f\"<|user|>\\n{message.content}\\n\"\n", + " elif message.role == 'assistant':\n", + " prompt += f\"<|assistant|>\\n{message.content}\\n\"\n", + "\n", + " # ensure we start with a system prompt, insert blank if needed\n", + " if not prompt.startswith(\"<|system|>\\n\"):\n", + " prompt = \"<|system|>\\n\\n\" + prompt\n", + "\n", + " # add final assistant prompt\n", + " prompt = prompt + \"<|assistant|>\\n\"\n", + "\n", + " return prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "373e13fb-9233-4b0b-8dc3-a1e24117bd76", + "metadata": {}, + "outputs": [], + "source": [ + "def completion_to_prompt(completion, system_prompt=None):\n", + " prompt = \"\"\n", + " system_prompt_str = system_prompt or \"\"\"\\\n", + "Vous fournissez avec soin des réponses précises, factuelles, réfléchies et nuancées, et vous êtes doué pour le raisonnement. \\\n", + "Si vous pensez qu'il n'y a peut-être pas de bonne réponse, vous le dites. \\\n", + "Ne soyez pas verbeux dans vos réponses, mais donnez des détails et des exemples lorsque cela peut aider à l'explication. \\\n", + "\"\"\"\n", + " prompt = f\"<|system|>\\n {system_prompt_str.strip()} \\n\"\n", + " prompt += f\"<|user|>\\n {completion} \\n\"\n", + " prompt += f\"<|assistant|>\\n\"\n", + " return prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "05f54aec-f155-4f4b-9b19-874c13db87cc", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "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))\n", + "llama_model_loader: - tensor 0: token_embd.weight q5_K [ 4096, 32000, 1, 1 ]\n", + "llama_model_loader: - tensor 1: blk.0.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 2: blk.0.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 3: blk.0.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 4: blk.0.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 5: blk.0.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 6: blk.0.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 7: blk.0.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 8: blk.0.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 9: blk.0.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 10: blk.1.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 11: blk.1.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 12: blk.1.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 13: blk.1.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 14: blk.1.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 15: blk.1.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 16: blk.1.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 17: blk.1.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 18: blk.1.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 19: blk.2.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 20: blk.2.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 21: blk.2.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 22: blk.2.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 23: blk.2.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 24: blk.2.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 25: blk.2.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 26: blk.2.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 27: blk.2.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 28: blk.3.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 29: blk.3.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 30: blk.3.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 31: blk.3.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 32: blk.3.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 33: blk.3.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 34: blk.3.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 35: blk.3.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 36: blk.3.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 37: blk.4.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 38: blk.4.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 39: blk.4.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 40: blk.4.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 41: blk.4.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 42: blk.4.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 43: blk.4.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 44: blk.4.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 45: blk.4.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 46: blk.5.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 47: blk.5.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 48: blk.5.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 49: blk.5.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 50: blk.5.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 51: blk.5.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 52: blk.5.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 53: blk.5.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 54: blk.5.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 55: blk.6.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 56: blk.6.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 57: blk.6.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 58: blk.6.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 59: blk.6.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 60: blk.6.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 61: blk.6.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 62: blk.6.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 63: blk.6.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 64: blk.7.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 65: blk.7.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 66: blk.7.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 67: blk.7.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 68: blk.7.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 69: blk.7.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 70: blk.7.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 71: blk.7.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 72: blk.7.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 73: blk.8.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 74: blk.8.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 75: blk.8.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 76: blk.8.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 77: blk.10.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 78: blk.10.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 79: blk.10.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 80: blk.10.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 81: blk.10.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 82: blk.10.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 83: blk.10.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 84: blk.10.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 85: blk.10.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 86: blk.11.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 87: blk.11.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 88: blk.11.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 89: blk.11.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 90: blk.11.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 91: blk.11.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 92: blk.11.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 93: blk.11.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 94: blk.11.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 95: blk.12.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 96: blk.12.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 97: blk.12.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 98: blk.12.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 99: blk.12.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 100: blk.12.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 101: blk.8.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 102: blk.8.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 103: blk.8.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 104: blk.8.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 105: blk.8.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 106: blk.9.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 107: blk.9.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 108: blk.9.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 109: blk.9.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 110: blk.9.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 111: blk.9.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 112: blk.9.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 113: blk.9.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 114: blk.9.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 115: blk.12.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 116: blk.12.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 117: blk.12.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 118: blk.13.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 119: blk.13.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 120: blk.13.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 121: blk.13.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 122: blk.13.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 123: blk.13.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 124: blk.13.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 125: blk.13.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 126: blk.13.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 127: blk.14.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 128: blk.14.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 129: blk.14.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 130: blk.14.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 131: blk.14.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 132: blk.14.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 133: blk.14.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 134: blk.14.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 135: blk.14.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 136: blk.15.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 137: blk.15.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 138: blk.15.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 139: blk.15.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 140: blk.15.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 141: blk.15.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 142: blk.15.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 143: blk.15.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 144: blk.15.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 145: blk.16.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 146: blk.16.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 147: blk.16.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 148: blk.16.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 149: blk.16.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 150: blk.16.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 151: blk.16.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 152: blk.16.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 153: blk.16.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 154: blk.17.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 155: blk.17.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 156: blk.17.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 157: blk.17.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 158: blk.17.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 159: blk.17.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 160: blk.17.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 161: blk.17.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 162: blk.17.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 163: blk.18.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 164: blk.18.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 165: blk.18.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 166: blk.18.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 167: blk.18.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 168: blk.18.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 169: blk.18.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 170: blk.18.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 171: blk.18.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 172: blk.19.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 173: blk.19.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 174: blk.19.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 175: blk.19.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 176: blk.19.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 177: blk.19.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 178: blk.19.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 179: blk.19.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 180: blk.19.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 181: blk.20.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 182: blk.20.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 183: blk.20.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 184: blk.20.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 185: blk.20.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 186: blk.20.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 187: blk.20.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 188: blk.20.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 189: blk.20.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 190: blk.21.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 191: blk.21.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 192: blk.21.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 193: blk.21.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 194: blk.21.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 195: blk.21.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 196: blk.21.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 197: blk.21.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 198: blk.21.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 199: blk.22.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 200: blk.22.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 201: blk.22.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 202: blk.22.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 203: blk.22.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 204: blk.22.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 205: blk.22.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 206: blk.22.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 207: blk.22.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 208: blk.23.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 209: blk.23.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 210: blk.23.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 211: blk.23.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 212: blk.23.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 213: blk.23.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 214: blk.23.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 215: blk.23.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 216: blk.23.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 217: blk.24.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 218: blk.24.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 219: blk.24.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 220: blk.24.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 221: blk.24.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 222: blk.24.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 223: blk.24.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 224: blk.24.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 225: blk.24.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 226: blk.25.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 227: blk.25.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 228: blk.25.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 229: blk.25.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 230: blk.25.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 231: blk.25.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 232: blk.25.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 233: blk.25.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 234: blk.25.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 235: blk.26.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 236: blk.26.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 237: blk.26.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 238: blk.26.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 239: blk.26.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 240: blk.26.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 241: blk.26.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 242: blk.26.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 243: blk.26.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 244: blk.27.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 245: blk.27.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 246: blk.27.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 247: blk.27.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 248: blk.27.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 249: blk.27.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 250: blk.27.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 251: blk.27.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 252: blk.27.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 253: blk.28.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 254: blk.28.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 255: blk.28.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 256: blk.28.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 257: blk.28.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 258: blk.28.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 259: blk.28.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 260: blk.28.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 261: blk.28.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 262: blk.29.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 263: blk.29.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 264: blk.29.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 265: blk.29.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 266: blk.29.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 267: blk.29.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 268: blk.29.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 269: blk.29.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 270: blk.29.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 271: blk.30.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 272: blk.30.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 273: blk.30.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 274: blk.30.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 275: blk.30.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 276: blk.30.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 277: output.weight q6_K [ 4096, 32000, 1, 1 ]\n", + "llama_model_loader: - tensor 278: blk.30.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 279: blk.30.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 280: blk.30.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 281: blk.31.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 282: blk.31.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 283: blk.31.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 284: blk.31.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 285: blk.31.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 286: blk.31.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 287: blk.31.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 288: blk.31.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 289: blk.31.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 290: output_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - kv 0: general.architecture str = llama\n", + "llama_model_loader: - kv 1: general.name str = huggingfaceh4_zephyr-7b-beta\n", + "llama_model_loader: - kv 2: llama.context_length u32 = 32768\n", + "llama_model_loader: - kv 3: llama.embedding_length u32 = 4096\n", + "llama_model_loader: - kv 4: llama.block_count u32 = 32\n", + "llama_model_loader: - kv 5: llama.feed_forward_length u32 = 14336\n", + "llama_model_loader: - kv 6: llama.rope.dimension_count u32 = 128\n", + "llama_model_loader: - kv 7: llama.attention.head_count u32 = 32\n", + "llama_model_loader: - kv 8: llama.attention.head_count_kv u32 = 8\n", + "llama_model_loader: - kv 9: llama.attention.layer_norm_rms_epsilon f32 = 0.000010\n", + "llama_model_loader: - kv 10: llama.rope.freq_base f32 = 10000.000000\n", + "llama_model_loader: - kv 11: general.file_type u32 = 17\n", + "llama_model_loader: - kv 12: tokenizer.ggml.model str = llama\n", + "llama_model_loader: - kv 13: tokenizer.ggml.tokens arr[str,32000] = [\"\", \"\", \"\", \"<0x00>\", \"<...\n", + "llama_model_loader: - kv 14: tokenizer.ggml.scores arr[f32,32000] = [0.000000, 0.000000, 0.000000, 0.0000...\n", + "llama_model_loader: - kv 15: tokenizer.ggml.token_type arr[i32,32000] = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...\n", + "llama_model_loader: - kv 16: tokenizer.ggml.bos_token_id u32 = 1\n", + "llama_model_loader: - kv 17: tokenizer.ggml.eos_token_id u32 = 2\n", + "llama_model_loader: - kv 18: tokenizer.ggml.unknown_token_id u32 = 0\n", + "llama_model_loader: - kv 19: tokenizer.ggml.padding_token_id u32 = 2\n", + "llama_model_loader: - kv 20: general.quantization_version u32 = 2\n", + "llama_model_loader: - type f32: 65 tensors\n", + "llama_model_loader: - type q5_K: 193 tensors\n", + "llama_model_loader: - type q6_K: 33 tensors\n", + "llm_load_vocab: special tokens definition check successful ( 259/32000 ).\n", + "llm_load_print_meta: format = GGUF V3 (latest)\n", + "llm_load_print_meta: arch = llama\n", + "llm_load_print_meta: vocab type = SPM\n", + "llm_load_print_meta: n_vocab = 32000\n", + "llm_load_print_meta: n_merges = 0\n", + "llm_load_print_meta: n_ctx_train = 32768\n", + "llm_load_print_meta: n_embd = 4096\n", + "llm_load_print_meta: n_head = 32\n", + "llm_load_print_meta: n_head_kv = 8\n", + "llm_load_print_meta: n_layer = 32\n", + "llm_load_print_meta: n_rot = 128\n", + "llm_load_print_meta: n_gqa = 4\n", + "llm_load_print_meta: f_norm_eps = 0.0e+00\n", + "llm_load_print_meta: f_norm_rms_eps = 1.0e-05\n", + "llm_load_print_meta: f_clamp_kqv = 0.0e+00\n", + "llm_load_print_meta: f_max_alibi_bias = 0.0e+00\n", + "llm_load_print_meta: n_ff = 14336\n", + "llm_load_print_meta: rope scaling = linear\n", + "llm_load_print_meta: freq_base_train = 10000.0\n", + "llm_load_print_meta: freq_scale_train = 1\n", + "llm_load_print_meta: n_yarn_orig_ctx = 32768\n", + "llm_load_print_meta: rope_finetuned = unknown\n", + "llm_load_print_meta: model type = 7B\n", + "llm_load_print_meta: model ftype = mostly Q5_K - Medium\n", + "llm_load_print_meta: model params = 7.24 B\n", + "llm_load_print_meta: model size = 4.78 GiB (5.67 BPW) \n", + "llm_load_print_meta: general.name = huggingfaceh4_zephyr-7b-beta\n", + "llm_load_print_meta: BOS token = 1 ''\n", + "llm_load_print_meta: EOS token = 2 ''\n", + "llm_load_print_meta: UNK token = 0 ''\n", + "llm_load_print_meta: PAD token = 2 ''\n", + "llm_load_print_meta: LF token = 13 '<0x0A>'\n", + "llm_load_tensors: ggml ctx size = 0.11 MiB\n", + "llm_load_tensors: mem required = 4893.10 MiB\n", + "...................................................................................................\n", + "llama_new_context_with_model: n_ctx = 3900\n", + "llama_new_context_with_model: freq_base = 10000.0\n", + "llama_new_context_with_model: freq_scale = 1\n", + "llama_new_context_with_model: kv self size = 487.50 MiB\n", + "llama_build_graph: non-view tensors processed: 740/740\n", + "ggml_metal_init: allocating\n", + "ggml_metal_init: found device: Apple M2 Max\n", + "ggml_metal_init: picking default device: Apple M2 Max\n", + "ggml_metal_init: default.metallib not found, loading from source\n", + "ggml_metal_init: loading '/Users/peportier/miniforge3/envs/RAG_ENV/lib/python3.9/site-packages/llama_cpp/ggml-metal.metal'\n", + "ggml_metal_init: GPU name: Apple M2 Max\n", + "ggml_metal_init: GPU family: MTLGPUFamilyApple8 (1008)\n", + "ggml_metal_init: hasUnifiedMemory = true\n", + "ggml_metal_init: recommendedMaxWorkingSetSize = 49152.00 MiB\n", + "ggml_metal_init: maxTransferRate = built-in GPU\n", + "llama_new_context_with_model: compute buffer total size = 278.43 MiB\n", + "llama_new_context_with_model: max tensor size = 102.54 MiB\n", + "ggml_metal_add_buffer: allocated 'data ' buffer, size = 4893.70 MiB, ( 4894.33 / 49152.00)\n", + "ggml_metal_add_buffer: allocated 'kv ' buffer, size = 487.52 MiB, ( 5381.84 / 49152.00)\n", + "ggml_metal_add_buffer: allocated 'alloc ' buffer, size = 275.38 MiB, ( 5657.22 / 49152.00)\n" + ] + } + ], + "source": [ + "llm = LlamaCPP(\n", + " # You can pass in the URL to a GGML model to download it automatically\n", + " model_url=None,\n", + " # optionally, you can set the path to a pre-downloaded model instead of model_url\n", + " # model_path='/Users/peportier/llm/a/a/mistral-7b-openorca.Q4_K_M.gguf',\n", + " model_path='/Users/peportier/llm/a/a/zephyr-7b-beta.Q5_K_M.gguf',\n", + " temperature=0.1,\n", + " max_new_tokens=1024,\n", + " # llama2 has a context window of 4096 tokens, but we set it lower to allow for some wiggle room\n", + " context_window=3900,\n", + " # kwargs to pass to __call__()\n", + " # https://llama-cpp-python.readthedocs.io/en/latest/api-reference/#llama_cpp.Llama.__call__\n", + " generate_kwargs={\n", + " \"temperature\": 0.1,\n", + " \"mirostat_mode\": 2,\n", + " },\n", + " # kwargs to pass to __init__()\n", + " # https://llama-cpp-python.readthedocs.io/en/latest/api-reference/#llama_cpp.Llama.__init__\n", + " # set to at least 1 to use GPU\n", + " model_kwargs={\n", + " \"n_gpu_layers\": 1,\n", + " },\n", + " # transform inputs into Llama2 format\n", + " messages_to_prompt=messages_to_prompt,\n", + " completion_to_prompt=completion_to_prompt,\n", + " verbose=False,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "42734468-f0c4-46ff-8676-98d4bde99a86", + "metadata": {}, + "outputs": [], + "source": [ + "model_name = \"HuggingFaceH4/zephyr-7b-beta\"\n", + "set_global_tokenizer(\n", + " AutoTokenizer.from_pretrained(model_name).encode\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "39fadac2-a30e-41ca-85b5-35fc49f9842c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/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.\n", + " _torch_pytree._register_pytree_node(\n" + ] + } + ], + "source": [ + "# embed_model = HuggingFaceEmbedding(model_name=\"BAAI/bge-small-en-v1.5\")\n", + "# embed_model = HuggingFaceEmbedding(model_name=\"sentence-transformers/all-MiniLM-L6-v2\")\n", + "embed_model = HuggingFaceEmbedding(model_name=\"sentence-transformers/distiluse-base-multilingual-cased-v1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fbb8f6f3-9175-4f90-bd67-be8efb37ae17", + "metadata": {}, + "outputs": [], + "source": [ + "service_context = ServiceContext.from_defaults(\n", + " llm=llm,\n", + " embed_model=embed_model,\n", + " chunk_size=512,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c06f2c57-8f7b-41ad-9053-bdfefc80fd98", + "metadata": {}, + "outputs": [], + "source": [ + "if not os.path.exists(\"./index_cera1\"):\n", + " documents = SimpleDirectoryReader(\"./docs/cera1\").load_data()\n", + " index = VectorStoreIndex.from_documents(\n", + " documents, service_context=service_context\n", + " )\n", + " index.storage_context.persist(persist_dir=\"./index_cera1\")\n", + "else:\n", + " index = load_index_from_storage(\n", + " StorageContext.from_defaults(persist_dir=\"./index_cera1\"),\n", + " service_context=service_context,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b583c0c0-85a1-4384-83de-0001c9452a3f", + "metadata": {}, + "outputs": [], + "source": [ + "# db = chromadb.PersistentClient(path=\"./chroma_db\")\n", + "# chroma_collection = db.get_or_create_collection(\"env\")\n", + "# vector_store = ChromaVectorStore(chroma_collection=chroma_collection)\n", + "# storage_context = StorageContext.from_defaults(vector_store=vector_store)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7a6a9f9-a3d6-47fe-8cd8-13384e07f16a", + "metadata": {}, + "outputs": [], + "source": [ + "# # Create chroma index\n", + "# index = VectorStoreIndex.from_documents(\n", + "# documents, storage_context=storage_context,\n", + "# service_context=service_context\n", + "# )" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "176a1285-bb3c-46a4-892a-1957ccb74c99", + "metadata": {}, + "outputs": [], + "source": [ + "text_qa_template_str_fr = (\n", + " \"<|system|>: Vous êtes un assistant IA qui répond à la question posée à la fin en utilisant le contexte suivant. Toutes les informations factuelles que vous utilisez pour répondre proviennent exclusivement du contexte. Si vous ne connaissez pas la réponse, dites simplement que vous ne savez pas, n'essayez pas d'inventer une réponse. Veuillez répondre exclusivement en français. \\n\"\n", + " \"<|user|>: {context_str}\\n\"\n", + " \"Question: {query_str} \\n\"\n", + " \"<|assistant|>:\"\n", + ")\n", + "\n", + "text_qa_template = PromptTemplate(text_qa_template_str_fr)\n", + "\n", + "refine_template_str_fr = (\n", + " \"<|user|>: La requête originale est la suivante : {query_str}\\n\"\n", + " \"Nous avons fourni une première réponse : {existing_answer}\\n\"\n", + " \"Nous avons la possibilité d'affiner la réponse existante (seulement si nécessaire) avec un peu plus de contexte ci-dessous.\\n\"\n", + " \"------------\\n\"\n", + " \"{context_msg}\\n\"\n", + " \"------------\\n\"\n", + " \"Compte tenu du nouveau contexte, la réponse initiale est affinée afin de mieux répondre à la requête. Si le contexte n'est pas utile, renvoyer la réponse originale. \\n\"\n", + " \"<|assistant|>:\"\n", + ")\n", + "refine_template = PromptTemplate(refine_template_str_fr)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "02350391-a152-4b70-8ed4-a8a3dde96728", + "metadata": {}, + "outputs": [], + "source": [ + "query_engine = index.as_query_engine(\n", + " text_qa_template=text_qa_template,\n", + " refine_template=refine_template,\n", + " #response_mode=\"compact\",\n", + " response_mode=\"refine\",\n", + " similarity_top_k=5,\n", + " streaming=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "f979bd65-217d-480b-a377-5b3a58593156", + "metadata": {}, + "outputs": [], + "source": [ + "def display_prompt_dict(prompts_dict):\n", + " for k, p in prompts_dict.items():\n", + " text_md = f\"**Prompt Key**: {k}
\" f\"**Text:**
\"\n", + " display(Markdown(text_md))\n", + " print(p.get_template())\n", + " display(Markdown(\"

\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "37ba2a5d-5eca-43aa-ac28-b071e1cbfba4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "**Prompt Key**: response_synthesizer:text_qa_template
**Text:**
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<|system|>: Vous êtes un assistant IA qui répond à la question posée à la fin en utilisant le contexte suivant. Toutes les informations factuelles que vous utilisez pour répondre proviennent exclusivement du contexte. Si vous ne connaissez pas la réponse, dites simplement que vous ne savez pas, n'essayez pas d'inventer une réponse. Veuillez répondre exclusivement en français. \n", + "<|user|>: {context_str}\n", + "Question: {query_str} \n", + "<|assistant|>:\n" + ] + }, + { + "data": { + "text/markdown": [ + "

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "**Prompt Key**: response_synthesizer:refine_template
**Text:**
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<|user|>: La requête originale est la suivante : {query_str}\n", + "Nous avons fourni une première réponse : {existing_answer}\n", + "Nous avons la possibilité d'affiner la réponse existante (seulement si nécessaire) avec un peu plus de contexte ci-dessous.\n", + "------------\n", + "{context_msg}\n", + "------------\n", + "Compte tenu du nouveau contexte, la réponse initiale est affinée afin de mieux répondre à la requête. Si le contexte n'est pas utile, renvoyer la réponse originale. \n", + "<|assistant|>:\n" + ] + }, + { + "data": { + "text/markdown": [ + "

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_prompt_dict(query_engine.get_prompts())" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "8bcff0b7-300b-4698-86df-f36171b1ee02", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "En complément de notre réponse initiale, la Caisse d'Epargne Rhône Alpes a récemment financé un projet ambitieux de construction de 44 centrales solaires pour le compte de Terr e et Lac, une société spécialisée dans la production d'énergies renouvelables. Le montant total de ce financement bancaire s'élève à 14,5 millions d'euros et permettra la construction de centrales photovoltaïques sur les toitures, ombrières de parking et sol principalement situées en Auvergne-Rhône-Alpes. Ces installations représentent une capacité totale de 12,5 MWc. La Caisse d'Epargne Rhône Alpes est une banque régionale coopérative qui joue un rôle prépondérant dans le financement de la transition environnementale sur son territoire. Elle accompagne les entreprises de toutes tailles, les projets structurants des collectivités territoriales et le développement des producteurs d'énergies renouvelables en vertu de son engagement au Contrat d'Utilité. Les clients particuliers avec des projets de rénovation bénéficient des conseils de France Rénov’, partenaire de la Caisse d’Epargne Rhône Alpes. Pour les entreprises et collectivités, la transition énergétique est un enjeu majeur. La Caisse d'Epargne Rhône Alpes accompagne leur démarche de transformation via des financements adaptés, comme le Prêt à Impact - une offre innovante de financement dont le taux d’intérêt est indexé sur des objectifs environnementaux et/ou sociétaux - ou encore une gamme de prêts « green » à disposition des acteurs économiques pour leur transition écologique. De plus, elle propose des conseils et expertises sur-mesure selon les besoins et secteurs d’activité.\n", + "\n", + "Ce financement s'inscrit dans la feuille de route de la Caisse d'Epargne Rhône Alpes qui a mis au cœur de ses priorités la transition énergétique et le financement des ENR à l'échelle de ses territoires. Selon Sébastien Fenet, Directeur Général de Terre et Lac : « Depuis sa création, Terre et Lac accompagne les acteurs de notre région, entreprises, agriculteurs et collectivités locales dans la transition énergétique. Forts de cet ancrage territorial que n'ous sommes fiers de partager avec notre partenaire bancaire la Caisse d’Epargne Rhône Alpes , nous contribuons ensemble au développement des énergies renouvelables avec la même préoccupation : développer des projets respectueux de leur environnement en étroite collaboration avec le sénat de notre territoire ».\n", + "\n", + "La Caisse d'Epargne Rhône Alpes est une banque régionale, commerciale et coopérative de plein exercice présente sur cinq départements (Ain, Isère, Rhône, Savoie et Haute-Savoie) et sur tous les métiers de la banque. Elle compte 1,4 million de clients, 458 000 sociétaires, 3 000 collaborateurs et 280 agences.CPU times: user 8.12 s, sys: 932 ms, total: 9.05 s\n", + "Wall time: 1min 26s\n" + ] + } + ], + "source": [ + "%%time\n", + "response = query_engine.query('''Quels sont les offres commerciales de la Caisse d'Epargne Rhône Alpes en faveur de la transition environnementale ?''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "7c7f1e8b-cb21-4cc6-8d51-8e29ced1ba6a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "88c623578b.txt\n", + "bdc7145c09.pdf\n", + "7a4caa88da.pdf\n", + "0a235f3915.txt\n", + "bdc7145c09.pdf\n" + ] + } + ], + "source": [ + "for node in response.source_nodes:\n", + " print(node.metadata[\"file_name\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "876154c4-2dbb-4170-a244-98f17e763955", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "88c623578b.txt\n", + "\n", + "---------------------------\n", + "\n" + ] + }, + { + "data": { + "text/markdown": [ + "caissedepargnerhonealpes.fr/responsable-solidaire/)\n", + "Développement durable\n", + "\n", + "Partager\n", + "\n", + "# Engagée dans le Développement Durable\n", + "\n", + "Agir pour la transition écologique\n", + "\n", + "Réduire notre empreinte environnementale\n", + "\n", + "Dans le cadre de sa démarche RSE, la Caisse d’Epargne Rhône Alpes poursuit une\n", + "politique volontariste pour répondre aux défis de la transition énergétique.\n", + "Elle accompagne l’ensemble de ses clients dans la transition vers une économie\n", + "plus durable, et agit à son niveau pour limiter l’impact de son activité sur\n", + "l’environnement.\n", + "\n", + "## **Agir pour la transition écologique**\n", + "\n", + "![](https://www.caissedepargnerhonealpes.fr/wp-\n", + "content/uploads/2021/11/491843054-2-806x1024.jpg)\n", + "\n", + "**Accompagner la transformation des territoires**\n", + "\n", + "Acteur majeur de l’Economie Locale, la Caisse d’Epargne Rhône Alpes joue\n", + "pleinement son rôle de grande banque coopérative régionale en favorisant le\n", + "financement d’infrastructures à impact positif sur notre territoire. Energies\n", + "renouvelables, ascenseurs valléens, rénovation énergétique de logements\n", + "sociaux, valorisation des déchets… elle accompagne de grands projets à haute\n", + "valeur environnementale." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "efcbb5b260.txt\n", + "\n", + "---------------------------\n", + "\n" + ] + }, + { + "data": { + "text/markdown": [ + "plus utile\n", + "\n", + "Contribuer à la transition énergétique\n", + "\n", + "Accompagner l'activité économique\n", + "\n", + "Soutenir les projets solidaires\n", + "\n", + "Favoriser l'emploi des jeunes\n", + "\n", + "Régionale et coopérative, la Caisse d’Epargne Rhône Alpes s’engage au plus\n", + "près des besoins du territoire pour accompagner les transitions économiques,\n", + "environnementales et sociales. C’est le Contrat d’Utilité.​ Que représente-t-\n", + "il concrètement ? Voici quelques exemples de réalisation.\n", + "\n", + "## Être utile, c'est aussi…\n", + "\n", + "### **Cont** ribuer à la transition énergétique\n", + "\n", + "![](https://www.caissedepargnerhonealpes.fr/wp-\n", + "content/uploads/2023/09/CERA_AFF-600x800mm_4visuels_v2_00004-768x1024.png)\n", + "\n", + "La Caisse d'Epargne Rhône Alpes accompagne la **rénovation énergétique de plus\n", + "de 1 000 logements par an**. Les clients particuliers avec des projets de\n", + "rénovation bénéficient des [conseils](https://www.caisse-epargne.fr/rhone-\n", + "alpes/emprunter/maprimerenov/) de France Rénov’, partenaire de la Caisse\n", + "d’Epargne Rhône Alpes.\n", + "\n", + "**Pour les entreprises et collectivités, la transition énergétique est un\n", + "enjeu majeur**." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bdc7145c09.pdf\n", + "\n", + "---------------------------\n", + "\n" + ] + }, + { + "data": { + "text/markdown": [ + "Communiqué de presse \n", + "Lyon, le 31 août 2023 \n", + " \n", + "La Caisse d’Epargne Rhône Alpes finance un ambitieu x projet \n", + "d’installations photovoltaïques de Terre et Lac \n", + " \n", + "La Caisse d’Epargne Rhône Alpes arrange la mise en place d’un financement bancaire de \n", + "14,5 millions d’euros pour la construction par Terr e et Lac de 44 centrales solaires. \n", + " \n", + "Terre et Lac, producteur indépendant d’énergies, es t un expert photovoltaïque des grandes \n", + "toitures, ombrières de parking et sol. La société a finalisé une opération de financement pour un \n", + "montant total de 14,5 M€ avec la Caisse d’Epargne R hône Alpes. Cette opération permet la \n", + "constitution d’un portefeuille de projets greenfield regroupant 44 centrales photovoltaïques en \n", + "toiture essentiellement situées en Auvergne-Rhône-A lpes. Ces installations représentent une \n", + "capacité totale de 12,5 MWc. \n", + " \n", + "La Caisse d’Epargne Rhône Alpes, banque régionale c oopérative, est un acteur de premier plan \n", + "du financement de la transition environnementale su r son territoire. Forte de son ancrage \n", + "régional, elle accompagne la transition des entrepr ises de toutes tailles, les projets structurants \n", + "des collectivités territoriales et le développement des producteurs d’énergies renouvelables." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "efcbb5b260.txt\n", + "\n", + "---------------------------\n", + "\n" + ] + }, + { + "data": { + "text/markdown": [ + "Les clients particuliers avec des projets de\n", + "rénovation bénéficient des [conseils](https://www.caisse-epargne.fr/rhone-\n", + "alpes/emprunter/maprimerenov/) de France Rénov’, partenaire de la Caisse\n", + "d’Epargne Rhône Alpes.\n", + "\n", + "**Pour les entreprises et collectivités, la transition énergétique est un\n", + "enjeu majeur**. La Caisse d'Epargne Rhône Alpes [accompagne leur démarche de\n", + "transformation](https://www.caisse-epargne.fr/rhone-\n", + "alpes/professionnels/conseils/choisir-solutions-durables-responsables/) via :\n", + "\n", + " * Des financements adaptés, comme le Prêt à Impact - une offre innovante de financement dont le taux d’intérêt est indexé sur des objectifs environnementaux et/ou sociétaux - ou encore une gamme de prêts « green » à disposition des acteurs économiques pour leur transition écologique, \n", + " * Des conseils et expertises sur-mesure selon les besoins et secteurs d’activité." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bdc7145c09.pdf\n", + "\n", + "---------------------------\n", + "\n" + ] + }, + { + "data": { + "text/markdown": [ + "Ce financement s ’inscrit dans la feuille de route de la Caisse \n", + "d’Epargne Rhône Alpes qui a mis au cœur de ses prio rités la transition énergétique et le \n", + "financement des ENR à l’échelle de ses territoires. » \n", + " \n", + "Sébastien Fenet , Directeur Général de Terre et Lac : « Depuis sa création, Terre et Lac accompagne \n", + "les acteurs de notre région, entreprises, agriculte urs et collectivité locales dans la transition \n", + "énergétique. Forts de cet ancrage territorial que n ous sommes fiers de partager avec notre \n", + "partenaire bancaire la Caisse d’Epargne Rhône Alpes , nous contribuons ensemble au développement \n", + "des énergies renouvelables avec la même préoccupati on : développer des projets respectueux de \n", + "leur environnement en étroite collaboration avec le s habitants de notre territoire » \n", + " \n", + " \n", + "À propos de la Caisse d’Epargne Rhône Alpes : \n", + "La Caisse d’Epargne Rhône Alpes est une banque comm erciale, régionale et coopérative de plein exercice présente sur \n", + "cinq départements (Ain, Isère, Rhône, Savoie et Hau te-Savoie) et sur tous les métiers de la banque. El le agit au \n", + "quotidien pour le développement de son territoire. \n", + "Elle compte 1,4 million de clients, 458 000 sociéta ires, 3 000 collaborateurs, 280 agences." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for node in response.source_nodes:\n", + " print(node.metadata[\"file_name\"])\n", + " print(\"\\n---------------------------\\n\")\n", + " display(Markdown(node.text))\n", + " display(Markdown(\"---\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d42ad6a8-caae-46e9-96b6-bc8dba6397a7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "RAG_ENV", + "language": "python", + "name": "rag_env" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/rag_fr_2.ipynb b/rag_fr_2.ipynb new file mode 100644 index 0000000..bf20830 --- /dev/null +++ b/rag_fr_2.ipynb @@ -0,0 +1,1209 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "6503d5b0-6cf3-42d8-982c-353eb42d9d26", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/peportier/miniforge3/envs/RAG_ENV/lib/python3.9/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n", + "/Users/peportier/miniforge3/envs/RAG_ENV/lib/python3.9/site-packages/transformers/utils/generic.py:441: UserWarning: torch.utils._pytree._register_pytree_node is deprecated. Please use torch.utils._pytree.register_pytree_node instead.\n", + " _torch_pytree._register_pytree_node(\n" + ] + } + ], + "source": [ + "from llama_index import (\n", + " SimpleDirectoryReader,\n", + " VectorStoreIndex,\n", + " ServiceContext,\n", + " set_global_tokenizer,\n", + " load_index_from_storage,\n", + ")\n", + "from llama_index.llms import LlamaCPP\n", + "from llama_index.llms.llama_utils import (\n", + " messages_to_prompt,\n", + " completion_to_prompt,\n", + ")\n", + "from llama_index.vector_stores import ChromaVectorStore\n", + "from llama_index.storage.storage_context import StorageContext\n", + "from llama_index.embeddings import HuggingFaceEmbedding\n", + "from llama_index.query_engine import CitationQueryEngine\n", + "from llama_index.prompts import PromptTemplate\n", + "\n", + "from IPython.display import Markdown, display\n", + "\n", + "from transformers import AutoTokenizer\n", + "\n", + "import os\n", + "\n", + "import chromadb" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "15e2462f-5d5b-4f4b-8119-de782c400d78", + "metadata": {}, + "outputs": [], + "source": [ + "def messages_to_prompt(messages):\n", + " prompt = \"\"\n", + " for message in messages:\n", + " if message.role == 'system':\n", + " prompt += f\"<|system|>\\n{message.content}\\n\"\n", + " elif message.role == 'user':\n", + " prompt += f\"<|user|>\\n{message.content}\\n\"\n", + " elif message.role == 'assistant':\n", + " prompt += f\"<|assistant|>\\n{message.content}\\n\"\n", + "\n", + " # ensure we start with a system prompt, insert blank if needed\n", + " if not prompt.startswith(\"<|system|>\\n\"):\n", + " prompt = \"<|system|>\\n\\n\" + prompt\n", + "\n", + " # add final assistant prompt\n", + " prompt = prompt + \"<|assistant|>\\n\"\n", + "\n", + " return prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "373e13fb-9233-4b0b-8dc3-a1e24117bd76", + "metadata": {}, + "outputs": [], + "source": [ + "def completion_to_prompt(completion, system_prompt=None):\n", + " prompt = \"\"\n", + " system_prompt_str = system_prompt or \"\"\"\\\n", + "Vous fournissez avec soin des réponses précises, factuelles, réfléchies et nuancées, et vous êtes doué pour le raisonnement. \\\n", + "Si vous pensez qu'il n'y a peut-être pas de bonne réponse, vous le dites. \\\n", + "Ne soyez pas verbeux dans vos réponses, mais donnez des détails et des exemples lorsque cela peut aider à l'explication. \\\n", + "\"\"\"\n", + " prompt = f\"<|system|>\\n {system_prompt_str.strip()} \\n\"\n", + " prompt += f\"<|user|>\\n {completion} \\n\"\n", + " prompt += f\"<|assistant|>\\n\"\n", + " return prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "05f54aec-f155-4f4b-9b19-874c13db87cc", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "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))\n", + "llama_model_loader: - tensor 0: token_embd.weight q5_K [ 4096, 32000, 1, 1 ]\n", + "llama_model_loader: - tensor 1: blk.0.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 2: blk.0.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 3: blk.0.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 4: blk.0.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 5: blk.0.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 6: blk.0.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 7: blk.0.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 8: blk.0.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 9: blk.0.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 10: blk.1.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 11: blk.1.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 12: blk.1.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 13: blk.1.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 14: blk.1.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 15: blk.1.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 16: blk.1.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 17: blk.1.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 18: blk.1.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 19: blk.2.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 20: blk.2.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 21: blk.2.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 22: blk.2.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 23: blk.2.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 24: blk.2.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 25: blk.2.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 26: blk.2.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 27: blk.2.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 28: blk.3.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 29: blk.3.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 30: blk.3.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 31: blk.3.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 32: blk.3.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 33: blk.3.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 34: blk.3.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 35: blk.3.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 36: blk.3.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 37: blk.4.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 38: blk.4.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 39: blk.4.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 40: blk.4.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 41: blk.4.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 42: blk.4.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 43: blk.4.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 44: blk.4.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 45: blk.4.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 46: blk.5.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 47: blk.5.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 48: blk.5.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 49: blk.5.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 50: blk.5.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 51: blk.5.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 52: blk.5.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 53: blk.5.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 54: blk.5.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 55: blk.6.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 56: blk.6.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 57: blk.6.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 58: blk.6.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 59: blk.6.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 60: blk.6.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 61: blk.6.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 62: blk.6.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 63: blk.6.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 64: blk.7.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 65: blk.7.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 66: blk.7.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 67: blk.7.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 68: blk.7.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 69: blk.7.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 70: blk.7.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 71: blk.7.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 72: blk.7.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 73: blk.8.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 74: blk.8.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 75: blk.8.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 76: blk.8.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 77: blk.10.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 78: blk.10.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 79: blk.10.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 80: blk.10.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 81: blk.10.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 82: blk.10.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 83: blk.10.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 84: blk.10.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 85: blk.10.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 86: blk.11.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 87: blk.11.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 88: blk.11.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 89: blk.11.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 90: blk.11.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 91: blk.11.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 92: blk.11.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 93: blk.11.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 94: blk.11.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 95: blk.12.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 96: blk.12.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 97: blk.12.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 98: blk.12.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 99: blk.12.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 100: blk.12.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 101: blk.8.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 102: blk.8.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 103: blk.8.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 104: blk.8.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 105: blk.8.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 106: blk.9.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 107: blk.9.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 108: blk.9.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 109: blk.9.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 110: blk.9.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 111: blk.9.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 112: blk.9.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 113: blk.9.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 114: blk.9.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 115: blk.12.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 116: blk.12.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 117: blk.12.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 118: blk.13.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 119: blk.13.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 120: blk.13.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 121: blk.13.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 122: blk.13.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 123: blk.13.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 124: blk.13.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 125: blk.13.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 126: blk.13.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 127: blk.14.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 128: blk.14.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 129: blk.14.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 130: blk.14.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 131: blk.14.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 132: blk.14.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 133: blk.14.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 134: blk.14.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 135: blk.14.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 136: blk.15.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 137: blk.15.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 138: blk.15.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 139: blk.15.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 140: blk.15.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 141: blk.15.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 142: blk.15.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 143: blk.15.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 144: blk.15.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 145: blk.16.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 146: blk.16.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 147: blk.16.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 148: blk.16.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 149: blk.16.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 150: blk.16.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 151: blk.16.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 152: blk.16.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 153: blk.16.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 154: blk.17.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 155: blk.17.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 156: blk.17.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 157: blk.17.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 158: blk.17.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 159: blk.17.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 160: blk.17.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 161: blk.17.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 162: blk.17.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 163: blk.18.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 164: blk.18.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 165: blk.18.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 166: blk.18.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 167: blk.18.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 168: blk.18.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 169: blk.18.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 170: blk.18.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 171: blk.18.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 172: blk.19.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 173: blk.19.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 174: blk.19.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 175: blk.19.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 176: blk.19.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 177: blk.19.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 178: blk.19.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 179: blk.19.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 180: blk.19.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 181: blk.20.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 182: blk.20.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 183: blk.20.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 184: blk.20.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 185: blk.20.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 186: blk.20.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 187: blk.20.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 188: blk.20.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 189: blk.20.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 190: blk.21.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 191: blk.21.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 192: blk.21.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 193: blk.21.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 194: blk.21.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 195: blk.21.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 196: blk.21.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 197: blk.21.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 198: blk.21.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 199: blk.22.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 200: blk.22.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 201: blk.22.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 202: blk.22.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 203: blk.22.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 204: blk.22.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 205: blk.22.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 206: blk.22.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 207: blk.22.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 208: blk.23.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 209: blk.23.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 210: blk.23.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 211: blk.23.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 212: blk.23.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 213: blk.23.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 214: blk.23.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 215: blk.23.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 216: blk.23.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 217: blk.24.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 218: blk.24.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 219: blk.24.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 220: blk.24.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 221: blk.24.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 222: blk.24.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 223: blk.24.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 224: blk.24.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 225: blk.24.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 226: blk.25.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 227: blk.25.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 228: blk.25.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 229: blk.25.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 230: blk.25.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 231: blk.25.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 232: blk.25.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 233: blk.25.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 234: blk.25.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 235: blk.26.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 236: blk.26.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 237: blk.26.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 238: blk.26.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 239: blk.26.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 240: blk.26.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 241: blk.26.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 242: blk.26.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 243: blk.26.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 244: blk.27.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 245: blk.27.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 246: blk.27.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 247: blk.27.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 248: blk.27.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 249: blk.27.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 250: blk.27.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 251: blk.27.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 252: blk.27.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 253: blk.28.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 254: blk.28.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 255: blk.28.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 256: blk.28.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 257: blk.28.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 258: blk.28.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 259: blk.28.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 260: blk.28.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 261: blk.28.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 262: blk.29.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 263: blk.29.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 264: blk.29.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 265: blk.29.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 266: blk.29.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 267: blk.29.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 268: blk.29.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 269: blk.29.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 270: blk.29.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 271: blk.30.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 272: blk.30.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 273: blk.30.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 274: blk.30.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 275: blk.30.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 276: blk.30.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 277: output.weight q6_K [ 4096, 32000, 1, 1 ]\n", + "llama_model_loader: - tensor 278: blk.30.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 279: blk.30.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 280: blk.30.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 281: blk.31.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 282: blk.31.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 283: blk.31.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 284: blk.31.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 285: blk.31.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 286: blk.31.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 287: blk.31.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 288: blk.31.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 289: blk.31.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 290: output_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - kv 0: general.architecture str = llama\n", + "llama_model_loader: - kv 1: general.name str = huggingfaceh4_zephyr-7b-beta\n", + "llama_model_loader: - kv 2: llama.context_length u32 = 32768\n", + "llama_model_loader: - kv 3: llama.embedding_length u32 = 4096\n", + "llama_model_loader: - kv 4: llama.block_count u32 = 32\n", + "llama_model_loader: - kv 5: llama.feed_forward_length u32 = 14336\n", + "llama_model_loader: - kv 6: llama.rope.dimension_count u32 = 128\n", + "llama_model_loader: - kv 7: llama.attention.head_count u32 = 32\n", + "llama_model_loader: - kv 8: llama.attention.head_count_kv u32 = 8\n", + "llama_model_loader: - kv 9: llama.attention.layer_norm_rms_epsilon f32 = 0.000010\n", + "llama_model_loader: - kv 10: llama.rope.freq_base f32 = 10000.000000\n", + "llama_model_loader: - kv 11: general.file_type u32 = 17\n", + "llama_model_loader: - kv 12: tokenizer.ggml.model str = llama\n", + "llama_model_loader: - kv 13: tokenizer.ggml.tokens arr[str,32000] = [\"\", \"\", \"\", \"<0x00>\", \"<...\n", + "llama_model_loader: - kv 14: tokenizer.ggml.scores arr[f32,32000] = [0.000000, 0.000000, 0.000000, 0.0000...\n", + "llama_model_loader: - kv 15: tokenizer.ggml.token_type arr[i32,32000] = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...\n", + "llama_model_loader: - kv 16: tokenizer.ggml.bos_token_id u32 = 1\n", + "llama_model_loader: - kv 17: tokenizer.ggml.eos_token_id u32 = 2\n", + "llama_model_loader: - kv 18: tokenizer.ggml.unknown_token_id u32 = 0\n", + "llama_model_loader: - kv 19: tokenizer.ggml.padding_token_id u32 = 2\n", + "llama_model_loader: - kv 20: general.quantization_version u32 = 2\n", + "llama_model_loader: - type f32: 65 tensors\n", + "llama_model_loader: - type q5_K: 193 tensors\n", + "llama_model_loader: - type q6_K: 33 tensors\n", + "llm_load_vocab: special tokens definition check successful ( 259/32000 ).\n", + "llm_load_print_meta: format = GGUF V3 (latest)\n", + "llm_load_print_meta: arch = llama\n", + "llm_load_print_meta: vocab type = SPM\n", + "llm_load_print_meta: n_vocab = 32000\n", + "llm_load_print_meta: n_merges = 0\n", + "llm_load_print_meta: n_ctx_train = 32768\n", + "llm_load_print_meta: n_embd = 4096\n", + "llm_load_print_meta: n_head = 32\n", + "llm_load_print_meta: n_head_kv = 8\n", + "llm_load_print_meta: n_layer = 32\n", + "llm_load_print_meta: n_rot = 128\n", + "llm_load_print_meta: n_gqa = 4\n", + "llm_load_print_meta: f_norm_eps = 0.0e+00\n", + "llm_load_print_meta: f_norm_rms_eps = 1.0e-05\n", + "llm_load_print_meta: f_clamp_kqv = 0.0e+00\n", + "llm_load_print_meta: f_max_alibi_bias = 0.0e+00\n", + "llm_load_print_meta: n_ff = 14336\n", + "llm_load_print_meta: rope scaling = linear\n", + "llm_load_print_meta: freq_base_train = 10000.0\n", + "llm_load_print_meta: freq_scale_train = 1\n", + "llm_load_print_meta: n_yarn_orig_ctx = 32768\n", + "llm_load_print_meta: rope_finetuned = unknown\n", + "llm_load_print_meta: model type = 7B\n", + "llm_load_print_meta: model ftype = mostly Q5_K - Medium\n", + "llm_load_print_meta: model params = 7.24 B\n", + "llm_load_print_meta: model size = 4.78 GiB (5.67 BPW) \n", + "llm_load_print_meta: general.name = huggingfaceh4_zephyr-7b-beta\n", + "llm_load_print_meta: BOS token = 1 ''\n", + "llm_load_print_meta: EOS token = 2 ''\n", + "llm_load_print_meta: UNK token = 0 ''\n", + "llm_load_print_meta: PAD token = 2 ''\n", + "llm_load_print_meta: LF token = 13 '<0x0A>'\n", + "llm_load_tensors: ggml ctx size = 0.11 MiB\n", + "llm_load_tensors: mem required = 4893.10 MiB\n", + "...................................................................................................\n", + "llama_new_context_with_model: n_ctx = 3900\n", + "llama_new_context_with_model: freq_base = 10000.0\n", + "llama_new_context_with_model: freq_scale = 1\n", + "llama_new_context_with_model: kv self size = 487.50 MiB\n", + "llama_build_graph: non-view tensors processed: 740/740\n", + "ggml_metal_init: allocating\n", + "ggml_metal_init: found device: Apple M2 Max\n", + "ggml_metal_init: picking default device: Apple M2 Max\n", + "ggml_metal_init: default.metallib not found, loading from source\n", + "ggml_metal_init: loading '/Users/peportier/miniforge3/envs/RAG_ENV/lib/python3.9/site-packages/llama_cpp/ggml-metal.metal'\n", + "ggml_metal_init: GPU name: Apple M2 Max\n", + "ggml_metal_init: GPU family: MTLGPUFamilyApple8 (1008)\n", + "ggml_metal_init: hasUnifiedMemory = true\n", + "ggml_metal_init: recommendedMaxWorkingSetSize = 49152.00 MiB\n", + "ggml_metal_init: maxTransferRate = built-in GPU\n", + "llama_new_context_with_model: compute buffer total size = 278.43 MiB\n", + "llama_new_context_with_model: max tensor size = 102.54 MiB\n", + "ggml_metal_add_buffer: allocated 'data ' buffer, size = 4893.70 MiB, ( 4894.33 / 49152.00)\n", + "ggml_metal_add_buffer: allocated 'kv ' buffer, size = 487.52 MiB, ( 5381.84 / 49152.00)\n", + "ggml_metal_add_buffer: allocated 'alloc ' buffer, size = 275.38 MiB, ( 5657.22 / 49152.00)\n" + ] + } + ], + "source": [ + "llm = LlamaCPP(\n", + " # You can pass in the URL to a GGML model to download it automatically\n", + " model_url=None,\n", + " # optionally, you can set the path to a pre-downloaded model instead of model_url\n", + " # model_path='/Users/peportier/llm/a/a/mistral-7b-openorca.Q4_K_M.gguf',\n", + " model_path='/Users/peportier/llm/a/a/zephyr-7b-beta.Q5_K_M.gguf',\n", + " temperature=0.1,\n", + " max_new_tokens=1024,\n", + " # llama2 has a context window of 4096 tokens, but we set it lower to allow for some wiggle room\n", + " context_window=3900,\n", + " # kwargs to pass to __call__()\n", + " # https://llama-cpp-python.readthedocs.io/en/latest/api-reference/#llama_cpp.Llama.__call__\n", + " generate_kwargs={\n", + " \"temperature\": 0.1,\n", + " \"mirostat_mode\": 2,\n", + " },\n", + " # kwargs to pass to __init__()\n", + " # https://llama-cpp-python.readthedocs.io/en/latest/api-reference/#llama_cpp.Llama.__init__\n", + " # set to at least 1 to use GPU\n", + " model_kwargs={\n", + " \"n_gpu_layers\": 1,\n", + " },\n", + " # transform inputs into Llama2 format\n", + " messages_to_prompt=messages_to_prompt,\n", + " completion_to_prompt=completion_to_prompt,\n", + " verbose=False,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "42734468-f0c4-46ff-8676-98d4bde99a86", + "metadata": {}, + "outputs": [], + "source": [ + "model_name = \"HuggingFaceH4/zephyr-7b-beta\"\n", + "set_global_tokenizer(\n", + " AutoTokenizer.from_pretrained(model_name).encode\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "39fadac2-a30e-41ca-85b5-35fc49f9842c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "config.json: 100%|██████████████████████████████| 683/683 [00:00<00:00, 428kB/s]\n", + "/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.\n", + " _torch_pytree._register_pytree_node(\n", + "model.safetensors: 100%|███████████████████| 1.35G/1.35G [09:34<00:00, 2.34MB/s]\n", + "tokenizer_config.json: 100%|████████████████████| 400/400 [00:00<00:00, 449kB/s]\n", + "sentencepiece.bpe.model: 100%|███████████████| 809k/809k [00:00<00:00, 1.78MB/s]\n", + "special_tokens_map.json: 100%|██████████████████| 298/298 [00:00<00:00, 360kB/s]\n" + ] + } + ], + "source": [ + "# embed_model = HuggingFaceEmbedding(model_name=\"BAAI/bge-small-en-v1.5\")\n", + "# embed_model = HuggingFaceEmbedding(model_name=\"sentence-transformers/all-MiniLM-L6-v2\")\n", + "# embed_model = HuggingFaceEmbedding(model_name=\"sentence-transformers/distiluse-base-multilingual-cased-v1\")\n", + "embed_model = HuggingFaceEmbedding(model_name=\"dangvantuan/sentence-camembert-large\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fbb8f6f3-9175-4f90-bd67-be8efb37ae17", + "metadata": {}, + "outputs": [], + "source": [ + "service_context = ServiceContext.from_defaults(\n", + " llm=llm,\n", + " embed_model=embed_model,\n", + " chunk_size=512,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c06f2c57-8f7b-41ad-9053-bdfefc80fd98", + "metadata": {}, + "outputs": [], + "source": [ + "if not os.path.exists(\"./index_cera2\"):\n", + " documents = SimpleDirectoryReader(\"./docs/cera2\").load_data()\n", + " index = VectorStoreIndex.from_documents(\n", + " documents, service_context=service_context\n", + " )\n", + " index.storage_context.persist(persist_dir=\"./index_cera2\")\n", + "else:\n", + " index = load_index_from_storage(\n", + " StorageContext.from_defaults(persist_dir=\"./index_cera2\"),\n", + " service_context=service_context,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b583c0c0-85a1-4384-83de-0001c9452a3f", + "metadata": {}, + "outputs": [], + "source": [ + "# db = chromadb.PersistentClient(path=\"./chroma_db\")\n", + "# chroma_collection = db.get_or_create_collection(\"env\")\n", + "# vector_store = ChromaVectorStore(chroma_collection=chroma_collection)\n", + "# storage_context = StorageContext.from_defaults(vector_store=vector_store)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7a6a9f9-a3d6-47fe-8cd8-13384e07f16a", + "metadata": {}, + "outputs": [], + "source": [ + "# # Create chroma index\n", + "# index = VectorStoreIndex.from_documents(\n", + "# documents, storage_context=storage_context,\n", + "# service_context=service_context\n", + "# )" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "176a1285-bb3c-46a4-892a-1957ccb74c99", + "metadata": {}, + "outputs": [], + "source": [ + "text_qa_template_str_fr = (\n", + " \"<|system|>: Vous êtes un assistant IA qui répond à la question posée à la fin en utilisant le contexte suivant. Toutes les informations factuelles que vous utilisez pour répondre proviennent exclusivement du contexte. Si vous ne connaissez pas la réponse, dites simplement que vous ne savez pas, n'essayez pas d'inventer une réponse. Veuillez répondre exclusivement en français. \\n\"\n", + " \"<|user|>: {context_str}\\n\"\n", + " \"Question: {query_str} \\n\"\n", + " \"<|assistant|>:\"\n", + ")\n", + "\n", + "text_qa_template = PromptTemplate(text_qa_template_str_fr)\n", + "\n", + "refine_template_str_fr = (\n", + " \"<|user|>: La requête originale est la suivante : {query_str}\\n\"\n", + " \"Nous avons fourni une première réponse : {existing_answer}\\n\"\n", + " \"Nous avons la possibilité d'affiner la réponse existante (seulement si nécessaire) avec un peu plus de contexte ci-dessous.\\n\"\n", + " \"------------\\n\"\n", + " \"{context_msg}\\n\"\n", + " \"------------\\n\"\n", + " \"Compte tenu du nouveau contexte, la réponse initiale est affinée afin de mieux répondre à la requête. Si le contexte n'est pas utile, renvoyer la réponse originale. \\n\"\n", + " \"<|assistant|>:\"\n", + ")\n", + "refine_template = PromptTemplate(refine_template_str_fr)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "02350391-a152-4b70-8ed4-a8a3dde96728", + "metadata": {}, + "outputs": [], + "source": [ + "query_engine = index.as_query_engine(\n", + " text_qa_template=text_qa_template,\n", + " refine_template=refine_template,\n", + " response_mode=\"compact\",\n", + " #response_mode=\"refine\",\n", + " similarity_top_k=5,\n", + " streaming=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "f979bd65-217d-480b-a377-5b3a58593156", + "metadata": {}, + "outputs": [], + "source": [ + "def display_prompt_dict(prompts_dict):\n", + " for k, p in prompts_dict.items():\n", + " text_md = f\"**Prompt Key**: {k}
\" f\"**Text:**
\"\n", + " display(Markdown(text_md))\n", + " print(p.get_template())\n", + " display(Markdown(\"

\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "37ba2a5d-5eca-43aa-ac28-b071e1cbfba4", + "metadata": {}, + "outputs": [], + "source": [ + "display_prompt_dict(query_engine.get_prompts())" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "8bcff0b7-300b-4698-86df-f36171b1ee02", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "La Caisse d'Epargne Rhône-Alpes offre plusieurs solutions pour faciliter la vie financière des jeunes actifs :\n", + "\n", + "1. Prêts adaptés aux besoins des jeunes : La banque propose des prêts destinés à l'achat de véhicules, d'appartements ou de matériel professionnel, avec des taux d'intérêt compétitifs et des conditions favorables pour les jeunes actifs.\n", + "\n", + "2. Comptes bancaires adaptés aux besoins des jeunes : La Caisse d'Epargne Rhône-Alpes propose des comptes bancaires adaptés aux besoins des jeunes actifs, avec des fonctionnalités sans frais mensuels ni minimum d'encaissement, ce qui facilite la gestion du budget.\n", + "\n", + "3. Dispositif d'écoute et d'accueil des clients en situation de fragilité : En cas de difficultés financières, la banque propose un dispositif destiné aux clients en situation de fragilité, avec un accompagnement personnelisé.\n", + "\n", + "4. Collaborations avec des partenaires : La Caisse d'Epargne Rhône-Alpes collabore avec des partenaires pour proposer des solutions complémentaires aux jeunes actifs, comme les services de location de meublés ou les offres d'assurance-maladie étudiante.\n", + "\n", + "5. Conseils pour trouver un job : La banque propose des conseils pour trouver un emploi rapidement et pour mieux gérer son premier salaire avec le prélèvement à la source. Elle suggère également l'idée de devenir bénévole ou volontaire pour acquérir des compétences supplémentaires et se faire connaître dans un milieu professionnel.\n", + "\n", + "6. Solutions pour épargner : La Caisse d'Epargne Rhône-Alpes propose des conseils sur le type d'épargne adapté aux jeunes actifs, ainsi que des solutions pour gérer son premier compte bancaire.\n", + "\n", + "Toutes ces solutions sont accessibles en ligne ou en agence, et un conseiller clientèle est disponible à l'horaire de votre choix pour vous accompagner dans la gestion de vos finances.\n", + "\n", + "En cas de difficultés financières, la Caisse d'Epargne Rhône-Alpes propose également un dispositif destiné aux clients en situation de fragilité, avec un accompagnement personnelisé. Cette solution est adaptée à tout moment de votre vie, qu'il s'agisse d'être étudiant, salarié, en recherche d'emploi ou retraité. La banque considère que c'est l'une de ses responsabilités sociétales de proposer un dispositif d'écoute et d'accueil des clients en situation de fragilité, du fait d'un handicap ou de difficultés financières, pour adapter ses services à leurs besoins spécifiques et maintenir une écoute attentive et des solutions personnalisées.\n", + "\n", + "Ces solutions sont communiquées dans le cadre d'une communication à caractère publicitaire et sans valeur contractuelle. La Caisse d'Epargne Rhône-Alpes ne se réserve aucun droit en cas de modification ou de suppression de ces solutions. Les droits des photos utilisées sont réservés à Getty Images.\n", + "\n", + "Nous avons la possibilité d'affiner la réponse existante (seulement si nécessaire) avec un peu plus de contexte ci-dessous.\n", + "------------\n", + "file_path: docs/cera2/f378d7a627.txt\n", + "\n", + "Je suis étudiant(e)\n", + "\n", + "Pour vos études, votre budget ou votre premier appartement, Caisse d’Epargne se tient à vos côtés.\n", + "\n", + "Je suis jeune actif(ve)\n", + "\n", + "Côté travail, logement ou projets de vie, Caisse d’Epargne a toujours une solution à vous proposer.\n", + "\n", + "Budget et projets : à chacune de vos questions, Caisse d’Epargne a des réponses\n", + "\n", + "Nos derniers articles\n", + "\n", + "Comment célébrer les fêtes de fin d’annéeCPU times: user 12.2 s, sys: 1.99 s, total: 14.1 s\n", + "Wall time: 2min 24s\n" + ] + } + ], + "source": [ + "%%time\n", + "response = query_engine.query('''Comment la Caisse d'Epargne Rhône-Alpes peut-elle faciliter la vie d'un étudiant ?''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "5495795f-bb3c-4b89-91fd-fd8944ab060c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "La Caisse d'Epargne Rhône-Alpes propose plusieurs solutions adaptées aux besoins d'un étudiant pour faciliter sa vie. Voici quelques exemples :\n", + "\n", + "1. Le prêt étudiant destiné aux 18-28 ans : cette offre permet à l'étudiant de financer ses études et ses dépenses quotidiennes. Elle est disponible pour les étudiants en licence, master ou doctorat, ainsi que pour ceux qui suivent un cursus professionnalisant.\n", + "\n", + "2. Les aides financières auxquelles l'étudiant a droit : la Caisse d'Epargne propose des solutions d'assurance adaptées pour répondre à tous les besoins spécifiques de l'étudiant, comme le logement, le véhicule, la santé ou les matériels. Elle peut également aider à financer des séjours à l'étranger.\n", + "\n", + "3. Les solutions pour les jeunes actifs : Caisse d'Epargne propose des produits et des services spécialement adaptés aux étudiants et apprentis, avec des offres avantageuses et une participation à la vie de la banque.\n", + "\n", + "4. Le dispositif d'écoute et d'accueil des clients en situation de fragilité : cette initiative permet à l'étudiant qui rencontre des difficultés financières ou qui souffre d'un handicap de bénéficier d'une écoute attentive et de solutions personnalisées adaptées à ses besoins spécifiques.\n", + "\n", + "5. Les conseils pour mieux gérer son budget : la Caisse d'Epargne propose des solutions adaptées aux étudiants qui rencontrent des difficultés financières, ainsi que des conseils pour préparer leur premier salaire ou leur premier compte bancaire.\n", + "\n", + "Enfin, la Caisse d'Epargne Rhône-Alpes se tient à l'écoute de ses clients et propose des solutions sur mesure pour les aider dans toutes leurs grandes décisions.CPU times: user 1.99 s, sys: 309 ms, total: 2.3 s\n", + "Wall time: 26.5 s\n" + ] + } + ], + "source": [ + "%%time\n", + "response = query_engine.query('''Comment la Caisse d'Epargne Rhône-Alpes peut-elle faciliter la vie d'un étudiant ?''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "1807350b-f964-46bf-b8af-3da3443e9508", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pour activer la solution Sécur'Pass en tant que particulier, vous devez suivre les étapes suivantes :\n", + "\n", + "1. Ouvrez l'application mobile Caisse d'Epargne Rhône Alpes sur votre smartphone.\n", + "2. Accédez à la section \"Services\" ou \"Authentification\" dans l'application et sélectionnez \"Sécur'Pass\".\n", + "3. Suivez les instructions pour activer Sécur'Pass en renseignant votre numéro de carte bancaire Caisse d'Epargne Rhône Alpes.\n", + "4. Vous recevrez un code par SMS que vous devrez saisir dans l'application pour compléter l'activation.\n", + "5. Sélectionnez \"Sécur'Pass\" lors de votre prochaine opération en ligne ou à distance et entrez le code unique de 4 chiffres généré automatiquement par la solution Sécur'Pass.\n", + "6. Vous pouvez également activer la reconnaissance des empreintes digitales ou du visage pour remplacer l'entrée manuelle du code personnel Sécur'Pass sur 4 chiffres, si votre téléphone le permet.\n", + "7. Veillez noter que vous ne pouvez pas désactiver Sécur'Pass une fois activé, mais vous pouvez toujours contacter votre conseiller en agence pour obtenir des instructions sur la désactivation de la fonctionnalité.\n", + "\n", + "Note : Si vous n'avez pas encore ouvert un compte en ligne avec Caisse d'Epargne Rhône Alpes, vous devrez également créer un identifiant et un mot de passe lors de la première connexion en ligne.CPU times: user 1.78 s, sys: 298 ms, total: 2.08 s\n", + "Wall time: 23.1 s\n" + ] + } + ], + "source": [ + "%%time\n", + "response = query_engine.query('''Comment puis-je activer la solution Securpass en tant que particulier ?''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "d1ed31dc-394d-43a8-a409-e7280c01340b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "La Caisse d'Epargne Rhône-Alpes vous propose plusieurs solutions pour aider à la rénovation de votre maison. Tout d'abord, vous pouvez consulter leur site web en ligne pour simuler un emprunt en vue de rendre votre logement plus économe en énergie. En fonction de votre capacité de financement, vous recevrez des suggestions sur les prêts disponibles pour vous aider à financer vos travaux de rénovation énergétique.\n", + "\n", + "De plus, la Caisse d'Epargne Rhône-Alpes offre un prêt rénovation énergétique spécifique qui peut être utilisé pour améliorer l'efficacité énergétique de votre maison. Ce prêt est disponible à un taux zéro ou à un intérêt réduit, et vous pouvez également bénéficier d'aides publiques pour financer les travaux.\n", + "\n", + "En outre, la Caisse d'Epargne Rhône-Alpes propose des contrats qui protègent vos constructions vertes et votre matériel de production d'énergie. Ce contrat vous offre une protection supplémentaire pour votre maison et peut également être utilisé pour financer les travaux de rénovation énergétique.\n", + "\n", + "Pour obtenir plus d'informations sur ces solutions, vous pouvez contacter un conseiller en ligne ou dans une agence à l'horaire de votre choix. Si vous êtes déjà client de la Caisse d'Epargne Rhône-Alpes, vous pouvez également consulter votre espace personnel pour obtenir les coordonnées de votre conseiller.\n", + "\n", + "Enfin, si vous souhaitez financer des travaux d'investissement locatif ou d'achat d'un logement principal ou secondaire, la Caisse d'Epargne Rhône-Alpes peut également vous aider à trouver une solution adaptée à vos besoins.\n", + "\n", + "En bref, la Caisse d'Epargne Rhône-Alpes est un partenaire idéal pour les propriétaires qui souhaitent rénover leur maison ou investir dans l'immobilier. Ses solutions financières et ses conseils personnalisés vous aideront à atteindre vos objectifs en matière de rénovation énergétique et d'investissement locatif.CPU times: user 2.58 s, sys: 371 ms, total: 2.95 s\n", + "Wall time: 30.8 s\n" + ] + } + ], + "source": [ + "%%time\n", + "response = query_engine.query('''Je souhaite rénover ma maison. Comment la Caisse d'Epargne Rhône-Alpes peut-elle m'aider ?''')\n", + "response.print_response_stream()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "7c7f1e8b-cb21-4cc6-8d51-8e29ced1ba6a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d17d48de9f.txt\n", + "d48b16c825.txt\n", + "e9e060442f.txt\n", + "51a68d9313.txt\n", + "51a68d9313.txt\n" + ] + } + ], + "source": [ + "for node in response.source_nodes:\n", + " print(node.metadata[\"file_name\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "876154c4-2dbb-4170-a244-98f17e763955", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "99bab73424.txt\n", + "\n", + "---------------------------\n", + "\n", + "https://www.caisse-epargne.fr/rhone-alpes/clientele-fragile/\n", + "\n", + "Trouver des solutions\n", + "face aux difficultés financières\n", + "\n", + "La Caisse d'Epargne se tient à vos côtés pour vous proposer des solutions adaptées à votre situation financière.\n", + "\n", + "qui vous permettent de retrouver un équilibre dans votre budget.\n", + "\n", + "pour vous aider à gérer votre compte bancaire et vos finances au quotidien.\n", + "\n", + "pour répondre à vos différents besoins.\n", + "\n", + "Nos offres dédiées\n", + "\n", + "Vous traversez une période compliquée financièrement ? Votre Caisse d’Epargne se tient à vos côtés et peut vous proposer plusieurs solutions adaptées à votre situation.\n", + "\n", + "Nos conseils\n", + "\n", + "Étudiant, salarié, en recherche d’emploi ou retraité… À tout moment de votre vie, vous pouvez rencontrer des difficultés financières. Votre Caisse d’Epargne vous accompagne et vous propose des solutions adaptées à votre situation personnelle.\n", + "\n", + "Nos partenaires\n", + "\n", + "Découvrez les solutions proposées par nos partenaires pour vous aider à faire face à vos difficultés financières.\n", + "\n", + "Découvrez nos engagements\n", + "\n", + "La Caisse d’Epargne propose un dispositif d’écoute et d’accueil des clients en situation de fragilité, du fait d’un handicap ou de difficultés financières\n", + "\n", + "Caisse d'Epargne\n", + "\n", + "Rhône Alpes\n", + "\n", + "Prendre rendez-vous en ligne\n", + "\n", + "En agence ou par téléphone à l'horaire de votre choix\n", + "\n", + "Vous êtes déjà client ?\n", + "\n", + "Connectez-vous sur votre espace personnel pour consulter les coordonnées de votre conseiller.\n", + "02c2716018.txt\n", + "\n", + "---------------------------\n", + "\n", + "https://www.caisse-epargne.fr/rhone-alpes/jeunes/conseils-questions-cash/\n", + "\n", + "Budget et projets :\n", + "à chacune de vos questions, Caisse d’Epargne a des réponses\n", + "\n", + "Mieux gérer son budget, faire des économies, réaliser ses projets… ça s’apprend ! Caisse d'Epargne vous accompagne et vous donne tous les conseils pour y parvenir.\n", + "\n", + "Premier job, premier appartement, première voiture…\n", + "Vous êtes en quête d’astuces pour mettre de l’argent de côté et mieux gérer votre budget pour réaliser vos rêves ? Pour tous vos premiers projets,\n", + "Caisse d’Epargne vous donne tous les conseils et bonnes pratiques\n", + "pour les concrétiser avec brio.\n", + "\n", + "#Budget #Economies\n", + "\n", + "Comment optimiser son budget ?\n", + "\n", + "Quels réductions et bons plans pour les étudiants ?\n", + "\n", + "Étudiant, jeune actif… Comment gérer un budget serré ?\n", + "\n", + "Comment gérer ses dépenses et mettre de l’argent de côté ?\n", + "\n", + "Quel type d’épargne choisir\n", + "quand on est jeune ?\n", + "\n", + "Comment gérer son premier compte bancaire ?\n", + "\n", + "Des projets et des envies : comment épargner pour les réaliser ?\n", + "\n", + "Découvrez nos solutions et encore plus de conseils pour construire votre épargne et concrétiser vos projets.\n", + "\n", + "#Job #Premier emploi\n", + "\n", + "Comment trouver un job étudiant rapidement ?\n", + "\n", + "Et si, cette année, je devenais bénévole ou volontaire ?\n", + "\n", + "Premier salaire et prélèvement à la source : kesako ?\n", + "5f9c4f1f1f.txt\n", + "\n", + "---------------------------\n", + "\n", + "Je finance mes études\n", + "\n", + "Découvrez le prêt étudiant destiné aux 18-28 ans pour financer vos études et vos dépenses quotidiennes.\n", + "\n", + "Je finance mon logement\n", + "\n", + "Consultez les aides financières auxquelles vous avez droit pour meubler votre logement.\n", + "\n", + "Je m’assure\n", + "\n", + "Logement, véhicule, santé, matériel, séjours à l’étranger… Caisse d’Epargne vous propose des solutions d’assurance adaptées pour répondre à tous vos besoins spécifiques d’étudiant.\n", + "\n", + "Avantages jeunes 18 – 28 ans : ouvrez votre compte bancaire en ligne ou en agence\n", + "\n", + "Choisir Caisse d’Epargne, c’est bénéficier d’offres adaptées aux jeunes\n", + "\n", + "Les bons plans étudiants\n", + "\n", + "#1jeune1solution : des aides et des conseils pour votre avenir\n", + "\n", + "Le plan #1jeune1solution est une initiative du gouvernement pour accompagner et former les jeunes de 15 à 30 ans et faciliter leur entrée dans la vie professionnelle.\n", + "\n", + "Étudiants : quelles aides disponibles ?\n", + "\n", + "Découvrez en 5 minutes les aides auxquelles vous avez droit en tant qu’étudiant.\n", + "\n", + "Le club des sociétaires\n", + "\n", + "Devenez sociétaire Caisse d’Epargne pour bénéficier d’offres avantageuses, participer à la vie de votre banque et donner du sens à votre épargne.\n", + "\n", + "J’apprends à gérer mon budget\n", + "\n", + "Vous avez entre 18 et 28 ans ? Découvrez nos offres spécifiques pour les jeunes avec des produits et des services spécialement adaptés aux étudiants et apprentis.\n", + "df20818635.txt\n", + "\n", + "---------------------------\n", + "\n", + "Un crédit vous engage et doit être remboursé. Vérifiez vos capacités de remboursement avant de vous engager.\n", + "\n", + "Caisse d'Epargne\n", + "\n", + "Rhône Alpes\n", + "\n", + "Prendre rendez-vous en ligne\n", + "\n", + "En agence ou par téléphone à l'horaire de votre choix\n", + "\n", + "Vous êtes déjà client ?\n", + "\n", + "Connectez-vous sur votre espace personnel pour consulter les coordonnées de votre conseiller.\n", + "\n", + "Des solutions\n", + "pour mieux gérer votre budget\n", + "\n", + "Vous traversez une période compliquée financièrement ? Votre Caisse d’Epargne se tient à vos côtés et peut vous proposer plusieurs solutions adaptées à votre situation.\n", + "\n", + "Nos conseils pour\n", + "reprendre votre budget en main\n", + "\n", + "Étudiant, salarié, en recherche d’emploi ou retraité… À tout moment de votre vie, vous pouvez rencontrer des difficultés financières. Votre Caisse d’Epargne vous accompagne et vous propose des solutions adaptées à votre situation personnelle.\n", + "\n", + "Être une banque inclusive et engagée\n", + "pour être utile à nos clients\n", + "\n", + "Proposer un dispositif d’écoute et d’accueil des clients en situation de fragilité, du fait d’un handicap ou de difficultés financières, permet d’adapter nos services à leurs besoins spécifiques et de maintenir en toute situation une écoute attentive et des solutions personnalisées. La Caisse d’Epargne considère que c’est l’une de ses responsabilités sociétales.\n", + "\n", + "Communication à caractère publicitaire et sans valeur contractuelle\n", + "\n", + "© Crédits photos : Getty Images - Droits Réservés\n", + "f378d7a627.txt\n", + "\n", + "---------------------------\n", + "\n", + "Je suis étudiant(e)\n", + "\n", + "Pour vos études, votre budget ou votre premier appartement, Caisse d’Epargne se tient à vos côtés.\n", + "\n", + "Je suis jeune actif(ve)\n", + "\n", + "Côté travail, logement ou projets de vie, Caisse d’Epargne a toujours une solution à vous proposer.\n", + "\n", + "Budget et projets : à chacune de vos questions, Caisse d’Epargne a des réponses\n", + "\n", + "Nos derniers articles\n", + "\n", + "Comment célébrer les fêtes de fin d’année sans exploser son budget ?\n", + "\n", + "5 bonnes pratiques à adopter pour un noël éco-responsable\n", + "\n", + "Digital detox : et si c’était bon aussi pour vos finances ?\n", + "\n", + "Internet et réseaux sociaux : 5 bonnes pratiques pour un surf ultra-safe\n", + "\n", + "Caisse d’Epargne pour les jeunes, la banque pour tous les jeunes\n", + "\n", + "Une banque pour les jeunes\n", + "\n", + "Ado, étudiant ou jeune actif, vous attendez de votre banque qu’elle vous propose les services adaptés à vos besoins. Pour gérer votre budget, ou votre premier salaire, pour trouver votre premier véhicule ou votre premier logement, Caisse d’Epargne se tient à vos côtés à chaque étape importante.\n", + "\n", + "Une banque pour les jeunes actifs\n", + "\n", + "Être un jeune actif, c’est accéder à l’indépendance financière. C’est l’heure de faire les choix qui orienteront votre vie professionnelle et personnelle. Avancez en toute sérénité : Caisse d’Epargne vous accompagne dans toutes vos grandes décisions avec des solutions sur mesure.\n" + ] + } + ], + "source": [ + "for node in response.source_nodes:\n", + " print(node.metadata[\"file_name\"])\n", + " print(\"\\n---------------------------\\n\")\n", + " print(node.text)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "d42ad6a8-caae-46e9-96b6-bc8dba6397a7", + "metadata": {}, + "outputs": [], + "source": [ + "def cera_response(message, history):\n", + " query_engine.query(message)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "d74c2092-049c-41f5-8c4f-9aca6a3cb2b5", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running on local URL: http://127.0.0.1:7860\n", + "\n", + "To create a public link, set `share=True` in `launch()`.\n" + ] + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gradio as gr\n", + "\n", + "gr.ChatInterface(cera_response).queue().launch()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "e2b374e2-0f14-4538-9b72-0f67a1fbf5f5", + "metadata": {}, + "outputs": [], + "source": [ + "chat_engine = index.as_chat_engine(\n", + " text_qa_template=text_qa_template,\n", + " refine_template=refine_template,\n", + " response_mode=\"compact\",\n", + " #response_mode=\"refine\",\n", + " similarity_top_k=5,\n", + " streaming=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "7708f03d-e4bf-4fcf-b609-a40c660c9d26", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thought: I need to help the user with their request for a home renovation and suggest ways in which the Caisse d'Epargne Rhône-Alpes can assist them.\n", + "\n", + "Action: query_engine_tool\n", + "Action Input: {\"input\": \"How can the Caisse d'Epargne Rhône-Alpes help with home renovations?\"}\n", + "\n", + "Please wait while I run this tool...\n", + "\n", + "Observation: The Caisse d'Epargne Rhône-Alpes offers various financing solutions for home renovations, including personal loans, mortgage loans, and construction loans. They also provide advice on project management and can connect the user with trusted professionals in the field. Additionally, they offer insurance products to protect the user's investment during the renovation process." + ] + } + ], + "source": [ + "streaming_response = chat_engine.stream_chat(\"Je souhaite rénover ma maison. Comment la Caisse d'Epargne Rhône-Alpes peut-elle m'aider ?\")\n", + "for token in streaming_response.response_gen:\n", + " print(token, end=\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d56a4de8-6e4c-49de-a0ee-42fac0e0afd7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "RAG_ENV", + "language": "python", + "name": "rag_env" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/rag_fr_3.ipynb b/rag_fr_3.ipynb new file mode 100644 index 0000000..7b15b5d --- /dev/null +++ b/rag_fr_3.ipynb @@ -0,0 +1,4220 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 136, + "id": "8c480c69-69bd-4d36-907b-db70f15c6959", + "metadata": {}, + "outputs": [], + "source": [ + "from transformers import AutoTokenizer\n", + "from sentence_transformers import SentenceTransformer\n", + "import os\n", + "import chromadb\n", + "import re\n", + "import html\n", + "import copy\n", + "from llama_cpp import Llama\n", + "import gradio as gr\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "markdown", + "id": "3c31df71-9eb1-499c-bbab-c92d4c870e6c", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "# Embedding model and tokenizer" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d67fc6ef-6e90-49c0-bf3b-29d0fdaa5300", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/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.\n", + " _torch_pytree._register_pytree_node(\n" + ] + } + ], + "source": [ + "#embed_model_name = \"dangvantuan/sentence-camembert-large\"\n", + "#embed_model = HuggingFaceEmbedding(model_name=embed_model_name)\n", + "\n", + "embed_model_name = 'intfloat/multilingual-e5-large'\n", + "tokenizer = AutoTokenizer.from_pretrained(embed_model_name)\n", + "embed_model = SentenceTransformer(embed_model_name)" + ] + }, + { + "cell_type": "markdown", + "id": "631ab89d-55f7-4d89-9e82-0d1a09359c79", + "metadata": {}, + "source": [ + "# LLM model" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "bc970979-82f3-46c4-ab86-4d9bf65acdd6", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "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))\n", + "llama_model_loader: - tensor 0: token_embd.weight q5_K [ 4096, 32000, 1, 1 ]\n", + "llama_model_loader: - tensor 1: blk.0.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 2: blk.0.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 3: blk.0.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 4: blk.0.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 5: blk.0.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 6: blk.0.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 7: blk.0.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 8: blk.0.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 9: blk.0.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 10: blk.1.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 11: blk.1.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 12: blk.1.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 13: blk.1.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 14: blk.1.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 15: blk.1.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 16: blk.1.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 17: blk.1.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 18: blk.1.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 19: blk.2.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 20: blk.2.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 21: blk.2.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 22: blk.2.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 23: blk.2.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 24: blk.2.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 25: blk.2.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 26: blk.2.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 27: blk.2.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 28: blk.3.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 29: blk.3.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 30: blk.3.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 31: blk.3.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 32: blk.3.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 33: blk.3.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 34: blk.3.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 35: blk.3.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 36: blk.3.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 37: blk.4.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 38: blk.4.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 39: blk.4.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 40: blk.4.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 41: blk.4.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 42: blk.4.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 43: blk.4.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 44: blk.4.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 45: blk.4.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 46: blk.5.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 47: blk.5.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 48: blk.5.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 49: blk.5.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 50: blk.5.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 51: blk.5.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 52: blk.5.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 53: blk.5.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 54: blk.5.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 55: blk.6.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 56: blk.6.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 57: blk.6.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 58: blk.6.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 59: blk.6.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 60: blk.6.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 61: blk.6.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 62: blk.6.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 63: blk.6.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 64: blk.7.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 65: blk.7.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 66: blk.7.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 67: blk.7.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 68: blk.7.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 69: blk.7.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 70: blk.7.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 71: blk.7.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 72: blk.7.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 73: blk.8.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 74: blk.8.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 75: blk.8.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 76: blk.8.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 77: blk.10.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 78: blk.10.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 79: blk.10.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 80: blk.10.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 81: blk.10.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 82: blk.10.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 83: blk.10.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 84: blk.10.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 85: blk.10.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 86: blk.11.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 87: blk.11.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 88: blk.11.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 89: blk.11.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 90: blk.11.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 91: blk.11.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 92: blk.11.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 93: blk.11.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 94: blk.11.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 95: blk.12.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 96: blk.12.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 97: blk.12.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 98: blk.12.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 99: blk.12.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 100: blk.12.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 101: blk.8.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 102: blk.8.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 103: blk.8.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 104: blk.8.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 105: blk.8.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 106: blk.9.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 107: blk.9.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 108: blk.9.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 109: blk.9.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 110: blk.9.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 111: blk.9.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 112: blk.9.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 113: blk.9.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 114: blk.9.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 115: blk.12.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 116: blk.12.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 117: blk.12.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 118: blk.13.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 119: blk.13.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 120: blk.13.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 121: blk.13.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 122: blk.13.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 123: blk.13.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 124: blk.13.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 125: blk.13.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 126: blk.13.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 127: blk.14.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 128: blk.14.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 129: blk.14.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 130: blk.14.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 131: blk.14.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 132: blk.14.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 133: blk.14.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 134: blk.14.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 135: blk.14.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 136: blk.15.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 137: blk.15.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 138: blk.15.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 139: blk.15.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 140: blk.15.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 141: blk.15.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 142: blk.15.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 143: blk.15.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 144: blk.15.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 145: blk.16.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 146: blk.16.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 147: blk.16.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 148: blk.16.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 149: blk.16.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 150: blk.16.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 151: blk.16.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 152: blk.16.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 153: blk.16.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 154: blk.17.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 155: blk.17.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 156: blk.17.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 157: blk.17.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 158: blk.17.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 159: blk.17.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 160: blk.17.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 161: blk.17.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 162: blk.17.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 163: blk.18.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 164: blk.18.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 165: blk.18.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 166: blk.18.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 167: blk.18.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 168: blk.18.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 169: blk.18.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 170: blk.18.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 171: blk.18.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 172: blk.19.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 173: blk.19.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 174: blk.19.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 175: blk.19.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 176: blk.19.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 177: blk.19.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 178: blk.19.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 179: blk.19.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 180: blk.19.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 181: blk.20.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 182: blk.20.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 183: blk.20.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 184: blk.20.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 185: blk.20.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 186: blk.20.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 187: blk.20.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 188: blk.20.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 189: blk.20.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 190: blk.21.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 191: blk.21.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 192: blk.21.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 193: blk.21.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 194: blk.21.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 195: blk.21.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 196: blk.21.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 197: blk.21.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 198: blk.21.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 199: blk.22.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 200: blk.22.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 201: blk.22.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 202: blk.22.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 203: blk.22.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 204: blk.22.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 205: blk.22.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 206: blk.22.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 207: blk.22.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 208: blk.23.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 209: blk.23.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 210: blk.23.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 211: blk.23.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 212: blk.23.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 213: blk.23.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 214: blk.23.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 215: blk.23.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 216: blk.23.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 217: blk.24.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 218: blk.24.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 219: blk.24.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 220: blk.24.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 221: blk.24.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 222: blk.24.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 223: blk.24.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 224: blk.24.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 225: blk.24.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 226: blk.25.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 227: blk.25.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 228: blk.25.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 229: blk.25.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 230: blk.25.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 231: blk.25.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 232: blk.25.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 233: blk.25.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 234: blk.25.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 235: blk.26.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 236: blk.26.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 237: blk.26.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 238: blk.26.attn_v.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 239: blk.26.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 240: blk.26.ffn_down.weight q5_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 241: blk.26.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 242: blk.26.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 243: blk.26.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 244: blk.27.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 245: blk.27.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 246: blk.27.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 247: blk.27.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 248: blk.27.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 249: blk.27.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 250: blk.27.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 251: blk.27.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 252: blk.27.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 253: blk.28.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 254: blk.28.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 255: blk.28.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 256: blk.28.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 257: blk.28.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 258: blk.28.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 259: blk.28.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 260: blk.28.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 261: blk.28.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 262: blk.29.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 263: blk.29.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 264: blk.29.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 265: blk.29.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 266: blk.29.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 267: blk.29.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 268: blk.29.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 269: blk.29.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 270: blk.29.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 271: blk.30.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 272: blk.30.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 273: blk.30.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 274: blk.30.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 275: blk.30.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 276: blk.30.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 277: output.weight q6_K [ 4096, 32000, 1, 1 ]\n", + "llama_model_loader: - tensor 278: blk.30.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 279: blk.30.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 280: blk.30.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 281: blk.31.attn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 282: blk.31.ffn_down.weight q6_K [ 14336, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 283: blk.31.ffn_gate.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 284: blk.31.ffn_up.weight q5_K [ 4096, 14336, 1, 1 ]\n", + "llama_model_loader: - tensor 285: blk.31.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 286: blk.31.attn_k.weight q5_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 287: blk.31.attn_output.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 288: blk.31.attn_q.weight q5_K [ 4096, 4096, 1, 1 ]\n", + "llama_model_loader: - tensor 289: blk.31.attn_v.weight q6_K [ 4096, 1024, 1, 1 ]\n", + "llama_model_loader: - tensor 290: output_norm.weight f32 [ 4096, 1, 1, 1 ]\n", + "llama_model_loader: - kv 0: general.architecture str = llama\n", + "llama_model_loader: - kv 1: general.name str = huggingfaceh4_zephyr-7b-beta\n", + "llama_model_loader: - kv 2: llama.context_length u32 = 32768\n", + "llama_model_loader: - kv 3: llama.embedding_length u32 = 4096\n", + "llama_model_loader: - kv 4: llama.block_count u32 = 32\n", + "llama_model_loader: - kv 5: llama.feed_forward_length u32 = 14336\n", + "llama_model_loader: - kv 6: llama.rope.dimension_count u32 = 128\n", + "llama_model_loader: - kv 7: llama.attention.head_count u32 = 32\n", + "llama_model_loader: - kv 8: llama.attention.head_count_kv u32 = 8\n", + "llama_model_loader: - kv 9: llama.attention.layer_norm_rms_epsilon f32 = 0.000010\n", + "llama_model_loader: - kv 10: llama.rope.freq_base f32 = 10000.000000\n", + "llama_model_loader: - kv 11: general.file_type u32 = 17\n", + "llama_model_loader: - kv 12: tokenizer.ggml.model str = llama\n", + "llama_model_loader: - kv 13: tokenizer.ggml.tokens arr[str,32000] = [\"\", \"\", \"\", \"<0x00>\", \"<...\n", + "llama_model_loader: - kv 14: tokenizer.ggml.scores arr[f32,32000] = [0.000000, 0.000000, 0.000000, 0.0000...\n", + "llama_model_loader: - kv 15: tokenizer.ggml.token_type arr[i32,32000] = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...\n", + "llama_model_loader: - kv 16: tokenizer.ggml.bos_token_id u32 = 1\n", + "llama_model_loader: - kv 17: tokenizer.ggml.eos_token_id u32 = 2\n", + "llama_model_loader: - kv 18: tokenizer.ggml.unknown_token_id u32 = 0\n", + "llama_model_loader: - kv 19: tokenizer.ggml.padding_token_id u32 = 2\n", + "llama_model_loader: - kv 20: general.quantization_version u32 = 2\n", + "llama_model_loader: - type f32: 65 tensors\n", + "llama_model_loader: - type q5_K: 193 tensors\n", + "llama_model_loader: - type q6_K: 33 tensors\n", + "llm_load_vocab: special tokens definition check successful ( 259/32000 ).\n", + "llm_load_print_meta: format = GGUF V3 (latest)\n", + "llm_load_print_meta: arch = llama\n", + "llm_load_print_meta: vocab type = SPM\n", + "llm_load_print_meta: n_vocab = 32000\n", + "llm_load_print_meta: n_merges = 0\n", + "llm_load_print_meta: n_ctx_train = 32768\n", + "llm_load_print_meta: n_embd = 4096\n", + "llm_load_print_meta: n_head = 32\n", + "llm_load_print_meta: n_head_kv = 8\n", + "llm_load_print_meta: n_layer = 32\n", + "llm_load_print_meta: n_rot = 128\n", + "llm_load_print_meta: n_gqa = 4\n", + "llm_load_print_meta: f_norm_eps = 0.0e+00\n", + "llm_load_print_meta: f_norm_rms_eps = 1.0e-05\n", + "llm_load_print_meta: f_clamp_kqv = 0.0e+00\n", + "llm_load_print_meta: f_max_alibi_bias = 0.0e+00\n", + "llm_load_print_meta: n_ff = 14336\n", + "llm_load_print_meta: rope scaling = linear\n", + "llm_load_print_meta: freq_base_train = 10000.0\n", + "llm_load_print_meta: freq_scale_train = 1\n", + "llm_load_print_meta: n_yarn_orig_ctx = 32768\n", + "llm_load_print_meta: rope_finetuned = unknown\n", + "llm_load_print_meta: model type = 7B\n", + "llm_load_print_meta: model ftype = mostly Q5_K - Medium\n", + "llm_load_print_meta: model params = 7.24 B\n", + "llm_load_print_meta: model size = 4.78 GiB (5.67 BPW) \n", + "llm_load_print_meta: general.name = huggingfaceh4_zephyr-7b-beta\n", + "llm_load_print_meta: BOS token = 1 ''\n", + "llm_load_print_meta: EOS token = 2 ''\n", + "llm_load_print_meta: UNK token = 0 ''\n", + "llm_load_print_meta: PAD token = 2 ''\n", + "llm_load_print_meta: LF token = 13 '<0x0A>'\n", + "llm_load_tensors: ggml ctx size = 0.11 MiB\n", + "llm_load_tensors: mem required = 4893.10 MiB\n", + "...................................................................................................\n", + "llama_new_context_with_model: n_ctx = 4096\n", + "llama_new_context_with_model: freq_base = 10000.0\n", + "llama_new_context_with_model: freq_scale = 1\n", + "llama_new_context_with_model: kv self size = 512.00 MiB\n", + "llama_build_graph: non-view tensors processed: 740/740\n", + "ggml_metal_init: allocating\n", + "ggml_metal_init: found device: Apple M2 Max\n", + "ggml_metal_init: picking default device: Apple M2 Max\n", + "ggml_metal_init: default.metallib not found, loading from source\n", + "ggml_metal_init: loading '/Users/peportier/miniforge3/envs/RAG_ENV/lib/python3.9/site-packages/llama_cpp/ggml-metal.metal'\n", + "ggml_metal_init: GPU name: Apple M2 Max\n", + "ggml_metal_init: GPU family: MTLGPUFamilyApple8 (1008)\n", + "ggml_metal_init: hasUnifiedMemory = true\n", + "ggml_metal_init: recommendedMaxWorkingSetSize = 49152.00 MiB\n", + "ggml_metal_init: maxTransferRate = built-in GPU\n", + "llama_new_context_with_model: compute buffer total size = 291.07 MiB\n", + "llama_new_context_with_model: max tensor size = 102.54 MiB\n", + "ggml_metal_add_buffer: allocated 'data ' buffer, size = 4893.70 MiB, (10588.06 / 49152.00)\n", + "ggml_metal_add_buffer: allocated 'kv ' buffer, size = 512.02 MiB, (11100.08 / 49152.00)\n", + "ggml_metal_add_buffer: allocated 'alloc ' buffer, size = 288.02 MiB, (11388.09 / 49152.00)\n", + "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 | \n", + "ggml_metal_free: deallocating\n" + ] + } + ], + "source": [ + "llm = Llama(model_path='/Users/peportier/llm/a/a/zephyr-7b-beta.Q5_K_M.gguf', \n", + " n_gpu_layers=1, use_mlock=True, n_ctx=4096)\n", + "\n", + "system_prompt = \"\"\"\\\n", + "Vous fournissez avec soin des réponses précises, factuelles, réfléchies et nuancées, et vous êtes doué pour le raisonnement. \\\n", + "Si vous pensez qu'il n'y a peut-être pas de bonne réponse, vous le dites. \\\n", + "Ne soyez pas verbeux dans vos réponses, mais donnez des détails et des exemples lorsque cela peut aider à l'explication. \\\n", + "Vous rédigez vos réponses en français. \\\n", + "\"\"\"\n", + "\n", + "def format_prompt(question):\n", + " prompt = \"\"\n", + " prompt = f\"<|system|>\\n {system_prompt.strip()} \\n\"\n", + " prompt += f\"<|user|>\\n {question} \\n\"\n", + " prompt += f\"<|assistant|>\\n\"\n", + " return prompt\n", + "\n", + "def answer(question):\n", + " response = llm(prompt = question,\n", + " temperature = 0.1,\n", + " mirostat_mode = 2,\n", + " max_tokens = -1,\n", + " stop = [''])\n", + " return response[\"choices\"][0][\"text\"]" + ] + }, + { + "cell_type": "markdown", + "id": "4b9b8dcd-a371-4f03-b0c6-eb27d56002fe", + "metadata": {}, + "source": [ + "## Test LLM model" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "460b87be-7778-430a-a167-3c3fd8deaf48", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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 :\n", + "\n", + "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.\n", + "\n", + "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.\n", + "\n", + "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.\n", + "\n", + "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).\n", + "\n", + "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).\n", + "\n", + "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.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "llama_print_timings: load time = 575.42 ms\n", + "llama_print_timings: sample time = 2695.33 ms / 804 runs ( 3.35 ms per token, 298.29 tokens per second)\n", + "llama_print_timings: prompt eval time = 574.33 ms / 165 tokens ( 3.48 ms per token, 287.29 tokens per second)\n", + "llama_print_timings: eval time = 22009.23 ms / 803 runs ( 27.41 ms per token, 36.48 tokens per second)\n", + "llama_print_timings: total time = 24988.34 ms\n" + ] + } + ], + "source": [ + "print(answer(format_prompt(\"Quels sont les philosophes les plus influencés par Hegel ?\")))" + ] + }, + { + "cell_type": "markdown", + "id": "516058c3-c764-4678-8a95-1d234e4c7f6a", + "metadata": {}, + "source": [ + "# Embed a folder to a ChromaDB collection" + ] + }, + { + "cell_type": "markdown", + "id": "71b71ca4-3e59-4cf9-a43a-2877eccfcf07", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Initialize a ChromaDB persistent collection" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "d16feaee-27b2-4c8a-9f63-bee3a9c5c724", + "metadata": {}, + "outputs": [], + "source": [ + "chroma_client = chromadb.PersistentClient(path=\"./chromadb\")\n", + "#chroma_client.delete_collection(name=\"cera\")\n", + "collection = chroma_client.get_or_create_collection(name=\"cera\")" + ] + }, + { + "cell_type": "markdown", + "id": "0adb9e64-bc3a-40c7-ab8f-c3b6bf39a15c", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Embed the text of a particular web page" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "1d9f4699-8abc-45cd-a5e0-10ac6d3057f6", + "metadata": {}, + "outputs": [], + "source": [ + "def token_length(str):\n", + " return len(tokenizer.encode(str, add_special_tokens=False))\n", + "\n", + "def passage_str(paragraphs, title):\n", + " return f\"passage: {title}\\n\" + '\\n'.join(paragraphs)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "0e8d1502-3afd-482d-b096-950911ea0ebc", + "metadata": {}, + "outputs": [], + "source": [ + "def embed_page(filename, url, title, contents, tags, chroma_collection, embed_model, max_chunk_size=512):\n", + " \n", + " documents = []\n", + " contents_to_embed = [contents]\n", + " \n", + " while contents_to_embed:\n", + " last_item = contents_to_embed.pop()\n", + " # (1) For the `multilingual-e5-large` embedding model, \n", + " # the string of a document must be prepended with \"passage:\"\n", + " # (2) Since the text of a webpage may have to be cut into many documents,\n", + " # we always add the title of the webpage at the top of a document\n", + " last_item_str = passage_str(last_item, title)\n", + " last_item_token_length = token_length(last_item_str)\n", + " \n", + " if last_item_token_length > max_chunk_size:\n", + " # If the text of the webpage, present in file `filename`, \n", + " # contains more than `max_chunk_size` tokens, it must be divided \n", + " # into multiple documents\n", + " if len(last_item) > 1:\n", + " # If there are many paragraphs in `last_item`, i.e. the current\n", + " # part of the webpage for which an embedding will be made,\n", + " # the length of `last_item` can be reduced by dividing its set of\n", + " # paragraphs in half\n", + " h = len(last_item) // 2\n", + " last_item_h1 = last_item[:h]\n", + " last_item_h2 = last_item[h:]\n", + " contents_to_embed.append(last_item_h1)\n", + " contents_to_embed.append(last_item_h2)\n", + " else:\n", + " # If `last_item` is made of only one long paragraph whose length is\n", + " # larger than `chunk_size`, this paragraph will be divided into two parts.\n", + " sentences = re.split(r'(?<=[.!?]) +', last_item[0])\n", + " \n", + " if len(sentences) > 1:\n", + " # If there are multiple sentences, try to split into two parts\n", + " i = 1\n", + " while True:\n", + " part1 = ' '.join(sentences[:i])\n", + " part2 = ' '.join(sentences[i:])\n", + " token_length_part_1 = token_length(passage_str([part1], title))\n", + " token_length_part_2 = token_length(passage_str([part2], title))\n", + " if (token_length_part_1 <= max_chunk_size and\n", + " token_length_part_2 <= max_chunk_size) or \\\n", + " token_length_part_1 > max_chunk_size:\n", + " break\n", + " i += 1\n", + " else:\n", + " # If there's only one long sentence or no suitable split found, split by words\n", + " words = last_item[0].split()\n", + " h = len(words) // 2\n", + " part1 = ' '.join(words[:h])\n", + " part2 = ' '.join(words[h:])\n", + " \n", + " contents_to_embed.append([part1])\n", + " contents_to_embed.append([part2])\n", + " else:\n", + " documents.append(last_item_str)\n", + "\n", + " # We want the documents into which a webpage has been divided \n", + " # to be in the natural reading order\n", + " documents.reverse()\n", + " embeddings = embed_model.encode(documents, normalize_embeddings=True)\n", + " embeddings = embeddings.tolist()\n", + "\n", + " # We consider the subpart of an URL as tags describing the webpage\n", + " # For example, \n", + " # \"https://www.caisse-epargne.fr/rhone-alpes/professionnels/financer-projets-optimiser-tresorerie/\"\n", + " # is associated to the tags:\n", + " # tags[0] == 'rhone-alpes'\n", + " # tags[1] == 'professionnels'\n", + " # tags[2] == 'financer-projets-optimiser-tresorerie'\n", + " if len(tags) < 2:\n", + " category = ''\n", + " else:\n", + " if tags[0] == 'rhone-alpes':\n", + " category = tags[1]\n", + " else: category = tags[0]\n", + " metadata = {'category': category, 'url': url}\n", + " # All the documents corresponding to a same webpage have the same metadata, i.e. URL and category\n", + " metadatas = [copy.deepcopy(metadata) for _ in range(len(documents))]\n", + "\n", + " ids = [filename + '-' + str(i+1) for i in range(len(documents))]\n", + "\n", + " chroma_collection.add(embeddings=embeddings, documents=documents, metadatas=metadatas, ids=ids)" + ] + }, + { + "cell_type": "markdown", + "id": "cb3fc271-be0b-4532-978e-8215227fa8fd", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Embed all the webpages in a folder" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "345c43c9-bc88-43c6-a0b4-5919a6893c9a", + "metadata": {}, + "outputs": [], + "source": [ + "def embed_folder(folder_path, chroma_collection, embed_model):\n", + " for filename in os.listdir(folder_path):\n", + " if filename.endswith('.txt'):\n", + " file_path = os.path.join(folder_path, filename)\n", + " with open(file_path, 'r') as file:\n", + " file_contents = file.read()\n", + " contents_lst = [str.replace('\\n',' ').replace('\\xa0', ' ') for str in file_contents.split('\\n\\n')]\n", + " if len(contents_lst) < 3: # contents_lst[0] is the URL, contents_lst[1] is the title, the rest is the content\n", + " continue\n", + " url = contents_lst[0]\n", + " if '?' in url: # URLs with a '?' corresponds to call to services and have no useful content\n", + " continue\n", + " title = contents_lst[1]\n", + " if not title: # when the title is absent (or empty), the page has no interest\n", + " continue\n", + " print(f\"{filename} : Start\")\n", + " prefix = 'https://www.caisse-epargne.fr/'\n", + " suffix = url.replace(prefix, '')\n", + " tags = suffix.split('/')\n", + " tags = [tag for tag in tags if tag] # remove empty parts\n", + " embed_page(filename, url, title, contents_lst[2:], tags, chroma_collection, embed_model)\n", + " print(f\"{filename} : Done\")" + ] + }, + { + "cell_type": "markdown", + "id": "db2c0bd4-c12f-410a-9311-512d3c61a30d", + "metadata": {}, + "source": [ + "## Proceed to the embedding" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "456a51b2-fae0-4173-9103-deb5a7a8e608", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "255a0eb096.txt : Start\n", + "255a0eb096.txt : Done\n", + "ce79680ee7.txt : Start\n", + "ce79680ee7.txt : Done\n", + "565b28a75b.txt : Start\n", + "565b28a75b.txt : Done\n", + "173fc21d3a.txt : Start\n", + "173fc21d3a.txt : Done\n", + "b3bd1cf160.txt : Start\n", + "b3bd1cf160.txt : Done\n", + "f73fb80f59.txt : Start\n", + "f73fb80f59.txt : Done\n", + "2b45bc13c2.txt : Start\n", + "2b45bc13c2.txt : Done\n", + "48787daff9.txt : Start\n", + "48787daff9.txt : Done\n", + "5f21a01035.txt : Start\n", + "5f21a01035.txt : Done\n", + "aa1030c5fd.txt : Start\n", + "aa1030c5fd.txt : Done\n", + "a040c90b55.txt : Start\n", + "a040c90b55.txt : Done\n", + "c3d469cbdb.txt : Start\n", + "c3d469cbdb.txt : Done\n", + "a6a1d2fea0.txt : Start\n", + "a6a1d2fea0.txt : Done\n", + "42a2928ef0.txt : Start\n", + "42a2928ef0.txt : Done\n", + "4eda4de449.txt : Start\n", + "4eda4de449.txt : Done\n", + "8cce840558.txt : Start\n", + "8cce840558.txt : Done\n", + "4a06529f5f.txt : Start\n", + "4a06529f5f.txt : Done\n", + "898d33ba09.txt : Start\n", + "898d33ba09.txt : Done\n", + "518b61af48.txt : Start\n", + "518b61af48.txt : Done\n", + "585b794776.txt : Start\n", + "585b794776.txt : Done\n", + "be98b7bc33.txt : Start\n", + "be98b7bc33.txt : Done\n", + "2e77392d24.txt : Start\n", + "2e77392d24.txt : Done\n", + "2db068af5c.txt : Start\n", + "2db068af5c.txt : Done\n", + "e6642ab0c4.txt : Start\n", + "e6642ab0c4.txt : Done\n", + "29e0f10548.txt : Start\n", + "29e0f10548.txt : Done\n", + "daa79fb76c.txt : Start\n", + "daa79fb76c.txt : Done\n", + "ba68c7b5b1.txt : Start\n", + "ba68c7b5b1.txt : Done\n", + "e9d58e832a.txt : Start\n", + "e9d58e832a.txt : Done\n", + "d950f8cfcf.txt : Start\n", + "d950f8cfcf.txt : Done\n", + "63fe8d8ecf.txt : Start\n", + "63fe8d8ecf.txt : Done\n", + "33337c3b38.txt : Start\n", + "33337c3b38.txt : Done\n", + "bd4b626414.txt : Start\n", + "bd4b626414.txt : Done\n", + "4c0e6dbaa6.txt : Start\n", + "4c0e6dbaa6.txt : Done\n", + "55262bf6bd.txt : Start\n", + "55262bf6bd.txt : Done\n", + "10edea0734.txt : Start\n", + "10edea0734.txt : Done\n", + "6035d44943.txt : Start\n", + "6035d44943.txt : Done\n", + "0480b7e99c.txt : Start\n", + "0480b7e99c.txt : Done\n", + "13e8a0bf51.txt : Start\n", + "13e8a0bf51.txt : Done\n", + "f03e1574c2.txt : Start\n", + "f03e1574c2.txt : Done\n", + "d5069cd6b3.txt : Start\n", + "d5069cd6b3.txt : Done\n", + "743fc26faf.txt : Start\n", + "743fc26faf.txt : Done\n", + "a164829b41.txt : Start\n", + "a164829b41.txt : Done\n", + "167def23bd.txt : Start\n", + "167def23bd.txt : Done\n", + "ac97457567.txt : Start\n", + "ac97457567.txt : Done\n", + "99bab73424.txt : Start\n", + "99bab73424.txt : Done\n", + "8c445da076.txt : Start\n", + "8c445da076.txt : Done\n", + "5f103512e6.txt : Start\n", + "5f103512e6.txt : Done\n", + "68b67c1aed.txt : Start\n", + "68b67c1aed.txt : Done\n", + "7a083e9237.txt : Start\n", + "7a083e9237.txt : Done\n", + "5883f2daa0.txt : Start\n", + "5883f2daa0.txt : Done\n", + "4aac6081e0.txt : Start\n", + "4aac6081e0.txt : Done\n", + "f74f2366a0.txt : Start\n", + "f74f2366a0.txt : Done\n", + "5a62906c0c.txt : Start\n", + "5a62906c0c.txt : Done\n", + "f66629c8b6.txt : Start\n", + "f66629c8b6.txt : Done\n", + "f6badfbd1a.txt : Start\n", + "f6badfbd1a.txt : Done\n", + "02c2716018.txt : Start\n", + "02c2716018.txt : Done\n", + "a3d470b7a1.txt : Start\n", + "a3d470b7a1.txt : Done\n", + "fe7a283831.txt : Start\n", + "fe7a283831.txt : Done\n", + "d850e8fd61.txt : Start\n", + "d850e8fd61.txt : Done\n", + "60465f4946.txt : Start\n", + "60465f4946.txt : Done\n", + "055634c516.txt : Start\n", + "055634c516.txt : Done\n", + "3241ba4473.txt : Start\n", + "3241ba4473.txt : Done\n", + "b236716617.txt : Start\n", + "b236716617.txt : Done\n", + "83b03c7962.txt : Start\n", + "83b03c7962.txt : Done\n", + "4bcb190e00.txt : Start\n", + "4bcb190e00.txt : Done\n", + "cd53afe27d.txt : Start\n", + "cd53afe27d.txt : Done\n", + "a4217688fc.txt : Start\n", + "a4217688fc.txt : Done\n", + "f8fbe32801.txt : Start\n", + "f8fbe32801.txt : Done\n", + "46b1703611.txt : Start\n", + "46b1703611.txt : Done\n", + "e5c158a765.txt : Start\n", + "e5c158a765.txt : Done\n", + "ee3c97b958.txt : Start\n", + "ee3c97b958.txt : Done\n", + "d482034404.txt : Start\n", + "d482034404.txt : Done\n", + "ad509b796a.txt : Start\n", + "ad509b796a.txt : Done\n", + "79e77efef1.txt : Start\n", + "79e77efef1.txt : Done\n", + "76675b7013.txt : Start\n", + "76675b7013.txt : Done\n", + "2f0acaea22.txt : Start\n", + "2f0acaea22.txt : Done\n", + "4c10109965.txt : Start\n", + "4c10109965.txt : Done\n", + "f311309f86.txt : Start\n", + "f311309f86.txt : Done\n", + "b176019d5a.txt : Start\n", + "b176019d5a.txt : Done\n", + "351e959cf7.txt : Start\n", + "351e959cf7.txt : Done\n", + "65d86a3b7f.txt : Start\n", + "65d86a3b7f.txt : Done\n", + "4bdc40e75b.txt : Start\n", + "4bdc40e75b.txt : Done\n", + "a31b7de525.txt : Start\n", + "a31b7de525.txt : Done\n", + "b7e3354b7b.txt : Start\n", + "b7e3354b7b.txt : Done\n", + "0b5be6abc0.txt : Start\n", + "0b5be6abc0.txt : Done\n", + "37a7d20803.txt : Start\n", + "37a7d20803.txt : Done\n", + "8ec5dbe18a.txt : Start\n", + "8ec5dbe18a.txt : Done\n", + "3bb79284a3.txt : Start\n", + "3bb79284a3.txt : Done\n", + "a6c4cc430f.txt : Start\n", + "a6c4cc430f.txt : Done\n", + "215d3fc7da.txt : Start\n", + "215d3fc7da.txt : Done\n", + "c776277507.txt : Start\n", + "c776277507.txt : Done\n", + "7526cecc15.txt : Start\n", + "7526cecc15.txt : Done\n", + "624a63445d.txt : Start\n", + "624a63445d.txt : Done\n", + "e9e060442f.txt : Start\n", + "e9e060442f.txt : Done\n", + "347dd2758c.txt : Start\n", + "347dd2758c.txt : Done\n", + "c37a229373.txt : Start\n", + "c37a229373.txt : Done\n", + "6f1b7077d4.txt : Start\n", + "6f1b7077d4.txt : Done\n", + "35d30e0ade.txt : Start\n", + "35d30e0ade.txt : Done\n", + "80bbbcbf2c.txt : Start\n", + "80bbbcbf2c.txt : Done\n", + "7ba26ad0e8.txt : Start\n", + "7ba26ad0e8.txt : Done\n", + "182588fbbf.txt : Start\n", + "182588fbbf.txt : Done\n", + "de94e4b189.txt : Start\n", + "de94e4b189.txt : Done\n", + "e45b0e5b68.txt : Start\n", + "e45b0e5b68.txt : Done\n", + "e2638b3436.txt : Start\n", + "e2638b3436.txt : Done\n", + "dd0a2ca5ac.txt : Start\n", + "dd0a2ca5ac.txt : Done\n", + "2e078d988f.txt : Start\n", + "2e078d988f.txt : Done\n", + "23746976e8.txt : Start\n", + "23746976e8.txt : Done\n", + "b4ab821d94.txt : Start\n", + "b4ab821d94.txt : Done\n", + "25dcc77e00.txt : Start\n", + "25dcc77e00.txt : Done\n", + "c7eb6cf9c8.txt : Start\n", + "c7eb6cf9c8.txt : Done\n", + "16e59d18b0.txt : Start\n", + "16e59d18b0.txt : Done\n", + "364b4d5147.txt : Start\n", + "364b4d5147.txt : Done\n", + "faf51f605e.txt : Start\n", + "faf51f605e.txt : Done\n", + "84d61f33dc.txt : Start\n", + "84d61f33dc.txt : Done\n", + "4c578fd78c.txt : Start\n", + "4c578fd78c.txt : Done\n", + "489cc63745.txt : Start\n", + "489cc63745.txt : Done\n", + "acdf6c334e.txt : Start\n", + "acdf6c334e.txt : Done\n", + "d720fc241d.txt : Start\n", + "d720fc241d.txt : Done\n", + "9c16ef30f1.txt : Start\n", + "9c16ef30f1.txt : Done\n", + "2426f559ec.txt : Start\n", + "2426f559ec.txt : Done\n", + "a0cabc58ba.txt : Start\n", + "a0cabc58ba.txt : Done\n", + "aabc3549f4.txt : Start\n", + "aabc3549f4.txt : Done\n", + "3bbb946fb3.txt : Start\n", + "3bbb946fb3.txt : Done\n", + "4a5736d002.txt : Start\n", + "4a5736d002.txt : Done\n", + "b986d4224b.txt : Start\n", + "b986d4224b.txt : Done\n", + "acd10eaae3.txt : Start\n", + "acd10eaae3.txt : Done\n", + "6bac4f4e5a.txt : Start\n", + "6bac4f4e5a.txt : Done\n", + "edea3bec7b.txt : Start\n", + "edea3bec7b.txt : Done\n", + "6611e528c9.txt : Start\n", + "6611e528c9.txt : Done\n", + "54ce3f1081.txt : Start\n", + "54ce3f1081.txt : Done\n", + "1843d92a2e.txt : Start\n", + "1843d92a2e.txt : Done\n", + "69f0b5362f.txt : Start\n", + "69f0b5362f.txt : Done\n", + "2ac98f70a3.txt : Start\n", + "2ac98f70a3.txt : Done\n", + "4d4eef5de1.txt : Start\n", + "4d4eef5de1.txt : Done\n", + "3598605354.txt : Start\n", + "3598605354.txt : Done\n", + "8d9da55793.txt : Start\n", + "8d9da55793.txt : Done\n", + "90efeedace.txt : Start\n", + "90efeedace.txt : Done\n", + "b222a935a2.txt : Start\n", + "b222a935a2.txt : Done\n", + "9a54cdc2d6.txt : Start\n", + "9a54cdc2d6.txt : Done\n", + "7d9e416887.txt : Start\n", + "7d9e416887.txt : Done\n", + "a2f809e07a.txt : Start\n", + "a2f809e07a.txt : Done\n", + "f82f526635.txt : Start\n", + "f82f526635.txt : Done\n", + "49fc042883.txt : Start\n", + "49fc042883.txt : Done\n", + "401b54bb3a.txt : Start\n", + "401b54bb3a.txt : Done\n", + "e88e322e77.txt : Start\n", + "e88e322e77.txt : Done\n", + "9ff584c6a9.txt : Start\n", + "9ff584c6a9.txt : Done\n", + "77dd96cdb0.txt : Start\n", + "77dd96cdb0.txt : Done\n", + "d49e768bef.txt : Start\n", + "d49e768bef.txt : Done\n", + "c145d2aa96.txt : Start\n", + "c145d2aa96.txt : Done\n", + "618b26d15d.txt : Start\n", + "618b26d15d.txt : Done\n", + "d609cf2c68.txt : Start\n", + "d609cf2c68.txt : Done\n", + "3d159cbe89.txt : Start\n", + "3d159cbe89.txt : Done\n", + "e53a699f5b.txt : Start\n", + "e53a699f5b.txt : Done\n", + "7bee3a53d3.txt : Start\n", + "7bee3a53d3.txt : Done\n", + "40e0072e9e.txt : Start\n", + "40e0072e9e.txt : Done\n", + "55da73699b.txt : Start\n", + "55da73699b.txt : Done\n", + "e60e8a6463.txt : Start\n", + "e60e8a6463.txt : Done\n", + "5e0583f23a.txt : Start\n", + "5e0583f23a.txt : Done\n", + "b2be33ebf5.txt : Start\n", + "b2be33ebf5.txt : Done\n", + "ad5d201dda.txt : Start\n", + "ad5d201dda.txt : Done\n", + "d48b16c825.txt : Start\n", + "d48b16c825.txt : Done\n", + "2a518c5c8a.txt : Start\n", + "2a518c5c8a.txt : Done\n", + "88346ffb46.txt : Start\n", + "88346ffb46.txt : Done\n", + "3f3e46760c.txt : Start\n", + "3f3e46760c.txt : Done\n", + "dbbeb6c739.txt : Start\n", + "dbbeb6c739.txt : Done\n", + "8e6a00bdc1.txt : Start\n", + "8e6a00bdc1.txt : Done\n", + "80a9d4e127.txt : Start\n", + "80a9d4e127.txt : Done\n", + "833d60cb6c.txt : Start\n", + "833d60cb6c.txt : Done\n", + "2c55313e35.txt : Start\n", + "2c55313e35.txt : Done\n", + "cd62a89eed.txt : Start\n", + "cd62a89eed.txt : Done\n", + "78686c36f9.txt : Start\n", + "78686c36f9.txt : Done\n", + "e688957c46.txt : Start\n", + "e688957c46.txt : Done\n", + "7aa9e50a1f.txt : Start\n", + "7aa9e50a1f.txt : Done\n", + "51e2ac338a.txt : Start\n", + "51e2ac338a.txt : Done\n", + "51a68d9313.txt : Start\n", + "51a68d9313.txt : Done\n", + "5fb7a523a7.txt : Start\n", + "5fb7a523a7.txt : Done\n", + "f49d62acf6.txt : Start\n", + "f49d62acf6.txt : Done\n", + "3ced86d1db.txt : Start\n", + "3ced86d1db.txt : Done\n", + "debbca28fa.txt : Start\n", + "debbca28fa.txt : Done\n", + "bfeaa8b440.txt : Start\n", + "bfeaa8b440.txt : Done\n", + "9ddab20d94.txt : Start\n", + "9ddab20d94.txt : Done\n", + "66df15f567.txt : Start\n", + "66df15f567.txt : Done\n", + "f42bf02416.txt : Start\n", + "f42bf02416.txt : Done\n", + "c8234b7b50.txt : Start\n", + "c8234b7b50.txt : Done\n", + "4c0aba7cbb.txt : Start\n", + "4c0aba7cbb.txt : Done\n", + "2e41ac0342.txt : Start\n", + "2e41ac0342.txt : Done\n", + "00e9b7dba8.txt : Start\n", + "00e9b7dba8.txt : Done\n", + "3add1ed406.txt : Start\n", + "3add1ed406.txt : Done\n", + "69f188b16a.txt : Start\n", + "69f188b16a.txt : Done\n", + "73b277c156.txt : Start\n", + "73b277c156.txt : Done\n", + "d2ad8952b8.txt : Start\n", + "d2ad8952b8.txt : Done\n", + "f77eddd823.txt : Start\n", + "f77eddd823.txt : Done\n", + "07852c3122.txt : Start\n", + "07852c3122.txt : Done\n", + "966c432839.txt : Start\n", + "966c432839.txt : Done\n", + "8ced9fefee.txt : Start\n", + "8ced9fefee.txt : Done\n", + "06c152d200.txt : Start\n", + "06c152d200.txt : Done\n", + "f11b7b8fce.txt : Start\n", + "f11b7b8fce.txt : Done\n", + "09b3f765cf.txt : Start\n", + "09b3f765cf.txt : Done\n", + "861738ff97.txt : Start\n", + "861738ff97.txt : Done\n", + "c98c007358.txt : Start\n", + "c98c007358.txt : Done\n", + "1e209c2f7c.txt : Start\n", + "1e209c2f7c.txt : Done\n", + "34dc461327.txt : Start\n", + "34dc461327.txt : Done\n", + "592a315fc4.txt : Start\n", + "592a315fc4.txt : Done\n", + "f8f9a61e79.txt : Start\n", + "f8f9a61e79.txt : Done\n", + "49f945e30f.txt : Start\n", + "49f945e30f.txt : Done\n", + "b39e06064b.txt : Start\n", + "b39e06064b.txt : Done\n", + "6b44932499.txt : Start\n", + "6b44932499.txt : Done\n", + "3bb5f27823.txt : Start\n", + "3bb5f27823.txt : Done\n", + "a54dfc4265.txt : Start\n", + "a54dfc4265.txt : Done\n", + "3bbe30b18a.txt : Start\n", + "3bbe30b18a.txt : Done\n", + "27582f5949.txt : Start\n", + "27582f5949.txt : Done\n", + "ac82a34e3e.txt : Start\n", + "ac82a34e3e.txt : Done\n", + "cbd0706bd5.txt : Start\n", + "cbd0706bd5.txt : Done\n", + "d38e72ab4a.txt : Start\n", + "d38e72ab4a.txt : Done\n", + "d6b0c46314.txt : Start\n", + "d6b0c46314.txt : Done\n", + "7549112ce8.txt : Start\n", + "7549112ce8.txt : Done\n", + "c64375ea25.txt : Start\n", + "c64375ea25.txt : Done\n", + "5242939ba7.txt : Start\n", + "5242939ba7.txt : Done\n", + "51e1e6a825.txt : Start\n", + "51e1e6a825.txt : Done\n", + "7cde74e885.txt : Start\n", + "7cde74e885.txt : Done\n", + "d8adaab329.txt : Start\n", + "d8adaab329.txt : Done\n", + "79f444033c.txt : Start\n", + "79f444033c.txt : Done\n", + "75bef15d20.txt : Start\n", + "75bef15d20.txt : Done\n", + "ab8dbcdc59.txt : Start\n", + "ab8dbcdc59.txt : Done\n", + "ed1f98efc6.txt : Start\n", + "ed1f98efc6.txt : Done\n", + "a20a7a7bb1.txt : Start\n", + "a20a7a7bb1.txt : Done\n", + "c3d7990cb5.txt : Start\n", + "c3d7990cb5.txt : Done\n", + "ba4dbfd475.txt : Start\n", + "ba4dbfd475.txt : Done\n", + "059eb08b87.txt : Start\n", + "059eb08b87.txt : Done\n", + "df20818635.txt : Start\n", + "df20818635.txt : Done\n", + "4eff143f3f.txt : Start\n", + "4eff143f3f.txt : Done\n", + "eff4b7ddd6.txt : Start\n", + "eff4b7ddd6.txt : Done\n", + "0e81a328c1.txt : Start\n", + "0e81a328c1.txt : Done\n", + "75b4d7d9a7.txt : Start\n", + "75b4d7d9a7.txt : Done\n", + "5e2ba7946b.txt : Start\n", + "5e2ba7946b.txt : Done\n", + "d0043c604c.txt : Start\n", + "d0043c604c.txt : Done\n", + "e7c857ad2b.txt : Start\n", + "e7c857ad2b.txt : Done\n", + "a8c6752cce.txt : Start\n", + "a8c6752cce.txt : Done\n", + "165517dfe7.txt : Start\n", + "165517dfe7.txt : Done\n", + "61d25d4835.txt : Start\n", + "61d25d4835.txt : Done\n", + "9e3c26ac16.txt : Start\n", + "9e3c26ac16.txt : Done\n", + "e6bb195473.txt : Start\n", + "e6bb195473.txt : Done\n", + "836c1b074b.txt : Start\n", + "836c1b074b.txt : Done\n", + "83e2969710.txt : Start\n", + "83e2969710.txt : Done\n", + "644186a433.txt : Start\n", + "644186a433.txt : Done\n", + "a75aa7df01.txt : Start\n", + "a75aa7df01.txt : Done\n", + "a0398ee914.txt : Start\n", + "a0398ee914.txt : Done\n", + "bc2a847131.txt : Start\n", + "bc2a847131.txt : Done\n", + "7868bec686.txt : Start\n", + "7868bec686.txt : Done\n", + "63f1d8dabd.txt : Start\n", + "63f1d8dabd.txt : Done\n", + "ce669e66f8.txt : Start\n", + "ce669e66f8.txt : Done\n", + "792190c4e9.txt : Start\n", + "792190c4e9.txt : Done\n", + "29c3723901.txt : Start\n", + "29c3723901.txt : Done\n", + "8ae6d05877.txt : Start\n", + "8ae6d05877.txt : Done\n", + "dd05acb3cb.txt : Start\n", + "dd05acb3cb.txt : Done\n", + "a817449f48.txt : Start\n", + "a817449f48.txt : Done\n", + "967cdecccf.txt : Start\n", + "967cdecccf.txt : Done\n", + "4ebd32b3b4.txt : Start\n", + "4ebd32b3b4.txt : Done\n", + "a60556b6b3.txt : Start\n", + "a60556b6b3.txt : Done\n", + "a719b96889.txt : Start\n", + "a719b96889.txt : Done\n", + "c079c36809.txt : Start\n", + "c079c36809.txt : Done\n", + "c0a4d8856e.txt : Start\n", + "c0a4d8856e.txt : Done\n", + "e707711e05.txt : Start\n", + "e707711e05.txt : Done\n", + "f7217535d5.txt : Start\n", + "f7217535d5.txt : Done\n", + "09bb9ce67b.txt : Start\n", + "09bb9ce67b.txt : Done\n", + "c6e4320cce.txt : Start\n", + "c6e4320cce.txt : Done\n", + "1255f41d67.txt : Start\n", + "1255f41d67.txt : Done\n", + "d84a0d7a60.txt : Start\n", + "d84a0d7a60.txt : Done\n", + "e912b95fb7.txt : Start\n", + "e912b95fb7.txt : Done\n", + "6c91560cb6.txt : Start\n", + "6c91560cb6.txt : Done\n", + "23d4b1a861.txt : Start\n", + "23d4b1a861.txt : Done\n", + "56fcef62ef.txt : Start\n", + "56fcef62ef.txt : Done\n", + "8ef40bc843.txt : Start\n", + "8ef40bc843.txt : Done\n", + "ee1f44ee32.txt : Start\n", + "ee1f44ee32.txt : Done\n", + "6667c30343.txt : Start\n", + "6667c30343.txt : Done\n", + "a6472532fd.txt : Start\n", + "a6472532fd.txt : Done\n", + "d47b684de9.txt : Start\n", + "d47b684de9.txt : Done\n", + "a6e9d84a26.txt : Start\n", + "a6e9d84a26.txt : Done\n", + "8cb1148ce2.txt : Start\n", + "8cb1148ce2.txt : Done\n", + "2041450bbc.txt : Start\n", + "2041450bbc.txt : Done\n", + "c9b741cf85.txt : Start\n", + "c9b741cf85.txt : Done\n", + "3b494f8454.txt : Start\n", + "3b494f8454.txt : Done\n", + "7b58b43097.txt : Start\n", + "7b58b43097.txt : Done\n", + "f6d921ced8.txt : Start\n", + "f6d921ced8.txt : Done\n", + "a774f5dcb0.txt : Start\n", + "a774f5dcb0.txt : Done\n", + "a607314ff3.txt : Start\n", + "a607314ff3.txt : Done\n", + "47d6b05426.txt : Start\n", + "47d6b05426.txt : Done\n", + "7f501b252e.txt : Start\n", + "7f501b252e.txt : Done\n", + "6d23b1599b.txt : Start\n", + "6d23b1599b.txt : Done\n", + "e854f24006.txt : Start\n", + "e854f24006.txt : Done\n", + "02b3aa0475.txt : Start\n", + "02b3aa0475.txt : Done\n", + "0bb6c71f04.txt : Start\n", + "0bb6c71f04.txt : Done\n", + "b23bb1811f.txt : Start\n", + "b23bb1811f.txt : Done\n", + "d7e4d2661b.txt : Start\n", + "d7e4d2661b.txt : Done\n", + "d1b7f85297.txt : Start\n", + "d1b7f85297.txt : Done\n", + "5007221a16.txt : Start\n", + "5007221a16.txt : Done\n", + "e3e5d4095f.txt : Start\n", + "e3e5d4095f.txt : Done\n", + "6a5a514a6d.txt : Start\n", + "6a5a514a6d.txt : Done\n", + "b679419d52.txt : Start\n", + "b679419d52.txt : Done\n", + "beb8106365.txt : Start\n", + "beb8106365.txt : Done\n", + "56b5faeff6.txt : Start\n", + "56b5faeff6.txt : Done\n", + "f4e750afc4.txt : Start\n", + "f4e750afc4.txt : Done\n", + "13880701f6.txt : Start\n", + "13880701f6.txt : Done\n", + "28c6c56435.txt : Start\n", + "28c6c56435.txt : Done\n", + "318852640c.txt : Start\n", + "318852640c.txt : Done\n", + "062719aca5.txt : Start\n", + "062719aca5.txt : Done\n", + "0e46adf00f.txt : Start\n", + "0e46adf00f.txt : Done\n", + "6507087bb8.txt : Start\n", + "6507087bb8.txt : Done\n", + "f72f737ba9.txt : Start\n", + "f72f737ba9.txt : Done\n", + "ad1b4fddea.txt : Start\n", + "ad1b4fddea.txt : Done\n", + "2c8100c054.txt : Start\n", + "2c8100c054.txt : Done\n", + "a21f6dd6e2.txt : Start\n", + "a21f6dd6e2.txt : Done\n", + "c98558432b.txt : Start\n", + "c98558432b.txt : Done\n", + "25594d754c.txt : Start\n", + "25594d754c.txt : Done\n", + "f378d7a627.txt : Start\n", + "f378d7a627.txt : Done\n", + "00de2ed323.txt : Start\n", + "00de2ed323.txt : Done\n", + "c548857fc6.txt : Start\n", + "c548857fc6.txt : Done\n", + "fda6960842.txt : Start\n", + "fda6960842.txt : Done\n", + "3dbfdeb28e.txt : Start\n", + "3dbfdeb28e.txt : Done\n", + "667b92c747.txt : Start\n", + "667b92c747.txt : Done\n", + "2f45fbeb96.txt : Start\n", + "2f45fbeb96.txt : Done\n", + "ea8ade1ec9.txt : Start\n", + "ea8ade1ec9.txt : Done\n", + "2500693c8c.txt : Start\n", + "2500693c8c.txt : Done\n", + "b3ec5aec10.txt : Start\n", + "b3ec5aec10.txt : Done\n", + "c7c60ec498.txt : Start\n", + "c7c60ec498.txt : Done\n", + "2639b3f232.txt : Start\n", + "2639b3f232.txt : Done\n", + "05cebd07f6.txt : Start\n", + "05cebd07f6.txt : Done\n", + "2c70d7a211.txt : Start\n", + "2c70d7a211.txt : Done\n", + "c482ae0d6a.txt : Start\n", + "c482ae0d6a.txt : Done\n", + "c8b2e1ea64.txt : Start\n", + "c8b2e1ea64.txt : Done\n", + "cc6023fd33.txt : Start\n", + "cc6023fd33.txt : Done\n", + "66dcfdc952.txt : Start\n", + "66dcfdc952.txt : Done\n", + "db3997fa66.txt : Start\n", + "db3997fa66.txt : Done\n", + "5cc73e5eb8.txt : Start\n", + "5cc73e5eb8.txt : Done\n", + "e2c63447a3.txt : Start\n", + "e2c63447a3.txt : Done\n", + "bf9981f1c7.txt : Start\n", + "bf9981f1c7.txt : Done\n", + "f9c1d63857.txt : Start\n", + "f9c1d63857.txt : Done\n", + "f5ad27d7c0.txt : Start\n", + "f5ad27d7c0.txt : Done\n", + "9c6cf67aa0.txt : Start\n", + "9c6cf67aa0.txt : Done\n", + "2a6ed256ac.txt : Start\n", + "2a6ed256ac.txt : Done\n", + "a0bc734be1.txt : Start\n", + "a0bc734be1.txt : Done\n", + "84aa61e2cd.txt : Start\n", + "84aa61e2cd.txt : Done\n", + "94a849a3dd.txt : Start\n", + "94a849a3dd.txt : Done\n", + "d17d48de9f.txt : Start\n", + "d17d48de9f.txt : Done\n", + "441b6dd9fb.txt : Start\n", + "441b6dd9fb.txt : Done\n", + "81ef81f563.txt : Start\n", + "81ef81f563.txt : Done\n", + "d5be4d3e85.txt : Start\n", + "d5be4d3e85.txt : Done\n", + "a968ac3598.txt : Start\n", + "a968ac3598.txt : Done\n", + "bd56123a22.txt : Start\n", + "bd56123a22.txt : Done\n", + "f93308201d.txt : Start\n", + "f93308201d.txt : Done\n", + "0b8e6baade.txt : Start\n", + "0b8e6baade.txt : Done\n", + "5ef2ba0d6f.txt : Start\n", + "5ef2ba0d6f.txt : Done\n", + "f07322d8df.txt : Start\n", + "f07322d8df.txt : Done\n", + "ef44110d87.txt : Start\n", + "ef44110d87.txt : Done\n", + "cf19743995.txt : Start\n", + "cf19743995.txt : Done\n", + "c073cfa358.txt : Start\n", + "c073cfa358.txt : Done\n", + "5f9c4f1f1f.txt : Start\n", + "5f9c4f1f1f.txt : Done\n", + "4de1c37ee8.txt : Start\n", + "4de1c37ee8.txt : Done\n", + "694551449e.txt : Start\n", + "694551449e.txt : Done\n", + "4adf02d48f.txt : Start\n", + "4adf02d48f.txt : Done\n", + "75ed4241e1.txt : Start\n", + "75ed4241e1.txt : Done\n", + "e73d5574d3.txt : Start\n", + "e73d5574d3.txt : Done\n", + "7e75ecd1e8.txt : Start\n", + "7e75ecd1e8.txt : Done\n", + "de31d88f0f.txt : Start\n", + "de31d88f0f.txt : Done\n", + "a7b7f0cf8b.txt : Start\n", + "a7b7f0cf8b.txt : Done\n", + "385444771f.txt : Start\n", + "385444771f.txt : Done\n", + "55022ab079.txt : Start\n", + "55022ab079.txt : Done\n", + "849689b4a1.txt : Start\n", + "849689b4a1.txt : Done\n", + "b278eed9ba.txt : Start\n", + "b278eed9ba.txt : Done\n", + "9e3e6ecdc1.txt : Start\n", + "9e3e6ecdc1.txt : Done\n", + "e37b2c1048.txt : Start\n", + "e37b2c1048.txt : Done\n", + "b366762650.txt : Start\n", + "b366762650.txt : Done\n", + "3c25273538.txt : Start\n", + "3c25273538.txt : Done\n", + "00c24abbbd.txt : Start\n", + "00c24abbbd.txt : Done\n", + "a6320d9006.txt : Start\n", + "a6320d9006.txt : Done\n", + "56a7a9450b.txt : Start\n", + "56a7a9450b.txt : Done\n", + "73f0b14dc0.txt : Start\n", + "73f0b14dc0.txt : Done\n", + "940cb1ea4b.txt : Start\n", + "940cb1ea4b.txt : Done\n", + "753aefd89c.txt : Start\n", + "753aefd89c.txt : Done\n", + "b56d0efe5f.txt : Start\n", + "b56d0efe5f.txt : Done\n", + "a6575b6354.txt : Start\n", + "a6575b6354.txt : Done\n", + "ff15e2aa90.txt : Start\n", + "ff15e2aa90.txt : Done\n", + "4aeb967bdb.txt : Start\n", + "4aeb967bdb.txt : Done\n", + "e8e3f5c3da.txt : Start\n", + "e8e3f5c3da.txt : Done\n", + "84fd5c6c82.txt : Start\n", + "84fd5c6c82.txt : Done\n", + "ba21aab5a7.txt : Start\n", + "ba21aab5a7.txt : Done\n", + "0eb135a63b.txt : Start\n", + "0eb135a63b.txt : Done\n", + "01f4ec6a93.txt : Start\n", + "01f4ec6a93.txt : Done\n", + "c96f15eb18.txt : Start\n", + "c96f15eb18.txt : Done\n", + "d36c2f7f4a.txt : Start\n", + "d36c2f7f4a.txt : Done\n", + "474efbd959.txt : Start\n", + "474efbd959.txt : Done\n", + "191dd3cd6e.txt : Start\n", + "191dd3cd6e.txt : Done\n", + "586213807b.txt : Start\n", + "586213807b.txt : Done\n", + "abc07266f1.txt : Start\n", + "abc07266f1.txt : Done\n", + "4dc74ef251.txt : Start\n", + "4dc74ef251.txt : Done\n", + "4c0f76583e.txt : Start\n", + "4c0f76583e.txt : Done\n", + "dafc4b7fbb.txt : Start\n", + "dafc4b7fbb.txt : Done\n", + "6123ccc4f8.txt : Start\n", + "6123ccc4f8.txt : Done\n", + "b4ecf8ff62.txt : Start\n", + "b4ecf8ff62.txt : Done\n", + "b1a1fbb48b.txt : Start\n", + "b1a1fbb48b.txt : Done\n", + "436afdfd4e.txt : Start\n", + "436afdfd4e.txt : Done\n", + "5edd73f58b.txt : Start\n", + "5edd73f58b.txt : Done\n", + "e495483bdd.txt : Start\n", + "e495483bdd.txt : Done\n" + ] + } + ], + "source": [ + "embed_folder('docs/cera2', collection, embed_model)" + ] + }, + { + "cell_type": "markdown", + "id": "227ce12e-f33e-485d-a3d2-0e131279776d", + "metadata": {}, + "source": [ + "# Query the ChromaDB collection" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "id": "8a81c2c1-4d94-47f2-8998-f65e01505629", + "metadata": {}, + "outputs": [], + "source": [ + "def query_collection(query, n_results=3):\n", + " query = 'query: ' + query\n", + " query_embedding = embed_model.encode(query, normalize_embeddings=True)\n", + " query_embedding = query_embedding.tolist()\n", + " results = collection.query(\n", + " query_embeddings=[query_embedding],\n", + " n_results=n_results,\n", + " )\n", + " return results" + ] + }, + { + "cell_type": "code", + "execution_count": 401, + "id": "5ccd0b6d-32d8-497e-aca6-38f84c8e1f4d", + "metadata": {}, + "outputs": [], + "source": [ + "query = \"Comment la Caisse d'Epargne Rhône-Alpes peut-elle aider une entreprise qui rencontre des problèmes de trésorerie ?\"\n", + "query_results = query_collection(query)" + ] + }, + { + "cell_type": "markdown", + "id": "13153d19-b9d5-482c-82e7-8eca1fad5bcd", + "metadata": {}, + "source": [ + "# RAG prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 402, + "id": "1550331f-4fca-43ec-80ba-2b8d3ed6a37c", + "metadata": {}, + "outputs": [], + "source": [ + "def format_passages(query_results):\n", + " result = []\n", + " for i in range(len(query_results[\"documents\"][0])):\n", + " passage = query_results[\"documents\"][0][i]\n", + " url = query_results[\"metadatas\"][0][i][\"url\"]\n", + " category = query_results[\"metadatas\"][0][i][\"category\"]\n", + " lines = passage.split('\\n')\n", + " if lines[0].startswith('passage: '):\n", + " lines[0] = lines[0].replace('passage: ', '')\n", + " lines.insert(0, \"###\")\n", + " lines.insert(1, f\"Passage {i+1}\")\n", + " lines.insert(2, \"Titre :\")\n", + " lines.insert(4, \"\")\n", + " lines.insert(5, \"Catégorie :\")\n", + " lines.insert(6, category)\n", + " lines.insert(7, \"\")\n", + " lines.insert(8, \"URL :\")\n", + " lines.insert(9, url)\n", + " lines.insert(10, \"\")\n", + " lines.insert(11, \"Contenu : \")\n", + " lines += ['']\n", + " result += lines\n", + " result = '\\n'.join(result)\n", + " return result\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 417, + "id": "b70c180e-9929-4c5f-9499-aadedd55cf3f", + "metadata": {}, + "outputs": [], + "source": [ + "rag_system_prompt = \"\"\"\n", + "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.\n", + "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.\n", + "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.\n", + "Vous fournissez avec soin des réponses précises, factuelles, réfléchies et nuancées, et vous êtes doué pour le raisonnement.\n", + "Toutes les informations factuelles que vous utilisez pour répondre proviennent exclusivement du contexte.\n", + "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.\n", + "Vos réponses doivent être brèves.\n", + "Vous rédigez vos réponses en français au format markdown sous forme d'une liste d'au plus 7 éléments.\n", + "Voici le format que doit prendre votre réponse :\n", + "```\n", + "1. Elément de réponse. (Passage 1)\n", + "2. Elément de réponse. (Passage 1)\n", + "3. Elément de réponse. (Passage 2)\n", + "4. ...\n", + "```\n", + "\n", + "----------------------------------------\n", + "Historique :\n", + "{history}\n", + "----------------------------------------\n", + "Contexte :\n", + "{context}\n", + "\"\"\"\n", + "\n", + "def format_rag_prompt(query, context=\"\", history=\"\"):\n", + " global chat_history\n", + " \n", + " user_query = f\"Question de l'utilisateur : \\n{query}\\n\\n\"\n", + " assistant_answer = f\"Réponse de l'assistant : \\n 1. \"\n", + " chat_history.append({'user': user_query, 'assistant': assistant_answer})\n", + "\n", + " system_prompt = rag_system_prompt.format(history=history, context=context)\n", + " \n", + " prompt = \"\"\n", + " prompt = f\"<|system|>\\n{system_prompt.strip()} \\n\\n\"\n", + " prompt += f\"<|user|>\\n{query} \\n\\n\"\n", + " prompt += f\"<|assistant|>\\n Voici des éléments de réponse : \\n 1. \"\n", + " \n", + " return prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 418, + "id": "58ef118f-345b-46b5-a844-0e82bb4efe53", + "metadata": {}, + "outputs": [], + "source": [ + "def answer_rag_prompt(query, query_results):\n", + " global chat_history\n", + " \n", + " query_context = format_passages(query_results)\n", + "\n", + " history = \"\"\n", + " for i in reversed(range(len(chat_history))):\n", + " history += chat_history[i][\"user\"]\n", + " history += chat_history[i][\"assistant\"]\n", + " history += \"\\n\\n\"\n", + " \n", + " prompt = format_rag_prompt(query, query_context, history)\n", + " \n", + " ans = answer(prompt)\n", + " chat_history[-1]['assistant'] += ans\n", + " ans = '1. ' + ans\n", + " \n", + " return ans" + ] + }, + { + "cell_type": "code", + "execution_count": 419, + "id": "cf9f7e2d-616e-46fb-a1c4-9fa2e3bf01ea", + "metadata": {}, + "outputs": [], + "source": [ + "chat_history = []" + ] + }, + { + "cell_type": "code", + "execution_count": 420, + "id": "c58035d9-02c4-4da2-91aa-b745690a268f", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Llama.generate: prefix-match hit\n", + "\n", + "llama_print_timings: load time = 575.42 ms\n", + "llama_print_timings: sample time = 7686.78 ms / 2270 runs ( 3.39 ms per token, 295.31 tokens per second)\n", + "llama_print_timings: prompt eval time = 4638.92 ms / 1729 tokens ( 2.68 ms per token, 372.72 tokens per second)\n", + "llama_print_timings: eval time = 80992.02 ms / 2269 runs ( 35.70 ms per token, 28.02 tokens per second)\n", + "llama_print_timings: total time = 93681.23 ms\n" + ] + } + ], + "source": [ + "ans = answer_rag_prompt(query, query_results)" + ] + }, + { + "cell_type": "code", + "execution_count": 421, + "id": "f11c9e3d-5544-4d0c-a3e0-9e395826d948", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "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)\n", + " 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)\n", + " 3. À taux fixe ou variable, les prêts classiques vous accompagnent dans le développement de votre entreprise. (Passage 1)\n", + " 4. La Caisse d'Epargne Rhône Alpes vous propose également un financement adapté pour vos projets de création, reprise ou développement de votre activité professionnelle avec un ensemble d'offres et de conseils pour vous accompagner dans le financement de vos projets. (Passage 1)\n", + " 5. En outre, 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)\n", + " 6. Vous pouvez également rencontrer un conseiller en ligne, à l'agence ou par téléphone à l'horaire de votre choix pour obtenir des solutions adaptées à votre situation financière compliquée. (Passage 2)\n", + " 7. La Caisse d'Epargne Rhône Alpes considère que c’est l’une de ses responsabilités sociétales d’être une banque inclusive et engagée pour être utile à nos clients, en proposant un dispositif d’écoute et d’accueil des clients en situation de fragilité, du fait d’un handicap ou de difficultés financières, permettant d’adapter ses services à leurs besoins spécifiques et de maintenir en toute situation une écoute attentive et des solutions personnalisées. (Passage 2)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(ans))" + ] + }, + { + "cell_type": "code", + "execution_count": 221, + "id": "18258b92-2161-44fd-b5a9-2ae575202d20", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1889" + ] + }, + "execution_count": 221, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# len(llm.tokenize(format_rag_prompt_init(query, query_results).encode(encoding='utf-8')))" + ] + }, + { + "cell_type": "code", + "execution_count": 422, + "id": "95600c84-52cf-4bb7-b12a-845aa202653d", + "metadata": {}, + "outputs": [], + "source": [ + "# reformulate query\n", + "\n", + "query_reformulate_system_prompt = \"\"\"\\\n", + "Vous êtes un interprète conversationnel pour une conversation entre un utilisateur et \\\n", + "un assistant IA spécialiste des produits et services de la Caisse d'Epargne Rhône-Alpes, \\\n", + "une banque régionale française. \\n \\\n", + "L'utilisateur vous posera une question sans contexte. \\\n", + "Vous devez reformuler la question pour prendre en compte le contexte de la conversation. \\n \\\n", + "Vous devez supposer que la question est liée aux produits et services de la Caisse d'Epargne Rhône-Alpes. \\n \\\n", + "Vous devez également consulter l'historique de la conversation ci-dessous lorsque vous reformulez la question. \\\n", + "Par exemple, vous remplacerez les pronoms par les noms les plus probables dans l'historique de la conversation. \\n \\\n", + "Lorsque vous reformulez la question, accordez plus d'importance à la dernière question et \\\n", + "à la dernière réponse dans l'historique des conversations. \\n \\\n", + "L'historique des conversations est présenté dans l'ordre chronologique inverse, \\\n", + "de sorte que l'échange le plus récent se trouve en haut de la page. \\n \\\n", + "Répondez en seulement une phrase avec la question reformulée. \\n\\n \\\n", + "\\\n", + "Historique de la conversation : \\n\\n \\\n", + "\"\"\"\n", + "\n", + "def format_prompt_reformulate_query(query):\n", + "\n", + " system_prompt = query_reformulate_system_prompt\n", + "\n", + " for i in reversed(range(len(chat_history))):\n", + " system_prompt += chat_history[i][\"user\"]\n", + " system_prompt += chat_history[i][\"assistant\"]\n", + " \n", + " prompt = \"\"\n", + " prompt = f\"<|system|>\\n{system_prompt.strip()} \\n\\n\"\n", + " prompt += f\"<|user|>\\nPeux-tu reformuler la question suivante : \\n \\\"{query}\\\" \\n\\n\"\n", + " prompt += f\"<|assistant|> Question reformulée : \\n\\\"\"\n", + " \n", + " return prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 423, + "id": "45ed5601-d7c2-43f5-8436-1b97289ed066", + "metadata": {}, + "outputs": [], + "source": [ + "query2 = \"Peux-tu m'en dire plus au sujet de l'affacturage ?\"\n", + "# print(format_prompt_reformulate_query(query2))" + ] + }, + { + "cell_type": "code", + "execution_count": 424, + "id": "69a51002-bb8b-4a6e-8356-7f2cbe83b2f3", + "metadata": {}, + "outputs": [], + "source": [ + "def answer_reformulate_query(query):\n", + " \n", + " prompt = format_prompt_reformulate_query(query)\n", + " \n", + " ans = answer(prompt)\n", + "\n", + " if ans.endswith('\"'):\n", + " ans = ans[:-1]\n", + " \n", + " return ans" + ] + }, + { + "cell_type": "code", + "execution_count": 425, + "id": "2ffb55e8-05ef-4c31-90a8-e9d6f62be17c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Llama.generate: prefix-match hit\n", + "\n", + "llama_print_timings: load time = 575.42 ms\n", + "llama_print_timings: sample time = 194.11 ms / 57 runs ( 3.41 ms per token, 293.65 tokens per second)\n", + "llama_print_timings: prompt eval time = 2261.49 ms / 923 tokens ( 2.45 ms per token, 408.14 tokens per second)\n", + "llama_print_timings: eval time = 1376.69 ms / 56 runs ( 24.58 ms per token, 40.68 tokens per second)\n", + "llama_print_timings: total time = 3800.97 ms\n" + ] + } + ], + "source": [ + "query2_reformulated = answer_reformulate_query(query2)" + ] + }, + { + "cell_type": "code", + "execution_count": 426, + "id": "687b9ae7-ef51-40c2-813c-88dbb84d43d0", + "metadata": {}, + "outputs": [], + "source": [ + "query2_results = query_collection(query2_reformulated)" + ] + }, + { + "cell_type": "code", + "execution_count": 413, + "id": "6d363524-83a1-446f-ad15-08f3f2c2e4e2", + "metadata": {}, + "outputs": [], + "source": [ + "# TEST\n", + "\n", + "query2_context = format_passages(query2_results)\n", + "\n", + "history = \"\"\n", + "for i in reversed(range(len(chat_history))):\n", + " history += chat_history[i][\"user\"]\n", + " history += chat_history[i][\"assistant\"]\n", + " history += \"\\n-----\\n\"\n", + "\n", + "prompt = format_rag_prompt(query2_reformulated, query2_context, history)" + ] + }, + { + "cell_type": "code", + "execution_count": 414, + "id": "d86bd9e4-0974-49a5-af92-5b2e87471de2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<|system|>\n", + "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.\n", + "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.\n", + "Pour répondre, tenez également compte de l'historique de la conversation qui est répertorié ci-dessous dans la rubrique Historique.\n", + "Votre réponse ne doit pas introduire des informations déjà présentes dans l'historique.\n", + "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.\n", + "Vous fournissez avec soin des réponses précises, factuelles, réfléchies et nuancées, et vous êtes doué pour le raisonnement.\n", + "Toutes les informations factuelles que vous utilisez pour répondre proviennent exclusivement du contexte.\n", + "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.\n", + "Vos réponses doivent être brèves.\n", + "Vous rédigez vos réponses en français au format markdown sous forme d'une liste.\n", + "Voici le format que doit prendre votre réponse :\n", + "```\n", + "1. Elément de réponse. (Passage 1)\n", + "2. Elément de réponse. (Passage 1)\n", + "3. Elément de réponse. (Passage 2)\n", + "4. ...\n", + "```\n", + "\n", + "----------------------------------------\n", + "Historique :\n", + "Question de l'utilisateur : \n", + "Comment la Caisse d'Epargne Rhône-Alpes peut-elle aider une entreprise qui rencontre des problèmes de trésorerie ?\n", + "\n", + "Réponse de l'assistant : \n", + " 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)\n", + " 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)\n", + " 3. À taux fixe ou variable, les prêts classiques vous accompagnent dans le développement de votre entreprise. (Passage 1)\n", + " 4. De plus, avec l'affacturage, vous pouvez optimiser votre trésorerie sans attendre le règlement de vos factures clients. (Passage 1)\n", + " 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)\n", + " 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)\n", + "\n", + " 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.\n", + "-----\n", + "\n", + "----------------------------------------\n", + "Contexte :\n", + "###\n", + "Passage 1\n", + "Titre :\n", + "Financer vos projets & optimiser votre trésorerie\n", + "\n", + "Catégorie :\n", + "professionnels\n", + "\n", + "URL :\n", + "https://www.caisse-epargne.fr/rhone-alpes/professionnels/financer-projets-optimiser-tresorerie/\n", + "\n", + "Contenu : \n", + "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é.\n", + "À taux fixe ou variable, les prêts classiques vous accompagnent dans le développement de votre entreprise.\n", + "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.\n", + "Avec l’affacturage, optimisez votre trésorerie sans attendre le règlement de vos factures clients.\n", + "Vous souhaitez\n", + "Financer votre projet\n", + "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.\n", + "Prêt Décollage Pro\n", + "Un soutien financier complémentaire aux porteurs de projets accompagnés.\n", + "Crédit-Bail Mobilier\n", + "Une solution pour financer votre équipement à 100% sans immobiliser vos capitaux.\n", + "Financer votre transition énergétique\n", + "La Caisse d’Epargne vous accompagne dans votre transition énergétique avec des offres sur mesure en fonction de vos besoins.\n", + "Acquérir un véhicule professionnel\n", + "Gagnez en mobilité et changez rapidement de véhicule grâce aux offres de financement de la Caisse d’Epargne.\n", + "Location Longue Durée avec MyCarLease\n", + "Besoin d’une voiture, découvrez le service sur-mesure Location Longue Durée. Des prestations adaptées à vos besoins.\n", + "Financement de votre équipement\n", + "\n", + "###\n", + "Passage 2\n", + "Titre :\n", + "Garanties Assurances et Assistance des cartes Visa\n", + "\n", + "Catégorie :\n", + "comptes-cartes\n", + "\n", + "URL :\n", + "https://www.caisse-epargne.fr/rhone-alpes/comptes-cartes/garanties-assurances-et-assistances-des-cartes-visa/\n", + "\n", + "Contenu : \n", + "Caisse d'Epargne\n", + "Rhône Alpes\n", + "Prendre rendez-vous en ligne\n", + "En agence ou par téléphone à l'horaire de votre choix\n", + "Vous êtes déjà client ?\n", + "Connectez-vous sur votre espace personnel pour consulter les coordonnées de votre conseiller.\n", + "\n", + "###\n", + "Passage 3\n", + "Titre :\n", + "Formule Famille\n", + "\n", + "Catégorie :\n", + "comptes-cartes\n", + "\n", + "URL :\n", + "https://www.caisse-epargne.fr/rhone-alpes/comptes-cartes/formule-famille/\n", + "\n", + "Contenu : \n", + "Caisse d'Epargne\n", + "Rhône Alpes\n", + "Prendre rendez-vous en ligne\n", + "En agence ou par téléphone à l'horaire de votre choix\n", + "Vous êtes déjà client ?\n", + "Connectez-vous sur votre espace personnel pour consulter les coordonnées de votre conseiller. \n", + "\n", + "<|user|>\n", + "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? \n", + "\n", + "<|assistant|>\n", + " Voici des éléments de réponse : \n", + " 1. \n" + ] + } + ], + "source": [ + "print(prompt)" + ] + }, + { + "cell_type": "code", + "execution_count": 427, + "id": "adc6f9e9-4410-4b30-bd60-319e5a463930", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Llama.generate: prefix-match hit\n", + "\n", + "llama_print_timings: load time = 575.42 ms\n", + "llama_print_timings: sample time = 1201.36 ms / 353 runs ( 3.40 ms per token, 293.83 tokens per second)\n", + "llama_print_timings: prompt eval time = 13189.84 ms / 3730 tokens ( 3.54 ms per token, 282.79 tokens per second)\n", + "llama_print_timings: eval time = 13559.00 ms / 352 runs ( 38.52 ms per token, 25.96 tokens per second)\n", + "llama_print_timings: total time = 27777.04 ms\n" + ] + } + ], + "source": [ + "ans = answer_rag_prompt(query2_reformulated, query2_results)" + ] + }, + { + "cell_type": "code", + "execution_count": 428, + "id": "1321be63-3f13-49f2-9530-a825204eec96", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "1. La Caisse d'Epargne Rhône Alpes propose l'affacturage, une solution pour optimiser votre trésorerie sans attendre le règlement de vos factures clients. (Passage 1)\n", + " 2. Avec l'affacturage, vous pouvez obtenir un financement adapté à votre situation financière compliquée et éviter les problèmes de trésorerie liés au délai d'attente des paiements de vos clients. (Passage 1)\n", + " 3. Cette solution permet également de préserver votre image auprès de vos fournisseurs en vous donnant la possibilité de régler leurs factures à l'horaire convenu, même si les paiements de vos clients sont retardés. (Passage 1)\n", + " 4. L'affacturage est une solution courante utilisée par de nombreuses entreprises pour optimiser leur trésorerie et gérer efficacement leurs flux de trésorerie. (Passage 1)\n", + " 5. La Caisse d'Epargne Rhône Alpes vous propose également un simulateur pour 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)\n", + " 6. N'hésitez pas à contacter votre conseiller en ligne, à l'agence ou par téléphone pour obtenir des solutions adaptées à votre situation financière" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(Markdown(ans))" + ] + }, + { + "cell_type": "markdown", + "id": "85ac55aa-7645-4253-a790-1c3237c21749", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "# Generate a HTML representation of the tree structure of the webages by categories" + ] + }, + { + "cell_type": "markdown", + "id": "7e063507-a367-428b-b887-e65a9fc5b7d3", + "metadata": {}, + "source": [ + "## Create the tree structure of the tags (i.e., subparts of the URLs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d98bc715-64c3-4a0e-8bd8-feab61980ea1", + "metadata": {}, + "outputs": [], + "source": [ + "tags = {}\n", + "\n", + "txt_folder = 'docs/cera2'\n", + "\n", + "for filename in os.listdir(txt_folder):\n", + " if filename.endswith('.txt'):\n", + " file_path = os.path.join(txt_folder, filename)\n", + " with open(file_path, 'r') as file:\n", + " file_contents = file.read()\n", + " contents_lst = [str.replace('\\n',' ').replace('\\xa0', ' ') for str in file_contents.split('\\n\\n')]\n", + " url = contents_lst[0]\n", + " if '?' in url: # URLs with a '?' corresponds to call to services and have no useful content\n", + " continue\n", + " title = contents_lst[1]\n", + " if not title: # when the title is absent (or empty), the page has no interest\n", + " continue\n", + " prefix = 'https://www.caisse-epargne.fr/'\n", + " suffix = url.replace(prefix, '')\n", + " parts = suffix.split('/')\n", + " parts = [part for part in parts if part] # remove empty parts\n", + " dic = tags\n", + " for i, part in enumerate(parts):\n", + " if part in dic:\n", + " dic[part]['nb'] = dic[part]['nb'] + 1\n", + " else:\n", + " dic[part] = {'nb': 1, 'sub': {}}\n", + " if i == len(parts)-1: # last part of an url\n", + " dic[part]['file'] = file_path\n", + " \n", + " dic = dic[part]['sub']" + ] + }, + { + "cell_type": "markdown", + "id": "33d2e9a2-435c-4547-aa01-277bdd1cb71b", + "metadata": {}, + "source": [ + "## Transform to HTML the tree structure of the tags" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "402169b6-16ca-4aa7-a63f-669edcb84d05", + "metadata": {}, + "outputs": [], + "source": [ + "def read_file_content(file_path):\n", + " try:\n", + " with open(file_path, 'r') as file:\n", + " return html.escape(file.read())\n", + " except IOError:\n", + " return \"File not found or unable to read.\"\n", + "\n", + "def dict_to_html(d):\n", + " html = '
    '\n", + " for key, value in d.items():\n", + " file_path = value.get('file', '')\n", + " if 'sub' in value and value['sub']:\n", + " html += f'
  • {key} (nb: {value[\"nb\"]})
  • '\n", + " html += dict_to_html(value['sub'])\n", + " else:\n", + " content = read_file_content(file_path) if file_path else ''\n", + " html += f'
  • {key} (nb: {value[\"nb\"]})
  • '\n", + " html += f'
    {content}
    '\n", + " html += '
'\n", + " return html" + ] + }, + { + "cell_type": "markdown", + "id": "34878d5e-a27b-4915-a8a7-02978f656f3c", + "metadata": {}, + "source": [ + "## Add styling and javascript navigation to the HTML tree of the tags" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3fbdced-18c9-438e-93a3-79f8c15fc146", + "metadata": {}, + "outputs": [], + "source": [ + "def save_html_file(content, filename):\n", + " html_template = f\"\"\"\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " Website Hierarchy\n", + " \n", + " \n", + " \n", + " {content}\n", + " \n", + " \n", + " \n", + " \"\"\"\n", + " with open(filename, 'w') as file:\n", + " file.write(html_template)" + ] + }, + { + "cell_type": "markdown", + "id": "6b8bc70a-08c6-4e17-8922-20e173863695", + "metadata": {}, + "source": [ + "## Generate the HTML representation of the tree of tags" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "419f16c2-916e-41a0-9427-c71365799218", + "metadata": {}, + "outputs": [], + "source": [ + "html_content = dict_to_html(tags)\n", + "save_html_file(html_content, 'cera_hierarchy.html')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f473843b-1cca-4471-877f-12e5bf1de9f0", + "metadata": {}, + "outputs": [], + "source": [ + "query = \"query: En tant que professionnel, comment mieux gérer sa trésorerie ?\"\n", + "query_embedding = embed_model.encode(query, normalize_embeddings=True)\n", + "query_embedding = query_embedding.tolist()\n", + "collection.query(\n", + " query_embeddings=query_embedding,\n", + " n_results=10,\n", + " where={\"category\": \"professionnels\"},\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "14c72389-df64-42f3-89fd-1378fe555438", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "# Chat interface" + ] + }, + { + "cell_type": "markdown", + "id": "f778d03b-f7a1-4996-b813-0505f81f497b", + "metadata": {}, + "source": [ + "## Generate an answer taking into account the history of interactions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6abd6080-4545-4621-9753-b4a0ad677ba0", + "metadata": {}, + "outputs": [], + "source": [ + "history_trace = []" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51f1b769-cafe-449c-9223-b930d97d38b4", + "metadata": {}, + "outputs": [], + "source": [ + "def generate_text(message, history):\n", + " history_trace = history\n", + " temp = \"\"\n", + " prompt = f\"<|system|>\\n{system_prompt}\\n\"\n", + " for interaction in history:\n", + " prompt += \"<|user|>\\n\" + str(interaction[0]) + \" \\n \"\n", + " prompt += \"<|assistant|>\\n\" + str(interaction[1]) + \" \\n\"\n", + "\n", + " prompt += \"<|user|>\\n\" + str(message) + \" \\n <|assistant|>\\n \"\n", + "\n", + " output = llm(\n", + " prompt = prompt,\n", + " temperature=0.1,\n", + " mirostat_mode = 2,\n", + " max_tokens=-1,\n", + " stop=[''],\n", + " stream=True,\n", + " )\n", + " for out in output:\n", + " stream = copy.deepcopy(out)\n", + " temp += stream[\"choices\"][0][\"text\"]\n", + " yield temp" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1989ed61-5f75-4922-a3c7-3b17ff9d07f0", + "metadata": {}, + "outputs": [], + "source": [ + "prompt = \"Connais-tu des répliques dites par Charlie Munger lors des rencontres annuels organisées par Berkshire Hathaway ?\"\n", + "prompt_encoded = prompt.encode(encoding='utf-8')\n", + "len(llm.tokenize(prompt_encoded))" + ] + }, + { + "cell_type": "markdown", + "id": "439401f1-2548-43af-8f4b-7c1c582c2220", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Gradio interface" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6833e184-c2e0-4af5-ba4d-40a86acfce3b", + "metadata": {}, + "outputs": [], + "source": [ + "demo = gr.ChatInterface(\n", + " generate_text,\n", + " title=\"CERA\",\n", + " description=\"CERA RAG\",\n", + " examples=[\"Qui sont les philosophes les plus influencés par Hegel ?\"],\n", + " cache_examples=False,\n", + " retry_btn=None,\n", + " undo_btn=\"Delete Previous\",\n", + " clear_btn=\"Clear\",\n", + ")\n", + "demo.queue()\n", + "demo.launch()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c96c3f00-9309-4b19-9a77-6d8a80a9ceea", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "28b195b3-0898-4eea-bf07-7272c54e7a3d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "RAG_ENV", + "language": "python", + "name": "rag_env" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}