sadium/content/posts/nextcloud_x_litellm_x_ollama.md
2024-08-12 08:53:16 +03:00

145 lines
No EOL
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Nextcloud Assistant ← LiteLLM ← Ollama"
date: "2024-07-19"
author: Сисадмин Линк
tags: ["ai", "nextcloud", "litellm", "ollama"]
description: "Настройка локального ИИ для Nextcloud Assistant через прослойку LiteLLM"
cover: "/posts/covers/nlo.jpg"
---
Опять же, как было в случае с [принтером](/posts/ricoh_config), у меня Arch-based дистрибутив, поэтому буду расписывать по нему.
## Установка {#install}
Начнём с установки **[Ollama](https://github.com/ollama/ollama)**. У меня карточка от красных, поэтому я ставлю версию **rocm**.
```bash
yay -S ollama-rocm
```
или если нет **yay**
```bash
sudo pacman -S ollama-rocm
```
### Сервис systemd {#systemd_service}
Как в моём случае, почему-то оно не подхватывало мою **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
```
## Импорт модели GGUF {#gguf_import}
Обн. от `05.08.24` - добавлена инструкция импорта моделей `.gguf`
Далее устанавливаем желаемую модель, в моём случае это **`llama3`** и модель, которую можно импортировать из файла `.gguf`, я буду использовать **`saiga-llama3`[[🔗](https://huggingface.co/IlyaGusev/saiga_llama3_8b_gguf)]**.
```bash
ollama pull llama3
```
Для того, чтобы импортировать модель, нам необходимо:
- Загрузить модель 🙃
- Создать файл, который можно скормить **ollama**
```bash
echo FROM папка_соделью/файл_модели.gguf >> файл_названиеодели
```
В моём случае можно сразу название модели, потому что работаю сразу из папки с моделью
```bash
echo FROM saiga_llama3.gguf >> saiga-llama3
```
Осталось импортировать
```bash
ollama -f файл_названиеодели названиеодели
```
```bash
ollama -f saiga-llama3 saiga-llama3
```
## LiteLLM
Далее идём ставить **[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). \
Однако, перед тем, как мы перейдём к запуску наших моделей, нам нужно создать файлик **`config.yaml`**, который мы впоследствии "скормим" **LiteLLM** со следующим содержимым:
```bash
model_list:
- model_name: llama3
litellm_params:
model: ollama/llama3
- model_name: qwen2
litellm_params:
model: ollama/qwen2
# ну далее по шаблону, если есть другие модели
```
### Сервис systemd {#litellm_systemd}
Затем я сделал **systemd** сервис, чтобы не запускать это дело ручками, он должен располагаться в
```bash
/home/ваш_пользователь/.config/systemd/user/litellm.service
```
```bash
[Unit]
Description=LiteLLM for Ollama
[Service]
ExecStart=/home/ваш_пользователь/.local/bin/litellm --config путь_до/config.yaml
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=default.target
```
Далее
```bash
systemctl --user daemon-reload
systemctl --user enable --now litellm
```
## Nextcloud Assistant
Теперь идём в настройки сервера **Искусственный интеллект** [/settings/admin/ai], предварительно установив **Nextcloud Assistant** и **OpenAI and LocalAI integration**, листаем ниже до **`OpenAI и локальная интеграция`**.
**`Service URL`** - ip_пк:4000 \
**`Service Name (optional)`** - LiteLLM (или другое, какое хотите)
**`API key`** - не нужен \
**`Default completion model to use`** - выбираем **ollama/вашаодель** (openai) \
**`Max new tokens per request`** - ставите сколько считаете нужным
**`Select enabled features`**
Отключил потому что модель такое не умеет:
- Image generation provider
- Speech-to-text
Статья написана без использования ИИ. Хотя, наверное, это и так видно 🙃