From 4bd2efc12b70e74c9761f10ca3c4d001181cfc58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC?= Date: Sat, 20 Jul 2024 14:10:21 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=82=D1=8C=D1=8F=20"Nextclo?= =?UTF-8?q?ud=20Assistant=20=E2=86=90=20LiteLLM=20=E2=86=90=20Ollama"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/posts/nextcloud_x_litellm_x_ollama.md | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 content/posts/nextcloud_x_litellm_x_ollama.md diff --git a/content/posts/nextcloud_x_litellm_x_ollama.md b/content/posts/nextcloud_x_litellm_x_ollama.md new file mode 100644 index 0000000..833b212 --- /dev/null +++ b/content/posts/nextcloud_x_litellm_x_ollama.md @@ -0,0 +1,112 @@ +--- +title: "Nextcloud Assistant ← LiteLLM ← Ollama" +date: "2024-07-19" +author: Сисадмин Линк +tags: ["ai", "nextcloud", "litellm", "ollama"] +description: "Настройка локального ИИ для Nextcloud Assistant через прослойку LiteLLM" +showFullContent: false +readingTime: false +hideComments: false +--- + +Опять же, как было в случае с [принтером](/posts/ricoh_config), у меня Arch-based дистрибутив, поэтому буду расписывать по нему. + +Начнём с установки **[Ollama](https://github.com/ollama/ollama)**. У меня карточка от красных, поэтому я ставлю версию **rocm**. + +```bash +yay -S ollama-rocm +``` +или +```bash +sudo pacman -S ollama-rocm +``` + +Как в моём случае, почему-то оно не подхватывало мою **RX 6700 XT** (но [тут](https://github.com/ollama/ollama/issues/3547) нашлось решение), поэтому мне пришлось редактировать **сервис systemd** следующим образом: + +```bash +sudo systemctl edit --full ollama +``` + +```bash +[Unit] +Description=Ollama Service +Wants=network-online.target +After=network.target network-online.target + +[Service] +ExecStart=/usr/bin/ollama serve +WorkingDirectory=/var/lib/ollama +Environment="HOME=/var/lib/ollama" +Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0" # Добавлено, чтобы увидело карточку +Environment="OLLAMA_HOST=0.0.0.0" # Возможность локально подключатся извне +User=ollama +Group=ollama +Restart=on-failure +RestartSec=3 +Type=simple +PrivateTmp=yes +ProtectSystem=full +ProtectHome=yes + +[Install] +WantedBy=multi-user.target +``` +Далее устанавливаем желаемую модель, в моём случае это **`llama3`** и **`qwen2`** + +```bash +ollama pull llama3 +``` +```bash +ollama pull qwen2 +``` +Далее идём ставить **[LiteLLM](https://github.com/BerriAI/litellm)**. Это прослойка между Ollama и [Nextcloud LocalAI](https://github.com/nextcloud/integration_openai), которая использует запросы в формате OpenAI API. + +```bash +pipx install 'litellm[proxy]' +``` +Нам нужна именно **`litellm[proxy]`**, а не просто **`litellm`**! + +Теперь нужно собственно, запустить модель, с которой впоследствии мы будем общаться через [Nextcloud Assistant](https://github.com/nextcloud/assistant), я буду использовать **`qwen2`**. \ +Для этого я сделал **systemd** сервис, чтобы не запускать это дело ручками, он должен располагаться в +```bash +/home/ваш_пользователь/.config/systemd/user/litellm.service +``` + +```bash +[Unit] +Description=LiteLLM for Ollama + +[Service] +ExecStart=/home/ваш_пользователь/.local/bin/litellm --model ollama/qwen2 +Restart=on-failure +RestartSec=5s + +[Install] +WantedBy=default.target +``` + +Далее +```bash +systemctl --user daemon-reload +systemctl --user enable --now litellm +``` + +Теперь идём в настройки сервера **Искусственный интеллект** [/settings/admin/ai], предварительно установив **Nextcloud Assistant** и **OpenAI and LocalAI integration**, листаем ниже до **`OpenAI и локальная интеграция`**. + +```bash +Service URL - ip_пк:4000 +Service Name (optional) - LiteLLM (или другое, какое хотите) + +API key - не нужен +Default completion model to use - выбираем ollama/ваша_модель (openai) +Max new tokens per request - я поставил 17500, но это уже индивидуально + +Select enabled features +отключил: +Image generation provider +Speech-to-text +потому что модель такое не умеет +``` +Я не знаю, как запустить несколько моделей параллельно, поэтому мне приходится редактировать и перезапускать мой **systemd** сервис, чтобы менять модель. Если вы знаете как это сделать - [напишите мне](/contacts). + +Статья написана без использования ИИ. Хотя, наверное, это и так видно 🙃 \ No newline at end of file