[project] name = "docneedle" version = "0.1.0" description = "Privacy-first local RAG document extraction microservice" readme = "README.md" requires-python = ">=3.14" dependencies = [ "fastapi>=0.115.0", "uvicorn[standard]>=0.32.0", "pydantic>=2.9.0", "pydantic-settings>=2.5.0", "python-multipart>=0.0.12", "httpx>=0.27.0", "numpy>=2.0.0", "gradio>=6.0.0", "pillow>=10.0.0", "tokenizers>=0.19.0", "huggingface-hub>=0.25.0", "python-dotenv>=1.0.0", "docling-core[chunking]>=2.15.0", "python-docx>=1.1.0", "openpyxl>=3.1.0", "beautifulsoup4>=4.12.0", "onnxruntime-gpu>=1.19.0; (platform_system == 'Linux' or platform_system == 'Windows') and (platform_machine == 'x86_64' or platform_machine == 'AMD64' or platform_machine == 'aarch64')", "onnxruntime>=1.19.0; platform_system == 'Darwin' or (platform_machine != 'x86_64' and platform_machine != 'AMD64' and platform_machine != 'aarch64')", "rapidocr>=3.0.0", "rank-bm25>=0.2.2", "llama-cpp-python>=0.3.0,<0.4.0", "pypdfium2>=4.30.0", ] [dependency-groups] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.24.0", "ruff>=0.7.0", ] [project.optional-dependencies] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.24.0", "ruff>=0.7.0", ] cuda = [ "nvidia-cuda-runtime-cu12; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", "nvidia-cublas-cu12; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", "cuda-toolkit[cublas,cudart,cufft,curand,nvrtc]>=13.0.0; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", "nvidia-cudnn-cu13>=9.0.0; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", ] # Backward-compatibility alias for scripts invoking '.[ml]' ml = [] [tool.uv] default-groups = ["dev"] [tool.uv.extra-build-variables] llama-cpp-python = { CMAKE_ARGS = "-DGGML_CUDA=on -DCMAKE_CUDA_ARCHITECTURES=native -DCUDAToolkit_ROOT=/usr/local/cuda", CUDACXX = "/usr/local/cuda/bin/nvcc" } [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/docneedle"] [tool.ruff] target-version = "py314" line-length = 100 [tool.ruff.lint] select = ["E", "F", "I"] ignore = ["EXE002"] [tool.ruff.lint.per-file-ignores] "app.py" = ["E501"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] pythonpath = ["src", "."]