blob: 074c3ab90323c836976a7a1993ab9188ebb39de0 (
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
|
{
lib,
buildNpmPackage,
fetchFromGitHub,
python3,
nixosTests,
}:
let
pname = "open-webui";
version = "0.3.4";
src = fetchFromGitHub {
owner = "open-webui";
repo = "open-webui";
rev = "v${version}";
hash = "sha256-HO7kvJB4GDdAtb0jq8XPU94sP8QbyYlxAmhpLAshMng=";
};
frontend = buildNpmPackage {
inherit pname version src;
npmDepsHash = "sha256-EZvFslntBjpxsjXYyfPGNa2SmYth56cjy8zg+fmiCGo=";
# 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;
# The custom hook tries to run `npm install` in `buildPhase`.
# We don't have to worry, as node dependencies are managed by `frontend` drv.
postPatch = ''
substituteInPlace pyproject.toml \
--replace-fail '[tool.hatch.build.hooks.custom]' "" \
--replace-fail ', build = "open_webui/frontend"' ""
'';
pythonRelaxDeps = true;
pythonRemoveDeps = [
# using `opencv4`
"opencv-python-headless"
# using `psycopg2` instead
"psycopg2-binary"
# package request: https://github.com/NixOS/nixpkgs/issues/317065
"rapidocr-onnxruntime"
];
dependencies = with python3.pkgs; [
aiohttp
apscheduler
argon2-cffi
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
opencv4
openpyxl
pandas
passlib
peewee
peewee-migrate
psycopg2
pydub
pyjwt
pymysql
pypandoc
pypdf
python-jose
python-multipart
python-pptx
python-socketio
pytube
pyxlsb
rank-bm25
requests
sentence-transformers
unstructured
uvicorn
validators
xlrd
youtube-transcript-api
];
build-system = with python3.pkgs; [
hatchling
pythonRelaxDepsHook
];
pythonImportsCheck = [ "open_webui" ];
postInstall = ''
wrapProgram $out/bin/open-webui \
--set FRONTEND_BUILD_DIR "${frontend}/share/open-webui"
'';
passthru.tests = {
inherit (nixosTests) open-webui;
};
meta = {
description = "Full-stack of open-webui. open-webui is a user-friendly WebUI for LLMs (Formerly Ollama 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";
};
}
|