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