Thicket/pyproject.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__.:",
]