1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 hatchling,
6 setuptools-scm,
7 # python dependencies
8 docling,
9 docling-jobkit,
10 docling-mcp,
11 fastapi,
12 httpx,
13 pydantic-settings,
14 python-multipart,
15 scalar-fastapi,
16 uvicorn,
17 websockets,
18 tesserocr,
19 typer,
20 rapidocr,
21 onnxruntime,
22 torch,
23 torchvision,
24 gradio,
25 nodejs,
26 which,
27 withUI ? false,
28 withTesserocr ? false,
29 withRapidocr ? false,
30 withCPU ? false,
31}:
32
33buildPythonPackage rec {
34 pname = "docling-serve";
35 version = "1.5.1";
36 pyproject = true;
37
38 src = fetchFromGitHub {
39 owner = "docling-project";
40 repo = "docling-serve";
41 tag = "v${version}";
42 hash = "sha256-JUHXrvsZBF/WHxsMT1xkPzpuX483RxF3ZlO+/NUMZ/8=";
43 };
44
45 build-system = [
46 hatchling
47 setuptools-scm
48 ];
49
50 pythonRelaxDeps = [
51 "websockets"
52 ];
53
54 pythonRemoveDeps = [
55 "mlx-vlm" # not yet available on nixpkgs
56 ];
57
58 dependencies = [
59 docling
60 docling-jobkit
61 docling-mcp
62 fastapi
63 httpx
64 pydantic-settings
65 python-multipart
66 scalar-fastapi
67 typer
68 uvicorn
69 websockets
70 ]
71 ++ lib.optionals withUI optional-dependencies.ui
72 ++ lib.optionals withTesserocr optional-dependencies.tesserocr
73 ++ lib.optionals withRapidocr optional-dependencies.rapidocr
74 ++ lib.optionals withCPU optional-dependencies.cpu;
75
76 optional-dependencies = {
77 ui = [
78 gradio
79 nodejs
80 which
81 ];
82 tesserocr = [
83 tesserocr
84 ];
85 rapidocr = [
86 rapidocr
87 onnxruntime
88 ];
89 cpu = [
90 torch
91 torchvision
92 ];
93 };
94
95 pythonImportsCheck = [
96 "docling_serve"
97 ];
98
99 # Require network
100 doCheck = false;
101
102 meta = {
103 changelog = "https://github.com/docling-project/docling-serve/blob/${src.tag}/CHANGELOG.md";
104 description = "Running Docling as an API service";
105 homepage = "https://github.com/docling-project/docling-serve";
106 license = lib.licenses.mit;
107 mainProgram = "docling-serve";
108 maintainers = with lib.maintainers; [ ];
109 };
110}