171 lines
5.4 KiB
TOML
171 lines
5.4 KiB
TOML
# pyproject.toml — Thicket v1.0
|
|
#
|
|
# Super-ingest + RAG console: batch-import PDF / EPUB / Markdown /
|
|
# plain-text into an Obsidian vault, a Qdrant vector store, and an
|
|
# optional LightRAG knowledge graph — wrapped in the MMD3-style
|
|
# PySide6 console UI (same visual lineage as OpenTranscode).
|
|
#
|
|
# Publish with:
|
|
# python -m build
|
|
# twine upload dist/*
|
|
|
|
[build-system]
|
|
requires = ["setuptools>=68.0", "wheel"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "thicket"
|
|
version = "1.8.1"
|
|
description = "Super-ingest + RAG console: documents -> Obsidian + Qdrant + LightRAG, with a PySide6 GUI"
|
|
readme = "README.md"
|
|
requires-python = ">=3.12"
|
|
license = { text = "AGPL-3.0-or-later" }
|
|
authors = [
|
|
{ name = "Jeremy Anderson", email = "info@dcos.net" },
|
|
]
|
|
maintainers = [
|
|
{ name = "Jeremy Anderson", email = "info@dcos.net" },
|
|
]
|
|
keywords = [
|
|
"obsidian",
|
|
"qdrant",
|
|
"lightrag",
|
|
"rag",
|
|
"thicket",
|
|
"super-ingest",
|
|
"second-brain",
|
|
"embeddings",
|
|
"knowledge-graph",
|
|
"pyside6",
|
|
"linux",
|
|
]
|
|
classifiers = [
|
|
"Development Status :: 4 - Beta",
|
|
"Environment :: X11 Applications :: Qt",
|
|
"Intended Audience :: End Users/Desktop",
|
|
"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
|
|
"Operating System :: POSIX :: Linux",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Programming Language :: Python :: 3.13",
|
|
"Topic :: Text Processing :: Indexing",
|
|
"Typing :: Typed",
|
|
]
|
|
# Core dependency is intentionally ONLY the GUI toolkit — the app
|
|
# launches and probes even on a bare system, reporting exactly which
|
|
# ingest extras are missing. Heavy pipelines deps live in extras so
|
|
# a "vault-only" install (no vector DB, no graph) stays lightweight.
|
|
dependencies = [
|
|
"PySide6>=6.6.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
# Document parsing + vector indexing — install with:
|
|
# pip install ".[ingest]"
|
|
ingest = [
|
|
"beautifulsoup4>=4.12",
|
|
"EbookLib>=0.18",
|
|
"pypdf>=4.0",
|
|
"python-slugify>=8.0",
|
|
"fastembed>=0.3",
|
|
"qdrant-client>=1.9",
|
|
]
|
|
# LightRAG knowledge-graph stage — install with:
|
|
# pip install ".[graph]"
|
|
graph = [
|
|
"lightrag-hku>=1.0",
|
|
]
|
|
# Embedded vector targets — one extra per target, or ".[targets]" for all
|
|
chroma = ["chromadb>=0.5"]
|
|
lancedb = ["lancedb>=0.15"]
|
|
faiss = ["faiss-cpu>=1.8", "numpy>=1.26"]
|
|
milvus = ["pymilvus[milvus_lite]>=2.4"]
|
|
weaviate = ["weaviate-client>=4.6"]
|
|
pgvector = ["psycopg[binary]>=3.1", "pgvector>=0.3"]
|
|
duckdb = ["duckdb>=1.0"]
|
|
sqlitevec = ["sqlite-vec>=0.1.6"]
|
|
mariadb = ["PyMySQL>=1.1"]
|
|
# Graphify graph engine — install with: pip install ".[graphify]"
|
|
graphify = ["graphifyy[ollama]>=0.9"]
|
|
# Vanna ask interaction (natural-language SQL over SQL targets)
|
|
ask = ["vanna[ollama,postgres,mysql]>=2.0"]
|
|
# MinIO object archive for source documents
|
|
minio = ["minio>=7.2"]
|
|
targets = [
|
|
"chromadb>=0.5",
|
|
"lancedb>=0.15",
|
|
"faiss-cpu>=1.8",
|
|
"numpy>=1.26",
|
|
"pymilvus[milvus_lite]>=2.4",
|
|
"weaviate-client>=4.6",
|
|
"psycopg[binary]>=3.1",
|
|
"pgvector>=0.3",
|
|
"duckdb>=1.0",
|
|
"sqlite-vec>=0.1.6",
|
|
"PyMySQL>=1.1",
|
|
]
|
|
# Dev / test extras — install with: pip install -e ".[dev]"
|
|
dev = [
|
|
"pytest>=8.0",
|
|
"pytest-cov>=4.0",
|
|
"build>=1.0",
|
|
]
|
|
|
|
[project.urls]
|
|
Homepage = "https://git.dcos.net/dcosnet/Thicket"
|
|
Repository = "https://git.dcos.net/dcosnet/Thicket"
|
|
Documentation = "https://git.dcos.net/dcosnet/Thicket/blob/main/README.md"
|
|
"Bug Tracker" = "https://git.dcos.net/dcosnet/Thicket/issues"
|
|
|
|
[project.scripts]
|
|
# Console entry point — `thicket` command after `pip install thicket`
|
|
thicket = "thicket.__main__:main"
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Setuptools-specific config
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
[tool.setuptools]
|
|
# We're a pure-Python package — no extension modules.
|
|
zip-safe = false
|
|
|
|
[tool.setuptools.packages.find]
|
|
# Auto-discover packages under thicket/ and widgets/
|
|
where = ["."]
|
|
include = ["thicket*"]
|
|
exclude = ["tests*"]
|
|
|
|
[tool.setuptools.package-data]
|
|
# Include the QSS theme + non-Python assets
|
|
thicket = ["*.qss", "*.txt"]
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Tool config
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
python_files = ["test_*.py"]
|
|
python_classes = ["Test*"]
|
|
python_functions = ["test_*"]
|
|
addopts = "-ra --strict-markers"
|
|
markers = [
|
|
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
|
|
"e2e: marks tests as end-to-end (require running Qdrant / Ollama)",
|
|
]
|
|
|
|
[tool.coverage.run]
|
|
source = ["thicket"]
|
|
omit = [
|
|
"*/tests/*",
|
|
"*/__main__.py",
|
|
]
|
|
|
|
[tool.coverage.report]
|
|
exclude_lines = [
|
|
"pragma: no cover",
|
|
"if TYPE_CHECKING:",
|
|
"raise NotImplementedError",
|
|
"if __name__ == .__main__.:",
|
|
]
|