From 51983f972f68275fa1a364d73eebc8437688b59b Mon Sep 17 00:00:00 2001
From: Noah Jefferson Baumann <noah.jefferson.baumann.1@hu-berlin.de>
Date: Tue, 25 Feb 2025 19:36:14 +0100
Subject: [PATCH] =?UTF-8?q?improved=20Einf=C3=BChrung=20with=20more=20desc?=
 =?UTF-8?q?riptions?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 rag_lb/jupyter-book/images/rag_flow.png       | Bin 0 -> 51885 bytes
 .../notebooks/00_Einf\303\274hrung_RAG.ipynb" | 648 ++++++------------
 2 files changed, 216 insertions(+), 432 deletions(-)
 create mode 100644 rag_lb/jupyter-book/images/rag_flow.png

diff --git a/rag_lb/jupyter-book/images/rag_flow.png b/rag_lb/jupyter-book/images/rag_flow.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad34026eceba7c89489432da74d42c2301f1b7e9
GIT binary patch
literal 51885
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
BssjK3

literal 0
HcmV?d00001

diff --git "a/rag_lb/jupyter-book/notebooks/00_Einf\303\274hrung_RAG.ipynb" "b/rag_lb/jupyter-book/notebooks/00_Einf\303\274hrung_RAG.ipynb"
index db1c23c..baeee6e 100644
--- "a/rag_lb/jupyter-book/notebooks/00_Einf\303\274hrung_RAG.ipynb"
+++ "b/rag_lb/jupyter-book/notebooks/00_Einf\303\274hrung_RAG.ipynb"
@@ -10,14 +10,14 @@
     "### Einleitung und Überblick\n",
     "\n",
     "#### Was erwartet Sie in diesem Jupyter Book?\n",
-    "Dieses Jupyter Book führt Sie in die Methode des Retrieval Augmented Generation (RAG) ein und zeigt deren Anwendung in der historischen Textanalyse. RAG kombiniert die Fähigkeiten von Sprachmodellen mit gezielter Informationssuche in spezifischen Dokumenten - in unserem Fall historischen Quellen.\n",
+    "Dieses Jupyter Book führt Sie in die Methode des Retrieval Augmented Generation (RAG) ein und zeigt deren Anwendung in der historischen Textanalyse. RAG kombiniert die Fähigkeiten von Sprachmodellen mit gezielter Informationssuche in spezifischen Dokumenten - in unserem Fall historischen Quellen. Dadurch können Einschränkungen generischer LLMs können umgangen werden, indem eine große Menge an Referenzdokumenten durch das System geleitet und auf der Grundlage der berechneten Relevanz für die Benutzerfrage abgerufen werden kann, die generierten Antworten diese abgerufenen Quellen verwenden und speziell hervorheben, welche Quellen verwendet wurden. \n",
     "\n",
     "#### Lernziele\n",
     "Nach diesem einführenden Notebook werden Sie:\n",
     "- Die Grundidee von RAG verstehen\n",
     "- Den Wert dieser Methode für die historische Forschung einschätzen können\n",
     "- Eine erste RAG-Pipeline in Aktion gesehen haben\n",
-    "- Die Möglichkeiten und Grenzen der Methode kennen\n",
+    "- Erste Möglichkeiten und Grenzen der Methode kennen\n",
     "\n",
     "#### Aufbau des Jupyter Books\n",
     "Das Book ist modular aufgebaut und umfasst:\n",
@@ -33,7 +33,60 @@
     "   - Prompt-Entwicklung\n",
     "   - Antwortgenerierung\n",
     "5. **Anwendungsfälle**\n",
-    "   - Spezifische historische Analysen\n"
+    "   - Spezifische historische Analysen\n",
+    "\n",
+    "## Voraussetzungen und benötigtes Vorwissen\n",
+    "\n",
+    "Dieses Jupyter Notebook richtet sich an Studierende und Forschende in den digitalen Geisteswissenschaften mit grundlegenden Kenntnissen in:\n",
+    "\n",
+    "### Technische Voraussetzungen\n",
+    "- **Python-Grundlagen**: Vertrautheit mit Variablen, Funktionen, Schleifen und der Arbeit mit Listen und Dictionaries\n",
+    "- **Jupyter Notebooks**: Grundlegende Kenntnis der Funktionsweise von Zellen und der Ausführung von Code\n",
+    "- **Pandas**: Elementare Erfahrung mit Datenrahmen (DataFrames) und einfachen Datenoperationen\n",
+    "\n",
+    "### Inhaltliche Voraussetzungen\n",
+    "- **Grundlegendes Verständnis historischer Quellenkritik**: Einordnung von Texten in ihren Entstehungskontext\n",
+    "- **Basiswissen zu Textanalyse**: Konzepte wie Tokenisierung, Vektorisierung, oder Ähnlichkeitsmaße müssen nicht im Detail bekannt sein, werden aber im Notebook erläutert\n",
+    "- **Interesse an KI-gestützten Methoden** für die Geisteswissenschaften\n",
+    "\n",
+    "Falls Sie mit einem der Konzepte nicht vertraut sind, bieten wir zu Beginn jedes Abschnitts kurze Einführungen und verweisen auf weiterführende Ressourcen. Das Notebook ist so konzipiert, dass es schrittweise vom Einfachen zum Komplexen führt."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Was ist RAG?\n",
+    "\n",
+    "Retrieval Augmented Generation (RAG) ist eine Methode, die es uns ermöglicht, große Textsammlungen gezielt zu durchsuchen und mit Hilfe von KI zu analysieren. Der Prozess besteht aus zwei Hauptschritten:\n",
+    "\n",
+    "1. **Retrieval**: Zuerst werden passende Informationen aus einer Datenquelle geholt. Diese Datenquelle kann eine Vektordatenbank sein, in der Dokumente (bzw. Ausschnitte von Dokumenten) mithilfe von Embeddings abgelegt sind. \n",
+    "\n",
+    "2. **Augmented Generation**: Die gefundenen (\"retrieved\") Informationen werden zusammen mit der Forschungsfrage an ein Large Language Model (LLM) übergeben. Das LLM nutzt diese Zusatzinformationen, um eine präzise und kontextbezogene Antwort zu generieren.\n",
+    "\n",
+    "### Glossar und wichtige Begriffe\n",
+    "\n",
+    "Für unsere Arbeit werden einige technische Begriffe wichtig sein. Hier sind die wichtigsten Konzepte, die wir verwenden werden:\n",
+    "\n",
+    "| Begriff | Kurzbeschreibung |\n",
+    "|---------|-----------------|\n",
+    "| Retrieval | Die Suche und Extraktion relevanter Informationen aus einer Datenbasis |\n",
+    "| Embedding | Die Umwandlung von Text in numerische Vektoren, die von Computern verarbeitet werden können |\n",
+    "| Vector Database | Eine spezielle Datenbank für die effiziente Speicherung und Suche von Embeddings |\n",
+    "| Chunking | Die Aufteilung langer Texte in kleinere, verarbeitbare Einheiten |\n",
+    "\n",
+    "**Übung**: Machen Sie sich während der durchführung des Jupyter-Books gedanken wie diese Begriffe ausgebaut werden können und erstellen Sie Ihre eigenen Definitionen dieser Begriffe, während wir sie in der Praxis kennenlernen.\n",
+    "\n",
+    "Weitere Ressourcen:\n",
+    "- [LangChain Dokumentation](https://python.langchain.com/docs/get_started/introduction)\n",
+    "- [Understanding Embeddings](https://www.sbert.net/)\n",
+    "- [Vector Database Grundlagen](https://www.pinecone.io/learn/vector-database/)\n",
+    "\n",
+    "### Systemübersicht\n",
+    "\n",
+    "Bevor wir in den Code einsteigen, schauen wir uns an, wie die einzelnen Komponenten zusammenarbeiten:\n",
+    "\n",
+    "![rag_flow](../images/rag_flow.png)"
    ]
   },
   {
@@ -43,7 +96,7 @@
     "## Unser Quellenkorpus: Soldatenbriefe 1745-1872\n",
     "\n",
     "#### Beschreibung der Quelle\n",
-    "Das Korpus \"Soldatenbriefe\" ist eine Sammlung von 170 Briefen aus dem deutschsprachigen Raum, die mehrere wichtige historische Epochen umfasst:\n",
+    "Das [Korpus \"Soldatenbriefe\"](https://www.dwds.de/d/korpora/soldatenbriefe) ist eine Sammlung von 170 Briefen aus dem deutschsprachigen Raum, die mehrere wichtige historische Epochen umfasst:\n",
     "- Koalitions- und Befreiungskriege (1792−1815)\n",
     "- Deutscher Krieg (1866)\n",
     "- Deutsch-Französischer Krieg (1870/71)\n",
@@ -63,7 +116,20 @@
     "Die Briefe liegen in verschiedenen Formaten vor:\n",
     "- **TEI-XML**: Ursprungsformat mit detaillierten Metadaten\n",
     "- **CSV**: Aufbereitete Version für die Analyse\n",
-    "- **Plain Text**: Extrahierte Brieftexte"
+    "- **Plain Text**: Extrahierte Brieftexte\n",
+    "\n",
+    "### Daten Auswahl\n",
+    "Wir verwenden diesen Datensatz aus folgenden Gründen: \n",
+    "- Er ist vom Textumfang her vergleichsweise klein, so dass demonstrierbare Berechnungen in einer angemessenen Zeit durchgeführt werden können.  \n",
+    "- Das TEI/XML-Format ist in der Geschichtswissenschaft üblich. \n",
+    "- Die Daten sind gut strukturiert, was es einfach macht, den Text und die Metadaten für unsere RAG-Pipeline zu organisieren."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Erste Erkundung der Daten"
    ]
   },
   {
@@ -75,13 +141,13 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Requirement already satisfied: pandas in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (2.2.3)Note: you may need to restart the kernel to use updated packages.\n",
-      "\n",
+      "Requirement already satisfied: pandas in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (2.2.3)\n",
       "Requirement already satisfied: numpy>=1.23.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pandas) (1.26.4)\n",
       "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pandas) (2.9.0.post0)\n",
       "Requirement already satisfied: pytz>=2020.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pandas) (2024.2)\n",
       "Requirement already satisfied: tzdata>=2022.7 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pandas) (2024.2)\n",
-      "Requirement already satisfied: six>=1.5 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)\n"
+      "Requirement already satisfied: six>=1.5 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)\n",
+      "Note: you may need to restart the kernel to use updated packages.\n"
      ]
     },
     {
@@ -100,28 +166,9 @@
     "%pip install pandas"
    ]
   },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Erste Erkundung der Daten"
