🚚 Руководство по миграции: 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 с несколькими маршрутизаторами. Это означает лучшую организацию, централизованный поток и сокращение избыточности.
Основные изменения:
Вот обзор того, что изменилось:
-
Приложения были перемещены в маршрутизаторы.
- Ранее:
open_webui.apps
- Теперь:
open_webui.routers
- Ранее:
-
Основная структура приложения упрощена.
- Старое
open_webui.apps.webui
преобразовано вopen_webui.main
, став центральной точкой входа в проект.
- Старое
-
Унифицированная конечная точка API
- В Open WebUI 0.5 представлена унифицированная функция,
chat_completion
, вopen_webui.main
, заменяющая отдельн ые функции для моделей, таких какollama
иopenai
. Это обеспечивает последовательный и удобный API-опыт. Однако прямым преемником этих отдельных функций являетсяgenerate_chat_completion
изopen_webui.utils.chat
. Если вам нужен простой POST-запрос без обработки дополнительного парсинга (например, файлов, инструментов или вспомогательных данных), эта утилита, скорее всего, подойдет вам.
- В Open WebUI 0.5 представлена унифицированная функция,
Пример:
# Полный API-поток с парсером (новая функция):
from open_webui.main import chat_completion
# Легкий, прямой POST-запрос (прямой преемник):
from open_webui.utils.chat import generate_chat_completion
Выберите подход, который лучше всего соответствует вашему случаю использования!
- Обновленные сигнатуры функций.
- Сигнатуры функций теперь соответствуют новому формату, требуя объект
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.ollama | open_webui.routers.ollama |
open_webui.apps.openai | open_webui.routers.openai |
open_webui.apps.audio | open_webui.routers.audio |
open_webui.apps.retrieval | open_webui.routers.retrieval |
open_webui.apps.webui | open_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
- До (0.4):
В общем, просто замените 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
В зависимости от ваших задач, вы можете выбрать:
-
open_webui.main.chat_completion
:- Симулирует выполнение POST-запроса на
/api/chat/completions
. - Обрабатывает файлы, инструменты и другие вспомогательные задачи.
- Лучший выбор, если вы хотите, чтобы полный процесс работы с API выполнялся автоматически.
- Симулирует выполнение POST-запроса на
-
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 или задать вопрос на форумах сообщества!
Удачного кодирования! ✨