humemdb 0.1.0.dev0__tar.gz → 0.1.0.dev2__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.
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/.github/workflows/build-docs.yml +1 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/.github/workflows/deploy-docs.yml +5 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/.github/workflows/publish-pypi.yml +5 -1
- humemdb-0.1.0.dev2/.github/workflows/test-examples.yml +81 -0
- humemdb-0.1.0.dev2/.github/workflows/test.yml +59 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/PKG-INFO +34 -7
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/README.md +29 -5
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/development/documentation.md +1 -1
- humemdb-0.1.0.dev2/docs/development/licensing.md +44 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/development/release.md +1 -1
- humemdb-0.1.0.dev2/docs/examples/01_sql_basics.md +67 -0
- humemdb-0.1.0.dev2/docs/examples/02_cypher_social_graph.md +57 -0
- humemdb-0.1.0.dev2/docs/examples/03_vector_search.md +54 -0
- humemdb-0.1.0.dev2/docs/examples/index.md +28 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/getting-started/installation.md +15 -7
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/index.md +3 -3
- humemdb-0.1.0.dev2/examples/01_sql_basics.py +164 -0
- humemdb-0.1.0.dev2/examples/02_cypher_social_graph.py +113 -0
- humemdb-0.1.0.dev2/examples/03_vector_search.py +123 -0
- humemdb-0.1.0.dev2/examples/README.md +24 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/mkdocs.yml +6 -3
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/pyproject.toml +5 -1
- humemdb-0.1.0.dev2/scripts/release/run_examples.py +54 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/uv.lock +320 -3
- humemdb-0.1.0.dev0/.github/workflows/test.yml +0 -73
- humemdb-0.1.0.dev0/docs/examples/cypher.md +0 -48
- humemdb-0.1.0.dev0/docs/examples/index.md +0 -13
- humemdb-0.1.0.dev0/docs/examples/sql.md +0 -50
- humemdb-0.1.0.dev0/docs/examples/vector.md +0 -42
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/.gitignore +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/.pre-commit-config.yaml +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/.python-version +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/LICENSE +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/getting-started/quickstart.md +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/guide/benchmarks.md +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/guide/query-surfaces.md +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/guide/routing.md +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/guide/transactions.md +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/guide/vectors.md +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/docs/stylesheets/extra.css +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/pyrightconfig.json +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/README.md +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/README.md +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/cypher_graph_path.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/duckdb_direct_read.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/results/ivfflat_boundary_150k_400k_dims256_384.json +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/results/ivfflat_crossover_100k_1m_dims256_384.json +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/results/ivfflat_crossover_100k_1m_dims768_1024.json +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/results/ivfhnswsq_crossover_100k_1m_dims256_384.json +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/results/ivfpq_100k_384.json +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/results/vector_search_sweep_tuned_threads4_queries100_rows2k-100k_dims256-1024_topk10.json +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/vector_search.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/vector_search_sweep.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/benchmarks/vector_search_tune_lancedb.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/dev/README.md +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/fix_markdown.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/scripts/release/README.md +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/src/humemdb/__init__.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/src/humemdb/cypher.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/src/humemdb/db.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/src/humemdb/engines.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/src/humemdb/runtime.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/src/humemdb/sql.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/src/humemdb/types.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/src/humemdb/vector.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/tests/test_db.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/tests/test_vector.py +0 -0
- {humemdb-0.1.0.dev0 → humemdb-0.1.0.dev2}/things-to-do.md +0 -0
|
@@ -68,9 +68,12 @@ jobs:
|
|
|
68
68
|
fi
|
|
69
69
|
|
|
70
70
|
VERSION="${RAW_VERSION#v}"
|
|
71
|
+
VERSION_TAG="v$VERSION"
|
|
71
72
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
73
|
+
echo "version_tag=$VERSION_TAG" >> "$GITHUB_OUTPUT"
|
|
72
74
|
echo "set_latest=$SET_LATEST" >> "$GITHUB_OUTPUT"
|
|
73
75
|
echo "Deploying documentation version: $VERSION"
|
|
76
|
+
echo "Using source tag ref: $VERSION_TAG"
|
|
74
77
|
|
|
75
78
|
- name: Checkout humemai-docs
|
|
76
79
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
@@ -90,6 +93,7 @@ jobs:
|
|
|
90
93
|
working-directory: humemai-docs
|
|
91
94
|
env:
|
|
92
95
|
MIKE_VERSION: ${{ steps.version.outputs.version }}
|
|
96
|
+
MIKE_VERSION_TAG: ${{ steps.version.outputs.version_tag }}
|
|
93
97
|
run: |
|
|
94
98
|
uv run --project .. mike deploy --update-aliases \
|
|
95
99
|
--deploy-prefix humemdb \
|
|
@@ -110,6 +114,7 @@ jobs:
|
|
|
110
114
|
working-directory: humemai-docs
|
|
111
115
|
env:
|
|
112
116
|
MIKE_VERSION: ${{ steps.version.outputs.version }}
|
|
117
|
+
MIKE_VERSION_TAG: ${{ steps.version.outputs.version_tag }}
|
|
113
118
|
run: |
|
|
114
119
|
uv run --project .. mike deploy \
|
|
115
120
|
--deploy-prefix humemdb \
|
|
@@ -57,9 +57,13 @@ jobs:
|
|
|
57
57
|
name: python-package-distributions
|
|
58
58
|
path: dist/
|
|
59
59
|
|
|
60
|
+
examples:
|
|
61
|
+
name: Run examples
|
|
62
|
+
uses: ./.github/workflows/test-examples.yml
|
|
63
|
+
|
|
60
64
|
publish:
|
|
61
65
|
name: Publish package to PyPI
|
|
62
|
-
needs: build
|
|
66
|
+
needs: [build, examples]
|
|
63
67
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
64
68
|
runs-on: ubuntu-24.04
|
|
65
69
|
environment: pypi
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
name: Test Examples
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
paths:
|
|
8
|
+
- 'examples/**'
|
|
9
|
+
- 'src/**'
|
|
10
|
+
- 'pyproject.toml'
|
|
11
|
+
- 'uv.lock'
|
|
12
|
+
- 'scripts/release/run_examples.py'
|
|
13
|
+
- '.github/workflows/test-examples.yml'
|
|
14
|
+
pull_request:
|
|
15
|
+
paths:
|
|
16
|
+
- 'examples/**'
|
|
17
|
+
- 'src/**'
|
|
18
|
+
- 'pyproject.toml'
|
|
19
|
+
- 'uv.lock'
|
|
20
|
+
- 'scripts/release/run_examples.py'
|
|
21
|
+
- '.github/workflows/test-examples.yml'
|
|
22
|
+
workflow_call:
|
|
23
|
+
workflow_dispatch:
|
|
24
|
+
|
|
25
|
+
permissions:
|
|
26
|
+
contents: read
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
test-examples:
|
|
30
|
+
name: Test Examples (${{ matrix.platform }}, Python ${{ matrix.python-version }})
|
|
31
|
+
runs-on: ${{ matrix.runs-on }}
|
|
32
|
+
strategy:
|
|
33
|
+
fail-fast: false
|
|
34
|
+
matrix:
|
|
35
|
+
python-version:
|
|
36
|
+
- '3.10'
|
|
37
|
+
- '3.11'
|
|
38
|
+
- '3.12'
|
|
39
|
+
- '3.13'
|
|
40
|
+
- '3.14'
|
|
41
|
+
platform:
|
|
42
|
+
- 'linux/amd64'
|
|
43
|
+
- 'linux/arm64'
|
|
44
|
+
- 'darwin/arm64'
|
|
45
|
+
- 'windows/amd64'
|
|
46
|
+
include:
|
|
47
|
+
- platform: 'linux/amd64'
|
|
48
|
+
runs-on: ubuntu-24.04
|
|
49
|
+
- platform: 'linux/arm64'
|
|
50
|
+
runs-on: ubuntu-24.04-arm
|
|
51
|
+
- platform: 'darwin/arm64'
|
|
52
|
+
runs-on: macos-15
|
|
53
|
+
- platform: 'windows/amd64'
|
|
54
|
+
runs-on: windows-2025
|
|
55
|
+
|
|
56
|
+
steps:
|
|
57
|
+
- name: Checkout repository
|
|
58
|
+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
59
|
+
|
|
60
|
+
- name: Set up Python
|
|
61
|
+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
|
62
|
+
with:
|
|
63
|
+
python-version: ${{ matrix.python-version }}
|
|
64
|
+
|
|
65
|
+
- name: Set up uv
|
|
66
|
+
uses: astral-sh/setup-uv@v6
|
|
67
|
+
|
|
68
|
+
- name: Build distributions
|
|
69
|
+
shell: bash
|
|
70
|
+
run: |
|
|
71
|
+
uv run --with build python -m build
|
|
72
|
+
|
|
73
|
+
- name: Install built wheel
|
|
74
|
+
shell: bash
|
|
75
|
+
run: |
|
|
76
|
+
uv pip install --system dist/*.whl
|
|
77
|
+
|
|
78
|
+
- name: Run examples
|
|
79
|
+
shell: bash
|
|
80
|
+
run: |
|
|
81
|
+
python scripts/release/run_examples.py
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
workflow_call:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
test:
|
|
15
|
+
name: Test (${{ matrix.platform }}, Python ${{ matrix.python-version }})
|
|
16
|
+
runs-on: ${{ matrix.runs-on }}
|
|
17
|
+
strategy:
|
|
18
|
+
fail-fast: false
|
|
19
|
+
matrix:
|
|
20
|
+
python-version:
|
|
21
|
+
- '3.10'
|
|
22
|
+
- '3.11'
|
|
23
|
+
- '3.12'
|
|
24
|
+
- '3.13'
|
|
25
|
+
- '3.14'
|
|
26
|
+
platform:
|
|
27
|
+
- 'linux/amd64'
|
|
28
|
+
- 'linux/arm64'
|
|
29
|
+
- 'darwin/arm64'
|
|
30
|
+
- 'windows/amd64'
|
|
31
|
+
include:
|
|
32
|
+
- platform: 'linux/amd64'
|
|
33
|
+
runs-on: ubuntu-24.04
|
|
34
|
+
- platform: 'linux/arm64'
|
|
35
|
+
runs-on: ubuntu-24.04-arm
|
|
36
|
+
- platform: 'darwin/arm64'
|
|
37
|
+
runs-on: macos-15
|
|
38
|
+
- platform: 'windows/amd64'
|
|
39
|
+
runs-on: windows-2025
|
|
40
|
+
|
|
41
|
+
steps:
|
|
42
|
+
- name: Checkout repository
|
|
43
|
+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
44
|
+
|
|
45
|
+
- name: Set up Python
|
|
46
|
+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
|
47
|
+
with:
|
|
48
|
+
python-version: ${{ matrix.python-version }}
|
|
49
|
+
|
|
50
|
+
- name: Set up uv
|
|
51
|
+
uses: astral-sh/setup-uv@v6
|
|
52
|
+
|
|
53
|
+
- name: Install project
|
|
54
|
+
run: |
|
|
55
|
+
uv sync
|
|
56
|
+
|
|
57
|
+
- name: Run tests
|
|
58
|
+
run: |
|
|
59
|
+
uv run python -m unittest discover -s tests -v
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: humemdb
|
|
3
|
-
Version: 0.1.0.
|
|
3
|
+
Version: 0.1.0.dev2
|
|
4
4
|
Summary: Embedded multi-model database orchestration over SQLite, DuckDB, Cypher, and exact and ANN vector search
|
|
5
5
|
Project-URL: Homepage, https://github.com/humemai/humemdb
|
|
6
6
|
Project-URL: Documentation, https://docs.humem.ai/humemdb/
|
|
@@ -36,10 +36,13 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
36
36
|
Classifier: Operating System :: OS Independent
|
|
37
37
|
Classifier: Programming Language :: Python :: 3
|
|
38
38
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
39
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
39
41
|
Classifier: Programming Language :: Python :: 3.12
|
|
40
42
|
Classifier: Programming Language :: Python :: 3.13
|
|
43
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
41
44
|
Classifier: Topic :: Database
|
|
42
|
-
Requires-Python: >=3.
|
|
45
|
+
Requires-Python: >=3.10
|
|
43
46
|
Requires-Dist: duckdb<2,>=1.4
|
|
44
47
|
Requires-Dist: lancedb<1,>=0.27
|
|
45
48
|
Requires-Dist: numpy<3,>=2
|
|
@@ -53,6 +56,7 @@ Multi-model embedded data orchestration for SQL, Cypher, and vector search.
|
|
|
53
56
|
|
|
54
57
|
[](https://docs.humem.ai/humemdb/)
|
|
55
58
|
[](https://github.com/humemai/humemdb/actions/workflows/test.yml)
|
|
59
|
+
[](https://github.com/humemai/humemdb/actions/workflows/test-examples.yml)
|
|
56
60
|
[](https://github.com/humemai/humemdb/actions/workflows/build-docs.yml)
|
|
57
61
|
[](https://github.com/humemai/humemdb/actions/workflows/publish-pypi.yml)
|
|
58
62
|
|
|
@@ -100,6 +104,8 @@ Current behavior is intentionally explicit:
|
|
|
100
104
|
|
|
101
105
|
## Install
|
|
102
106
|
|
|
107
|
+
HumemDB supports Python 3.10 and newer.
|
|
108
|
+
|
|
103
109
|
Install from source:
|
|
104
110
|
|
|
105
111
|
```bash
|
|
@@ -131,6 +137,21 @@ uv sync
|
|
|
131
137
|
`uv lock` updates the lockfile with exact resolved versions. `uv sync` installs that
|
|
132
138
|
exact environment.
|
|
133
139
|
|
|
140
|
+
## Libraries HumemDB relies on
|
|
141
|
+
|
|
142
|
+
HumemDB is a pure Python orchestration layer, but it relies on a small set of core
|
|
143
|
+
Python libraries and embedded engines:
|
|
144
|
+
|
|
145
|
+
- `sqlite3` from the Python standard library for the canonical local write path.
|
|
146
|
+
- `duckdb` for analytical reads over the SQLite-backed source-of-truth database.
|
|
147
|
+
- `numpy` for the exact in-memory vector search baseline.
|
|
148
|
+
- `sqlglot[c]` for the current PostgreSQL-like SQL translation layer.
|
|
149
|
+
- `lancedb` for benchmark work and future indexed ANN paths.
|
|
150
|
+
- `threadpoolctl` for thread-pool coordination around compute-heavy dependencies.
|
|
151
|
+
|
|
152
|
+
Those dependencies are part of the public runtime story. HumemDB does not try to hide
|
|
153
|
+
them behind a fake "single engine" narrative.
|
|
154
|
+
|
|
134
155
|
## 🧠 What is supported today
|
|
135
156
|
|
|
136
157
|
### SQL
|
|
@@ -180,14 +201,14 @@ with HumemDB("app.sqlite3", "analytics.duckdb") as db:
|
|
|
180
201
|
print(result.rows)
|
|
181
202
|
```
|
|
182
203
|
|
|
183
|
-
More examples live in the docs site.
|
|
204
|
+
More examples live in [examples/](examples/) and in the docs site.
|
|
184
205
|
|
|
185
206
|
## 🔗 Quick links
|
|
186
207
|
|
|
187
208
|
- Docs: [docs.humem.ai/humemdb](https://docs.humem.ai/humemdb/)
|
|
188
209
|
- Repository: [github.com/humemai/humemdb](https://github.com/humemai/humemdb)
|
|
189
210
|
- Issues: [github.com/humemai/humemdb/issues](https://github.com/humemai/humemdb/issues)
|
|
190
|
-
- Internal
|
|
211
|
+
- Internal roadmap notes: [things-to-do.md](things-to-do.md)
|
|
191
212
|
|
|
192
213
|
## 📦 Packaging
|
|
193
214
|
|
|
@@ -197,9 +218,15 @@ side.
|
|
|
197
218
|
|
|
198
219
|
## 🗺️ Planning
|
|
199
220
|
|
|
200
|
-
|
|
201
|
-
of this README.
|
|
221
|
+
Detailed internal roadmap notes now live in `things-to-do.md` instead of this README.
|
|
202
222
|
|
|
203
223
|
## 📄 License
|
|
204
224
|
|
|
205
|
-
MIT.
|
|
225
|
+
HumemDB's own source code is licensed under MIT. See [LICENSE](LICENSE).
|
|
226
|
+
|
|
227
|
+
Third-party dependencies keep their own licenses. Installing HumemDB may also install
|
|
228
|
+
third-party Python packages and, in some cases, their native wheels. Those components
|
|
229
|
+
are not relicensed under MIT just because HumemDB depends on them.
|
|
230
|
+
|
|
231
|
+
For the concrete dependency set, see [pyproject.toml](pyproject.toml) and
|
|
232
|
+
[uv.lock](uv.lock).
|
|
@@ -4,6 +4,7 @@ Multi-model embedded data orchestration for SQL, Cypher, and vector search.
|
|
|
4
4
|
|
|
5
5
|
[](https://docs.humem.ai/humemdb/)
|
|
6
6
|
[](https://github.com/humemai/humemdb/actions/workflows/test.yml)
|
|
7
|
+
[](https://github.com/humemai/humemdb/actions/workflows/test-examples.yml)
|
|
7
8
|
[](https://github.com/humemai/humemdb/actions/workflows/build-docs.yml)
|
|
8
9
|
[](https://github.com/humemai/humemdb/actions/workflows/publish-pypi.yml)
|
|
9
10
|
|
|
@@ -51,6 +52,8 @@ Current behavior is intentionally explicit:
|
|
|
51
52
|
|
|
52
53
|
## Install
|
|
53
54
|
|
|
55
|
+
HumemDB supports Python 3.10 and newer.
|
|
56
|
+
|
|
54
57
|
Install from source:
|
|
55
58
|
|
|
56
59
|
```bash
|
|
@@ -82,6 +85,21 @@ uv sync
|
|
|
82
85
|
`uv lock` updates the lockfile with exact resolved versions. `uv sync` installs that
|
|
83
86
|
exact environment.
|
|
84
87
|
|
|
88
|
+
## Libraries HumemDB relies on
|
|
89
|
+
|
|
90
|
+
HumemDB is a pure Python orchestration layer, but it relies on a small set of core
|
|
91
|
+
Python libraries and embedded engines:
|
|
92
|
+
|
|
93
|
+
- `sqlite3` from the Python standard library for the canonical local write path.
|
|
94
|
+
- `duckdb` for analytical reads over the SQLite-backed source-of-truth database.
|
|
95
|
+
- `numpy` for the exact in-memory vector search baseline.
|
|
96
|
+
- `sqlglot[c]` for the current PostgreSQL-like SQL translation layer.
|
|
97
|
+
- `lancedb` for benchmark work and future indexed ANN paths.
|
|
98
|
+
- `threadpoolctl` for thread-pool coordination around compute-heavy dependencies.
|
|
99
|
+
|
|
100
|
+
Those dependencies are part of the public runtime story. HumemDB does not try to hide
|
|
101
|
+
them behind a fake "single engine" narrative.
|
|
102
|
+
|
|
85
103
|
## 🧠 What is supported today
|
|
86
104
|
|
|
87
105
|
### SQL
|
|
@@ -131,14 +149,14 @@ with HumemDB("app.sqlite3", "analytics.duckdb") as db:
|
|
|
131
149
|
print(result.rows)
|
|
132
150
|
```
|
|
133
151
|
|
|
134
|
-
More examples live in the docs site.
|
|
152
|
+
More examples live in [examples/](examples/) and in the docs site.
|
|
135
153
|
|
|
136
154
|
## 🔗 Quick links
|
|
137
155
|
|
|
138
156
|
- Docs: [docs.humem.ai/humemdb](https://docs.humem.ai/humemdb/)
|
|
139
157
|
- Repository: [github.com/humemai/humemdb](https://github.com/humemai/humemdb)
|
|
140
158
|
- Issues: [github.com/humemai/humemdb/issues](https://github.com/humemai/humemdb/issues)
|
|
141
|
-
- Internal
|
|
159
|
+
- Internal roadmap notes: [things-to-do.md](things-to-do.md)
|
|
142
160
|
|
|
143
161
|
## 📦 Packaging
|
|
144
162
|
|
|
@@ -148,9 +166,15 @@ side.
|
|
|
148
166
|
|
|
149
167
|
## 🗺️ Planning
|
|
150
168
|
|
|
151
|
-
|
|
152
|
-
of this README.
|
|
169
|
+
Detailed internal roadmap notes now live in `things-to-do.md` instead of this README.
|
|
153
170
|
|
|
154
171
|
## 📄 License
|
|
155
172
|
|
|
156
|
-
MIT.
|
|
173
|
+
HumemDB's own source code is licensed under MIT. See [LICENSE](LICENSE).
|
|
174
|
+
|
|
175
|
+
Third-party dependencies keep their own licenses. Installing HumemDB may also install
|
|
176
|
+
third-party Python packages and, in some cases, their native wheels. Those components
|
|
177
|
+
are not relicensed under MIT just because HumemDB depends on them.
|
|
178
|
+
|
|
179
|
+
For the concrete dependency set, see [pyproject.toml](pyproject.toml) and
|
|
180
|
+
[uv.lock](uv.lock).
|
|
@@ -22,7 +22,7 @@ The docs site is published into the shared `humemai-docs` repository under the
|
|
|
22
22
|
|
|
23
23
|
`mike` manages versioned documentation aliases such as `latest`.
|
|
24
24
|
|
|
25
|
-
## Writing rules
|
|
25
|
+
## Writing rules
|
|
26
26
|
|
|
27
27
|
- keep the docs aligned with the actual `v0` runtime surface
|
|
28
28
|
- prefer clear boundaries over aspirational claims
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Licensing
|
|
2
|
+
|
|
3
|
+
## HumemDB license
|
|
4
|
+
|
|
5
|
+
HumemDB's own source code is licensed under MIT.
|
|
6
|
+
|
|
7
|
+
- Repository license file:
|
|
8
|
+
[LICENSE]({{ config.repo_url }}/blob/{{ config.extra.version_tag }}/LICENSE)
|
|
9
|
+
- Package metadata:
|
|
10
|
+
[pyproject.toml]({{ config.repo_url }}/blob/{{ config.extra.version_tag }}/pyproject.toml)
|
|
11
|
+
|
|
12
|
+
That MIT grant applies to HumemDB's code and documentation in this repository. It does
|
|
13
|
+
not automatically relicense third-party dependencies.
|
|
14
|
+
|
|
15
|
+
## Runtime libraries HumemDB relies on
|
|
16
|
+
|
|
17
|
+
The current runtime depends on a small set of explicit Python libraries and embedded
|
|
18
|
+
engines:
|
|
19
|
+
|
|
20
|
+
- `sqlite3` from the Python standard library for the canonical local write path
|
|
21
|
+
- `duckdb` for analytical reads
|
|
22
|
+
- `numpy` for the exact in-memory vector search baseline
|
|
23
|
+
- `sqlglot[c]` for the SQL translation layer
|
|
24
|
+
- `lancedb` for benchmark work and future indexed ANN paths
|
|
25
|
+
- `threadpoolctl` for thread-pool coordination
|
|
26
|
+
|
|
27
|
+
HumemDB intentionally presents those libraries as part of the implementation story
|
|
28
|
+
instead of pretending everything comes from one hidden backend.
|
|
29
|
+
|
|
30
|
+
## Third-party licenses
|
|
31
|
+
|
|
32
|
+
Third-party dependencies keep their own licenses and distribution terms.
|
|
33
|
+
|
|
34
|
+
- Installing HumemDB may download third-party wheels or source distributions.
|
|
35
|
+
- Some of those dependencies may include native code or platform-specific wheels.
|
|
36
|
+
- Those components remain under their upstream licenses.
|
|
37
|
+
|
|
38
|
+
For the concrete dependency set used by this project, see:
|
|
39
|
+
|
|
40
|
+
- [pyproject.toml]({{ config.repo_url }}/blob/{{ config.extra.version_tag }}/pyproject.toml)
|
|
41
|
+
- [uv.lock]({{ config.repo_url }}/blob/{{ config.extra.version_tag }}/uv.lock)
|
|
42
|
+
|
|
43
|
+
If you need a formal license review for a deployment, review the resolved dependency
|
|
44
|
+
set from the lockfile rather than only the top-level MIT license.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# 01 - SQL Basics
|
|
2
|
+
|
|
3
|
+
[View source code]({{ config.repo_url }}/blob/{{ config.extra.version_tag }}/examples/01_sql_basics.py){ .md-button }
|
|
4
|
+
|
|
5
|
+
This page documents the real repository example `examples/01_sql_basics.py`.
|
|
6
|
+
|
|
7
|
+
## What the Python example does
|
|
8
|
+
|
|
9
|
+
The script generates a moderately sized embedded workload instead of a tiny hand-made
|
|
10
|
+
toy dataset.
|
|
11
|
+
|
|
12
|
+
- 2,000 `users`
|
|
13
|
+
- 50,000 `orders`
|
|
14
|
+
- 2 SQLite tables
|
|
15
|
+
- transactional bulk inserts through the public API
|
|
16
|
+
- SQLite filtered OLTP-style reads
|
|
17
|
+
- SQLite joined reads
|
|
18
|
+
- DuckDB grouped analytical reads over the SQLite-backed tables
|
|
19
|
+
|
|
20
|
+
## Why this example exists
|
|
21
|
+
|
|
22
|
+
HumemDB is supposed to route small transactional work and broader analytical work to
|
|
23
|
+
different engines explicitly. This example demonstrates that split using the actual
|
|
24
|
+
public Python API.
|
|
25
|
+
|
|
26
|
+
## Main operations covered
|
|
27
|
+
|
|
28
|
+
- `CREATE TABLE` routed to SQLite
|
|
29
|
+
- `executemany(...)` inside an explicit transaction
|
|
30
|
+
- `ILIKE` translation on the SQLite route
|
|
31
|
+
- SQLite join queries for row-oriented reads
|
|
32
|
+
- DuckDB grouped aggregate queries for broader scans
|
|
33
|
+
|
|
34
|
+
## Representative flow
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
with HumemDB("app.sqlite3", "analytics.duckdb") as db:
|
|
38
|
+
db.query(
|
|
39
|
+
"CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL, segment TEXT NOT NULL, city TEXT NOT NULL)",
|
|
40
|
+
route="sqlite",
|
|
41
|
+
)
|
|
42
|
+
db.query(
|
|
43
|
+
"CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL, status TEXT NOT NULL, total_cents INTEGER NOT NULL)",
|
|
44
|
+
route="sqlite",
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
with db.transaction(route="sqlite"):
|
|
48
|
+
db.executemany(..., users, route="sqlite")
|
|
49
|
+
db.executemany(..., orders, route="sqlite")
|
|
50
|
+
|
|
51
|
+
sqlite_rows = db.query(..., route="sqlite")
|
|
52
|
+
duckdb_rollup = db.query(..., route="duckdb")
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Supported statement kinds
|
|
56
|
+
|
|
57
|
+
- `SELECT`
|
|
58
|
+
- `INSERT`
|
|
59
|
+
- `UPDATE`
|
|
60
|
+
- `DELETE`
|
|
61
|
+
- `CREATE`
|
|
62
|
+
|
|
63
|
+
## Explicit rejections
|
|
64
|
+
|
|
65
|
+
- recursive CTEs
|
|
66
|
+
- unsupported PostgreSQL syntax outside the current tested surface
|
|
67
|
+
- direct public writes routed to DuckDB
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# 02 - Cypher Social Graph
|
|
2
|
+
|
|
3
|
+
[View source code]({{ config.repo_url }}/blob/{{ config.extra.version_tag }}/examples/02_cypher_social_graph.py){ .md-button }
|
|
4
|
+
|
|
5
|
+
This page documents the real repository example `examples/02_cypher_social_graph.py`.
|
|
6
|
+
|
|
7
|
+
## What the Python example does
|
|
8
|
+
|
|
9
|
+
The script builds a generated social/work graph rather than a tiny three-node toy.
|
|
10
|
+
|
|
11
|
+
- 5,000 repeated graph patterns
|
|
12
|
+
- thousands of nodes
|
|
13
|
+
- thousands of directed `KNOWS` edges
|
|
14
|
+
- richer node properties: `name`, `age`, `active`, `cohort`, `city`
|
|
15
|
+
- richer relationship properties: `since`, `strength`, and implicit `type`
|
|
16
|
+
- SQLite and DuckDB graph reads over the same stored graph state
|
|
17
|
+
|
|
18
|
+
## Main operations covered
|
|
19
|
+
|
|
20
|
+
- repeated `CREATE` graph writes on the SQLite route
|
|
21
|
+
- named parameters in Cypher `CREATE`
|
|
22
|
+
- relationship alias returns
|
|
23
|
+
- reverse-edge matching
|
|
24
|
+
- `WHERE ... AND ...` filters
|
|
25
|
+
- `ORDER BY` and `LIMIT`
|
|
26
|
+
|
|
27
|
+
## Representative flow
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
db.query(
|
|
31
|
+
(
|
|
32
|
+
"CREATE (a:User {name: $a_name, age: $a_age, active: $a_active, cohort: $cohort, city: $city})"
|
|
33
|
+
"-[r:KNOWS {since: $since_one, strength: $strength_one}]->"
|
|
34
|
+
"(b:User {name: $b_name, age: $b_age, active: $b_active, cohort: $cohort, city: $city})"
|
|
35
|
+
),
|
|
36
|
+
route="sqlite",
|
|
37
|
+
query_type="cypher",
|
|
38
|
+
params={...},
|
|
39
|
+
)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Supported today
|
|
43
|
+
|
|
44
|
+
- labeled node creation
|
|
45
|
+
- single directed relationship creation
|
|
46
|
+
- narrow `MATCH` flows
|
|
47
|
+
- relationship aliases
|
|
48
|
+
- reverse-edge matching
|
|
49
|
+
- `WHERE` equality predicates joined by `AND`
|
|
50
|
+
- `ORDER BY` and `LIMIT`
|
|
51
|
+
- named parameters such as `$name`
|
|
52
|
+
|
|
53
|
+
## Not promised yet
|
|
54
|
+
|
|
55
|
+
HumemDB does not claim broad Cypher compatibility today. The current surface is the
|
|
56
|
+
tested subset described above, and unsupported constructs should fail clearly instead of
|
|
57
|
+
being guessed at.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# 03 - Vector Search
|
|
2
|
+
|
|
3
|
+
[View source code]({{ config.repo_url }}/blob/{{ config.extra.version_tag }}/examples/03_vector_search.py){ .md-button }
|
|
4
|
+
|
|
5
|
+
This page documents the real repository example `examples/03_vector_search.py`.
|
|
6
|
+
|
|
7
|
+
## What the Python example does
|
|
8
|
+
|
|
9
|
+
The script generates a sizable exact-search workload rather than only a handful of
|
|
10
|
+
vectors.
|
|
11
|
+
|
|
12
|
+
- 24,000 vectors in the `default` collection
|
|
13
|
+
- 12,000 vectors in the `archive` collection
|
|
14
|
+
- 16 dimensions per vector
|
|
15
|
+
- multiple logical buckets
|
|
16
|
+
- exact search through `search_vectors(...)`
|
|
17
|
+
- exact search through raw `query_type="vector"`
|
|
18
|
+
- cache invalidation after inserting additional vectors
|
|
19
|
+
|
|
20
|
+
## Why this example matters
|
|
21
|
+
|
|
22
|
+
HumemDB currently positions the public vector runtime as an exact SQLite-plus-NumPy
|
|
23
|
+
baseline. That claim is not very useful if the only shipped example uses three points.
|
|
24
|
+
This example exercises tens of thousands of generated points while staying inside the
|
|
25
|
+
current public `v0` surface.
|
|
26
|
+
|
|
27
|
+
## Representative flow
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
with HumemDB("vectors.sqlite3") as db:
|
|
31
|
+
db.insert_vectors(build_default_vectors())
|
|
32
|
+
db.insert_vectors(build_archive_vectors())
|
|
33
|
+
|
|
34
|
+
result = db.search_vectors(
|
|
35
|
+
"default",
|
|
36
|
+
_embedding(1.0, 0.0, 0.0),
|
|
37
|
+
top_k=5,
|
|
38
|
+
metric="cosine",
|
|
39
|
+
)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## What this means in practice
|
|
43
|
+
|
|
44
|
+
- SQLite is the canonical vector store.
|
|
45
|
+
- The public path is exact, not ANN.
|
|
46
|
+
- Bucket filters can narrow the candidate set before scoring.
|
|
47
|
+
- Collection caches are invalidated automatically after SQL writes that touch vector
|
|
48
|
+
storage.
|
|
49
|
+
|
|
50
|
+
## Metrics
|
|
51
|
+
|
|
52
|
+
- `cosine`
|
|
53
|
+
- `dot`
|
|
54
|
+
- `l2`
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Examples
|
|
2
|
+
|
|
3
|
+
HumemDB ships real Python examples in the repository `examples/` directory,
|
|
4
|
+
and the docs pages in this section describe those exact files.
|
|
5
|
+
|
|
6
|
+
Like the ArcadeDB docs, each page is intended to be a companion to the real Python
|
|
7
|
+
script, not a disconnected hand-written snippet.
|
|
8
|
+
|
|
9
|
+
Current shipped examples:
|
|
10
|
+
|
|
11
|
+
- [01 - SQL Basics](01_sql_basics.md): generates 2,000 users and 50,000 orders, then runs both SQLite and DuckDB queries.
|
|
12
|
+
- [02 - Cypher Social Graph](02_cypher_social_graph.md): generates thousands of graph nodes and edges with richer properties.
|
|
13
|
+
- [03 - Vector Search](03_vector_search.md): generates 36,000 vectors across two collections and exercises exact search.
|
|
14
|
+
|
|
15
|
+
Run them locally from the repository root:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
uv sync
|
|
19
|
+
uv run python scripts/release/run_examples.py
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or run individual files directly:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
uv run python examples/01_sql_basics.py
|
|
26
|
+
uv run python examples/02_cypher_social_graph.py
|
|
27
|
+
uv run python examples/03_vector_search.py
|
|
28
|
+
```
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Requirements
|
|
4
4
|
|
|
5
|
-
- Python 3.
|
|
5
|
+
- Python 3.10 or newer.
|
|
6
6
|
- A normal local Python environment managed with `uv`.
|
|
7
7
|
|
|
8
8
|
## Install from source
|
|
@@ -43,11 +43,19 @@ uv sync --group docs
|
|
|
43
43
|
|
|
44
44
|
## Installed runtime dependencies
|
|
45
45
|
|
|
46
|
-
- `
|
|
47
|
-
- `
|
|
48
|
-
- `numpy`
|
|
49
|
-
- `sqlglot[c]`
|
|
50
|
-
- `
|
|
46
|
+
- `sqlite3` from the Python standard library for the canonical local write path.
|
|
47
|
+
- `duckdb` for analytical reads.
|
|
48
|
+
- `numpy` for the exact vector search baseline.
|
|
49
|
+
- `sqlglot[c]` for PostgreSQL-like SQL translation.
|
|
50
|
+
- `lancedb` for benchmark work and future indexed ANN paths.
|
|
51
|
+
- `threadpoolctl` for thread-pool coordination.
|
|
51
52
|
|
|
52
53
|
LanceDB is present for benchmark and later accelerated vector work, but the shipped
|
|
53
|
-
default vector runtime today is still the exact SQLite plus NumPy path.
|
|
54
|
+
default vector runtime today is still the exact SQLite plus NumPy path.
|
|
55
|
+
|
|
56
|
+
## Licensing note
|
|
57
|
+
|
|
58
|
+
HumemDB's own code is MIT-licensed, but installed dependencies keep their own licenses.
|
|
59
|
+
See the project [LICENSE]({{ config.repo_url }}/blob/{{ config.extra.version_tag
|
|
60
|
+
}}/LICENSE) for HumemDB itself and the lockfile plus package metadata for the concrete
|
|
61
|
+
third-party dependency set.
|
|
@@ -44,6 +44,6 @@ stays visible.
|
|
|
44
44
|
|
|
45
45
|
- [Installation](getting-started/installation.md)
|
|
46
46
|
- [Quick Start](getting-started/quickstart.md)
|
|
47
|
-
- [SQL Example](examples/
|
|
48
|
-
- [Cypher Example](examples/
|
|
49
|
-
- [Vector Example](examples/
|
|
47
|
+
- [SQL Example](examples/01_sql_basics.md)
|
|
48
|
+
- [Cypher Example](examples/02_cypher_social_graph.md)
|
|
49
|
+
- [Vector Example](examples/03_vector_search.md)
|