-   ]
-  },
   {
    "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "### Daten laden und erkunden\n",
-    "\n",
-    "import pandas as pd\n",
-    "from pathlib import Path"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -208,6 +255,11 @@
     }
    ],
    "source": [
+    "# Daten laden und erkunden\n",
+    "\n",
+    "import pandas as pd\n",
+    "from pathlib import Path\n",
+    "\n",
     "# Laden der vorverarbeiteten Daten\n",
     "\n",
     "data_path = Path(\"../scripts/data/soldatenbriefe.csv\")\n",
@@ -220,7 +272,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Die Daten sind bereits gut strukturiert und mit hilfreichen Metadaten erfasst. Wir bemerken aber das im Text noch Zeilenumbrüche durch \"\\n\" referenziert werden. Diese sollten wir mit einem einfachen Leerzeichen ersetzen."
+    "Die Daten sind bereits gut strukturiert und mit hilfreichen Metadaten erfasst. Wir bemerken aber das im Text noch Zeilenumbrüche durch \"\\n\" referenziert werden. Diese sollten wir mit einem einfachen Leerzeichen ersetzen. Dies ist ein Beispiel für den wichtigen Schritt des Preprocessing von Textdaten. "
    ]
   },
   {
@@ -375,7 +427,23 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Nun haben wir eine erste quantitative Analyse unseres Datensatzes und können uns überlegen arum RAG für historische Textanalyse nützlich sein könnte gegenüber einer analogen Analyse und anderen Methoden wie zum Beispiel die welche durch [Voyant Tools](https://voyant-tools.org/) zur verfügung stehen?\n",
+    "### Zusammenfassung: Datengrundlage\n",
+    "\n",
+    "In diesem Abschnitt haben wir:\n",
+    "- Die Struktur und Umfang unseres Korpus kennengelernt (170 Briefe, 87.250 Wörter)\n",
+    "- Die zeitliche Verteilung der Briefe analysiert (1745-1872)\n",
+    "- Die soziale Struktur der Verfasser erkundet (Mannschaften, Unteroffiziere, Offiziere)\n",
+    "- Eine grundlegende Textbereinigung durchgeführt\n",
+    "\n",
+    "Diese Exploration bildet die Grundlage für die folgenden Schritte der RAG-Pipeline, da wir nun die Eigenschaften und Besonderheiten unserer historischen Quellen kennen und bei der Implementierung berücksichtigen können."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Jetzt haben wir eine erste quantitative Analyse unseres Datensatzes und können uns überlegen warum RAG für historische Textanalyse nützlich sein könnte gegenüber einer analogen Analyse und anderen Methoden wie zum Beispiel die welche durch [Voyant Tools](https://voyant-tools.org/) zur verfügung stehen?\n",
+    "-- This part has to be reviewed. I like how it flows into a discussion but it can be improved. Maybe by suggesting a exercise of inspecting the data with Voyant Tools?\n",
     "\n",
     "### Die Herausforderung historischer Textanalyse\n",
     "\n",
@@ -396,9 +464,9 @@
     "- Die gleichzeitige Berücksichtigung aller Briefe für eine Analyse ist kaum möglich\n",
     "- Das Auffinden spezifischer Themen oder Muster über alle Briefe hinweg ist zeitaufwändig\n",
     "\n",
-    "### Warum RAG die Lösung ist\n",
+    "### Warum RAG hier helfen kann\n",
     "\n",
-    "RAG (Retrieval Augmented Generation) bietet hier mehrere Vorteile:\n",
+    "RAG bietet hier mehrere Vorteile:\n",
     "\n",
     "1. **Effizientes Retrieval**\n",
     "   - Automatische Identifikation relevanter Textstellen\n",
@@ -420,25 +488,7 @@
     "   - Historische Kontexte können berücksichtigt werden\n",
     "   - Komplexe Zusammenhänge werden erkannt\n",
     "\n",
-    "### Warum unser Korpus ideal für RAG ist\n",
-    "\n",
-    "Die Größe unseres Korpus ist aus mehreren Gründen ideal für RAG:\n",
-    "\n",
-    "1. **Chunking-Perspektive**\n",
-    "   - Bei durchschnittlich 3.025 Zeichen pro Brief\n",
-    "   - Und einer Chunk-Größe von 500 Zeichen\n",
-    "   - Erhalten wir ca. 1.000-1.200 Chunks\n",
-    "   - Dies ist optimal für präzises Retrieval\n",
-    "\n",
-    "2. **Kontextuelle Tiefe**\n",
-    "   - Jeder Brief ist lang genug für bedeutungsvolle Analyse\n",
-    "   - Kurz genug für präzise Chunk-Bildung\n",
-    "   - Genug Material für Vergleiche und Muster\n",
-    "\n",
-    "3. **Metadaten-Struktur**\n",
-    "   - Reiche Kontextinformationen (Rang, Datum, etc.)\n",
-    "   - Ermöglicht vielfältige Analyseperspektiven\n",
-    "   - Unterstützt historische Einordnung\n",
+    "-- It feels like I should be citing some literature here\n",
     "\n",
     "### Praktische Bedeutung\n",
     "\n",
@@ -448,14 +498,16 @@
     "- Entdeckung von Mustern und Zusammenhängen\n",
     "- Kombination quantitativer und qualitativer Analyse\n",
     "\n",
-    "Diese Vorteile machen RAG zu einem wertvollen Werkzeug für die historische Forschung, besonders bei der Analyse von Korrespondenzen und persönlichen Dokumenten."
+    "Diese Vorteile machen RAG zu einem wertvollen Werkzeug für die historische Forschung, zum Beispiel bei der Analyse von Korrespondenzen, Zeitungsartikeln und persönlichen Dokumenten."
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
+    "-- The following part has to be figured out.\n",
     "## Anforderungen an ein Korpus für RAG\n",
+    "\n",
     "- wann lohnt es sich, wann lohnt es sich nicht. \n",
     "- Welche Formate funktionieren?\n",
     "- Was muss man sich überlegen.\n",
@@ -467,7 +519,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Erste Schritte mit RAG\n",
+    "## Erste Schritte mit RAG\n",
+    "\n",
+    "Wir werden nun ein RAG-System mit unserem Datensatz aufbauen. Der Abschnitt dient dazu, dass Sie einen ersten Eindruck davon bekommen, was im System passiert. Wir werden unser Verständnis für die Schritte zum Aufbau eines Systems in den folgenden Notizbüchern entwickeln, einschließlich der Entscheidungen, die getroffen werden, und deren Auswirkungen auf die Analyse.\n",
     "\n",
     "#### Technische Voraussetzungen\n",
     "Für dieses Notebook benötigen wir einige Python-Bibliotheken:"
@@ -475,160 +529,11 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": null,
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Requirement already satisfied: langchain in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.3.19)\n",
-      "Requirement already satisfied: langchain-community in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.3.18)\n",
-      "Requirement already satisfied: langchain_openai in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.3.6)\n",
-      "Requirement already satisfied: sentence_transformers in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (3.4.1)\n",
-      "Requirement already satisfied: huggingface-hub in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.29.1)\n",
-      "Requirement already satisfied: chromadb in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.6.3)\n",
-      "Requirement already satisfied: langchain_huggingface in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.1.2)\n",
-      "Requirement already satisfied: langchain-core<1.0.0,>=0.3.35 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (0.3.37)\n",
-      "Requirement already satisfied: langchain-text-splitters<1.0.0,>=0.3.6 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (0.3.6)\n",
-      "Requirement already satisfied: langsmith<0.4,>=0.1.17 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (0.3.10)\n",
-      "Requirement already satisfied: pydantic<3.0.0,>=2.7.4 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (2.10.5)\n",
-      "Requirement already satisfied: SQLAlchemy<3,>=1.4 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (2.0.37)\n",
-      "Requirement already satisfied: requests<3,>=2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (2.32.3)\n",
-      "Requirement already satisfied: PyYAML>=5.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (6.0.2)\n",
-      "Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (3.11.11)\n",
-      "Requirement already satisfied: tenacity!=8.4.0,<10,>=8.1.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (9.0.0)\n",
-      "Requirement already satisfied: numpy<2,>=1.26.4 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (1.26.4)\n",
-      "Requirement already satisfied: dataclasses-json<0.7,>=0.5.7 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain-community) (0.6.7)\n",
-      "Requirement already satisfied: pydantic-settings<3.0.0,>=2.4.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain-community) (2.8.0)\n",
-      "Requirement already satisfied: httpx-sse<1.0.0,>=0.4.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain-community) (0.4.0)\n",
-      "Requirement already satisfied: openai<2.0.0,>=1.58.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain_openai) (1.60.0)\n",
-      "Requirement already satisfied: tiktoken<1,>=0.7 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain_openai) (0.8.0)\n",
-      "Requirement already satisfied: transformers<5.0.0,>=4.41.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (4.49.0)\n",
-      "Requirement already satisfied: tqdm in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (4.67.1)\n",
-      "Requirement already satisfied: torch>=1.11.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (2.5.1)\n",
-      "Requirement already satisfied: scikit-learn in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (1.6.1)\n",
-      "Requirement already satisfied: scipy in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (1.12.0)\n",
-      "Requirement already satisfied: Pillow in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (11.0.0)\n",
-      "Requirement already satisfied: filelock in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from huggingface-hub) (3.16.1)\n",
-      "Requirement already satisfied: fsspec>=2023.5.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from huggingface-hub) (2024.12.0)\n",
-      "Requirement already satisfied: packaging>=20.9 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from huggingface-hub) (24.2)\n",
-      "Requirement already satisfied: typing-extensions>=3.7.4.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from huggingface-hub) (4.12.2)\n",
-      "Requirement already satisfied: build>=1.0.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.2.2.post1)\n",
-      "Requirement already satisfied: chroma-hnswlib==0.7.6 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.7.6)\n",
-      "Requirement already satisfied: fastapi>=0.95.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.115.8)\n",
-      "Requirement already satisfied: uvicorn>=0.18.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from uvicorn[standard]>=0.18.3->chromadb) (0.34.0)\n",
-      "Requirement already satisfied: posthog>=2.4.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (3.15.1)\n",
-      "Requirement already satisfied: onnxruntime>=1.14.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.20.1)\n",
-      "Requirement already satisfied: opentelemetry-api>=1.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.30.0)\n",
-      "Requirement already satisfied: opentelemetry-exporter-otlp-proto-grpc>=1.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.30.0)\n",
-      "Requirement already satisfied: opentelemetry-instrumentation-fastapi>=0.41b0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.51b0)\n",
-      "Requirement already satisfied: opentelemetry-sdk>=1.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.30.0)\n",
-      "Requirement already satisfied: tokenizers>=0.13.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.21.0)\n",
-      "Requirement already satisfied: pypika>=0.48.9 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.48.9)\n",
-      "Requirement already satisfied: overrides>=7.3.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (7.7.0)\n",
-      "Requirement already satisfied: importlib-resources in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (6.5.2)\n",
-      "Requirement already satisfied: grpcio>=1.58.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.70.0)\n",
-      "Requirement already satisfied: bcrypt>=4.0.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (4.2.1)\n",
-      "Requirement already satisfied: typer>=0.9.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.15.1)\n",
-      "Requirement already satisfied: kubernetes>=28.1.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (32.0.1)\n",
-      "Requirement already satisfied: mmh3>=4.0.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (5.1.0)\n",
-      "Requirement already satisfied: orjson>=3.9.12 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (3.10.15)\n",
-      "Requirement already satisfied: httpx>=0.27.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.28.1)\n",
-      "Requirement already satisfied: rich>=10.11.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (13.9.4)\n",
-      "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (2.4.4)\n",
-      "Requirement already satisfied: aiosignal>=1.1.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.3.2)\n",
-      "Requirement already satisfied: attrs>=17.3.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (24.3.0)\n",
-      "Requirement already satisfied: frozenlist>=1.1.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.5.0)\n",
-      "Requirement already satisfied: multidict<7.0,>=4.5 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (6.1.0)\n",
-      "Requirement already satisfied: propcache>=0.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (0.2.1)\n",
-      "Requirement already satisfied: yarl<2.0,>=1.17.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.18.3)\n",
-      "Requirement already satisfied: pyproject_hooks in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from build>=1.0.3->chromadb) (1.2.0)\n",
-      "Requirement already satisfied: colorama in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from build>=1.0.3->chromadb) (0.4.6)\n",
-      "Requirement already satisfied: marshmallow<4.0.0,>=3.18.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community) (3.26.0)\n",
-      "Requirement already satisfied: typing-inspect<1,>=0.4.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community) (0.9.0)\n",
-      "Requirement already satisfied: starlette<0.46.0,>=0.40.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from fastapi>=0.95.2->chromadb) (0.45.3)\n",
-      "Requirement already satisfied: anyio in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from httpx>=0.27.0->chromadb) (4.8.0)\n",
-      "Requirement already satisfied: certifi in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from httpx>=0.27.0->chromadb) (2024.12.14)\n",
-      "Requirement already satisfied: httpcore==1.* in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from httpx>=0.27.0->chromadb) (1.0.7)\n",
-      "Requirement already satisfied: idna in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from httpx>=0.27.0->chromadb) (3.10)\n",
-      "Requirement already satisfied: h11<0.15,>=0.13 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from httpcore==1.*->httpx>=0.27.0->chromadb) (0.14.0)\n",
-      "Requirement already satisfied: six>=1.9.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (1.17.0)\n",
-      "Requirement already satisfied: python-dateutil>=2.5.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (2.9.0.post0)\n",
-      "Requirement already satisfied: google-auth>=1.0.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (2.38.0)\n",
-      "Requirement already satisfied: websocket-client!=0.40.0,!=0.41.*,!=0.42.*,>=0.32.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (1.8.0)\n",
-      "Requirement already satisfied: requests-oauthlib in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (2.0.0)\n",
-      "Requirement already satisfied: oauthlib>=3.2.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (3.2.2)\n",
-      "Requirement already satisfied: urllib3>=1.24.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (2.2.3)\n",
-      "Requirement already satisfied: durationpy>=0.7 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (0.9)\n",
-      "Requirement already satisfied: jsonpatch<2.0,>=1.33 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain-core<1.0.0,>=0.3.35->langchain) (1.33)\n",
-      "Requirement already satisfied: requests-toolbelt<2.0.0,>=1.0.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langsmith<0.4,>=0.1.17->langchain) (1.0.0)\n",
-      "Requirement already satisfied: zstandard<0.24.0,>=0.23.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langsmith<0.4,>=0.1.17->langchain) (0.23.0)\n",
-      "Requirement already satisfied: coloredlogs in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from onnxruntime>=1.14.1->chromadb) (15.0.1)\n",
-      "Requirement already satisfied: flatbuffers in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from onnxruntime>=1.14.1->chromadb) (25.2.10)\n",
-      "Requirement already satisfied: protobuf in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from onnxruntime>=1.14.1->chromadb) (5.29.3)\n",
-      "Requirement already satisfied: sympy in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from onnxruntime>=1.14.1->chromadb) (1.13.1)\n",
-      "Requirement already satisfied: distro<2,>=1.7.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from openai<2.0.0,>=1.58.1->langchain_openai) (1.9.0)\n",
-      "Requirement already satisfied: jiter<1,>=0.4.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from openai<2.0.0,>=1.58.1->langchain_openai) (0.8.2)\n",
-      "Requirement already satisfied: sniffio in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from openai<2.0.0,>=1.58.1->langchain_openai) (1.3.1)\n",
-      "Requirement already satisfied: deprecated>=1.2.6 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-api>=1.2.0->chromadb) (1.2.16)\n",
-      "Requirement already satisfied: importlib-metadata<=8.5.0,>=6.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-api>=1.2.0->chromadb) (8.5.0)\n",
-      "Requirement already satisfied: googleapis-common-protos~=1.52 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb) (1.68.0)\n",
-      "Requirement already satisfied: opentelemetry-exporter-otlp-proto-common==1.30.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb) (1.30.0)\n",
-      "Requirement already satisfied: opentelemetry-proto==1.30.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb) (1.30.0)\n",
-      "Requirement already satisfied: opentelemetry-instrumentation-asgi==0.51b0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (0.51b0)\n",
-      "Requirement already satisfied: opentelemetry-instrumentation==0.51b0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (0.51b0)\n",
-      "Requirement already satisfied: opentelemetry-semantic-conventions==0.51b0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (0.51b0)\n",
-      "Requirement already satisfied: opentelemetry-util-http==0.51b0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (0.51b0)\n",
-      "Requirement already satisfied: wrapt<2.0.0,>=1.0.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation==0.51b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (1.17.2)\n",
-      "Requirement already satisfied: asgiref~=3.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation-asgi==0.51b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (3.8.1)\n",
-      "Requirement already satisfied: monotonic>=1.5 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from posthog>=2.4.0->chromadb) (1.6)\n",
-      "Requirement already satisfied: backoff>=1.10.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from posthog>=2.4.0->chromadb) (2.2.1)\n",
-      "Requirement already satisfied: annotated-types>=0.6.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pydantic<3.0.0,>=2.7.4->langchain) (0.7.0)\n",
-      "Requirement already satisfied: pydantic-core==2.27.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pydantic<3.0.0,>=2.7.4->langchain) (2.27.2)\n",
-      "Requirement already satisfied: python-dotenv>=0.21.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pydantic-settings<3.0.0,>=2.4.0->langchain-community) (1.0.1)\n",
-      "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from requests<3,>=2->langchain) (3.4.0)\n",
-      "Requirement already satisfied: markdown-it-py>=2.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from rich>=10.11.0->chromadb) (3.0.0)\n",
-      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from rich>=10.11.0->chromadb) (2.18.0)\n",
-      "Requirement already satisfied: greenlet!=0.4.17 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from SQLAlchemy<3,>=1.4->langchain) (3.1.1)\n",
-      "Requirement already satisfied: regex>=2022.1.18 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from tiktoken<1,>=0.7->langchain_openai) (2024.11.6)\n",
-      "Requirement already satisfied: networkx in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from torch>=1.11.0->sentence_transformers) (3.4.2)\n",
-      "Requirement already satisfied: jinja2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from torch>=1.11.0->sentence_transformers) (3.1.5)\n",
-      "Requirement already satisfied: mpmath<1.4,>=1.1.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sympy->onnxruntime>=1.14.1->chromadb) (1.3.0)\n",
-      "Requirement already satisfied: safetensors>=0.4.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from transformers<5.0.0,>=4.41.0->sentence_transformers) (0.5.2)\n",
-      "Requirement already satisfied: click>=8.0.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from typer>=0.9.0->chromadb) (8.1.8)\n",
-      "Requirement already satisfied: shellingham>=1.3.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from typer>=0.9.0->chromadb) (1.5.4)\n",
-      "Requirement already satisfied: httptools>=0.6.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from uvicorn[standard]>=0.18.3->chromadb) (0.6.4)\n",
-      "Requirement already satisfied: watchfiles>=0.13 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from uvicorn[standard]>=0.18.3->chromadb) (1.0.4)\n",
-      "Requirement already satisfied: websockets>=10.4 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from uvicorn[standard]>=0.18.3->chromadb) (15.0)\n",
-      "Requirement already satisfied: joblib>=1.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from scikit-learn->sentence_transformers) (1.4.2)\n",
-      "Requirement already satisfied: threadpoolctl>=3.1.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from scikit-learn->sentence_transformers) (3.5.0)\n",
-      "Requirement already satisfied: cachetools<6.0,>=2.0.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (5.5.2)\n",
-      "Requirement already satisfied: pyasn1-modules>=0.2.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (0.4.1)\n",
-      "Requirement already satisfied: rsa<5,>=3.1.4 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (4.9)\n",
-      "Requirement already satisfied: zipp>=3.20 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from importlib-metadata<=8.5.0,>=6.0->opentelemetry-api>=1.2.0->chromadb) (3.21.0)\n",
-      "Requirement already satisfied: jsonpointer>=1.9 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from jsonpatch<2.0,>=1.33->langchain-core<1.0.0,>=0.3.35->langchain) (3.0.0)\n",
-      "Requirement already satisfied: mdurl~=0.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->chromadb) (0.1.2)\n",
-      "Requirement already satisfied: mypy-extensions>=0.3.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain-community) (1.0.0)\n",
-      "Requirement already satisfied: humanfriendly>=9.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from coloredlogs->onnxruntime>=1.14.1->chromadb) (10.0)\n",
-      "Requirement already satisfied: MarkupSafe>=2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from jinja2->torch>=1.11.0->sentence_transformers) (3.0.2)\n",
-      "Requirement already satisfied: pyreadline3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from humanfriendly>=9.1->coloredlogs->onnxruntime>=1.14.1->chromadb) (3.5.4)\n",
-      "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pyasn1-modules>=0.2.1->google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (0.6.1)\n",
-      "Note: you may need to restart the kernel to use updated packages.\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\n",
-      "[notice] A new release of pip is available: 24.3.1 -> 25.0.1\n",
-      "[notice] To update, run: C:\\Users\\baumanoa\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\python.exe -m pip install --upgrade pip\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
-    "%pip install langchain langchain-community langchain_openai sentence_transformers huggingface-hub chromadb langchain_huggingface"
+    "%pip install langchain langchain-community huggingface-hub chromadb langchain_huggingface"
    ]
   },
   {
@@ -641,11 +546,6 @@
     "  - Ermöglicht strukturierte Arbeit mit verschiedenen LLMs\n",
     "  - Vereinfacht die RAG-Pipeline-Entwicklung\n",
     "\n",
-    "- sentence_transformers: Bibliothek für Text-Embeddings\n",
-    "  - Wandelt Text in numerische Vektoren um\n",
-    "  - Unterstützt mehrsprachige Modelle\n",
-    "  - Speziell für semantische Textähnlichkeit optimiert\n",
-    "\n",
     "- huggingface-hub & langchain_huggingface: Zugriff auf KI-Modelle\n",
     "  - Bietet Zugang zu Open-Source-Modellen\n",
     "  - Ermöglicht lokale Nutzung von Embedding-Modellen\n",
@@ -661,198 +561,13 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Eine erste RAG-Pipeline\n",
-    "Hier demonstrieren wir die grundlegenden Schritte einer RAG-Pipeline:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Requirement already satisfied: langchain in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.3.19)\n",
-      "Requirement already satisfied: langchain-community in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.3.18)\n",
-      "Requirement already satisfied: langchain_openai in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.3.6)\n",
-      "Requirement already satisfied: sentence_transformers in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (3.4.1)\n",
-      "Requirement already satisfied: huggingface-hub in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.29.1)\n",
-      "Requirement already satisfied: chromadb in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.6.3)\n",
-      "Requirement already satisfied: langchain_huggingface in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (0.1.2)\n",
-      "Requirement already satisfied: langchain-core<1.0.0,>=0.3.35 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (0.3.37)\n",
-      "Requirement already satisfied: langchain-text-splitters<1.0.0,>=0.3.6 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (0.3.6)\n",
-      "Requirement already satisfied: langsmith<0.4,>=0.1.17 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (0.3.10)\n",
-      "Requirement already satisfied: pydantic<3.0.0,>=2.7.4 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (2.10.5)\n",
-      "Requirement already satisfied: SQLAlchemy<3,>=1.4 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (2.0.37)\n",
-      "Requirement already satisfied: requests<3,>=2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (2.32.3)\n",
-      "Requirement already satisfied: PyYAML>=5.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (6.0.2)\n",
-      "Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (3.11.11)\n",
-      "Requirement already satisfied: tenacity!=8.4.0,<10,>=8.1.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (9.0.0)\n",
-      "Requirement already satisfied: numpy<2,>=1.26.4 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain) (1.26.4)\n",
-      "Requirement already satisfied: dataclasses-json<0.7,>=0.5.7 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain-community) (0.6.7)\n",
-      "Requirement already satisfied: pydantic-settings<3.0.0,>=2.4.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain-community) (2.8.0)\n",
-      "Requirement already satisfied: httpx-sse<1.0.0,>=0.4.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain-community) (0.4.0)\n",
-      "Requirement already satisfied: openai<2.0.0,>=1.58.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain_openai) (1.60.0)\n",
-      "Requirement already satisfied: tiktoken<1,>=0.7 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain_openai) (0.8.0)\n",
-      "Requirement already satisfied: transformers<5.0.0,>=4.41.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (4.49.0)\n",
-      "Requirement already satisfied: tqdm in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (4.67.1)\n",
-      "Requirement already satisfied: torch>=1.11.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (2.5.1)\n",
-      "Requirement already satisfied: scikit-learn in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (1.6.1)\n",
-      "Requirement already satisfied: scipy in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (1.12.0)\n",
-      "Requirement already satisfied: Pillow in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sentence_transformers) (11.0.0)\n",
-      "Requirement already satisfied: filelock in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from huggingface-hub) (3.16.1)\n",
-      "Requirement already satisfied: fsspec>=2023.5.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from huggingface-hub) (2024.12.0)\n",
-      "Requirement already satisfied: packaging>=20.9 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from huggingface-hub) (24.2)\n",
-      "Requirement already satisfied: typing-extensions>=3.7.4.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from huggingface-hub) (4.12.2)\n",
-      "Requirement already satisfied: build>=1.0.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.2.2.post1)\n",
-      "Requirement already satisfied: chroma-hnswlib==0.7.6 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.7.6)\n",
-      "Requirement already satisfied: fastapi>=0.95.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.115.8)\n",
-      "Requirement already satisfied: uvicorn>=0.18.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from uvicorn[standard]>=0.18.3->chromadb) (0.34.0)\n",
-      "Requirement already satisfied: posthog>=2.4.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (3.15.1)\n",
-      "Requirement already satisfied: onnxruntime>=1.14.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.20.1)\n",
-      "Requirement already satisfied: opentelemetry-api>=1.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.30.0)\n",
-      "Requirement already satisfied: opentelemetry-exporter-otlp-proto-grpc>=1.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.30.0)\n",
-      "Requirement already satisfied: opentelemetry-instrumentation-fastapi>=0.41b0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.51b0)\n",
-      "Requirement already satisfied: opentelemetry-sdk>=1.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.30.0)\n",
-      "Requirement already satisfied: tokenizers>=0.13.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.21.0)\n",
-      "Requirement already satisfied: pypika>=0.48.9 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.48.9)\n",
-      "Requirement already satisfied: overrides>=7.3.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (7.7.0)\n",
-      "Requirement already satisfied: importlib-resources in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (6.5.2)\n",
-      "Requirement already satisfied: grpcio>=1.58.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (1.70.0)\n",
-      "Requirement already satisfied: bcrypt>=4.0.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (4.2.1)\n",
-      "Requirement already satisfied: typer>=0.9.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.15.1)\n",
-      "Requirement already satisfied: kubernetes>=28.1.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (32.0.1)\n",
-      "Requirement already satisfied: mmh3>=4.0.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (5.1.0)\n",
-      "Requirement already satisfied: orjson>=3.9.12 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (3.10.15)\n",
-      "Requirement already satisfied: httpx>=0.27.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (0.28.1)\n",
-      "Requirement already satisfied: rich>=10.11.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from chromadb) (13.9.4)\n",
-      "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (2.4.4)\n",
-      "Requirement already satisfied: aiosignal>=1.1.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.3.2)\n",
-      "Requirement already satisfied: attrs>=17.3.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (24.3.0)\n",
-      "Requirement already satisfied: frozenlist>=1.1.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.5.0)\n",
-      "Requirement already satisfied: multidict<7.0,>=4.5 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (6.1.0)\n",
-      "Requirement already satisfied: propcache>=0.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (0.2.1)\n",
-      "Requirement already satisfied: yarl<2.0,>=1.17.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.18.3)\n",
-      "Requirement already satisfied: pyproject_hooks in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from build>=1.0.3->chromadb) (1.2.0)\n",
-      "Requirement already satisfied: colorama in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from build>=1.0.3->chromadb) (0.4.6)\n",
-      "Requirement already satisfied: marshmallow<4.0.0,>=3.18.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community) (3.26.0)\n",
-      "Requirement already satisfied: typing-inspect<1,>=0.4.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community) (0.9.0)\n",
-      "Requirement already satisfied: starlette<0.46.0,>=0.40.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from fastapi>=0.95.2->chromadb) (0.45.3)\n",
-      "Requirement already satisfied: anyio in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from httpx>=0.27.0->chromadb) (4.8.0)\n",
-      "Requirement already satisfied: certifi in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from httpx>=0.27.0->chromadb) (2024.12.14)\n",
-      "Requirement already satisfied: httpcore==1.* in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from httpx>=0.27.0->chromadb) (1.0.7)\n",
-      "Requirement already satisfied: idna in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from httpx>=0.27.0->chromadb) (3.10)\n",
-      "Requirement already satisfied: h11<0.15,>=0.13 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from httpcore==1.*->httpx>=0.27.0->chromadb) (0.14.0)\n",
-      "Requirement already satisfied: six>=1.9.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (1.17.0)\n",
-      "Requirement already satisfied: python-dateutil>=2.5.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (2.9.0.post0)\n",
-      "Requirement already satisfied: google-auth>=1.0.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (2.38.0)\n",
-      "Requirement already satisfied: websocket-client!=0.40.0,!=0.41.*,!=0.42.*,>=0.32.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (1.8.0)\n",
-      "Requirement already satisfied: requests-oauthlib in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (2.0.0)\n",
-      "Requirement already satisfied: oauthlib>=3.2.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (3.2.2)\n",
-      "Requirement already satisfied: urllib3>=1.24.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (2.2.3)\n",
-      "Requirement already satisfied: durationpy>=0.7 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from kubernetes>=28.1.0->chromadb) (0.9)\n",
-      "Requirement already satisfied: jsonpatch<2.0,>=1.33 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langchain-core<1.0.0,>=0.3.35->langchain) (1.33)\n",
-      "Requirement already satisfied: requests-toolbelt<2.0.0,>=1.0.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langsmith<0.4,>=0.1.17->langchain) (1.0.0)\n",
-      "Requirement already satisfied: zstandard<0.24.0,>=0.23.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from langsmith<0.4,>=0.1.17->langchain) (0.23.0)\n",
-      "Requirement already satisfied: coloredlogs in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from onnxruntime>=1.14.1->chromadb) (15.0.1)\n",
-      "Requirement already satisfied: flatbuffers in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from onnxruntime>=1.14.1->chromadb) (25.2.10)\n",
-      "Requirement already satisfied: protobuf in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from onnxruntime>=1.14.1->chromadb) (5.29.3)\n",
-      "Requirement already satisfied: sympy in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from onnxruntime>=1.14.1->chromadb) (1.13.1)\n",
-      "Requirement already satisfied: distro<2,>=1.7.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from openai<2.0.0,>=1.58.1->langchain_openai) (1.9.0)\n",
-      "Requirement already satisfied: jiter<1,>=0.4.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from openai<2.0.0,>=1.58.1->langchain_openai) (0.8.2)\n",
-      "Requirement already satisfied: sniffio in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from openai<2.0.0,>=1.58.1->langchain_openai) (1.3.1)\n",
-      "Requirement already satisfied: deprecated>=1.2.6 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-api>=1.2.0->chromadb) (1.2.16)\n",
-      "Requirement already satisfied: importlib-metadata<=8.5.0,>=6.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-api>=1.2.0->chromadb) (8.5.0)\n",
-      "Requirement already satisfied: googleapis-common-protos~=1.52 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb) (1.68.0)\n",
-      "Requirement already satisfied: opentelemetry-exporter-otlp-proto-common==1.30.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb) (1.30.0)\n",
-      "Requirement already satisfied: opentelemetry-proto==1.30.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb) (1.30.0)\n",
-      "Requirement already satisfied: opentelemetry-instrumentation-asgi==0.51b0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (0.51b0)\n",
-      "Requirement already satisfied: opentelemetry-instrumentation==0.51b0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (0.51b0)\n",
-      "Requirement already satisfied: opentelemetry-semantic-conventions==0.51b0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (0.51b0)\n",
-      "Requirement already satisfied: opentelemetry-util-http==0.51b0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (0.51b0)\n",
-      "Requirement already satisfied: wrapt<2.0.0,>=1.0.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation==0.51b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (1.17.2)\n",
-      "Requirement already satisfied: asgiref~=3.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from opentelemetry-instrumentation-asgi==0.51b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (3.8.1)\n",
-      "Requirement already satisfied: monotonic>=1.5 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from posthog>=2.4.0->chromadb) (1.6)\n",
-      "Requirement already satisfied: backoff>=1.10.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from posthog>=2.4.0->chromadb) (2.2.1)\n",
-      "Requirement already satisfied: annotated-types>=0.6.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pydantic<3.0.0,>=2.7.4->langchain) (0.7.0)\n",
-      "Requirement already satisfied: pydantic-core==2.27.2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pydantic<3.0.0,>=2.7.4->langchain) (2.27.2)\n",
-      "Requirement already satisfied: python-dotenv>=0.21.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pydantic-settings<3.0.0,>=2.4.0->langchain-community) (1.0.1)\n",
-      "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from requests<3,>=2->langchain) (3.4.0)\n",
-      "Requirement already satisfied: markdown-it-py>=2.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from rich>=10.11.0->chromadb) (3.0.0)\n",
-      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from rich>=10.11.0->chromadb) (2.18.0)\n",
-      "Requirement already satisfied: greenlet!=0.4.17 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from SQLAlchemy<3,>=1.4->langchain) (3.1.1)\n",
-      "Requirement already satisfied: regex>=2022.1.18 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from tiktoken<1,>=0.7->langchain_openai) (2024.11.6)\n",
-      "Requirement already satisfied: networkx in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from torch>=1.11.0->sentence_transformers) (3.4.2)\n",
-      "Requirement already satisfied: jinja2 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from torch>=1.11.0->sentence_transformers) (3.1.5)\n",
-      "Requirement already satisfied: mpmath<1.4,>=1.1.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from sympy->onnxruntime>=1.14.1->chromadb) (1.3.0)\n",
-      "Requirement already satisfied: safetensors>=0.4.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from transformers<5.0.0,>=4.41.0->sentence_transformers) (0.5.2)\n",
-      "Requirement already satisfied: click>=8.0.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from typer>=0.9.0->chromadb) (8.1.8)\n",
-      "Requirement already satisfied: shellingham>=1.3.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from typer>=0.9.0->chromadb) (1.5.4)\n",
-      "Requirement already satisfied: httptools>=0.6.3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from uvicorn[standard]>=0.18.3->chromadb) (0.6.4)\n",
-      "Requirement already satisfied: watchfiles>=0.13 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from uvicorn[standard]>=0.18.3->chromadb) (1.0.4)\n",
-      "Requirement already satisfied: websockets>=10.4 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from uvicorn[standard]>=0.18.3->chromadb) (15.0)\n",
-      "Requirement already satisfied: joblib>=1.2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from scikit-learn->sentence_transformers) (1.4.2)\n",
-      "Requirement already satisfied: threadpoolctl>=3.1.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from scikit-learn->sentence_transformers) (3.5.0)\n",
-      "Requirement already satisfied: cachetools<6.0,>=2.0.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (5.5.2)\n",
-      "Requirement already satisfied: pyasn1-modules>=0.2.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (0.4.1)\n",
-      "Requirement already satisfied: rsa<5,>=3.1.4 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (4.9)\n",
-      "Requirement already satisfied: zipp>=3.20 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from importlib-metadata<=8.5.0,>=6.0->opentelemetry-api>=1.2.0->chromadb) (3.21.0)\n",
-      "Requirement already satisfied: jsonpointer>=1.9 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from jsonpatch<2.0,>=1.33->langchain-core<1.0.0,>=0.3.35->langchain) (3.0.0)\n",
-      "Requirement already satisfied: mdurl~=0.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->chromadb) (0.1.2)\n",
-      "Requirement already satisfied: mypy-extensions>=0.3.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain-community) (1.0.0)\n",
-      "Requirement already satisfied: humanfriendly>=9.1 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from coloredlogs->onnxruntime>=1.14.1->chromadb) (10.0)\n",
-      "Requirement already satisfied: MarkupSafe>=2.0 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from jinja2->torch>=1.11.0->sentence_transformers) (3.0.2)\n",
-      "Requirement already satisfied: pyreadline3 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from humanfriendly>=9.1->coloredlogs->onnxruntime>=1.14.1->chromadb) (3.5.4)\n",
-      "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in c:\\users\\baumanoa\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.11_qbz5n2kfra8p0\\localcache\\local-packages\\python311\\site-packages (from pyasn1-modules>=0.2.1->google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (0.6.1)\n",
-      "Note: you may need to restart the kernel to use updated packages.\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\n",
-      "[notice] A new release of pip is available: 24.3.1 -> 25.0.1\n",
-      "[notice] To update, run: C:\\Users\\baumanoa\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\python.exe -m pip install --upgrade pip\n"
-     ]
-    }
-   ],
-   "source": [
-    "# Installation der benötigten Bibliotheken\n",
-    "%pip install langchain langchain-community langchain_openai sentence_transformers huggingface-hub chromadb langchain_huggingface"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "#### Erklärung der verwendeten Bibliotheken:\n",
-    "- langchain & langchain-community: Framework für die Entwicklung von LLM-Anwendungen\n",
-    "  - Bietet Werkzeuge für Dokumentenverarbeitung\n",
-    "  - Ermöglicht strukturierte Arbeit mit verschiedenen LLMs\n",
-    "  - Vereinfacht die RAG-Pipeline-Entwicklung\n",
-    "\n",
-    "- sentence_transformers: Bibliothek für Text-Embeddings\n",
-    "  - Wandelt Text in numerische Vektoren um\n",
-    "  - Unterstützt mehrsprachige Modelle\n",
-    "  - Speziell für semantische Textähnlichkeit optimiert\n",
-    "\n",
-    "- huggingface-hub & langchain_huggingface: Zugriff auf KI-Modelle\n",
-    "  - Bietet Zugang zu Open-Source-Modellen\n",
-    "  - Ermöglicht lokale Nutzung von Embedding-Modellen\n",
-    "  - Integration mit LangChain\n",
-    "\n",
-    "- chromadb: Vektordatenbank für Embedding-Speicherung\n",
-    "  - Effiziente Speicherung und Suche von Vektoren\n",
-    "  - Unterstützt Metadaten\n",
-    "  - Ermöglicht Ähnlichkeitssuche"
+    "### Chunking\n",
+    "-- Brief explanation of chunking"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 14,
    "metadata": {},
    "outputs": [
     {
@@ -894,13 +609,49 @@
     "Was passiert hier?\n",
     "\n",
     "- Der Text wird in kleinere Einheiten aufgeteilt\n",
-    "- Die Größe (500 Zeichen) ist ein wichtiger Parameter\n",
+    "- Die Größe (300 Zeichen) ist ein wichtiger Parameter\n",
     "- Überlappung verhindert das \"Zerschneiden\" von Zusammenhängen"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Embedding-Modell konfigurieren\n",
+    "Die Wahl des Embedding-Modells ist entscheidend für die Qualität der Suche. \n",
+    "\n",
+    "Wir benutzen ein ein HuggingFace Modell welches Sätze und Absätze in einem 384-dimensionalen dichten Vektorraum abbildet. Es funktioniert gut für Aufgaben wie Clustering oder semantische Suche verwendet werden. Außerdem wurde das Modell gewählt, weil:\n",
+    "- es effektiv mit deutschen Texten arbeitet\n",
+    "- Eine gute Balance zwischen Geschwindigkeit und Qualität bietet\n",
+    "- Geringe Ressourcenanforderungen stellt"
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 2. Text in Vektoren umwandeln (Embedding)\n",
+    "embeddings = HuggingFaceEmbeddings(\n",
+    "    model_name=\"sentence-transformers/paraphrase-multilingual-mpnet-base-v2\"\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Vektordatenbank erstellen\n",
+    "\n",
+    "Die Vektordatenbank ist das Herzstück des Retrieval-Systems. Es hilft dabei das Problem zu lösen wie wir die Vektoren die beim Embedding entstehen speichern können so, dass wir sie später schnell wiederfinden können.\n",
+    "\n",
+    "Stellen Sie sich vor, Sie haben eine große Bibliothek (unsere Brief-Chunks). Mit Embeddings haben wir jedem Text eine Art \"numerischen Fingerabdruck\" gegeben. Eine Vektordatenbank ist nun wie ein hocheffizientes Ablagesystem, das diese Fingerabdrücke so organisiert, dass wir blitzschnell ähnliche Texte finden können."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -913,11 +664,6 @@
     }
    ],
    "source": [
-    "# 2. Text in Vektoren umwandeln (Embedding)\n",
-    "embeddings = HuggingFaceEmbeddings(\n",
-    "    model_name=\"sentence-transformers/paraphrase-multilingual-mpnet-base-v2\"\n",
-    ")\n",
-    "\n",
     "# 3. Vektordatenbank erstellen\n",
     "vectorstore = Chroma.from_texts(\n",
     "    texts=chunks,\n",
@@ -928,7 +674,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [
     {
@@ -940,7 +686,7 @@
       "getreuer Man biß in den Tott. Hertz Libe frau ich bericht dir auch daß ich deinen an mir geschribnen brif von 1. Mey hab ich wol erhalten und hab auch darauß erfaren daß ihr noch alle gesund seid und ist mir ser lib geweßen. ich wolte noch gern viel mer schreiben aber die zeit will nicht leiden und\n",
       "\n",
       "Ergebnis 2:\n",
-      "getreuer Man biß in den Tott. Hertz Libe frau ich bericht dir auch daß ich deinen an mir geschribnen brif von 1. Mey hab ich wol erhalten und hab auch darauß erfaren daß ihr noch alle gesund seid und ist mir ser lib geweßen. ich wolte noch gern viel mer schreiben aber die zeit will nicht leiden und\n"
+      "si seind noch ale beide gesund. Jogen Olrich und Haferland laßen ihre Eltern auch grüßen und si sind noch gesund. Mein feder Erman schmit lest seine Muter und schwestern auch vilmals grüßen und er ist noch gesund. Mein feder Bin auß ungeburg ist auch noch gesund und der aus Werben auch. eß ist auch\n"
      ]
     }
    ],
@@ -966,9 +712,27 @@
     "- Die Datenbank findet relevante Textstellen"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### LLM und Retriever konfigurieren\n",
+    "\n",
+    "In diesem Schritt konfigurieren wir zwei zentrale Komponenten unseres RAG-Systems:\n",
+    "1.  Der Retriever dient als Suchmaschine unseres Systems. Er nutzt die zuvor erstellte Vektordatenbank, um relevante Textpassagen zu finden. Dabei:\n",
+    "    - Wandelt er neue Anfragen in Embeddings um\n",
+    "    - Sucht nach ähnlichen Vektoren in der Datenbank\n",
+    "    - Gibt die relevantesten Dokumente zurück\n",
+    "\n",
+    "2. Das Large Language Model (LLM) ist für die Generierung der Antworten zuständig. Der Parameter temperature steuert dabei das Verhalten des Models:\n",
+    "    - temperature=0: Sehr fokussierte, deterministische Antworten\n",
+    "    - temperature>0: Kreativere, variantenreichere Antworten\n",
+    "    - Für Forschung empfehlen wir niedrige Temperature-Werte, um konsistente, faktenbezogene Antworten zu erhalten"
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": null,
    "metadata": {},
    "outputs": [
     {
@@ -988,13 +752,13 @@
       "Frage: Wie berichten die Soldaten über ihre Gesundheit?\n",
       "\n",
       "Antwort des Modells:\n",
-      "Die Soldaten berichten, dass sie und ihre Kameraden noch gesund sind. Sie melden, dass sie die Briefe der Angehörigen erhalten haben und davon profitiert haben, zu erfahren, dass ihre Lieben ebenfalls gesund sind. Die Briefe stammen von Man, Jogen Olrich, Haferland, Mein feder Erman und Mein feder Bin. Alle berichten, dass sie sich und ihre Angehörigen gut finden.\n",
+      "Die Soldaten berichten, dass sie und ihre Kameraden noch gesund sind. Sie melden auch die Gesundheit ihrer Eltern und Angehörigen. In einem Fall wird berichtet, dass ein Regiment 12 Tote und Etliche 30 Verwundete hat, aber die meisten Soldaten sind noch gesund. Es wird auch berichtet, dass es regnet und es Wasser auf den Feldern gibt, was vermuten lässt, dass die Lager mit Wasser versorgt sind.\n",
       "\n",
       "Verwendete Quellen:\n",
       "- Quelle: getreuer Man biß in den Tott. Hertz Libe frau ich bericht dir auch daß ich deinen an mir geschribnen...\n",
-      "- Quelle: getreuer Man biß in den Tott. Hertz Libe frau ich bericht dir auch daß ich deinen an mir geschribnen...\n",
-      "- Quelle: getreuer Man biß in den Tott. Hertz Libe frau ich bericht dir auch daß ich deinen an mir geschribnen...\n",
-      "- Quelle: si seind noch ale beide gesund. Jogen Olrich und Haferland laßen ihre Eltern auch grüßen und si sind...\n"
+      "- Quelle: si seind noch ale beide gesund. Jogen Olrich und Haferland laßen ihre Eltern auch grüßen und si sind...\n",
+      "- Quelle: gekrigt 70 fahnen 5 standarten und 5 Paar Pauken und unser regiment haben wir 12 Totte und Etliche 3...\n",
+      "- Quelle: es ist uf flagen felde daß waßer gekomen uf 2 Ele hoch da könt ihr leicht erdenken waß daß hir vor L...\n"
      ]
     }
    ],
