blob: 735c6118414669af3ebf9d736f6e36395be89db1 (
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.2.4";
src = fetchFromGitHub {
owner = "open-webui";
repo = "open-webui";
rev = "v${version}";
hash = "sha256-jWO0mo26C+QTIX5j3ucDk/no+vQnAh7Q6JwB3lLM83k=";
};
frontend = buildNpmPackage {
inherit pname version src;
npmDepsHash = "sha256-QIgYHZusuq2QD8p8MGsNVhCbz6fR+qP9UuU/kbBkadc=";
# 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 nodejs depedencies 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 `psycopg2` instead
"psycopg2-binary"
# using `opencv4`
"opencv-python-headless"
# package request: https://github.com/NixOS/nixpkgs/issues/317065
"rapidocr-onnxruntime"
# package request: https://github.com/NixOS/nixpkgs/issues/317066
"langfuse"
# package request: https://github.com/NixOS/nixpkgs/issues/317068
"langchain-chroma"
];
dependencies = with python3.pkgs; [
beautifulsoup4
fastapi
uvicorn
python-multipart
flask
flask-cors
python-socketio
python-jose
passlib
requests
aiohttp
peewee
peewee-migrate
psycopg2
pymysql
bcrypt
litellm
boto3
argon2-cffi
apscheduler
google-generativeai
langchain
langchain-community
fake-useragent
chromadb
sentence-transformers
pypdf
docx2txt
python-pptx
unstructured
markdown
pypandoc
pandas
openpyxl
pyxlsb
xlrd
validators
opencv4
fpdf2
rank-bm25
faster-whisper
pyjwt
black
youtube-transcript-api
pytube
];
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";
};
}
|