blob: 4669146115d515168c044d701de15e4a84fc275d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
{
lib,
buildNpmPackage,
fetchFromGitHub,
python3,
nixosTests,
}:
let
pname = "open-webui";
version = "0.3.21";
src = fetchFromGitHub {
owner = "open-webui";
repo = "open-webui";
rev = "refs/tags/v${version}";
hash = "sha256-b+r+nEv+9IM56KkCi9tZqnEbyCX69mFhp0Be5/9lR9c=";
};
frontend = buildNpmPackage {
inherit pname version src;
npmDepsHash = "sha256-LH07LzYZpVzRAvkjoTgt7LJdXZZoDMt//ZAl30z7AHw=";
# Disabling `pyodide:fetch` as it downloads packages during `buildPhase`
# Until this is solved, running python packages from the browser will not work.
postPatch = ''
substituteInPlace package.json \
--replace-fail "npm run pyodide:fetch && vite build" "vite build"
'';
env.CYPRESS_INSTALL_BINARY = "0"; # disallow cypress from downloading binaries in sandbox
installPhase = ''
runHook preInstall
mkdir -p $out/share
cp -a build $out/share/open-webui
runHook postInstall
'';
};
in
python3.pkgs.buildPythonApplication rec {
inherit pname version src;
pyproject = true;
# Not force-including the frontend build directory as frontend is managed by the `frontend` derivation above.
postPatch = ''
substituteInPlace pyproject.toml \
--replace-fail ', build = "open_webui/frontend"' ""
'';
env.HATCH_BUILD_NO_HOOKS = true;
pythonRelaxDeps = true;
pythonRemoveDeps = [
# using `opencv4`
"opencv-python-headless"
# using `psycopg2` instead
"psycopg2-binary"
"docker"
"pytest"
"pytest-docker"
];
dependencies = with python3.pkgs; [
aiohttp
alembic
anthropic
apscheduler
argon2-cffi
authlib
bcrypt
beautifulsoup4
black
boto3
chromadb
docx2txt
duckduckgo-search
extract-msg
fake-useragent
fastapi
faster-whisper
flask
flask-cors
fpdf2
google-generativeai
langchain
langchain-chroma
langchain-community
langfuse
markdown
nltk
openai
opencv4
openpyxl
pandas
passlib
peewee
peewee-migrate
psutil
psycopg2
pydub
pyjwt
pymongo
pymysql
pypandoc
pypdf
python-dotenv
python-jose
python-multipart
python-pptx
python-socketio
pytube
pyxlsb
rank-bm25
rapidocr-onnxruntime
redis
requests
sentence-transformers
tiktoken
unstructured
uvicorn
validators
xlrd
youtube-transcript-api
];
build-system = with python3.pkgs; [ hatchling ];
pythonImportsCheck = [ "open_webui" ];
makeWrapperArgs = [ "--set FRONTEND_BUILD_DIR ${frontend}/share/open-webui" ];
passthru.tests = {
inherit (nixosTests) open-webui;
};
meta = {
description = "Comprehensive suite for LLMs with a user-friendly WebUI";
homepage = "https://github.com/open-webui/open-webui";
changelog = "https://github.com/open-webui/open-webui/blob/${src.rev}/CHANGELOG.md";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ shivaraj-bh ];
mainProgram = "open-webui";
};
}
|