@@ -1033,7 +797,7 @@
     "\"\"\"\n",
     "prompt = PromptTemplate(template=template, input_variables=[\"context\", \"question\"])\n",
     "\n",
-    "# RAG-Chain erstellen\n",
+    "# RAG-Chain erstellen. Die QA-Chain verbindet alle Komponenten. \n",
     "qa_chain = RetrievalQA.from_chain_type(\n",
     "    llm=llm,\n",
     "    chain_type=\"stuff\",  # \"stuff\" kombiniert alle Dokumente in einen Prompt\n",
@@ -1041,7 +805,22 @@
     "    chain_type_kwargs={\"prompt\": prompt},\n",
     "    return_source_documents=True  # Quellen mitliefern\n",
     ")\n",
-    "\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Jetzt können wir eine Frage stellen:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
     "# Frage stellen\n",
     "ergebnis = qa_chain.invoke({\"query\": \"Wie berichten die Soldaten über ihre Gesundheit?\"})\n",
     "\n",
@@ -1054,6 +833,23 @@
     "    print(f\"- Quelle: {doc.page_content[:100]}...\")"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Wie funktioniert das System?\n",
+    "\n",
+    "Unser RAG-System arbeitet in drei Schritten:\n",
+    "1. **Vorbereitung**: Die Texte werden in eine Form gebracht, die der Computer effizient durchsuchen kann \n",
+    "   (mehr dazu in den Kapiteln \"Chunking\" & \"Embeddings\")\n",
+    "2. **Suche**: Bei einer Frage sucht das System die relevantesten Textpassagen \n",
+    "   (Details folgen im Kapitel \"Vector Databases\")\n",
+    "3. **Antwort**: Die gefundenen Passagen werden zusammen mit der Frage an das LLM übergeben\n",
+    "\n",
+    "Für den Moment konzentrieren wir uns darauf, wie wir das System nutzen können. Die technischen Details \n",
+    "der einzelnen Komponenten werden wir in den folgenden Kapiteln genau untersuchen."
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -1083,23 +879,23 @@
     "- Kontextuelle Embedding-Modelle verstehen häufig den Zusammenhang trotz abweichender Schreibweise\n",
     "- Die semantische Ähnlichkeit bleibt meist erhalten\n",
     "- Multilingual trainierte Modelle sind oft robuster gegenüber Sprachvariationen\n",
