๐ ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์ด๋: Open WebUI 0.4์์ 0.5๋ก
Open WebUI 0.5 ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์ด๋์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค! ๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ ์์ ํ๊ฑฐ๋ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ, ์ด ๊ฐ์ด๋๋ ๋ฒ์ 0.4์์ 0.5๋ก์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ดํ๊ณ Functions๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๊ธฐ ์ํ ๊ฐ๋จํ ๋ก๋๋งต์ ์ ๊ณตํ ๊ฒ์ ๋๋ค. ์ด ์ ํ์ ์ต๋ํ ๋งค๋๋ฝ๊ฒ ๋ง๋ค์ด๋ด ์๋ค! ๐
๐ง ๋ณ๊ฒฝ ์ฌํญ๊ณผ ๊ทธ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?โ
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๋ ๋ชจ๋ธ๋ณ ๊ฐ๋ณ ํจ์(
ollama
,openai
)๋ฅผ ๋์ฒดํ๋chat_completion
์ด๋ผ๋ ํตํฉ ํจ์๋ฅผopen_webui.main
์ ๋์ ํ์ต๋๋ค. ์ด๋ฅผ ํตํด ์ผ๊ด๋๊ณ ๊ฐ์ํ๋ API ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ์ด๋ฌํ ๊ฐ๋ณ ํจ์์ ์ง์ ์ ์ธ ํ์์์open_webui.utils.chat
์generate_chat_completion
์ ๋๋ค. ์ถ๊ฐ์ ์ธ ๊ตฌ๋ฌธ ๋ถ์(์: ํ์ผ, ๋๊ตฌ, ๊ธฐํ ์ฌํญ)์ ์ฒ๋ฆฌํ์ง ์๊ณ ๊ฐ๋จํ 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
)๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฌ์ฉํ์ธ์.