mirror of
https://github.com/langflow-ai/langflow.git
synced 2026-07-24 05:39:16 +08:00
separate docling chunking
This commit is contained in:
@ -25,8 +25,9 @@ The Docling dependency is required to use the Docling components in Langflow.
|
||||
* **Langflow Desktop**: Set `LANGFLOW_DOCLING=True` in your `.env` file to enable Docling dependency installation. For more information, see [Set environment variables for Langflow Desktop](/environment-variables#set-environment-variables-for-langflow-desktop).
|
||||
|
||||
* **Langflow OSS**:
|
||||
* If you installed `langflow` (`uv pip install langflow`), Docling is included automatically through bundled extras.
|
||||
* If you installed `langflow` (`uv pip install langflow`), Docling is included automatically through bundled extras, without Docling's optional chunking dependencies.
|
||||
* If you installed `langflow-base` directly, install Docling with an extra, for example `uv pip install "langflow-base[docling]"`.
|
||||
* To use the **Chunk DoclingDocument** component, install the chunking extra with `uv pip install "langflow[docling-chunking]"` or `uv pip install "langflow-base[docling-chunking]"`.
|
||||
|
||||
* **macOS Intel (x86_64)**: Use the [Docling installation guide](https://docling-project.github.io/docling/installation/) to install the Docling dependency.
|
||||
|
||||
@ -103,6 +104,8 @@ For more information, see the [Docling serve project repository](https://github.
|
||||
|
||||
The **Chunk DoclingDocument** component splits `DoclingDocument` objects into chunks.
|
||||
|
||||
This component requires Docling's optional chunking dependencies. Install them with `uv pip install "langflow[docling-chunking]"` or `uv pip install "langflow-base[docling-chunking]"`.
|
||||
|
||||
It outputs the chunked documents as a [`Table`](/data-types#table).
|
||||
|
||||
For more information, see the [Docling core project repository](https://github.com/docling-project/docling-core).
|
||||
|
||||
@ -92,7 +92,7 @@ Documentation = "https://docs.langflow.org"
|
||||
|
||||
[project.optional-dependencies]
|
||||
docling = [
|
||||
"langchain-docling>=1.1.0",
|
||||
"langflow-base[docling]>=0.9.5",
|
||||
"tesserocr>=2.8.0",
|
||||
"rapidocr-onnxruntime>=1.4.4",
|
||||
"ocrmac>=1.0.0; sys_platform == 'darwin'",
|
||||
@ -103,6 +103,11 @@ docling = [
|
||||
"torchvision>=0.21.0", # torchvision 0.21+ is compatible with PyTorch 2.6+
|
||||
]
|
||||
|
||||
docling-chunking = [
|
||||
"langflow-base[docling-chunking]>=0.9.5",
|
||||
"langchain-docling>=1.1.0",
|
||||
]
|
||||
|
||||
audio = [
|
||||
"webrtcvad>=2.0.10",
|
||||
]
|
||||
|
||||
@ -327,7 +327,12 @@ openlayer = ["openlayer>=0.9.0,<1.0.0"]
|
||||
# Document processing / OCR
|
||||
docling = [
|
||||
"docling-core>=2.77.0,<3.0.0",
|
||||
"docling>=2.36.1,<3.0.0; sys_platform != 'darwin' or platform_machine != 'x86_64'",
|
||||
"docling-slim[cli,convert-core,extract-core,feat-ocr-rapidocr,format-latex,format-office,format-pdf,format-web,models-local,service-client]>=2.36.1,<3.0.0; sys_platform != 'darwin' or platform_machine != 'x86_64'",
|
||||
]
|
||||
docling-chunking = [
|
||||
"langflow-base[docling]",
|
||||
"docling-core[chunking]>=2.77.0,<3.0.0",
|
||||
"tiktoken>=0.7.0",
|
||||
]
|
||||
easyocr = ["easyocr>=1.7.2,<2.0.0; sys_platform != 'darwin' or platform_machine != 'x86_64'"]
|
||||
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
"""Tests for ChunkDoclingDocumentComponent HybridChunker parameters."""
|
||||
|
||||
import builtins
|
||||
import sys
|
||||
import types
|
||||
|
||||
import pytest
|
||||
|
||||
pytest.importorskip("tiktoken")
|
||||
pytest.importorskip("docling_core")
|
||||
|
||||
from lfx.components.docling.chunk_docling_document import ChunkDoclingDocumentComponent
|
||||
from lfx.components.docling.chunk_docling_document import (
|
||||
ChunkDoclingDocumentComponent,
|
||||
_load_docling_chunker_dependencies,
|
||||
)
|
||||
|
||||
|
||||
def _base_build_config():
|
||||
@ -95,6 +95,11 @@ class TestChunkDoclingDocumentComponentHybridChunker:
|
||||
captured["max_tokens"] = max_tokens
|
||||
return "tokenizer"
|
||||
|
||||
class DummyDocMeta:
|
||||
@classmethod
|
||||
def model_validate(cls, meta):
|
||||
return meta
|
||||
|
||||
hybrid_chunker_module = types.ModuleType("docling_core.transforms.chunker.hybrid_chunker")
|
||||
hybrid_chunker_module.HybridChunker = DummyHybridChunker
|
||||
monkeypatch.setitem(sys.modules, "docling_core.transforms.chunker.hybrid_chunker", hybrid_chunker_module)
|
||||
@ -110,8 +115,8 @@ class TestChunkDoclingDocumentComponentHybridChunker:
|
||||
huggingface_tokenizer_module,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"lfx.components.docling.chunk_docling_document.HierarchicalChunker",
|
||||
DummyHierarchicalChunker,
|
||||
"lfx.components.docling.chunk_docling_document._load_docling_chunker_dependencies",
|
||||
lambda: (DummyDocMeta, DummyHierarchicalChunker),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"lfx.components.docling.chunk_docling_document.extract_docling_documents",
|
||||
@ -182,3 +187,20 @@ class TestChunkDoclingDocumentComponentHybridChunker:
|
||||
always_emit_headings_input=True,
|
||||
)
|
||||
assert captured["hierarchical_called"] is True
|
||||
|
||||
def test_missing_chunking_extra_has_actionable_error(self, monkeypatch):
|
||||
original_import = builtins.__import__
|
||||
|
||||
def fake_import(name, globals_=None, locals_=None, fromlist=(), level=0):
|
||||
if name in {
|
||||
"docling_core.transforms.chunker.doc_chunk",
|
||||
"docling_core.transforms.chunker.hierarchical_chunker",
|
||||
}:
|
||||
msg = "Module requires 'chunking' extra"
|
||||
raise RuntimeError(msg)
|
||||
return original_import(name, globals_, locals_, fromlist, level)
|
||||
|
||||
monkeypatch.setattr(builtins, "__import__", fake_import)
|
||||
|
||||
with pytest.raises(ImportError, match=r"langflow-base\[docling-chunking\]"):
|
||||
_load_docling_chunker_dependencies()
|
||||
|
||||
@ -1,14 +1,27 @@
|
||||
import json
|
||||
|
||||
import tiktoken
|
||||
from docling_core.transforms.chunker import BaseChunker, DocMeta
|
||||
from docling_core.transforms.chunker.hierarchical_chunker import HierarchicalChunker
|
||||
from typing import Any
|
||||
|
||||
from lfx.base.data.docling_utils import extract_docling_documents
|
||||
from lfx.custom import Component
|
||||
from lfx.io import BoolInput, DropdownInput, HandleInput, IntInput, MessageTextInput, Output, StrInput
|
||||
from lfx.schema import Data, DataFrame
|
||||
|
||||
_CHUNKING_INSTALL_HINT = (
|
||||
"Install them with `uv pip install 'langflow[docling-chunking]'`, "
|
||||
"`uv pip install 'langflow-base[docling-chunking]'`, or "
|
||||
"`uv pip install 'docling-core[chunking]'`."
|
||||
)
|
||||
|
||||
|
||||
def _load_docling_chunker_dependencies() -> tuple[type[Any], type[Any]]:
|
||||
try:
|
||||
from docling_core.transforms.chunker.doc_chunk import DocMeta as DocMetaCls
|
||||
from docling_core.transforms.chunker.hierarchical_chunker import HierarchicalChunker as HierarchicalChunkerCls
|
||||
except (ImportError, RuntimeError) as e:
|
||||
msg = f"Docling chunking dependencies are not installed. {_CHUNKING_INSTALL_HINT}"
|
||||
raise ImportError(msg) from e
|
||||
return DocMetaCls, HierarchicalChunkerCls
|
||||
|
||||
|
||||
class ChunkDoclingDocumentComponent(Component):
|
||||
display_name: str = "Chunk DoclingDocument"
|
||||
@ -144,25 +157,20 @@ class ChunkDoclingDocumentComponent(Component):
|
||||
if warning:
|
||||
self.status = warning
|
||||
|
||||
chunker: BaseChunker
|
||||
doc_meta_cls, hierarchical_chunker_cls = _load_docling_chunker_dependencies()
|
||||
chunker: Any
|
||||
if self.chunker == "HybridChunker":
|
||||
try:
|
||||
from docling_core.transforms.chunker.hybrid_chunker import HybridChunker
|
||||
except ImportError as e:
|
||||
msg = (
|
||||
"HybridChunker is not installed. Please install it with `uv pip install docling-core[chunking] "
|
||||
"or `uv pip install transformers`"
|
||||
)
|
||||
except (ImportError, RuntimeError) as e:
|
||||
msg = f"HybridChunker is not installed. {_CHUNKING_INSTALL_HINT}"
|
||||
raise ImportError(msg) from e
|
||||
max_tokens: int | None = self.max_tokens if self.max_tokens else None
|
||||
if self.provider == "Hugging Face":
|
||||
try:
|
||||
from docling_core.transforms.chunker.tokenizer.huggingface import HuggingFaceTokenizer
|
||||
except ImportError as e:
|
||||
msg = (
|
||||
"HuggingFaceTokenizer is not installed."
|
||||
" Please install it with `uv pip install docling-core[chunking]`"
|
||||
)
|
||||
except (ImportError, RuntimeError) as e:
|
||||
msg = f"HuggingFaceTokenizer is not installed. {_CHUNKING_INSTALL_HINT}"
|
||||
raise ImportError(msg) from e
|
||||
tokenizer = HuggingFaceTokenizer.from_pretrained(
|
||||
model_name=self.hf_model_name,
|
||||
@ -170,13 +178,10 @@ class ChunkDoclingDocumentComponent(Component):
|
||||
)
|
||||
elif self.provider == "OpenAI":
|
||||
try:
|
||||
import tiktoken
|
||||
from docling_core.transforms.chunker.tokenizer.openai import OpenAITokenizer
|
||||
except ImportError as e:
|
||||
msg = (
|
||||
"OpenAITokenizer is not installed."
|
||||
" Please install it with `uv pip install docling-core[chunking]`"
|
||||
" or `uv pip install transformers`"
|
||||
)
|
||||
except (ImportError, RuntimeError) as e:
|
||||
msg = f"OpenAITokenizer is not installed. {_CHUNKING_INSTALL_HINT}"
|
||||
raise ImportError(msg) from e
|
||||
if max_tokens is None:
|
||||
max_tokens = 128 * 1024 # context window length required for OpenAI tokenizers
|
||||
@ -190,7 +195,7 @@ class ChunkDoclingDocumentComponent(Component):
|
||||
)
|
||||
|
||||
elif self.chunker == "HierarchicalChunker":
|
||||
chunker = HierarchicalChunker()
|
||||
chunker = hierarchical_chunker_cls()
|
||||
else:
|
||||
msg = f"Unknown chunker: {self.chunker}"
|
||||
raise ValueError(msg)
|
||||
@ -200,7 +205,7 @@ class ChunkDoclingDocumentComponent(Component):
|
||||
for doc in documents:
|
||||
for chunk in chunker.chunk(dl_doc=doc):
|
||||
enriched_text = chunker.contextualize(chunk=chunk)
|
||||
meta = DocMeta.model_validate(chunk.meta)
|
||||
meta = doc_meta_cls.model_validate(chunk.meta)
|
||||
|
||||
results.append(
|
||||
Data(
|
||||
|
||||
85
uv.lock
generated
85
uv.lock
generated
@ -3023,6 +3023,61 @@ wheels = [
|
||||
]
|
||||
|
||||
[package.optional-dependencies]
|
||||
cli = [
|
||||
{ name = "rich" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
convert-core = [
|
||||
{ name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
|
||||
{ name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
|
||||
{ name = "pillow" },
|
||||
{ name = "rtree" },
|
||||
{ name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
|
||||
{ name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
|
||||
]
|
||||
extract-core = [
|
||||
{ name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
|
||||
{ name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
|
||||
{ name = "pillow" },
|
||||
{ name = "polyfactory" },
|
||||
{ name = "rtree" },
|
||||
{ name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
|
||||
{ name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
|
||||
]
|
||||
feat-ocr-rapidocr = [
|
||||
{ name = "rapidocr" },
|
||||
]
|
||||
format-latex = [
|
||||
{ name = "pylatexenc" },
|
||||
]
|
||||
format-office = [
|
||||
{ name = "openpyxl" },
|
||||
{ name = "python-docx" },
|
||||
{ name = "python-pptx" },
|
||||
]
|
||||
format-pdf = [
|
||||
{ name = "docling-parse" },
|
||||
{ name = "pypdfium2" },
|
||||
]
|
||||
format-web = [
|
||||
{ name = "beautifulsoup4" },
|
||||
{ name = "lxml" },
|
||||
{ name = "marko" },
|
||||
]
|
||||
models-local = [
|
||||
{ name = "accelerate" },
|
||||
{ name = "defusedxml" },
|
||||
{ name = "docling-ibm-models" },
|
||||
{ name = "huggingface-hub" },
|
||||
{ name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version >= '3.14' and sys_platform == 'darwin') or (platform_machine == 'arm64' and sys_platform == 'darwin')" },
|
||||
{ name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.14' and platform_machine != 'arm64') or sys_platform != 'darwin'" },
|
||||
{ name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version >= '3.14' and sys_platform == 'darwin') or (platform_machine == 'arm64' and sys_platform == 'darwin')" },
|
||||
{ name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.14' and platform_machine != 'arm64') or sys_platform != 'darwin'" },
|
||||
]
|
||||
service-client = [
|
||||
{ name = "httpx" },
|
||||
{ name = "websockets" },
|
||||
]
|
||||
standard = [
|
||||
{ name = "accelerate" },
|
||||
{ name = "beautifulsoup4" },
|
||||
@ -6934,7 +6989,7 @@ couchbase = [
|
||||
{ name = "couchbase" },
|
||||
]
|
||||
docling = [
|
||||
{ name = "langchain-docling" },
|
||||
{ name = "langflow-base", extra = ["docling"] },
|
||||
{ name = "ocrmac", marker = "sys_platform == 'darwin'" },
|
||||
{ name = "rapidocr-onnxruntime" },
|
||||
{ name = "tesserocr" },
|
||||
@ -6943,6 +6998,10 @@ docling = [
|
||||
{ name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version >= '3.14' and sys_platform == 'darwin') or (platform_machine == 'arm64' and sys_platform == 'darwin')" },
|
||||
{ name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(python_full_version < '3.14' and platform_machine != 'arm64') or sys_platform != 'darwin'" },
|
||||
]
|
||||
docling-chunking = [
|
||||
{ name = "langchain-docling" },
|
||||
{ name = "langflow-base", extra = ["docling-chunking"] },
|
||||
]
|
||||
local = [
|
||||
{ name = "ctransformers" },
|
||||
{ name = "sentence-transformers" },
|
||||
@ -7003,8 +7062,10 @@ requires-dist = [
|
||||
{ name = "clickhouse-connect", marker = "extra == 'clickhouse-connect'", specifier = "==0.7.19" },
|
||||
{ name = "couchbase", marker = "extra == 'couchbase'", specifier = ">=4.2.1" },
|
||||
{ name = "ctransformers", marker = "extra == 'local'", specifier = ">=0.2.10" },
|
||||
{ name = "langchain-docling", marker = "extra == 'docling'", specifier = ">=1.1.0" },
|
||||
{ name = "langchain-docling", marker = "extra == 'docling-chunking'", specifier = ">=1.1.0" },
|
||||
{ name = "langflow-base", extras = ["complete"], editable = "src/backend/base" },
|
||||
{ name = "langflow-base", extras = ["docling"], marker = "extra == 'docling'", editable = "src/backend/base" },
|
||||
{ name = "langflow-base", extras = ["docling-chunking"], marker = "extra == 'docling-chunking'", editable = "src/backend/base" },
|
||||
{ name = "nv-ingest-api", marker = "python_full_version >= '3.12' and extra == 'nv-ingest'", specifier = ">=26.1.0,<27.0.0" },
|
||||
{ name = "nv-ingest-client", marker = "python_full_version >= '3.12' and extra == 'nv-ingest'", specifier = ">=26.1.0,<27.0.0" },
|
||||
{ name = "ocrmac", marker = "sys_platform == 'darwin' and extra == 'docling'", specifier = ">=1.0.0" },
|
||||
@ -7017,7 +7078,7 @@ requires-dist = [
|
||||
{ name = "torchvision", marker = "extra == 'docling'", specifier = ">=0.21.0", index = "https://download.pytorch.org/whl/cpu" },
|
||||
{ name = "webrtcvad", marker = "extra == 'audio'", specifier = ">=2.0.10" },
|
||||
]
|
||||
provides-extras = ["docling", "audio", "couchbase", "cassio", "local", "clickhouse-connect", "nv-ingest", "postgresql"]
|
||||
provides-extras = ["docling", "docling-chunking", "audio", "couchbase", "cassio", "local", "clickhouse-connect", "nv-ingest", "postgresql"]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
@ -7190,8 +7251,8 @@ all = [
|
||||
{ name = "cuga", marker = "(python_full_version < '3.14' and platform_machine == 'arm64') or (python_full_version < '3.14' and sys_platform != 'darwin')" },
|
||||
{ name = "datasets" },
|
||||
{ name = "ddgs" },
|
||||
{ name = "docling", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
|
||||
{ name = "docling-core" },
|
||||
{ name = "docling-slim", extra = ["cli", "convert-core", "extract-core", "feat-ocr-rapidocr", "format-latex", "format-office", "format-pdf", "format-web", "models-local", "service-client"], marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
|
||||
{ name = "easyocr", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
|
||||
{ name = "elasticsearch" },
|
||||
{ name = "faiss-cpu", version = "1.9.0.post1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" },
|
||||
@ -7359,8 +7420,8 @@ complete = [
|
||||
{ name = "cuga", marker = "(python_full_version < '3.14' and platform_machine == 'arm64') or (python_full_version < '3.14' and sys_platform != 'darwin')" },
|
||||
{ name = "datasets" },
|
||||
{ name = "ddgs" },
|
||||
{ name = "docling", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
|
||||
{ name = "docling-core" },
|
||||
{ name = "docling-slim", extra = ["cli", "convert-core", "extract-core", "feat-ocr-rapidocr", "format-latex", "format-office", "format-pdf", "format-web", "models-local", "service-client"], marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
|
||||
{ name = "easyocr", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
|
||||
{ name = "elasticsearch" },
|
||||
{ name = "faiss-cpu", version = "1.9.0.post1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" },
|
||||
@ -7472,8 +7533,13 @@ datasets = [
|
||||
{ name = "datasets" },
|
||||
]
|
||||
docling = [
|
||||
{ name = "docling", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
|
||||
{ name = "docling-core" },
|
||||
{ name = "docling-slim", extra = ["cli", "convert-core", "extract-core", "feat-ocr-rapidocr", "format-latex", "format-office", "format-pdf", "format-web", "models-local", "service-client"], marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
|
||||
]
|
||||
docling-chunking = [
|
||||
{ name = "docling-core", extra = ["chunking"] },
|
||||
{ name = "docling-slim", extra = ["cli", "convert-core", "extract-core", "feat-ocr-rapidocr", "format-latex", "format-office", "format-pdf", "format-web", "models-local", "service-client"], marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
|
||||
{ name = "tiktoken" },
|
||||
]
|
||||
docx = [
|
||||
{ name = "python-docx" },
|
||||
@ -7794,8 +7860,9 @@ requires-dist = [
|
||||
{ name = "datasets", marker = "extra == 'datasets'", specifier = ">2.14.7,<5.0.0" },
|
||||
{ name = "ddgs", marker = "extra == 'duckduckgo'", specifier = ">=9.0.0" },
|
||||
{ name = "defusedxml", specifier = ">=0.7.1,<1.0.0" },
|
||||
{ name = "docling", marker = "(platform_machine != 'x86_64' and extra == 'docling') or (sys_platform != 'darwin' and extra == 'docling')", specifier = ">=2.36.1,<3.0.0" },
|
||||
{ name = "docling-core", marker = "extra == 'docling'", specifier = ">=2.77.0,<3.0.0" },
|
||||
{ name = "docling-core", extras = ["chunking"], marker = "extra == 'docling-chunking'", specifier = ">=2.77.0,<3.0.0" },
|
||||
{ name = "docling-slim", extras = ["cli", "convert-core", "extract-core", "feat-ocr-rapidocr", "format-latex", "format-office", "format-pdf", "format-web", "models-local", "service-client"], marker = "(platform_machine != 'x86_64' and extra == 'docling') or (sys_platform != 'darwin' and extra == 'docling')", specifier = ">=2.36.1,<3.0.0" },
|
||||
{ name = "docstring-parser", specifier = ">=0.16,<1.0.0" },
|
||||
{ name = "duckdb", specifier = ">=1.0.0,<2.0.0" },
|
||||
{ name = "dynaconf", specifier = ">=3.2.13,<4.0.0" },
|
||||
@ -7896,6 +7963,7 @@ requires-dist = [
|
||||
{ name = "langflow-base", extras = ["cuga"], marker = "extra == 'complete'", editable = "src/backend/base" },
|
||||
{ name = "langflow-base", extras = ["datasets"], marker = "extra == 'complete'", editable = "src/backend/base" },
|
||||
{ name = "langflow-base", extras = ["docling"], marker = "extra == 'complete'", editable = "src/backend/base" },
|
||||
{ name = "langflow-base", extras = ["docling"], marker = "extra == 'docling-chunking'", editable = "src/backend/base" },
|
||||
{ name = "langflow-base", extras = ["docx"], marker = "extra == 'complete'", editable = "src/backend/base" },
|
||||
{ name = "langflow-base", extras = ["duckduckgo"], marker = "extra == 'complete'", editable = "src/backend/base" },
|
||||
{ name = "langflow-base", extras = ["easyocr"], marker = "extra == 'complete'", editable = "src/backend/base" },
|
||||
@ -8052,6 +8120,7 @@ requires-dist = [
|
||||
{ name = "sseclient-py", marker = "extra == 'sseclient'", specifier = "==1.8.0" },
|
||||
{ name = "structlog", specifier = ">=25.4.0,<26.0.0" },
|
||||
{ name = "supabase", marker = "extra == 'supabase'", specifier = ">=2.6.0,<3.0.0" },
|
||||
{ name = "tiktoken", marker = "extra == 'docling-chunking'", specifier = ">=0.7.0" },
|
||||
{ name = "toolguard", marker = "extra == 'toolguard'", specifier = ">=0.2.16,<1.0.0" },
|
||||
{ name = "traceloop-sdk", marker = "extra == 'traceloop'", specifier = ">=0.43.1,<1.0.0" },
|
||||
{ name = "transformers", specifier = ">=5.6.0,<6.0.0" },
|
||||
@ -8072,7 +8141,7 @@ requires-dist = [
|
||||
{ name = "youtube-transcript-api", marker = "extra == 'youtube'", specifier = ">=1.0.0,<2.0.0" },
|
||||
{ name = "zep-python", marker = "extra == 'zep'", specifier = "==2.0.2" },
|
||||
]
|
||||
provides-extras = ["audio", "postgresql", "local", "couchbase", "cassandra", "clickhouse", "mongodb", "supabase", "redis", "elasticsearch", "faiss", "qdrant", "qdrant-vectors", "weaviate", "chroma", "upstash", "pinecone", "milvus", "mongodb-vectors", "astradb", "openai", "anthropic", "cohere", "google", "ollama", "nvidia", "mistral", "sambanova", "groq", "sentence-transformers", "ctransformers", "langfuse", "langwatch", "langsmith", "arize", "pypdf", "docx", "pytube", "smolagents", "beautifulsoup", "serpapi", "google-api", "wikipedia", "fake-useragent", "duckduckgo", "yfinance", "wolframalpha", "pyarrow", "fastavro", "gitpython", "nltk", "lark", "huggingface", "metaphor", "metal", "markup", "aws", "numexpr", "qianfan", "pgvector", "litellm", "zep", "youtube", "markdown", "kubernetes", "json-repair", "composio", "ragstack", "opensearch", "atlassian", "mem0", "needle", "sseclient", "openinference", "mcp", "ag2", "scrapegraph", "apify", "spider", "altk", "toolguard", "langchain-huggingface", "langchain-unstructured", "graph-retriever", "langchain-mcp-adapters", "opik", "traceloop", "openlayer", "docling", "easyocr", "cleanlab", "twelvelabs", "jigsawstack", "assemblyai", "datasets", "fastparquet", "vlmrun", "cuga", "mlx", "fastmcp", "aioboto3", "astrapy", "gassist", "ibm-watsonx-clients", "complete", "all"]
|
||||
provides-extras = ["audio", "postgresql", "local", "couchbase", "cassandra", "clickhouse", "mongodb", "supabase", "redis", "elasticsearch", "faiss", "qdrant", "qdrant-vectors", "weaviate", "chroma", "upstash", "pinecone", "milvus", "mongodb-vectors", "astradb", "openai", "anthropic", "cohere", "google", "ollama", "nvidia", "mistral", "sambanova", "groq", "sentence-transformers", "ctransformers", "langfuse", "langwatch", "langsmith", "arize", "pypdf", "docx", "pytube", "smolagents", "beautifulsoup", "serpapi", "google-api", "wikipedia", "fake-useragent", "duckduckgo", "yfinance", "wolframalpha", "pyarrow", "fastavro", "gitpython", "nltk", "lark", "huggingface", "metaphor", "metal", "markup", "aws", "numexpr", "qianfan", "pgvector", "litellm", "zep", "youtube", "markdown", "kubernetes", "json-repair", "composio", "ragstack", "opensearch", "atlassian", "mem0", "needle", "sseclient", "openinference", "mcp", "ag2", "scrapegraph", "apify", "spider", "altk", "toolguard", "langchain-huggingface", "langchain-unstructured", "graph-retriever", "langchain-mcp-adapters", "opik", "traceloop", "openlayer", "docling", "docling-chunking", "easyocr", "cleanlab", "twelvelabs", "jigsawstack", "assemblyai", "datasets", "fastparquet", "vlmrun", "cuga", "mlx", "fastmcp", "aioboto3", "astrapy", "gassist", "ibm-watsonx-clients", "complete", "all"]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
|
||||
Reference in New Issue
Block a user