From 4374a38265a6fe39a0e7ed4fda96fabce7d7ccd2 Mon Sep 17 00:00:00 2001
From: Christian Boulanger <boulanger@lhlt.mpg.de>
Date: Tue, 16 Jan 2024 19:35:39 +0100
Subject: [PATCH] add huggingface inference endpoint

---
 german-law-journal-network/.gitignore         |   1 -
 langchain-experiments/compare-models.ipynb    | 171 +++++++++++++++++-
 langchain-experiments/data/editors.csv        |  18 --
 .../data/{ => input}/journal-website.txt      |   0
 langchain-experiments/data/output/.gitignore  |   1 +
 langchain-experiments/lib/__init__.py         |   0
 .../lib/hf_llama2_13b_chat.py                 |  32 ++++
 langchain-experiments/readme.md               |   2 +-
 rocket-chat-api/.gitignore                    |   1 -
 9 files changed, 201 insertions(+), 25 deletions(-)
 delete mode 100644 langchain-experiments/data/editors.csv
 rename langchain-experiments/data/{ => input}/journal-website.txt (100%)
 create mode 100644 langchain-experiments/data/output/.gitignore
 create mode 100644 langchain-experiments/lib/__init__.py
 create mode 100644 langchain-experiments/lib/hf_llama2_13b_chat.py

diff --git a/german-law-journal-network/.gitignore b/german-law-journal-network/.gitignore
index 1494b43..c88b822 100644
--- a/german-law-journal-network/.gitignore
+++ b/german-law-journal-network/.gitignore
@@ -1,3 +1,2 @@
 .*
-!.gitignore
 !.env.dist
