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