forked from MemPalace/mempalace
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
182 lines (167 loc) · 6.72 KB
/
Copy pathpyproject.toml
File metadata and controls
182 lines (167 loc) · 6.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
[project]
name = "mempalace"
version = "3.4.0"
description = "Give your AI a memory — mine projects and conversations into a searchable palace. No API key required."
readme = "README.md"
requires-python = ">=3.9"
license = "MIT"
authors = [
{name = "milla-jovovich"},
]
keywords = [
"ai", "memory", "llm", "rag", "chromadb", "mcp",
"vector-database", "claude", "chatgpt", "embeddings",
]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Utilities",
]
dependencies = [
"chromadb>=1.5.4,<2",
"pyyaml>=6.0,<7",
"tomli>=2.0.0; python_version < '3.11'",
# Multilingual embedding model deps. Onboarding now offers the
# embeddinggemma-300m ONNX model as the default for new installs, so
# these are required core deps (not optional extras). The 300 MB ONNX
# model itself is lazy-downloaded on first use, not at install time.
# Users who pick minilm during onboarding still get these installed
# but unused — small wheel-size cost in exchange for one fewer pip
# command in the multilingual setup path.
"huggingface_hub>=0.20",
"tokenizers>=0.15",
"numpy>=1.24",
# Tier 6a content-date extraction uses dateutil for natural-language
# date parsing (filename + content body branches). It happens to install
# transitively today via chromadb→kubernetes→python-dateutil, but that
# chain is not a contract — declared explicitly here to ensure
# _extract_content_date keeps working if upstream kubernetes drops the
# dependency. Per PR #1584 review (Igor, 2026-05-22).
"python-dateutil>=2.8",
]
[project.urls]
Homepage = "https://github.com/MemPalace/mempalace"
Repository = "https://github.com/MemPalace/mempalace"
"Bug Tracker" = "https://github.com/MemPalace/mempalace/issues"
[project.scripts]
mempalace = "mempalace.cli:main"
mempalace-mcp = "mempalace.mcp_server:main"
[project.entry-points."mempalace.backends"]
chroma = "mempalace.backends.chroma:ChromaBackend"
pgvector = "mempalace.backends.pgvector:PgVectorBackend"
qdrant = "mempalace.backends.qdrant:QdrantBackend"
sqlite_exact = "mempalace.backends.sqlite_exact:SQLiteExactBackend"
# RFC 002 source-adapter entry-point group. Core publishes no first-party
# adapters under this group yet; ``miner.py`` and ``convo_miner.py`` migrate
# onto ``BaseSourceAdapter`` in a follow-up PR. Third-party adapter packages
# (``mempalace-source-cursor``, ``mempalace-source-git``, …) register here.
[project.entry-points."mempalace.sources"]
[project.optional-dependencies]
dev = [
"pytest>=7.0",
"pytest-cov>=4.0",
"ruff==0.15.15",
"psutil>=5.9",
# Property-based testing — generates hundreds of random inputs per
# test to find counterexamples the hand-written positive tests miss.
# Used opt-in (sprinkle ``@given(...)`` on a test); zero runtime
# cost on tests that don't use it.
"hypothesis>=6.0",
# Pre-commit framework — gates every local ``git commit`` on the
# same ruff checks CI runs. Required activation step in
# CONTRIBUTING.md: ``pre-commit install`` once per clone. Without
# this, contributors silently bypass the lint gate locally and only
# discover failures at CI time.
"pre-commit>=3.0",
# mypy — static type checker. Catches lazy ``list`` / ``dict``
# annotations that should be ``list[str]`` / ``dict[str, int]``,
# missing return types, mismatched signatures across call sites.
# Run ad-hoc with ``mypy mempalace/``; CI doesn't gate on it yet but
# contributors should fix mypy errors they see before pushing.
"mypy>=1.0",
]
spellcheck = ["autocorrect>=2.0"]
# Opt-in Postgres + pgvector backend. Only the psycopg driver is needed on the
# client; the server must have the `vector` extension available. Selected via
# MEMPALACE_BACKEND=pgvector / --backend pgvector; never required for the
# default (Chroma) install.
pgvector = ["psycopg[binary]>=3.1"]
# Hardware acceleration for the ONNX embedding model. Install exactly one:
# pip install mempalace[gpu] — NVIDIA CUDA
# pip install mempalace[dml] — DirectML (Windows AMD/Intel/NVIDIA)
# pip install mempalace[coreml] — macOS Neural Engine
# After install, set MEMPALACE_EMBEDDING_DEVICE=cuda|dml|coreml (or "auto").
gpu = ["onnxruntime-gpu>=1.16"]
dml = ["onnxruntime-directml>=1.16"]
coreml = ["onnxruntime>=1.16"]
# Multilingual extra kept as a no-op alias for back-compat with
# `pip install mempalace[multilingual]` — these deps now ship in core.
multilingual = []
# Binary-format extraction for `mempalace mine --mode extract`. Per-format
# transformer routing: striprtf for .rtf, MarkItDown for .pdf/.docx/.pptx/
# .xlsx/.epub. MarkItDown requires Python ≥ 3.10 (env marker ensures it
# only installs where supported; Python 3.9 users still get RTF coverage).
extract = [
"striprtf>=0.0.27",
# Per PR #1555 review (Igor): bare ``markitdown`` is enough to import
# but not enough to convert — actual PDF/DOCX/PPTX/XLSX extraction
# needs MarkItDown's per-format sub-extras, which pull pdfminer-six,
# mammoth, python-pptx, openpyxl, etc. EPUB is handled by base
# markitdown (EpubConverter uses beautifulsoup4, a base requirement),
# so no [epub] sub-extra is needed (and none exists in 0.1.5). RTF is
# covered by striprtf above.
"markitdown[docx,pdf,pptx,xlsx]>=0.1.5; python_version >= '3.10'",
]
[dependency-groups]
dev = [
"pytest>=7.0",
"pytest-cov>=4.0",
"ruff==0.15.15",
"psutil>=5.9",
"hypothesis>=6.0",
"pre-commit>=3.0",
"mypy>=1.0",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["mempalace"]
[tool.ruff]
line-length = 100
target-version = "py39"
extend-exclude = ["benchmarks"]
[tool.ruff.lint]
select = ["E", "F", "W", "C901"]
ignore = ["E501"]
[tool.ruff.lint.mccabe]
max-complexity = 25
[tool.ruff.format]
quote-style = "double"
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["."]
addopts = "-m 'not benchmark and not slow and not stress'"
markers = [
"benchmark: scale/performance benchmark tests",
"slow: tests that take more than 30 seconds",
"stress: destructive scale tests (100K+ drawers)",
]
[tool.coverage.run]
source = ["mempalace"]
[tool.coverage.report]
fail_under = 85
show_missing = true
exclude_lines = [
"if __name__",
"pragma: no cover",
]