Перейти к основному содержимому

🚚 Руководство по миграции: Open WebUI 0.4 к 0.5

Добро пожаловать в руководство по миграции Open WebUI 0.5! Если вы работаете над существующими проектами или создаете новые, это руководство поможет вам ознакомиться с основными изменениями между версией 0.4 и 0.5 и предоставит понятный план обновления ваших функций. Сделаем этот переход максимально плавным! 😊


🧐 Что изменилось и почему?

В Open WebUI 0.5 мы переработали архитектуру, чтобы сделать проект проще, более унифицированным и масштабируемым. Вот основная идея:

  • Старая архитектура: 🎯 Ранее Open WebUI был построен на основе архитектуры подприложений, где каждое приложение (например, ollama, openai) было отдельным приложением FastAPI. Это приводило к фрагментации и дополнительной сложности при управлении приложениями.
  • Новая архитектура: 🚀 В версии 0.5 мы перешли к одному приложению FastAPI с несколькими маршрутизаторами. Это означает лучшую организацию, централизованный поток и сокращение избыточности.

Основные изменения:

Вот обзор того, что изменилось:

  1. Приложения были перемещены в маршрутизаторы.

    • Ранее: open_webui.apps
    • Теперь: open_webui.routers
  2. Основная структура приложения упрощена.

    • Старое open_webui.apps.webui преобразовано в open_webui.main, став центральной точкой входа в проект.
  3. Унифицированная конечная точка API

    • В Open WebUI 0.5 представлена унифицированная функция, chat_completion, в open_webui.main, заменяющая отдельные функции для моделей, таких как ollama и openai. Это обеспечивает последовательный и удобный API-опыт. Однако прямым преемником этих отдельных функций является generate_chat_completion из open_webui.utils.chat. Если вам нужен простой POST-запрос без обработки дополнительного парсинга (например, файлов, инструментов или вспомогательных данных), эта утилита, скорее всего, подойдет вам.

Пример:

# Полный API-поток с парсером (новая функция):
from open_webui.main import chat_completion

# Легкий, прямой POST-запрос (прямой преемник):
from open_webui.utils.chat import generate_chat_completion

Выберите подход, который лучше всего соответствует вашему случаю использования!

  1. Обновленные сигнатуры функций.
    • Сигнатуры функций теперь соответствуют новому формату, требуя объект request.
    • Объект request можно получить, используя параметр __request__ в сигнатуре функции. Вот пример:
class Pipe:
def __init__(self):
pass

async def pipe(
self,
body: dict,
__user__: dict,
__request__: Request, # Новый параметр
) -> str:
# Напишите здесь свою функцию

📌 Почему мы внесли эти изменения?

  • Чтобы упростить кодовую базу и сделать её легче расширяемой и поддерживаемой.
  • Для унификации API, обеспечивая более упрощенный опыт для разработчиков.
  • Для повышения производительности за счет консолидации избыточных элементов.

✅ Пошаговое руководство по миграции

Следуйте этому руководству, чтобы плавно обновить свой проект.


🔄 1. Переход от apps к routers

Все приложения были переименованы и перемещены в open_webui.routers. Это влияет на импорт в вашей кодовой базе.

Быстрые изменения для путей импорта:

Старый путьНовый путь
open_webui.apps.ollamaopen_webui.routers.ollama
open_webui.apps.openaiopen_webui.routers.openai
open_webui.apps.audioopen_webui.routers.audio
open_webui.apps.retrievalopen_webui.routers.retrieval
open_webui.apps.webuiopen_webui.main

📜 Важный пример

Чтобы уточнить особый случай основного приложения (webui), вот простое правило:

  • Было в webui? Теперь оно находится в корне проекта или open_webui.main.
  • Например:
    • До (0.4):
      from open_webui.apps.webui.models import SomeModel  
    • После (0.5):
      from open_webui.models import SomeModel  

В общем, просто замените open_webui.apps на open_webui.routers, за исключением webui, который теперь является open_webui.main!


👩‍💻 2. Обновление операторов импорта

Давайте посмотрим, как выглядит это обновление в вашем коде:

До:

from open_webui.apps.ollama import main as ollama
from open_webui.apps.openai import main as openai

После:

# Импорт отдельных маршрутизаторов
from open_webui.routers.ollama import generate_chat_completion
from open_webui.routers.openai import generate_chat_completion

# Или используйте унифицированную конечную точку
from open_webui.main import chat_completion