\ No newline at end of file
diff --git a/langchain-experiments/compare-models.ipynb b/langchain-experiments/compare-models.ipynb
index c567b6d..73aa8b1 100644
--- a/langchain-experiments/compare-models.ipynb
+++ b/langchain-experiments/compare-models.ipynb
@@ -2,15 +2,178 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": null,
-   "id": "initial_id",
+   "execution_count": 1,
+   "id": "e46d0648c1c6c96a",
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "ExecuteTime": {
+     "end_time": "2024-01-16T18:33:26.160935700Z",
+     "start_time": "2024-01-16T18:33:24.612516500Z"
+    }
    },
    "outputs": [],
    "source": [
-    "url = 'https://www.uni-goettingen.de/de/aur/448062.html'\n"
+    "import io\n",
+    "from langchain_core.prompts import ChatPromptTemplate\n",
+    "from langchain_openai import ChatOpenAI\n",
+    "from langchain_core.output_parsers import StrOutputParser\n",
+    "import pandas as pd\n",
+    "from dotenv import load_dotenv\n",
+    "\n",
+    "load_dotenv()\n",
+    "\n",
+    "def response_to_df(response):\n",
+    "    data = io.StringIO(response)\n",
+    "    try:\n",
+    "        return pd.read_csv(data)\n",
+    "    except:\n",
+    "        raise RuntimeError(f\"Error while parsing response:\\n{response}\")\n",
+    "\n",
+    "def use_model(model, template, **params):\n",
+    "    prompt = ChatPromptTemplate.from_template(template)\n",
+    "    chain = (\n",
+    "            prompt\n",
+    "            | model\n",
+    "            | StrOutputParser()\n",
+    "    )\n",
+    "    return response_to_df(chain.invoke(params))\n",
+    "\n",
+    "template = \"\"\"\n",
+    "Finde im folgenden Webseiten-Text die Herausgeber, Redaktion/Schriftleitung und Beirat der Zeitschrift '{journal_name}' und gebe sie im CSV-Format zurück mit den Spalten 'lastname', 'firstname', 'title', 'position', 'affiliation','role'. Die Spalte 'role' enthält entweder 'Herausgeber', 'Redaktion', 'Beirat', 'Schriftleitung' oder ist leer wenn nicht bestimmbar.Wenn die Zeitschrift von einer juristischen Person (Verein, Universität, Institut etc.) herausgegeben wird, gebe den Namen der Institution in der Spalte 'lastname' an. Wenn keine passenden Informationen verfügbar sind, gebe nur den CSV-Header zurück. Setze alle Werte in den CSV-Spalten in Anführungszeichen. Antworte ohne zusätzlichen Kommentar, sondern nur mit den CSV-Daten.\n",
+    "\n",
+    "{website_text}\n",
+    "\"\"\"\n",
+    "\n",
+    "with open('data/input/journal-website.txt', encoding='utf-8') as f:\n",
+    "    website_text = f.read()\n",
+    "journal_name = \"AUR - Agrar- und Umweltrecht\""
    ]
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## ChatGPT-4 "
+   ],
+   "metadata": {
+    "collapsed": false
+   },
+   "id": "8f994c771cc9b4ef"
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "                                lastname      firstname      title  \\\n0   Deutsche Gesellschaft für Agrarrecht            NaN        NaN   \n1                                  Busse      Christian        Dr.   \n2                                 Endres          Ewald  Prof. Dr.   \n3                               Francois       Matthias        Dr.   \n4                          von Garmissen          Bernd        Dr.   \n5                                   Glas           Ingo        Dr.   \n6                                   Graß     Christiane        NaN   \n7                             Haarstrich           Jens        NaN   \n8                                   Koch          Erich        Dr.   \n9                                   Köpl      Christian        Dr.   \n10                              Martinez           Jose  Prof. Dr.   \n11                                  Nies        Volkmar        NaN   \n12                              Stephany           Ralf        NaN   \n13                             Wedemeyer         Harald        NaN   \n14     Institut für Landwirtschaftsrecht            NaN        NaN   \n15                              Martinez           José  Prof. Dr.   \n16                                  Nies        Volkmar        LLD   \n17                                Schell  Irina Valeska        NaN   \n\n                        position  \\\n0                            NaN   \n1             Regierungsdirektor   \n2                            NaN   \n3                   Rechtsanwalt   \n4                   Rechtsanwalt   \n5                   Rechtsanwalt   \n6                 Rechtsanwältin   \n7                   Rechtsanwalt   \n8       Ltd. Verwaltungsdirektor   \n9                 Ministerialrat   \n10                           NaN   \n11  Ltd. Landwirtschaftsdirektor   \n12    Rechtsanwalt/Steuerberater   \n13                  Rechtsanwalt   \n14                           NaN   \n15          Erster Schriftleiter   \n16         Zweiter Schriftleiter   \n17  Assistenz der Schriftleitung   \n\n                                          affiliation            role  \n0                                                 NaN     Herausgeber  \n1   Bundesministerium für Ernährung und Landwirtsc...       Redaktion  \n2        Hochschule Weihenstephan-Triesdorf, Freising       Redaktion  \n3                                                 NaN       Redaktion  \n4                                                 NaN       Redaktion  \n5                                                 NaN       Redaktion  \n6                                                 NaN       Redaktion  \n7                                                 NaN       Redaktion  \n8   Sozialversicherung für Landwirtschaft, Forsten...       Redaktion  \n9   Bayerisches Staatsministerium für Ernährung, L...       Redaktion  \n10  Institut für Landwirtschaftsrecht, Georg-Augus...       Redaktion  \n11                    Landwirtschaftskammer NRW, Bonn       Redaktion  \n12                                                NaN       Redaktion  \n13                   Landvolk Niedersachsen, Hannover       Redaktion  \n14                                                NaN  Schriftleitung  \n15                  Institut für Landwirtschaftsrecht  Schriftleitung  \n16                                                NaN  Schriftleitung  \n17                                                NaN  Schriftleitung  ",
+      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>lastname</th>\n      <th>firstname</th>\n      <th>title</th>\n      <th>position</th>\n      <th>affiliation</th>\n      <th>role</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Deutsche Gesellschaft für Agrarrecht</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Herausgeber</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Busse</td>\n      <td>Christian</td>\n      <td>Dr.</td>\n      <td>Regierungsdirektor</td>\n      <td>Bundesministerium für Ernährung und Landwirtsc...</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Endres</td>\n      <td>Ewald</td>\n      <td>Prof. Dr.</td>\n      <td>NaN</td>\n      <td>Hochschule Weihenstephan-Triesdorf, Freising</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Francois</td>\n      <td>Matthias</td>\n      <td>Dr.</td>\n      <td>Rechtsanwalt</td>\n      <td>NaN</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>von Garmissen</td>\n      <td>Bernd</td>\n      <td>Dr.</td>\n      <td>Rechtsanwalt</td>\n      <td>NaN</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>Glas</td>\n      <td>Ingo</td>\n      <td>Dr.</td>\n      <td>Rechtsanwalt</td>\n      <td>NaN</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>Graß</td>\n      <td>Christiane</td>\n      <td>NaN</td>\n      <td>Rechtsanwältin</td>\n      <td>NaN</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>Haarstrich</td>\n      <td>Jens</td>\n      <td>NaN</td>\n      <td>Rechtsanwalt</td>\n      <td>NaN</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>Koch</td>\n      <td>Erich</td>\n      <td>Dr.</td>\n      <td>Ltd. Verwaltungsdirektor</td>\n      <td>Sozialversicherung für Landwirtschaft, Forsten...</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>Köpl</td>\n      <td>Christian</td>\n      <td>Dr.</td>\n      <td>Ministerialrat</td>\n      <td>Bayerisches Staatsministerium für Ernährung, L...</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>10</th>\n      <td>Martinez</td>\n      <td>Jose</td>\n      <td>Prof. Dr.</td>\n      <td>NaN</td>\n      <td>Institut für Landwirtschaftsrecht, Georg-Augus...</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>Nies</td>\n      <td>Volkmar</td>\n      <td>NaN</td>\n      <td>Ltd. Landwirtschaftsdirektor</td>\n      <td>Landwirtschaftskammer NRW, Bonn</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>12</th>\n      <td>Stephany</td>\n      <td>Ralf</td>\n      <td>NaN</td>\n      <td>Rechtsanwalt/Steuerberater</td>\n      <td>NaN</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>Wedemeyer</td>\n      <td>Harald</td>\n      <td>NaN</td>\n      <td>Rechtsanwalt</td>\n      <td>Landvolk Niedersachsen, Hannover</td>\n      <td>Redaktion</td>\n    </tr>\n    <tr>\n      <th>14</th>\n      <td>Institut für Landwirtschaftsrecht</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Schriftleitung</td>\n    </tr>\n    <tr>\n      <th>15</th>\n      <td>Martinez</td>\n      <td>José</td>\n      <td>Prof. Dr.</td>\n      <td>Erster Schriftleiter</td>\n      <td>Institut für Landwirtschaftsrecht</td>\n      <td>Schriftleitung</td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>Nies</td>\n      <td>Volkmar</td>\n      <td>LLD</td>\n      <td>Zweiter Schriftleiter</td>\n      <td>NaN</td>\n      <td>Schriftleitung</td>\n    </tr>\n    <tr>\n      <th>17</th>\n      <td>Schell</td>\n      <td>Irina Valeska</td>\n      <td>NaN</td>\n      <td>Assistenz der Schriftleitung</td>\n      <td>NaN</td>\n      <td>Schriftleitung</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "model = ChatOpenAI(model_name=\"gpt-4\")\n",
+    "df = use_model(model, template, journal_name=journal_name, website_text=website_text)\n",
+    "df.to_csv('data/output/editors-openai-gpt4')\n",
+    "df"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "start_time": "2024-01-16T17:24:51.851287400Z"
+    }
+   },
+   "id": "initial_id"
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## ChatGPT 3.5-turbo"
+   ],
+   "metadata": {
+    "collapsed": false
+   },
+   "id": "9cef77bb17d57b53"
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "                                lastname      firstname          title  \\\n0   Deutsche Gesellschaft für Agrarrecht                                 \n1                     Regierungsdirektor  Dr. Christian                  \n2                              Prof. Dr.          Ewald                  \n3                           Rechtsanwalt   Dr. Matthias                  \n4                           Rechtsanwalt      Dr. Bernd  von Garmissen   \n5                           Rechtsanwalt           Ingo                  \n6                         Rechtsanwältin     Christiane                  \n7                           Rechtsanwalt           Jens                  \n8               Ltd. Verwaltungsdirektor      Dr. Erich                  \n9                         Ministerialrat  Dr. Christian                  \n10                             Prof. Dr.           Jose                  \n11          Ltd. Landwirtschaftsdirektor        Volkmar                  \n12            Rechtsanwalt/Steuerberater           Ralf                  \n13                          Rechtsanwalt         Harald                  \n14                             Prof. Dr.           José                  \n15                                   LLD        Volkmar                  \n16                         Irina Valeska         Schell                  \n\n                        position  \\\n0                    Herausgeber   \n1                      Redaktion   \n2                      Redaktion   \n3                      Redaktion   \n4                      Redaktion   \n5                      Redaktion   \n6                      Redaktion   \n7                      Redaktion   \n8                      Redaktion   \n9                      Redaktion   \n10                     Redaktion   \n11                     Redaktion   \n12                     Redaktion   \n13                     Redaktion   \n14                Schriftleitung   \n15                Schriftleitung   \n16  Assistenz der Schriftleitung   \n\n                                          affiliation role  \n0                                                           \n1   Bundesministerium für Ernährung und Landwirtsc...       \n2        Hochschule Weihenstephan-Triesdorf, Freising       \n3                                             Bitburg       \n4                                           Göttingen       \n5                                             Rostock       \n6                                                Bonn       \n7                                               Peine       \n8   Sozialversicherung für Landwirtschaft, Forsten...       \n9   Bayerisches Staatsministerium für Ernährung, L...       \n10  Institut für Landwirtschaftsrecht, Georg-Augus...       \n11                    Landwirtschaftskammer NRW, Bonn       \n12                                               Bonn       \n13                   Landvolk Niedersachsen, Hannover       \n14                  Institut für Landwirtschaftsrecht       \n15                                                          \n16                                                          ",
+      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>lastname</th>\n      <th>firstname</th>\n      <th>title</th>\n      <th>position</th>\n      <th>affiliation</th>\n      <th>role</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Deutsche Gesellschaft für Agrarrecht</td>\n      <td></td>\n      <td></td>\n      <td>Herausgeber</td>\n      <td></td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Regierungsdirektor</td>\n      <td>Dr. Christian</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Bundesministerium für Ernährung und Landwirtsc...</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Prof. Dr.</td>\n      <td>Ewald</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Hochschule Weihenstephan-Triesdorf, Freising</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Rechtsanwalt</td>\n      <td>Dr. Matthias</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Bitburg</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>Rechtsanwalt</td>\n      <td>Dr. Bernd</td>\n      <td>von Garmissen</td>\n      <td>Redaktion</td>\n      <td>Göttingen</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>Rechtsanwalt</td>\n      <td>Ingo</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Rostock</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>Rechtsanwältin</td>\n      <td>Christiane</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Bonn</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>Rechtsanwalt</td>\n      <td>Jens</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Peine</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>Ltd. Verwaltungsdirektor</td>\n      <td>Dr. Erich</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Sozialversicherung für Landwirtschaft, Forsten...</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>Ministerialrat</td>\n      <td>Dr. Christian</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Bayerisches Staatsministerium für Ernährung, L...</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>10</th>\n      <td>Prof. Dr.</td>\n      <td>Jose</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Institut für Landwirtschaftsrecht, Georg-Augus...</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>Ltd. Landwirtschaftsdirektor</td>\n      <td>Volkmar</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Landwirtschaftskammer NRW, Bonn</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>12</th>\n      <td>Rechtsanwalt/Steuerberater</td>\n      <td>Ralf</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Bonn</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>Rechtsanwalt</td>\n      <td>Harald</td>\n      <td></td>\n      <td>Redaktion</td>\n      <td>Landvolk Niedersachsen, Hannover</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>14</th>\n      <td>Prof. Dr.</td>\n      <td>José</td>\n      <td></td>\n      <td>Schriftleitung</td>\n      <td>Institut für Landwirtschaftsrecht</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>15</th>\n      <td>LLD</td>\n      <td>Volkmar</td>\n      <td></td>\n      <td>Schriftleitung</td>\n      <td></td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>Irina Valeska</td>\n      <td>Schell</td>\n      <td></td>\n      <td>Assistenz der Schriftleitung</td>\n      <td></td>\n      <td></td>\n    </tr>\n  </tbody>\n</table>\n</div>"
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "model = ChatOpenAI(model_name=\"gpt-3.5-turbo\")\n",
+    "df = use_model(model, template, journal_name=journal_name, website_text=website_text)\n",
+    "df.to_csv('data/output/editors-openai-gpt-3.5-turbo')\n",
+    "df"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2024-01-16T17:26:16.567722400Z",
+     "start_time": "2024-01-16T17:25:56.403589200Z"
+    }
+   },
+   "id": "e1aedc5ef3cab564"
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## TheBloke/Llama-2-13B-chat-GPTQ via Huggingface Inference Endpoint\n",
+    "\n",
+    "https://huggingface.co/TheBloke/Llama-2-13B-chat-GPTQ"
+   ],
+   "metadata": {
+    "collapsed": false
+   },
+   "id": "90ce37abf037e19f"
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "[{'generated_text': '  Here is the data in CSV format as requested:\\n\\n\\n\"lastname\", \"firstname\", \"title\", \"position\", \"affiliation\", \"role\"\\n\"\\n\"Martinez, Jose\", \"Professor\", \"Georg-August-Universitat Göttingen\", \"Editor\"\\nBusse, Christian\", \"Regierungsdirector\", \"Agrarprodukt\"\\nEndres, Ewald\", \"Professor\", \"Hochst'}]"
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "from lib.hf_llama2_13b_chat import query\n",
+    "\n",
+    "query(template, journal_name=journal_name, website_text=website_text)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2024-01-16T18:33:36.644916700Z",
+     "start_time": "2024-01-16T18:33:33.232793300Z"
+    }
+   },
+   "id": "f05098a4cf2aa3dc"
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "outputs": [],
+   "source": [],
+   "metadata": {
+    "collapsed": false
+   },
+   "id": "b94cf62b996bf3a2"
   }
  ],
  "metadata": {
diff --git a/langchain-experiments/data/editors.csv b/langchain-experiments/data/editors.csv
deleted file mode 100644
index 4cb0a52..0000000
--- a/langchain-experiments/data/editors.csv
+++ /dev/null
@@ -1,18 +0,0 @@
-lastname,firstname,title,position,affiliation,role
-Busse,Christian,Dr.,Regierungsdirektor,"Bundesministerium für Ernährung und Landwirtschaft, Bonn",Redaktion
-Endres,Ewald,Prof. Dr.,,"Hochschule Weihenstephan-Triesdorf, Freising",Redaktion
-Francois,Matthias,Dr.,Rechtsanwalt,,Redaktion
-von Garmissen,Bernd,Dr.,Rechtsanwalt,,Redaktion
-Glas,Ingo,Rechtsanwalt,,,Redaktion
-Graß,Christiane,Rechtsanwältin,,,Redaktion
-Haarstrich,Jens,Rechtsanwalt,,,Redaktion
-Koch,Erich,Dr.,Ltd. Verwaltungsdirektor,"Sozialversicherung für Landwirtschaft, Forsten und Gartenbau, Kassel",Redaktion
-Köpl,Christian,Dr.,Ministerialrat,"Bayerisches Staatsministerium für Ernährung, Landwirtschaft und Forsten, München",Redaktion
-Martinez,Jose,Prof. Dr.,,"Institut für Landwirtschaftsrecht, Georg-August-Universitat Göttingen, Göttingen",Redaktion
-Nies,Volkmar,Ltd. Landwirtschaftsdirektor,,"Landwirtschaftskammer NRW, Bonn",Redaktion
-Stephany,Ralf,Rechtsanwalt/Steuerberater,,,Redaktion
-Wedemeyer,Harald,Rechtsanwalt,,"Landvolk Niedersachsen, Hannover",Redaktion
-Martinez,José,Prof. Dr.,Erster Schriftleiter,Institut für Landwirtschaftsrecht,Schriftleitung
-Nies,Volkmar,LLD,Zweiter Schriftleiter,,Schriftleitung
-Schell,Irina Valeska,,Assistenz der Schriftleitung,,Schriftleitung
-,Deutsche Gesellschaft für Agrarrecht,,,Agrar- und Umweltrecht,Herausgeber
\ No newline at end of file
diff --git a/langchain-experiments/data/journal-website.txt b/langchain-experiments/data/input/journal-website.txt
similarity index 100%
rename from langchain-experiments/data/journal-website.txt
rename to langchain-experiments/data/input/journal-website.txt
diff --git a/langchain-experiments/data/output/.gitignore b/langchain-experiments/data/output/.gitignore
new file mode 100644
index 0000000..f59ec20
--- /dev/null
+++ b/langchain-experiments/data/output/.gitignore
@@ -0,0 +1 @@
+*
\ No newline at end of file
diff --git a/langchain-experiments/lib/__init__.py b/langchain-experiments/lib/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/langchain-experiments/lib/hf_llama2_13b_chat.py b/langchain-experiments/lib/hf_llama2_13b_chat.py
new file mode 100644
index 0000000..a454be0
--- /dev/null
+++ b/langchain-experiments/lib/hf_llama2_13b_chat.py
@@ -0,0 +1,32 @@
+import requests
+import os
+from dotenv import load_dotenv
+from json import JSONDecodeError
+import os
+
+load_dotenv()
+
+API_KEY = os.getenv("HUGGINGFACEHUB_API_TOKEN")
+API_URL = "https://z8afrqamxvaaitmf.us-east-1.aws.endpoints.huggingface.cloud"
+headers = {
+    "Accept" : "application/json",
+    "Authorization": f"Bearer {API_KEY}",
+    "Content-Type": "application/json"
+}
+
+def query(template, model_params = None, **params):
+    if model_params  is None:
+        model_params = {
+            "temperature": 0.1
+        }
+    prompt = template.format_map(params)
+    payload = {
+        "inputs": f"<s>[INST] <<SYS>>You are a helpful assistant. You keep your answers short. When asked to provide data as response, do not return additional comments.<</SYS>>{prompt}[/INST]",
+        "parameters": model_params
+    }
+    response = requests.post(API_URL, headers=headers, json=payload)
+    response.raise_for_status()
+    try:
+        return response.json()
+    except JSONDecodeError:
+        raise RuntimeError(f'Cannot parse response from {response.url}.')
diff --git a/langchain-experiments/readme.md b/langchain-experiments/readme.md
index 9333fec..7248248 100644
--- a/langchain-experiments/readme.md
+++ b/langchain-experiments/readme.md
@@ -1,3 +1,3 @@
 # Experiments with https://python.langchain.com
 
-`pip install langchain langchain-cli openai huggingface_hub`
\ No newline at end of file
+`pip install langchain langchain-cli openai huggingface_hub langchain_openai`
\ No newline at end of file
diff --git a/rocket-chat-api/.gitignore b/rocket-chat-api/.gitignore
index 1494b43..c88b822 100644
--- a/rocket-chat-api/.gitignore
+++ b/rocket-chat-api/.gitignore
@@ -1,3 +1,2 @@
 .*
-!.gitignore
 !.env.dist
\ No newline at end of file
-- 
GitLab