-    "\n",
+    "-- Should have a source or relevant links for this.\n",
     "#### 2. Retrievalqualität\n",
     "Für optimale Ergebnisse:\n",
     "- Verwenden wir semantische statt lexikalischer Suche\n",
     "- Achten auf Kontext statt einzelne Wörter\n",
     "- Profitieren von der Textvektorisierung, die ähnliche Konzepte unabhängig von der exakten Schreibweise erkennt\n",
-    "\n",
+    "-- again maybe references\n",
     "#### 3. Forschungspotential\n",
     "Die originale Schreibweise bietet sogar zusätzliches Forschungspotential:\n",
-    "- Analyse von Bildungsunterschieden zwischen Rängen\n",
+    "- Analyse von Sprachstilvariationen zwischen Rängen\n",
     "- Untersuchung regionaler Sprachvarianten\n",
     "- Dokumentation historischer Sprachentwicklung\n",
     "\n",
     "### Beispiel: Robuste Suchanfragen\n",
     "\n",
     "Mit RAG können wir trotz historischer Schreibweisen effektiv suchen. Wenn wir beispielsweise nach \"Gesundheit\" suchen, werden auch Varianten wie \"Gesundheit\", \"gesuntheit\" oder \"Gesundtheit\" gefunden:\n",
-    "\n",
+    "-- How do we actually test this?\n",
     "```python\n",
     "# Beispielabfrage zur Demonstration\n",
     "frage = \"Wie berichten die Soldaten über ihre Gesundheit?\"\n",
