From 6c6080a88bfc0b98fa358692b4d492503104be76 Mon Sep 17 00:00:00 2001 From: Eric Pinzur <2641606+epinzur@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:40:21 +0100 Subject: [PATCH] setup workspaces and builds (#22) * setup workspaces and builds * fix tests --- .github/actions/setup-python-env/action.yml | 2 +- .github/workflows/main.yml | 4 +- Makefile | 34 +++- {tests/data => data}/animals.jsonl | 0 packages/graph-rag/README.md | 1 + packages/graph-rag/pyproject.toml | 27 +++ .../graph-rag/src/graph_rag}/__init__.py | 0 packages/langchain-graph-rag/README.md | 1 + packages/langchain-graph-rag/pyproject.toml | 60 ++++++ .../src/langchain_graph_rag}/__init__.py | 0 .../gliner_entity_extractor.py | 0 .../hierarchy_link_extractor.py | 0 .../html_hyperlink_extractor.py | 0 .../keybert_keyword_extractor.py | 0 .../metadata_denormalizer.py | 0 .../src/langchain_graph_rag}/py.typed | 0 .../langchain_graph_rag}/retrievers/edge.py | 0 .../retrievers/edge_helper.py | 0 .../retrievers/graph_traversal_retriever.py | 0 .../langchain_graph_rag}/retrievers/node.py | 0 .../retrievers/store_adapters/__init__.py | 0 .../retrievers/store_adapters/astra.py | 0 .../retrievers/store_adapters/base.py | 0 .../retrievers/store_adapters/cassandra.py | 0 .../retrievers/store_adapters/chroma.py | 0 .../retrievers/store_adapters/in_memory.py | 0 .../retrievers/store_adapters/open_search.py | 0 .../retrievers/strategy/__init__.py | 0 .../retrievers/strategy/base.py | 0 .../retrievers/strategy/eager.py | 0 .../retrievers/strategy/mmr.py | 3 +- .../retrievers/strategy/scored.py | 0 .../src/langchain_graph_rag}/utils/math.py | 0 .../langchain-graph-rag/tests/__init__.py | 0 .../langchain-graph-rag/tests/conftest.py | 0 .../tests}/embeddings/__init__.py | 0 .../tests}/embeddings/simple_embeddings.py | 0 .../tests}/integration_tests/assertions.py | 0 .../tests}/integration_tests/conftest.py | 1 - .../tests}/integration_tests/invoker.py | 0 .../retrievers/animal_docs.py | 3 +- .../integration_tests/retrievers/conftest.py | 0 .../retrievers/earth_docs.py | 3 +- .../retrievers/parser_docs.py | 1 - .../retrievers/test_graph_traversal_eager.py | 5 +- .../retrievers/test_graph_traversal_mmr.py | 7 +- .../tests}/integration_tests/stores.py | 20 +- .../unit_tests/retrievers/test_edge_helper.py | 5 +- .../test_generic_graph_traversal.py | 2 +- pyproject.toml | 55 +----- uv.lock | 178 +++++++++++------- 51 files changed, 254 insertions(+), 158 deletions(-) rename {tests/data => data}/animals.jsonl (100%) create mode 100644 packages/graph-rag/README.md create mode 100644 packages/graph-rag/pyproject.toml rename {tests => packages/graph-rag/src/graph_rag}/__init__.py (100%) create mode 100644 packages/langchain-graph-rag/README.md create mode 100644 packages/langchain-graph-rag/pyproject.toml rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/__init__.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/document_transformers/gliner_entity_extractor.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/document_transformers/hierarchy_link_extractor.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/document_transformers/html_hyperlink_extractor.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/document_transformers/keybert_keyword_extractor.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/document_transformers/metadata_denormalizer.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/py.typed (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/edge.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/edge_helper.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/graph_traversal_retriever.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/node.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/store_adapters/__init__.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/store_adapters/astra.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/store_adapters/base.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/store_adapters/cassandra.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/store_adapters/chroma.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/store_adapters/in_memory.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/store_adapters/open_search.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/strategy/__init__.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/strategy/base.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/strategy/eager.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/strategy/mmr.py (99%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/retrievers/strategy/scored.py (100%) rename {src/graph_pancake => packages/langchain-graph-rag/src/langchain_graph_rag}/utils/math.py (100%) rename tests/conftest.py => packages/langchain-graph-rag/tests/__init__.py (100%) create mode 100644 packages/langchain-graph-rag/tests/conftest.py rename {tests => packages/langchain-graph-rag/tests}/embeddings/__init__.py (100%) rename {tests => packages/langchain-graph-rag/tests}/embeddings/simple_embeddings.py (100%) rename {tests => packages/langchain-graph-rag/tests}/integration_tests/assertions.py (100%) rename {tests => packages/langchain-graph-rag/tests}/integration_tests/conftest.py (99%) rename {tests => packages/langchain-graph-rag/tests}/integration_tests/invoker.py (100%) rename {tests => packages/langchain-graph-rag/tests}/integration_tests/retrievers/animal_docs.py (94%) rename {tests => packages/langchain-graph-rag/tests}/integration_tests/retrievers/conftest.py (100%) rename {tests => packages/langchain-graph-rag/tests}/integration_tests/retrievers/earth_docs.py (93%) rename {tests => packages/langchain-graph-rag/tests}/integration_tests/retrievers/parser_docs.py (99%) rename {tests => packages/langchain-graph-rag/tests}/integration_tests/retrievers/test_graph_traversal_eager.py (97%) rename {tests => packages/langchain-graph-rag/tests}/integration_tests/retrievers/test_graph_traversal_mmr.py (96%) rename {tests => packages/langchain-graph-rag/tests}/integration_tests/stores.py (94%) rename {tests => packages/langchain-graph-rag/tests}/unit_tests/retrievers/test_edge_helper.py (97%) rename {tests => packages/langchain-graph-rag/tests}/unit_tests/retrievers/test_generic_graph_traversal.py (85%) diff --git a/.github/actions/setup-python-env/action.yml b/.github/actions/setup-python-env/action.yml index e6d284df..e7952577 100644 --- a/.github/actions/setup-python-env/action.yml +++ b/.github/actions/setup-python-env/action.yml @@ -17,5 +17,5 @@ runs: cache-suffix: ${{ matrix.python-version }} - name: Install Python dependencies - run: uv sync --frozen + run: uv sync --frozen --package langchain-graph-rag shell: bash \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 80bdf9b7..7aaad545 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -68,7 +68,9 @@ jobs: - name: Run `make test` run: - uv run python -m pytest -vs ./tests/unit_tests ./tests/integration_tests/ + uv run --package langchain-graph-rag python -m pytest -vs + ./packages/langchain-graph-rag/tests/unit_tests/ + ./packages/langchain-graph-rag/tests/integration_tests/ --stores=mem_norm --stores=mem --stores=cassandra --stores=chroma --stores=opensearch --junitxml=junit/test-results-${{ matrix.python-version }}.xml diff --git a/Makefile b/Makefile index 084e961a..40a34334 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ check-lock: .PHONY: deptry deptry: @echo "🚀 Checking for obsolete dependencies: Running deptry" - @uvx $(DEPTRY) src tests + @uvx $(DEPTRY) packages/langchain-graph-rag/src packages/langchain-graph-rag/tests .PHONY: docker-up docker-up: @@ -39,24 +39,42 @@ docker-up: docker-down: docker compose down --rmi local +.PHONY: sync-langchain-graph-rag +sync-langchain-graph-rag: + @uv sync --package langchain-graph-rag + +.PHONY: sync-graph-rag +sync-graph-rag: + @uv sync --package graph-rag + .PHONY: integration integration: - @echo "🚀 Testing code: Running pytest ./tests/inegration_tests (in memory only)" - @uv run pytest -vs ./tests/integration_tests/ + @echo "🚀 Testing code: Running pytest ./packages/langchain-graph-rag/tests/integration_tests (in memory only)" + @uv run --project langchain-graph-rag pytest -vs ./packages/langchain-graph-rag/tests/integration_tests/ .PHONY: unit unit: - @echo "🚀 Testing code: Running pytest ./tests/unit_tests" - @uv run pytest -vs ./tests/unit_tests/ + @echo "🚀 Testing code: Running pytest ./packages/langchain-graph-rag/tests/unit_tests/" + @uv run --project langchain-graph-rag pytest -vs ./packages/langchain-graph-rag/tests/unit_tests/ .PHONY: test -test: +test: sync-langchain-graph-rag @echo "🚀 Testing code: Running pytest" - @uv run python -m pytest -vs ./tests/unit_tests ./tests/integration_tests/ --stores=all + @uv run --project langchain-graph-rag python -m pytest -vs ./packages/langchain-graph-rag/tests/ --stores=all .PHONY: mypy mypy: @echo "🚀 Static type checking: Running mypy" - @uv run mypy . + @uv run --project langchain-graph-rag mypy ./packages/langchain-graph-rag lint: fmt fix mypy + +.PHONY: build-langchain-graph-rag +build-langchain-graph-rag: sync-langchain-graph-rag + @echo "🚀 Building langchain-graph-rag package" + @uv build --package langchain-graph-rag + +.PHONY: build-graph-rag +build-graph-rag: sync-graph-rag + @echo "🚀 Building graph-rag package" + @uv build --package graph-rag diff --git a/tests/data/animals.jsonl b/data/animals.jsonl similarity index 100% rename from tests/data/animals.jsonl rename to data/animals.jsonl diff --git a/packages/graph-rag/README.md b/packages/graph-rag/README.md new file mode 100644 index 00000000..8cee2dbb --- /dev/null +++ b/packages/graph-rag/README.md @@ -0,0 +1 @@ +# graph-rag diff --git a/packages/graph-rag/pyproject.toml b/packages/graph-rag/pyproject.toml new file mode 100644 index 00000000..aa3447ac --- /dev/null +++ b/packages/graph-rag/pyproject.toml @@ -0,0 +1,27 @@ +[project] +name = "graph-rag" +version = "0.0.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.10" +dependencies = [] + +[project.optional-dependencies] + + +[tool.pytest.ini_options] +asyncio_mode = "auto" +pythonpath = ["."] +testpaths = ["tests"] + + +[tool.uv.sources] + + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[dependency-groups] +dev = [] + diff --git a/tests/__init__.py b/packages/graph-rag/src/graph_rag/__init__.py similarity index 100% rename from tests/__init__.py rename to packages/graph-rag/src/graph_rag/__init__.py diff --git a/packages/langchain-graph-rag/README.md b/packages/langchain-graph-rag/README.md new file mode 100644 index 00000000..a8ad6084 --- /dev/null +++ b/packages/langchain-graph-rag/README.md @@ -0,0 +1 @@ +# langchain-graph-rag diff --git a/packages/langchain-graph-rag/pyproject.toml b/packages/langchain-graph-rag/pyproject.toml new file mode 100644 index 00000000..ec83e93e --- /dev/null +++ b/packages/langchain-graph-rag/pyproject.toml @@ -0,0 +1,60 @@ +[project] +name = "langchain-graph-rag" +version = "0.0.1" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.10" +dependencies = [ + "langchain-core>=0.3.29", + "numpy>=1.26.4", + "pydantic>=2.10.4", +] + +[project.optional-dependencies] +astra = [ + "langchain-astradb>=0.5.2", +] +beautifulsoup4 = [ + "beautifulsoup4>=4.12.3", +] +cassandra = [ + "cassio>=0.1.10", + "langchain-community>=0.3.14", +] +chroma = [ + "langchain-chroma>=0.2.0", + "chromadb>=0.5.23", +] +gliner = [ + "gliner==0.2.13", +] +keybert = [ + "keybert>=0.8.5", +] +opensearch = [ + "langchain-community>=0.3.14", + "opensearch-py>=2.8.0", +] +simsimd = [ + "simsimd>=6.2.1", +] + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[dependency-groups] +dev = [ + "cassio>=0.1.10", + "langchain-astradb>=0.5.2", + "langchain-chroma>=0.2.0", + "langchain-community>=0.3.14", + "langchain-opensearch>=0.0.2", + "mypy>=1.14.1", + "pytest>=8.3.4", + "pytest-cov>=4.0.0", + "pytest-asyncio>=0.25.2", + "simsimd>=6.2.1", + "testcontainers>=4.9.0", +] + diff --git a/src/graph_pancake/__init__.py b/packages/langchain-graph-rag/src/langchain_graph_rag/__init__.py similarity index 100% rename from src/graph_pancake/__init__.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/__init__.py diff --git a/src/graph_pancake/document_transformers/gliner_entity_extractor.py b/packages/langchain-graph-rag/src/langchain_graph_rag/document_transformers/gliner_entity_extractor.py similarity index 100% rename from src/graph_pancake/document_transformers/gliner_entity_extractor.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/document_transformers/gliner_entity_extractor.py diff --git a/src/graph_pancake/document_transformers/hierarchy_link_extractor.py b/packages/langchain-graph-rag/src/langchain_graph_rag/document_transformers/hierarchy_link_extractor.py similarity index 100% rename from src/graph_pancake/document_transformers/hierarchy_link_extractor.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/document_transformers/hierarchy_link_extractor.py diff --git a/src/graph_pancake/document_transformers/html_hyperlink_extractor.py b/packages/langchain-graph-rag/src/langchain_graph_rag/document_transformers/html_hyperlink_extractor.py similarity index 100% rename from src/graph_pancake/document_transformers/html_hyperlink_extractor.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/document_transformers/html_hyperlink_extractor.py diff --git a/src/graph_pancake/document_transformers/keybert_keyword_extractor.py b/packages/langchain-graph-rag/src/langchain_graph_rag/document_transformers/keybert_keyword_extractor.py similarity index 100% rename from src/graph_pancake/document_transformers/keybert_keyword_extractor.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/document_transformers/keybert_keyword_extractor.py diff --git a/src/graph_pancake/document_transformers/metadata_denormalizer.py b/packages/langchain-graph-rag/src/langchain_graph_rag/document_transformers/metadata_denormalizer.py similarity index 100% rename from src/graph_pancake/document_transformers/metadata_denormalizer.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/document_transformers/metadata_denormalizer.py diff --git a/src/graph_pancake/py.typed b/packages/langchain-graph-rag/src/langchain_graph_rag/py.typed similarity index 100% rename from src/graph_pancake/py.typed rename to packages/langchain-graph-rag/src/langchain_graph_rag/py.typed diff --git a/src/graph_pancake/retrievers/edge.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/edge.py similarity index 100% rename from src/graph_pancake/retrievers/edge.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/edge.py diff --git a/src/graph_pancake/retrievers/edge_helper.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/edge_helper.py similarity index 100% rename from src/graph_pancake/retrievers/edge_helper.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/edge_helper.py diff --git a/src/graph_pancake/retrievers/graph_traversal_retriever.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/graph_traversal_retriever.py similarity index 100% rename from src/graph_pancake/retrievers/graph_traversal_retriever.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/graph_traversal_retriever.py diff --git a/src/graph_pancake/retrievers/node.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/node.py similarity index 100% rename from src/graph_pancake/retrievers/node.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/node.py diff --git a/src/graph_pancake/retrievers/store_adapters/__init__.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/__init__.py similarity index 100% rename from src/graph_pancake/retrievers/store_adapters/__init__.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/__init__.py diff --git a/src/graph_pancake/retrievers/store_adapters/astra.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/astra.py similarity index 100% rename from src/graph_pancake/retrievers/store_adapters/astra.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/astra.py diff --git a/src/graph_pancake/retrievers/store_adapters/base.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/base.py similarity index 100% rename from src/graph_pancake/retrievers/store_adapters/base.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/base.py diff --git a/src/graph_pancake/retrievers/store_adapters/cassandra.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/cassandra.py similarity index 100% rename from src/graph_pancake/retrievers/store_adapters/cassandra.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/cassandra.py diff --git a/src/graph_pancake/retrievers/store_adapters/chroma.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/chroma.py similarity index 100% rename from src/graph_pancake/retrievers/store_adapters/chroma.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/chroma.py diff --git a/src/graph_pancake/retrievers/store_adapters/in_memory.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/in_memory.py similarity index 100% rename from src/graph_pancake/retrievers/store_adapters/in_memory.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/in_memory.py diff --git a/src/graph_pancake/retrievers/store_adapters/open_search.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/open_search.py similarity index 100% rename from src/graph_pancake/retrievers/store_adapters/open_search.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/store_adapters/open_search.py diff --git a/src/graph_pancake/retrievers/strategy/__init__.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/__init__.py similarity index 100% rename from src/graph_pancake/retrievers/strategy/__init__.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/__init__.py diff --git a/src/graph_pancake/retrievers/strategy/base.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/base.py similarity index 100% rename from src/graph_pancake/retrievers/strategy/base.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/base.py diff --git a/src/graph_pancake/retrievers/strategy/eager.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/eager.py similarity index 100% rename from src/graph_pancake/retrievers/strategy/eager.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/eager.py diff --git a/src/graph_pancake/retrievers/strategy/mmr.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/mmr.py similarity index 99% rename from src/graph_pancake/retrievers/strategy/mmr.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/mmr.py index f573fa92..7fa9381b 100644 --- a/src/graph_pancake/retrievers/strategy/mmr.py +++ b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/mmr.py @@ -3,11 +3,10 @@ from typing import Iterable import numpy as np +from langchain_graph_rag.utils.math import cosine_similarity from numpy.typing import NDArray from pydantic import Field -from graph_pancake.utils.math import cosine_similarity - from ..node import Node from .base import TraversalStrategy diff --git a/src/graph_pancake/retrievers/strategy/scored.py b/packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/scored.py similarity index 100% rename from src/graph_pancake/retrievers/strategy/scored.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/retrievers/strategy/scored.py diff --git a/src/graph_pancake/utils/math.py b/packages/langchain-graph-rag/src/langchain_graph_rag/utils/math.py similarity index 100% rename from src/graph_pancake/utils/math.py rename to packages/langchain-graph-rag/src/langchain_graph_rag/utils/math.py diff --git a/tests/conftest.py b/packages/langchain-graph-rag/tests/__init__.py similarity index 100% rename from tests/conftest.py rename to packages/langchain-graph-rag/tests/__init__.py diff --git a/packages/langchain-graph-rag/tests/conftest.py b/packages/langchain-graph-rag/tests/conftest.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/embeddings/__init__.py b/packages/langchain-graph-rag/tests/embeddings/__init__.py similarity index 100% rename from tests/embeddings/__init__.py rename to packages/langchain-graph-rag/tests/embeddings/__init__.py diff --git a/tests/embeddings/simple_embeddings.py b/packages/langchain-graph-rag/tests/embeddings/simple_embeddings.py similarity index 100% rename from tests/embeddings/simple_embeddings.py rename to packages/langchain-graph-rag/tests/embeddings/simple_embeddings.py diff --git a/tests/integration_tests/assertions.py b/packages/langchain-graph-rag/tests/integration_tests/assertions.py similarity index 100% rename from tests/integration_tests/assertions.py rename to packages/langchain-graph-rag/tests/integration_tests/assertions.py diff --git a/tests/integration_tests/conftest.py b/packages/langchain-graph-rag/tests/integration_tests/conftest.py similarity index 99% rename from tests/integration_tests/conftest.py rename to packages/langchain-graph-rag/tests/integration_tests/conftest.py index e52d6de0..d850cf2f 100644 --- a/tests/integration_tests/conftest.py +++ b/packages/langchain-graph-rag/tests/integration_tests/conftest.py @@ -2,7 +2,6 @@ import pytest from pytest import Parser - from tests.integration_tests.stores import ALL_STORES, TESTCONTAINER_STORES diff --git a/tests/integration_tests/invoker.py b/packages/langchain-graph-rag/tests/integration_tests/invoker.py similarity index 100% rename from tests/integration_tests/invoker.py rename to packages/langchain-graph-rag/tests/integration_tests/invoker.py diff --git a/tests/integration_tests/retrievers/animal_docs.py b/packages/langchain-graph-rag/tests/integration_tests/retrievers/animal_docs.py similarity index 94% rename from tests/integration_tests/retrievers/animal_docs.py rename to packages/langchain-graph-rag/tests/integration_tests/retrievers/animal_docs.py index 2a796770..0c3c7052 100644 --- a/tests/integration_tests/retrievers/animal_docs.py +++ b/packages/langchain-graph-rag/tests/integration_tests/retrievers/animal_docs.py @@ -2,7 +2,6 @@ import pytest from langchain_core.documents import Document - from tests.embeddings import AnimalEmbeddings from tests.integration_tests.stores import StoreAdapter, StoreFactory @@ -10,7 +9,7 @@ @pytest.fixture(scope="session") def animal_docs() -> list[Document]: documents = [] - with open("tests/data/animals.jsonl", "r") as file: + with open("data/animals.jsonl", "r") as file: for line in file: data = json.loads(line.strip()) documents.append( diff --git a/tests/integration_tests/retrievers/conftest.py b/packages/langchain-graph-rag/tests/integration_tests/retrievers/conftest.py similarity index 100% rename from tests/integration_tests/retrievers/conftest.py rename to packages/langchain-graph-rag/tests/integration_tests/retrievers/conftest.py diff --git a/tests/integration_tests/retrievers/earth_docs.py b/packages/langchain-graph-rag/tests/integration_tests/retrievers/earth_docs.py similarity index 93% rename from tests/integration_tests/retrievers/earth_docs.py rename to packages/langchain-graph-rag/tests/integration_tests/retrievers/earth_docs.py index fa153ce0..de8151ae 100644 --- a/tests/integration_tests/retrievers/earth_docs.py +++ b/packages/langchain-graph-rag/tests/integration_tests/retrievers/earth_docs.py @@ -1,7 +1,6 @@ import pytest from langchain_core.documents import Document - -from graph_pancake.retrievers.store_adapters import StoreAdapter +from langchain_graph_rag.retrievers.store_adapters import StoreAdapter from tests.embeddings.simple_embeddings import EarthEmbeddings from tests.integration_tests.stores import StoreFactory diff --git a/tests/integration_tests/retrievers/parser_docs.py b/packages/langchain-graph-rag/tests/integration_tests/retrievers/parser_docs.py similarity index 99% rename from tests/integration_tests/retrievers/parser_docs.py rename to packages/langchain-graph-rag/tests/integration_tests/retrievers/parser_docs.py index a5d92748..148a5e04 100644 --- a/tests/integration_tests/retrievers/parser_docs.py +++ b/packages/langchain-graph-rag/tests/integration_tests/retrievers/parser_docs.py @@ -1,6 +1,5 @@ import pytest from langchain_core.documents import Document - from tests.embeddings.simple_embeddings import ParserEmbeddings from tests.integration_tests.stores import StoreAdapter, StoreFactory diff --git a/tests/integration_tests/retrievers/test_graph_traversal_eager.py b/packages/langchain-graph-rag/tests/integration_tests/retrievers/test_graph_traversal_eager.py similarity index 97% rename from tests/integration_tests/retrievers/test_graph_traversal_eager.py rename to packages/langchain-graph-rag/tests/integration_tests/retrievers/test_graph_traversal_eager.py index 374f1013..a416abf8 100644 --- a/tests/integration_tests/retrievers/test_graph_traversal_eager.py +++ b/packages/langchain-graph-rag/tests/integration_tests/retrievers/test_graph_traversal_eager.py @@ -1,9 +1,8 @@ from langchain_core.documents import Document - -from graph_pancake.retrievers.graph_traversal_retriever import ( +from langchain_graph_rag.retrievers.graph_traversal_retriever import ( GraphTraversalRetriever, ) -from graph_pancake.retrievers.strategy.eager import ( +from langchain_graph_rag.retrievers.strategy.eager import ( Eager, ) from tests.integration_tests.assertions import assert_document_format, sorted_doc_ids diff --git a/tests/integration_tests/retrievers/test_graph_traversal_mmr.py b/packages/langchain-graph-rag/tests/integration_tests/retrievers/test_graph_traversal_mmr.py similarity index 96% rename from tests/integration_tests/retrievers/test_graph_traversal_mmr.py rename to packages/langchain-graph-rag/tests/integration_tests/retrievers/test_graph_traversal_mmr.py index 46e6e3c0..438e99b2 100644 --- a/tests/integration_tests/retrievers/test_graph_traversal_mmr.py +++ b/packages/langchain-graph-rag/tests/integration_tests/retrievers/test_graph_traversal_mmr.py @@ -1,13 +1,12 @@ from langchain_core.documents import Document from langchain_core.vectorstores import InMemoryVectorStore - -from graph_pancake.retrievers.graph_traversal_retriever import ( +from langchain_graph_rag.retrievers.graph_traversal_retriever import ( GraphTraversalRetriever, ) -from graph_pancake.retrievers.store_adapters.in_memory import ( +from langchain_graph_rag.retrievers.store_adapters.in_memory import ( InMemoryStoreAdapter, ) -from graph_pancake.retrievers.strategy.mmr import ( +from langchain_graph_rag.retrievers.strategy.mmr import ( Mmr, ) from tests.embeddings.simple_embeddings import Angular2DEmbeddings diff --git a/tests/integration_tests/stores.py b/packages/langchain-graph-rag/tests/integration_tests/stores.py similarity index 94% rename from tests/integration_tests/stores.py rename to packages/langchain-graph-rag/tests/integration_tests/stores.py index 57b4d369..910481f4 100644 --- a/tests/integration_tests/stores.py +++ b/packages/langchain-graph-rag/tests/integration_tests/stores.py @@ -5,11 +5,10 @@ from langchain_core.documents import Document from langchain_core.embeddings import Embeddings from langchain_core.vectorstores import VectorStore - -from graph_pancake.document_transformers.metadata_denormalizer import ( +from langchain_graph_rag.document_transformers.metadata_denormalizer import ( MetadataDenormalizer, ) -from graph_pancake.retrievers.store_adapters import StoreAdapter +from langchain_graph_rag.retrievers.store_adapters import StoreAdapter ALL_STORES = ["mem_norm", "mem", "astra", "cassandra", "chroma", "opensearch"] TESTCONTAINER_STORES = ["cassandra", "opensearch"] @@ -86,8 +85,7 @@ def _cassandra_store_factory(request: pytest.FixtureRequest): from cassandra.cluster import Cluster # type: ignore from langchain_community.vectorstores.cassandra import Cassandra - - from graph_pancake.retrievers.store_adapters.cassandra import ( + from langchain_graph_rag.retrievers.store_adapters.cassandra import ( CassandraStoreAdapter, ) @@ -150,8 +148,7 @@ def teardown_cassandra(cassandra: Cassandra): def _opensearch_store_factory(request: pytest.FixtureRequest): from langchain_community.vectorstores import OpenSearchVectorSearch - - from graph_pancake.retrievers.store_adapters.open_search import ( + from langchain_graph_rag.retrievers.store_adapters.open_search import ( OpenSearchStoreAdapter, ) @@ -204,8 +201,7 @@ def _astra_store_factory(_request: pytest.FixtureRequest) -> StoreFactory: from astrapy.authentication import StaticTokenProvider from dotenv import load_dotenv from langchain_astradb import AstraDBVectorStore - - from graph_pancake.retrievers.store_adapters.astra import ( + from langchain_graph_rag.retrievers.store_adapters.astra import ( AstraStoreAdapter, ) @@ -252,8 +248,7 @@ def _in_memory_store_factory( _request: pytest.FixtureRequest, support_normalized_metadata: bool ) -> StoreFactory: from langchain_core.vectorstores import InMemoryVectorStore - - from graph_pancake.retrievers.store_adapters.in_memory import ( + from langchain_graph_rag.retrievers.store_adapters.in_memory import ( InMemoryStoreAdapter, ) @@ -274,8 +269,7 @@ def create_in_memory( def _chroma_store_factory(_request: pytest.FixtureRequest) -> StoreFactory: from langchain_chroma.vectorstores import Chroma - - from graph_pancake.retrievers.store_adapters.chroma import ( + from langchain_graph_rag.retrievers.store_adapters.chroma import ( ChromaStoreAdapter, ) diff --git a/tests/unit_tests/retrievers/test_edge_helper.py b/packages/langchain-graph-rag/tests/unit_tests/retrievers/test_edge_helper.py similarity index 97% rename from tests/unit_tests/retrievers/test_edge_helper.py rename to packages/langchain-graph-rag/tests/unit_tests/retrievers/test_edge_helper.py index 55f74f14..99d1e91f 100644 --- a/tests/unit_tests/retrievers/test_edge_helper.py +++ b/packages/langchain-graph-rag/tests/unit_tests/retrievers/test_edge_helper.py @@ -1,7 +1,6 @@ import pytest - -from graph_pancake.retrievers.edge import Edge -from graph_pancake.retrievers.edge_helper import EdgeHelper +from langchain_graph_rag.retrievers.edge import Edge +from langchain_graph_rag.retrievers.edge_helper import EdgeHelper def test_edge_helper_initialization(): diff --git a/tests/unit_tests/retrievers/test_generic_graph_traversal.py b/packages/langchain-graph-rag/tests/unit_tests/retrievers/test_generic_graph_traversal.py similarity index 85% rename from tests/unit_tests/retrievers/test_generic_graph_traversal.py rename to packages/langchain-graph-rag/tests/unit_tests/retrievers/test_generic_graph_traversal.py index 462e9cc9..4831490e 100644 --- a/tests/unit_tests/retrievers/test_generic_graph_traversal.py +++ b/packages/langchain-graph-rag/tests/unit_tests/retrievers/test_generic_graph_traversal.py @@ -1,4 +1,4 @@ -from graph_pancake.retrievers.strategy.mmr import Mmr +from langchain_graph_rag.retrievers.strategy.mmr import Mmr def test_mmr_parameters() -> None: diff --git a/pyproject.toml b/pyproject.toml index 036412cc..1cd59cc6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,41 +4,7 @@ version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.10" -dependencies = [ - "langchain-core>=0.3.29", - "numpy>=1.26.4", - "pydantic>=2.10.4", -] - -[project.optional-dependencies] -astra = [ - "langchain-astradb>=0.5.2", -] -beautifulsoup4 = [ - "beautifulsoup4>=4.12.3", -] -cassandra = [ - "cassio>=0.1.10", - "langchain-community>=0.3.14", -] -chroma = [ - "langchain-chroma>=0.2.0", - "chromadb>=0.5.23", -] -gliner = [ - "gliner==0.2.13", -] -keybert = [ - "keybert>=0.8.5", -] -opensearch = [ - "langchain-community>=0.3.14", - "opensearch-py>=2.8.0", -] -simsimd = [ - "simsimd>=6.2.1", -] - +dependencies = [] [tool.deptry.package_module_name_map] beautifulsoup4 = "bs4" @@ -58,25 +24,15 @@ select = ["E", "F", "I", "T201"] docstring-code-format = true [tool.uv.sources] -langchain-chroma = { git = "https://github.com/langchain-ai/langchain.git", subdirectory = "libs/partners/chroma" } -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" +[tool.uv.workspace] +members = ["packages/*"] [dependency-groups] dev = [ - "cassio>=0.1.10", - "langchain-astradb>=0.5.2", - "langchain-chroma>=0.2.0", - "langchain-community>=0.3.14", - "langchain-opensearch>=0.0.2", - "mypy>=1.14.1", "pytest>=8.3.4", "pytest-cov>=4.0.0", "pytest-asyncio>=0.25.2", - "simsimd>=6.2.1", - "testcontainers>=4.9.0", ] [tool.coverage.report] @@ -84,4 +40,7 @@ skip_empty = true [tool.coverage.run] branch = true -source = ["src/graph_pancake"] +source = [ + "packages/graph-rag/src/graph_rag", + "packages/langchain-graph-rag/src/langchain_graph_rag", + ] diff --git a/uv.lock b/uv.lock index af93c427..21d5b4ef 100644 --- a/uv.lock +++ b/uv.lock @@ -6,6 +6,13 @@ resolution-markers = [ "python_full_version < '3.12'", ] +[manifest] +members = [ + "graph-pancake", + "graph-rag", + "langchain-graph-rag", +] + [[package]] name = "aiohappyeyeballs" version = "2.4.4" @@ -782,90 +789,34 @@ wheels = [ [[package]] name = "graph-pancake" version = "0.1.0" -source = { editable = "." } -dependencies = [ - { name = "langchain-core" }, - { name = "numpy" }, - { name = "pydantic" }, -] - -[package.optional-dependencies] -astra = [ - { name = "langchain-astradb" }, -] -beautifulsoup4 = [ - { name = "beautifulsoup4" }, -] -cassandra = [ - { name = "cassio" }, - { name = "langchain-community" }, -] -chroma = [ - { name = "chromadb" }, - { name = "langchain-chroma" }, -] -gliner = [ - { name = "gliner" }, -] -keybert = [ - { name = "keybert" }, -] -opensearch = [ - { name = "langchain-community" }, - { name = "opensearch-py" }, -] -simsimd = [ - { name = "simsimd" }, -] +source = { virtual = "." } [package.dev-dependencies] dev = [ - { name = "cassio" }, - { name = "langchain-astradb" }, - { name = "langchain-chroma" }, - { name = "langchain-community" }, - { name = "langchain-opensearch" }, - { name = "mypy" }, { name = "pytest" }, { name = "pytest-asyncio" }, { name = "pytest-cov" }, - { name = "simsimd" }, - { name = "testcontainers" }, ] [package.metadata] -requires-dist = [ - { name = "beautifulsoup4", marker = "extra == 'beautifulsoup4'", specifier = ">=4.12.3" }, - { name = "cassio", marker = "extra == 'cassandra'", specifier = ">=0.1.10" }, - { name = "chromadb", marker = "extra == 'chroma'", specifier = ">=0.5.23" }, - { name = "gliner", marker = "extra == 'gliner'", specifier = "==0.2.13" }, - { name = "keybert", marker = "extra == 'keybert'", specifier = ">=0.8.5" }, - { name = "langchain-astradb", marker = "extra == 'astra'", specifier = ">=0.5.2" }, - { name = "langchain-chroma", marker = "extra == 'chroma'", git = "https://github.com/langchain-ai/langchain.git?subdirectory=libs%2Fpartners%2Fchroma" }, - { name = "langchain-community", marker = "extra == 'cassandra'", specifier = ">=0.3.14" }, - { name = "langchain-community", marker = "extra == 'opensearch'", specifier = ">=0.3.14" }, - { name = "langchain-core", specifier = ">=0.3.29" }, - { name = "numpy", specifier = ">=1.26.4" }, - { name = "opensearch-py", marker = "extra == 'opensearch'", specifier = ">=2.8.0" }, - { name = "pydantic", specifier = ">=2.10.4" }, - { name = "simsimd", marker = "extra == 'simsimd'", specifier = ">=6.2.1" }, -] [package.metadata.requires-dev] dev = [ - { name = "cassio", specifier = ">=0.1.10" }, - { name = "langchain-astradb", specifier = ">=0.5.2" }, - { name = "langchain-chroma", git = "https://github.com/langchain-ai/langchain.git?subdirectory=libs%2Fpartners%2Fchroma" }, - { name = "langchain-community", specifier = ">=0.3.14" }, - { name = "langchain-opensearch", specifier = ">=0.0.2" }, - { name = "mypy", specifier = ">=1.14.1" }, { name = "pytest", specifier = ">=8.3.4" }, { name = "pytest-asyncio", specifier = ">=0.25.2" }, { name = "pytest-cov", specifier = ">=4.0.0" }, - { name = "simsimd", specifier = ">=6.2.1" }, - { name = "testcontainers", specifier = ">=4.9.0" }, ] +[[package]] +name = "graph-rag" +version = "0.0.0" +source = { editable = "packages/graph-rag" } + +[package.metadata] + +[package.metadata.requires-dev] +dev = [] + [[package]] name = "greenlet" version = "3.1.1" @@ -1266,13 +1217,17 @@ wheels = [ [[package]] name = "langchain-chroma" version = "0.2.0" -source = { git = "https://github.com/langchain-ai/langchain.git?subdirectory=libs%2Fpartners%2Fchroma#2b09f798e1de1717c6389e5d9f5c34c7c3248be6" } +source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "chromadb" }, { name = "fastapi" }, { name = "langchain-core" }, { name = "numpy" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/96/eb/ec2ad3a7a5cfc02cd114cf37cde79ee781e818f909233d162f03df20eaa9/langchain_chroma-0.2.0.tar.gz", hash = "sha256:611dd5d844388cca0acd99dab230ac8512d79ac8d86ff80a6f82607f497d5930", size = 11022 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/97/ba7da2b62d3a8dc81099f1d3024fd75992bc73fb99b69a890bed823e2db4/langchain_chroma-0.2.0-py3-none-any.whl", hash = "sha256:2c405e8fe79267d2298342e7c80b4804ceae6b81d80b24b83ae5fbdf86676072", size = 11163 }, +] [[package]] name = "langchain-community" @@ -1315,6 +1270,93 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/95/4f/fe1de63f6fc1ac7af3ba4ae12d420af1a19f7893b5fcb72856b9fc67f650/langchain_core-0.3.29-py3-none-any.whl", hash = "sha256:817db1474871611a81105594a3e4d11704949661008e455a10e38ca9ff601a1a", size = 411593 }, ] +[[package]] +name = "langchain-graph-rag" +version = "0.0.1" +source = { editable = "packages/langchain-graph-rag" } +dependencies = [ + { name = "langchain-core" }, + { name = "numpy" }, + { name = "pydantic" }, +] + +[package.optional-dependencies] +astra = [ + { name = "langchain-astradb" }, +] +beautifulsoup4 = [ + { name = "beautifulsoup4" }, +] +cassandra = [ + { name = "cassio" }, + { name = "langchain-community" }, +] +chroma = [ + { name = "chromadb" }, + { name = "langchain-chroma" }, +] +gliner = [ + { name = "gliner" }, +] +keybert = [ + { name = "keybert" }, +] +opensearch = [ + { name = "langchain-community" }, + { name = "opensearch-py" }, +] +simsimd = [ + { name = "simsimd" }, +] + +[package.dev-dependencies] +dev = [ + { name = "cassio" }, + { name = "langchain-astradb" }, + { name = "langchain-chroma" }, + { name = "langchain-community" }, + { name = "langchain-opensearch" }, + { name = "mypy" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "pytest-cov" }, + { name = "simsimd" }, + { name = "testcontainers" }, +] + +[package.metadata] +requires-dist = [ + { name = "beautifulsoup4", marker = "extra == 'beautifulsoup4'", specifier = ">=4.12.3" }, + { name = "cassio", marker = "extra == 'cassandra'", specifier = ">=0.1.10" }, + { name = "chromadb", marker = "extra == 'chroma'", specifier = ">=0.5.23" }, + { name = "gliner", marker = "extra == 'gliner'", specifier = "==0.2.13" }, + { name = "keybert", marker = "extra == 'keybert'", specifier = ">=0.8.5" }, + { name = "langchain-astradb", marker = "extra == 'astra'", specifier = ">=0.5.2" }, + { name = "langchain-chroma", marker = "extra == 'chroma'", specifier = ">=0.2.0" }, + { name = "langchain-community", marker = "extra == 'cassandra'", specifier = ">=0.3.14" }, + { name = "langchain-community", marker = "extra == 'opensearch'", specifier = ">=0.3.14" }, + { name = "langchain-core", specifier = ">=0.3.29" }, + { name = "numpy", specifier = ">=1.26.4" }, + { name = "opensearch-py", marker = "extra == 'opensearch'", specifier = ">=2.8.0" }, + { name = "pydantic", specifier = ">=2.10.4" }, + { name = "simsimd", marker = "extra == 'simsimd'", specifier = ">=6.2.1" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "cassio", specifier = ">=0.1.10" }, + { name = "langchain-astradb", specifier = ">=0.5.2" }, + { name = "langchain-chroma", specifier = ">=0.2.0" }, + { name = "langchain-community", specifier = ">=0.3.14" }, + { name = "langchain-opensearch", specifier = ">=0.0.2" }, + { name = "mypy", specifier = ">=1.14.1" }, + { name = "pytest", specifier = ">=8.3.4" }, + { name = "pytest-asyncio", specifier = ">=0.25.2" }, + { name = "pytest-cov", specifier = ">=4.0.0" }, + { name = "simsimd", specifier = ">=6.2.1" }, + { name = "testcontainers", specifier = ">=4.9.0" }, +] + [[package]] name = "langchain-opensearch" version = "0.0.2"