langchain-gestaltdb 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- langchain_gestaltdb-0.1.0/.github/workflows/ci.yml +158 -0
- langchain_gestaltdb-0.1.0/.github/workflows/publish.yml +121 -0
- langchain_gestaltdb-0.1.0/.gitignore +220 -0
- langchain_gestaltdb-0.1.0/CHANGELOG.md +28 -0
- langchain_gestaltdb-0.1.0/LICENSE +201 -0
- langchain_gestaltdb-0.1.0/PKG-INFO +328 -0
- langchain_gestaltdb-0.1.0/README.md +308 -0
- langchain_gestaltdb-0.1.0/docs/API.md +211 -0
- langchain_gestaltdb-0.1.0/docs/RELEASING.md +98 -0
- langchain_gestaltdb-0.1.0/examples/claim_agent.py +98 -0
- langchain_gestaltdb-0.1.0/examples/claim_writes.py +99 -0
- langchain_gestaltdb-0.1.0/examples/graph_agent.py +69 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/__init__.py +38 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/_ingestion.py +128 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/_read_only.py +81 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/_schema.py +114 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/_serialization.py +79 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/_tool_output.py +39 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/claim_writes.py +281 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/claims.py +423 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/graph.py +156 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/graph_document.py +57 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/py.typed +0 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/retrievers.py +257 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/toolkits.py +91 -0
- langchain_gestaltdb-0.1.0/langchain_gestaltdb/tools.py +119 -0
- langchain_gestaltdb-0.1.0/pyproject.toml +75 -0
- langchain_gestaltdb-0.1.0/scripts/release.py +169 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_backend_contract.py +159 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_claim_tools.py +578 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_claim_writes.py +482 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_gestaltdb_smoke.py +39 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_graph.py +51 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_ingestion.py +108 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_read_only.py +102 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_readiness.py +72 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_retrievers.py +417 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_schema.py +78 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_standard_tools.py +157 -0
- langchain_gestaltdb-0.1.0/tests/integration_tests/test_tools.py +86 -0
- langchain_gestaltdb-0.1.0/tests/unit_tests/test_package.py +15 -0
- langchain_gestaltdb-0.1.0/tests/unit_tests/test_release.py +223 -0
- langchain_gestaltdb-0.1.0/tests/unit_tests/test_serialization.py +89 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main]
|
|
6
|
+
push:
|
|
7
|
+
branches: [main]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
15
|
+
cancel-in-progress: true
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
quality:
|
|
19
|
+
name: Quality
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
timeout-minutes: 10
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
- uses: astral-sh/setup-uv@v6
|
|
25
|
+
with:
|
|
26
|
+
version: "0.12.21"
|
|
27
|
+
enable-cache: true
|
|
28
|
+
- run: uv sync --python 3.12 --locked --group dev --extra lmdb
|
|
29
|
+
- run: uv run --locked ruff check .
|
|
30
|
+
- run: uv run --locked ruff format --check .
|
|
31
|
+
- run: uv run --locked mypy
|
|
32
|
+
|
|
33
|
+
tests:
|
|
34
|
+
name: Tests (Python ${{ matrix.python }})
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
timeout-minutes: 15
|
|
37
|
+
strategy:
|
|
38
|
+
fail-fast: false
|
|
39
|
+
matrix:
|
|
40
|
+
python: ["3.10", "3.11", "3.12", "3.13"]
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
- uses: astral-sh/setup-uv@v6
|
|
44
|
+
with:
|
|
45
|
+
version: "0.12.21"
|
|
46
|
+
enable-cache: true
|
|
47
|
+
- run: uv sync --python '${{ matrix.python }}' --locked --group dev --extra lmdb
|
|
48
|
+
- run: uv run --locked pytest --cov=langchain_gestaltdb --cov-report=term-missing --cov-fail-under=90
|
|
49
|
+
|
|
50
|
+
latest-dependencies:
|
|
51
|
+
name: Latest dependencies
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
timeout-minutes: 15
|
|
54
|
+
steps:
|
|
55
|
+
- uses: actions/checkout@v4
|
|
56
|
+
- uses: astral-sh/setup-uv@v6
|
|
57
|
+
with:
|
|
58
|
+
version: "0.12.21"
|
|
59
|
+
enable-cache: true
|
|
60
|
+
- run: uv sync --python 3.12 --group dev --extra lmdb --upgrade
|
|
61
|
+
- run: uv run --frozen pytest
|
|
62
|
+
|
|
63
|
+
additional-backends:
|
|
64
|
+
name: Backend (${{ matrix.backend }})
|
|
65
|
+
runs-on: ubuntu-latest
|
|
66
|
+
timeout-minutes: 20
|
|
67
|
+
strategy:
|
|
68
|
+
fail-fast: false
|
|
69
|
+
matrix:
|
|
70
|
+
include:
|
|
71
|
+
- backend: leveldb
|
|
72
|
+
extra: leveldb
|
|
73
|
+
- backend: pyrex
|
|
74
|
+
extra: rocksdb
|
|
75
|
+
env:
|
|
76
|
+
GESTALTDB_TEST_BACKEND: ${{ matrix.backend }}
|
|
77
|
+
steps:
|
|
78
|
+
- uses: actions/checkout@v4
|
|
79
|
+
- name: Install LevelDB native library
|
|
80
|
+
if: matrix.backend == 'leveldb'
|
|
81
|
+
run: |
|
|
82
|
+
sudo apt-get update
|
|
83
|
+
sudo apt-get install --yes libleveldb-dev
|
|
84
|
+
- uses: astral-sh/setup-uv@v6
|
|
85
|
+
with:
|
|
86
|
+
version: "0.12.21"
|
|
87
|
+
enable-cache: true
|
|
88
|
+
- run: uv sync --python 3.12 --locked --group dev --extra lmdb --extra '${{ matrix.extra }}'
|
|
89
|
+
- run: uv run --locked pytest tests/integration_tests/test_backend_contract.py
|
|
90
|
+
|
|
91
|
+
minimum-dependencies:
|
|
92
|
+
name: Minimum direct dependencies
|
|
93
|
+
runs-on: ubuntu-latest
|
|
94
|
+
timeout-minutes: 15
|
|
95
|
+
steps:
|
|
96
|
+
- uses: actions/checkout@v4
|
|
97
|
+
- uses: astral-sh/setup-uv@v6
|
|
98
|
+
with:
|
|
99
|
+
version: "0.12.21"
|
|
100
|
+
enable-cache: true
|
|
101
|
+
# Deliberately re-resolve in the disposable runner, not against uv.lock.
|
|
102
|
+
- run: uv sync --python 3.10 --group dev --extra lmdb --resolution lowest-direct
|
|
103
|
+
- run: uv run --frozen pytest
|
|
104
|
+
|
|
105
|
+
distribution:
|
|
106
|
+
name: Installed wheel
|
|
107
|
+
runs-on: ubuntu-latest
|
|
108
|
+
timeout-minutes: 15
|
|
109
|
+
steps:
|
|
110
|
+
- uses: actions/checkout@v4
|
|
111
|
+
- uses: astral-sh/setup-uv@v6
|
|
112
|
+
with:
|
|
113
|
+
version: "0.12.21"
|
|
114
|
+
enable-cache: true
|
|
115
|
+
- run: uv sync --python 3.12 --locked --group dev --extra lmdb
|
|
116
|
+
- run: uv build --no-sources
|
|
117
|
+
- run: uv run --locked twine check dist/*
|
|
118
|
+
- name: Validate release artifact contents
|
|
119
|
+
run: |
|
|
120
|
+
version=$(uv run --locked python -c 'from importlib.metadata import version; print(version("langchain-gestaltdb"))')
|
|
121
|
+
uv run --locked python scripts/release.py verify-artifacts "$version"
|
|
122
|
+
- name: Test installed wheel outside the checkout
|
|
123
|
+
shell: bash
|
|
124
|
+
run: |
|
|
125
|
+
uv venv --python 3.12 "$RUNNER_TEMP/wheel-env"
|
|
126
|
+
wheel=$(find "$GITHUB_WORKSPACE/dist" -maxdepth 1 -name '*.whl' -print -quit)
|
|
127
|
+
uv pip install --python "$RUNNER_TEMP/wheel-env/bin/python" "${wheel}[lmdb]" 'pytest>=8,<10' 'langchain-tests==1.0.0'
|
|
128
|
+
cd "$RUNNER_TEMP"
|
|
129
|
+
"$RUNNER_TEMP/wheel-env/bin/python" -c 'import langchain_gestaltdb; assert "site-packages" in langchain_gestaltdb.__file__'
|
|
130
|
+
"$RUNNER_TEMP/wheel-env/bin/python" -m pytest "$GITHUB_WORKSPACE/tests" -c "$GITHUB_WORKSPACE/pyproject.toml"
|
|
131
|
+
- name: Retain the tested main distributions for explicitly approved releases
|
|
132
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
133
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
134
|
+
with:
|
|
135
|
+
name: distributions-${{ github.sha }}-${{ github.run_attempt }}
|
|
136
|
+
path: dist/*
|
|
137
|
+
if-no-files-found: error
|
|
138
|
+
retention-days: 30
|
|
139
|
+
|
|
140
|
+
gate:
|
|
141
|
+
name: CI gate
|
|
142
|
+
if: always()
|
|
143
|
+
needs: [quality, tests, minimum-dependencies, latest-dependencies, additional-backends, distribution]
|
|
144
|
+
runs-on: ubuntu-latest
|
|
145
|
+
timeout-minutes: 5
|
|
146
|
+
steps:
|
|
147
|
+
- name: Require every job to succeed
|
|
148
|
+
env:
|
|
149
|
+
RESULTS: ${{ toJSON(needs) }}
|
|
150
|
+
run: |
|
|
151
|
+
python3 - <<'PY'
|
|
152
|
+
import json
|
|
153
|
+
import os
|
|
154
|
+
results = json.loads(os.environ["RESULTS"])
|
|
155
|
+
failed = [name for name, job in results.items() if job["result"] != "success"]
|
|
156
|
+
if failed:
|
|
157
|
+
raise SystemExit(f"Required CI jobs did not succeed: {failed}")
|
|
158
|
+
PY
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
run-name: Publish ${{ inputs.version }} by @${{ github.actor }}
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
workflow_dispatch:
|
|
6
|
+
inputs:
|
|
7
|
+
version:
|
|
8
|
+
description: "Reviewed stable version (X.Y.Z); must match main's pyproject.toml"
|
|
9
|
+
required: true
|
|
10
|
+
type: string
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
concurrency:
|
|
16
|
+
group: pypi-publish
|
|
17
|
+
cancel-in-progress: false
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
prepare:
|
|
21
|
+
name: Verify release candidate
|
|
22
|
+
if: github.repository == 'mylonasc/langchain-gestaltdb' && github.ref == 'refs/heads/main'
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
timeout-minutes: 10
|
|
25
|
+
permissions:
|
|
26
|
+
contents: read
|
|
27
|
+
actions: read
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
30
|
+
with:
|
|
31
|
+
persist-credentials: false
|
|
32
|
+
- name: Require reviewed version and green exact-main CI
|
|
33
|
+
id: candidate
|
|
34
|
+
env:
|
|
35
|
+
GH_TOKEN: ${{ github.token }}
|
|
36
|
+
VERSION: ${{ inputs.version }}
|
|
37
|
+
run: python3 scripts/release.py preflight "$VERSION"
|
|
38
|
+
- name: Download the distributions tested by that CI run
|
|
39
|
+
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
40
|
+
with:
|
|
41
|
+
name: ${{ steps.candidate.outputs.artifact-name }}
|
|
42
|
+
run-id: ${{ steps.candidate.outputs.ci-run-id }}
|
|
43
|
+
github-token: ${{ github.token }}
|
|
44
|
+
path: dist
|
|
45
|
+
- name: Verify metadata, packaged files and hashes
|
|
46
|
+
env:
|
|
47
|
+
VERSION: ${{ inputs.version }}
|
|
48
|
+
run: python3 scripts/release.py verify-artifacts "$VERSION" | tee -a "$GITHUB_STEP_SUMMARY"
|
|
49
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
50
|
+
with:
|
|
51
|
+
name: validated-distributions
|
|
52
|
+
path: dist/*
|
|
53
|
+
if-no-files-found: error
|
|
54
|
+
retention-days: 30
|
|
55
|
+
|
|
56
|
+
publish:
|
|
57
|
+
name: Publish to PyPI
|
|
58
|
+
needs: prepare
|
|
59
|
+
runs-on: ubuntu-latest
|
|
60
|
+
timeout-minutes: 10
|
|
61
|
+
environment:
|
|
62
|
+
name: pypi
|
|
63
|
+
url: https://pypi.org/p/langchain-gestaltdb
|
|
64
|
+
permissions:
|
|
65
|
+
id-token: write
|
|
66
|
+
steps:
|
|
67
|
+
# No checkout, dependency installation or build code in this privileged job.
|
|
68
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
69
|
+
with:
|
|
70
|
+
name: validated-distributions
|
|
71
|
+
path: dist
|
|
72
|
+
- name: Publish the approved distributions using Trusted Publishing
|
|
73
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
74
|
+
with:
|
|
75
|
+
packages-dir: dist/
|
|
76
|
+
print-hash: true
|
|
77
|
+
attestations: true
|
|
78
|
+
|
|
79
|
+
verify-install:
|
|
80
|
+
name: Published wheel (Python ${{ matrix.python }})
|
|
81
|
+
needs: publish
|
|
82
|
+
runs-on: ubuntu-latest
|
|
83
|
+
timeout-minutes: 15
|
|
84
|
+
strategy:
|
|
85
|
+
fail-fast: false
|
|
86
|
+
matrix:
|
|
87
|
+
python: ["3.10", "3.11", "3.12", "3.13"]
|
|
88
|
+
steps:
|
|
89
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
90
|
+
with:
|
|
91
|
+
persist-credentials: false
|
|
92
|
+
- uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6
|
|
93
|
+
with:
|
|
94
|
+
version: "0.12.21"
|
|
95
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
96
|
+
with:
|
|
97
|
+
name: validated-distributions
|
|
98
|
+
path: dist
|
|
99
|
+
- name: Verify public hashes and install the wheel from PyPI outside the checkout
|
|
100
|
+
env:
|
|
101
|
+
VERSION: ${{ inputs.version }}
|
|
102
|
+
PYTHON: ${{ matrix.python }}
|
|
103
|
+
run: |
|
|
104
|
+
for attempt in 1 2 3 4 5; do
|
|
105
|
+
if python3 scripts/release.py verify-pypi "$VERSION"; then break; fi
|
|
106
|
+
if [ "$attempt" = 5 ]; then exit 1; fi
|
|
107
|
+
sleep 15
|
|
108
|
+
done
|
|
109
|
+
uv venv --python "$PYTHON" "$RUNNER_TEMP/released-env"
|
|
110
|
+
for attempt in 1 2 3 4 5; do
|
|
111
|
+
if uv pip install --python "$RUNNER_TEMP/released-env/bin/python" --no-cache \
|
|
112
|
+
--index-url https://pypi.org/simple --only-binary langchain-gestaltdb \
|
|
113
|
+
"langchain-gestaltdb[lmdb]==$VERSION" 'pytest>=8,<10' 'langchain-tests==1.0.0'; then
|
|
114
|
+
break
|
|
115
|
+
fi
|
|
116
|
+
if [ "$attempt" = 5 ]; then exit 1; fi
|
|
117
|
+
sleep 15
|
|
118
|
+
done
|
|
119
|
+
cd "$RUNNER_TEMP"
|
|
120
|
+
"$RUNNER_TEMP/released-env/bin/python" -c 'import os, importlib.metadata as m, langchain_gestaltdb as g; assert m.version("langchain-gestaltdb") == os.environ["VERSION"]; assert "site-packages" in g.__file__'
|
|
121
|
+
"$RUNNER_TEMP/released-env/bin/python" -m pytest "$GITHUB_WORKSPACE/tests" -c "$GITHUB_WORKSPACE/pyproject.toml"
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py.cover
|
|
50
|
+
*.lcov
|
|
51
|
+
.hypothesis/
|
|
52
|
+
.pytest_cache/
|
|
53
|
+
cover/
|
|
54
|
+
|
|
55
|
+
# Translations
|
|
56
|
+
*.mo
|
|
57
|
+
*.pot
|
|
58
|
+
|
|
59
|
+
# Django stuff:
|
|
60
|
+
*.log
|
|
61
|
+
local_settings.py
|
|
62
|
+
db.sqlite3
|
|
63
|
+
db.sqlite3-journal
|
|
64
|
+
|
|
65
|
+
# Flask stuff:
|
|
66
|
+
instance/
|
|
67
|
+
.webassets-cache
|
|
68
|
+
|
|
69
|
+
# Scrapy stuff:
|
|
70
|
+
.scrapy
|
|
71
|
+
|
|
72
|
+
# Sphinx documentation
|
|
73
|
+
docs/_build/
|
|
74
|
+
|
|
75
|
+
# PyBuilder
|
|
76
|
+
.pybuilder/
|
|
77
|
+
target/
|
|
78
|
+
|
|
79
|
+
# Jupyter Notebook
|
|
80
|
+
.ipynb_checkpoints
|
|
81
|
+
|
|
82
|
+
# IPython
|
|
83
|
+
profile_default/
|
|
84
|
+
ipython_config.py
|
|
85
|
+
|
|
86
|
+
# pyenv
|
|
87
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
88
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
89
|
+
# .python-version
|
|
90
|
+
|
|
91
|
+
# pipenv
|
|
92
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
93
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
94
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
95
|
+
# install all needed dependencies.
|
|
96
|
+
# Pipfile.lock
|
|
97
|
+
|
|
98
|
+
# uv
|
|
99
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
100
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
101
|
+
# commonly ignored for libraries.
|
|
102
|
+
# uv.lock
|
|
103
|
+
|
|
104
|
+
# poetry
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
106
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
107
|
+
# commonly ignored for libraries.
|
|
108
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
109
|
+
# poetry.lock
|
|
110
|
+
# poetry.toml
|
|
111
|
+
|
|
112
|
+
# pdm
|
|
113
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
114
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
115
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
116
|
+
# pdm.lock
|
|
117
|
+
# pdm.toml
|
|
118
|
+
.pdm-python
|
|
119
|
+
.pdm-build/
|
|
120
|
+
|
|
121
|
+
# pixi
|
|
122
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
123
|
+
# pixi.lock
|
|
124
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
125
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
126
|
+
.pixi/*
|
|
127
|
+
!.pixi/config.toml
|
|
128
|
+
|
|
129
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
130
|
+
__pypackages__/
|
|
131
|
+
|
|
132
|
+
# Celery stuff
|
|
133
|
+
celerybeat-schedule*
|
|
134
|
+
celerybeat.pid
|
|
135
|
+
|
|
136
|
+
# Redis
|
|
137
|
+
*.rdb
|
|
138
|
+
*.aof
|
|
139
|
+
*.pid
|
|
140
|
+
|
|
141
|
+
# RabbitMQ
|
|
142
|
+
mnesia/
|
|
143
|
+
rabbitmq/
|
|
144
|
+
rabbitmq-data/
|
|
145
|
+
|
|
146
|
+
# ActiveMQ
|
|
147
|
+
activemq-data/
|
|
148
|
+
|
|
149
|
+
# SageMath parsed files
|
|
150
|
+
*.sage.py
|
|
151
|
+
|
|
152
|
+
# Environments
|
|
153
|
+
.env
|
|
154
|
+
.envrc
|
|
155
|
+
.venv
|
|
156
|
+
env/
|
|
157
|
+
venv/
|
|
158
|
+
ENV/
|
|
159
|
+
env.bak/
|
|
160
|
+
venv.bak/
|
|
161
|
+
|
|
162
|
+
# Spyder project settings
|
|
163
|
+
.spyderproject
|
|
164
|
+
.spyproject
|
|
165
|
+
|
|
166
|
+
# Rope project settings
|
|
167
|
+
.ropeproject
|
|
168
|
+
|
|
169
|
+
# mkdocs/Zensical documentation
|
|
170
|
+
/site
|
|
171
|
+
|
|
172
|
+
# mypy
|
|
173
|
+
.mypy_cache/
|
|
174
|
+
.dmypy.json
|
|
175
|
+
dmypy.json
|
|
176
|
+
|
|
177
|
+
# Pyre type checker
|
|
178
|
+
.pyre/
|
|
179
|
+
|
|
180
|
+
# pytype static type analyzer
|
|
181
|
+
.pytype/
|
|
182
|
+
|
|
183
|
+
# Cython debug symbols
|
|
184
|
+
cython_debug/
|
|
185
|
+
|
|
186
|
+
# PyCharm
|
|
187
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
188
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
189
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
190
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
191
|
+
# .idea/
|
|
192
|
+
|
|
193
|
+
# Abstra
|
|
194
|
+
# Abstra is an AI-powered process automation framework.
|
|
195
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
196
|
+
# Learn more at https://abstra.io/docs
|
|
197
|
+
.abstra/
|
|
198
|
+
|
|
199
|
+
# Visual Studio Code
|
|
200
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore that
|
|
201
|
+
# can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
202
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer, you
|
|
203
|
+
# could uncomment the following to ignore the entire vscode folder
|
|
204
|
+
# .vscode/
|
|
205
|
+
# Temporary file for partial code execution
|
|
206
|
+
tempCodeRunnerFile.py
|
|
207
|
+
|
|
208
|
+
# Ruff stuff:
|
|
209
|
+
.ruff_cache/
|
|
210
|
+
|
|
211
|
+
# PyPI configuration file
|
|
212
|
+
.pypirc
|
|
213
|
+
|
|
214
|
+
# Marimo
|
|
215
|
+
marimo/_static/
|
|
216
|
+
marimo/_lsp/
|
|
217
|
+
__marimo__/
|
|
218
|
+
|
|
219
|
+
# Streamlit
|
|
220
|
+
.streamlit/secrets.toml
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.1.0] - 2026-10-18
|
|
4
|
+
|
|
5
|
+
First public release of the Apache-2.0 LangChain integration for GestaltDB.
|
|
6
|
+
|
|
7
|
+
- Embedded graph lifecycle, parameterized Cypher, bounded schema discovery,
|
|
8
|
+
graph-document ingestion and source provenance.
|
|
9
|
+
- Fail-closed read-only query validation, bounded query/schema tools, and an
|
|
10
|
+
application-controlled toolkit with explicit write opt-in.
|
|
11
|
+
- Bounded typed-graph retrieval with indexed/external seeds, source-linked
|
|
12
|
+
Documents, deterministic output ordering and explicit truncation metadata.
|
|
13
|
+
- Four-valued historical claim status, filtered claim search, and bounded
|
|
14
|
+
provenance explanations; claims are separate from Cypher-visible graph edges.
|
|
15
|
+
- Explicitly enabled assertion, correction and retraction tools with validated
|
|
16
|
+
provenance/validity, historical identity preservation and bounded commit receipts.
|
|
17
|
+
- Tested on Python 3.10–3.13 with minimum/latest direct dependencies, installed
|
|
18
|
+
wheels, LMDB, LevelDB and PyRex contracts, and offline agent-style examples.
|
|
19
|
+
- Manual, environment-approved PyPI Trusted Publishing via `publish.yml`, using
|
|
20
|
+
exact-main CI artifacts, attestations and post-publication installation tests.
|
|
21
|
+
|
|
22
|
+
### Compatibility and limitations
|
|
23
|
+
|
|
24
|
+
Requires `gestaltdb>=0.12.0,<0.13`, `langchain-core>=1.0,<2`, and
|
|
25
|
+
`pydantic>=2.7,<3`. Explicit backend extras: `lmdb`, `leveldb`, `rocksdb` (PyRex).
|
|
26
|
+
Backend guarantees vary; no universal atomicity/snapshot, native async, native
|
|
27
|
+
vector store or computational timeout is claimed. Read-only tools are not a
|
|
28
|
+
multitenant sandbox. See `docs/API.md` and `TECH_DEBT.md` before deployment.
|