@@ -1149,20 +945,8 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Übungen und Reflexion\n",
-    "\n",
-    "### Diskussionsfragen\n",
-    "\n",
-    "- Welche Vorteile bietet RAG gegenüber klassischer Textsuche?\n",
-    "- Welche ethischen Aspekte müssen bei der Analyse persönlicher Briefe beachtet werden?\n",
-    "- Wie könnte die Methode auf andere historische Quellen übertragen werden?\n",
-    "\n",
-    "### Praktische Übungen\n",
-    "\n",
-    "- Erkunden Sie die Metadaten der Briefe\n",
-    "- Formulieren Sie eigene Suchanfragen\n",
-    "- Vergleichen Sie verschiedene Briefe desselben Dienstgrads\n",
-    "\n"
+    "## Praktische Übungen\n",
+    "-- I think the practical exercises at this stage should involve: loading the courpus into Voyant Tools and exploring it, what can we identify and what is difficult to do with this Tool that RAG might be able to help with. Another one might be to create historical research questions about soldiers experiences during the time period, pose them to a LLM and evaluate the responses, see how different types of prompts might help the ability for useful answers to be generated. And maybe a third one would be to look at a few example letters and think about how a having a complete perspective of all letters might be able to help answer specific historical research questions."
    ]
   },
   {
-- 
GitLab