💡 Совет: Отдавайте предпочтение унифицированной конечной точке (chat_completion) для простоты и будущей совместимости.

📝 Дополнительное примечание: выбор между main.chat_completion и utils.chat.generate_chat_completion

В зависимости от ваших задач, вы можете выбрать:

  1. open_webui.main.chat_completion:

    • Симулирует выполнение POST-запроса на /api/chat/completions.
    • Обрабатывает файлы, инструменты и другие вспомогательные задачи.
    • Лучший выбор, если вы хотите, чтобы полный процесс работы с API выполнялся автоматически.
  2. open_webui.utils.chat.generate_chat_completion:

    • Выполняет прямой POST-запрос без обработки дополнительного парсинга или задач.
    • Это прямой преемник предыдущих функций main.generate_chat_completions, ollama.generate_chat_completion и openai.generate_chat_completion в Open WebUI 0.4.
    • Подходит для упрощенных и легковесных сценариев.

Пример:

# Используйте это для полного рабочего процесса API с парсингом:
from open_webui.main import chat_completion

# Используйте это для упрощенного прямого POST-запроса:
from open_webui.utils.chat import generate_chat_completion

📋 3. Адаптация к обновленным сигнатурам функций

Мы обновили сигнатуры функций, чтобы они лучше соответствовали новой архитектуре. Если вы ищете прямую замену, начните с легковесной служебной функции generate_chat_completion из open_webui.utils.chat. Для полного рабочего процесса API используйте новую унифицированную функцию chat_completion в open_webui.main.

Изменения сигнатур функций:

СтараяПрямой преемник (новая)Унифицированный вариант (новая)
openai.generate_chat_completion(form_data: dict, user: UserModel)generate_chat_completion(request: Request, form_data: dict, user: UserModel)chat_completion(request: Request, form_data: dict, user: UserModel)
  • Прямой преемник (generate_chat_completion): Легковесная замена 1:1 для предыдущих методов ollama/openai.
  • Унифицированный вариант (chat_completion): Используйте для полного рабочего процесса API, включая парсинг файлов и дополнительные функции.

Пример:

Если вы используете chat_completion, вот как должна выглядеть ваша функция теперь:

🛠️ Как переработать вашу пользовательскую функцию

Давайте перепишем пример функции, чтобы она соответствовала новой структуре:

До (0.4):

from pydantic import BaseModel
from open_webui.apps.ollama import generate_chat_completion

class User(BaseModel):
id: str
email: str
name: str
role: str

class Pipe:
def __init__(self):
pass

async def pipe(self, body: dict, __user__: dict) -> str:
# Вызов конечной точки OpenAI
user = User(**__user__)
body["model"] = "llama3.2:latest"
return await ollama.generate_chat_completion(body, user)

После (0.5):

from pydantic import BaseModel
from fastapi import Request

from open_webui.utils.chat import generate_chat_completion


class User(BaseModel):
id: str
email: str
name: str
role: str


class Pipe:
def __init__(self):
pass

async def pipe(
self,
body: dict,
__user__: dict,
__request__: Request,
) -> str:
# Использует унифицированную конечную точку с обновленной сигнатурой
user = User(**__user__)
body["model"] = "llama3.2:latest"
return await generate_chat_completion(__request__, body, user)

Важные примечания:

  • Вы должны передать объект Request (__request__) в новой сигнатуре функции.
  • Другие необязательные параметры (например, __user__ и __event_emitter__) обеспечивают гибкость для более сложных случаев использования.

🌟 4. Резюме: ключевые концепции простым языком

Вот краткая шпаргалка, чтобы запомнить:

  • Приложения в роутеры: Обновите все импорты с open_webui.apps ➡️ open_webui.routers.
  • Унифицированная конечная точка: Используйте open_webui.main.chat_completion для упрощения, если задействованы как ollama, так и openai.
  • Адаптация сигнатур функций: Убедитесь, что ваши функции передают требуемый объект request.

🎉 Ура! Вы готовы!

Вы успешно мигрировали с Open WebUI 0.4 на 0.5. Переработав импорты, используя унифицированную конечную точку и обновив сигнатуры функций, вы будете полностью подготовлены к использованию новейших функций и улучшений версии 0.5.


💬 Вопросы или отзывы? Если вы столкнулись с какими-либо проблемами или у вас есть предложения, не стесняйтесь открыть GitHub issue или задать вопрос на форумах сообщества!

Удачного кодирования! ✨