personal memory agent
1[build-system]
2requires = ["setuptools>=61.0", "wheel"]
3build-backend = "setuptools.build_meta"
4
5[project]
6name = "solstone"
7version = "0.1.0"
8description = "Navigate Life Intelligently"
9readme = "README.md"
10requires-python = ">=3.11"
11license = {text = "AGPL-3.0-only"}
12authors = [
13 {name = "Jer+AI", email = "jeremie.miller@gmail.com"}
14]
15classifiers = [
16 "Development Status :: 3 - Alpha",
17 "Intended Audience :: Developers",
18 "License :: OSI Approved :: GNU Affero General Public License v3",
19 "Operating System :: POSIX :: Linux",
20 "Operating System :: MacOS :: MacOS X",
21 "Programming Language :: Python :: 3",
22 "Programming Language :: Python :: 3.11",
23 "Programming Language :: Python :: 3.12",
24 "Programming Language :: Python :: 3.13",
25 "Topic :: Multimedia :: Sound/Audio :: Analysis",
26 "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture",
27 "Topic :: Scientific/Engineering :: Artificial Intelligence",
28]
29keywords = ["audio", "transcription", "screenshot", "multimodal", "ai", "gemini"]
30
31dependencies = [
32 # Core dependencies
33 "python-dotenv",
34 "google-genai",
35 "Flask[async]",
36 "flask-sock",
37 "Markdown",
38 "mistune",
39 "python-frontmatter",
40
41 # Natural language time parsing
42 "timefhuman",
43 "Pillow",
44 "numpy",
45 "setproctitle",
46 "av",
47
48 "openai>=1.2.0",
49 "anthropic",
50 "httpx",
51 "h2",
52 "cryptography>=42",
53 "pyjwt>=2.8",
54 "jsonschema>=4.26,<5",
55 "genai-prices",
56 # Link tunnel service (think/link/): TLS 1.3 in memory-BIO mode over
57 # an opaque WebSocket; requires pyOpenSSL for the handshake-time
58 # verify callback that stdlib ssl can't express.
59 "pyOpenSSL>=24.0",
60 "websockets>=13.0",
61 "pypdf",
62 "pdf2image",
63 "weasyprint",
64 "icalendar",
65 "blessed>=1.20.0",
66 "psutil",
67 "tzlocal",
68 "python-slugify",
69 "rapidfuzz",
70 "typer",
71 "userpath>=1.9.2,<2",
72
73 # Audio processing
74 "soundfile",
75 "faster-whisper>=1.0.0",
76 "onnxruntime>=1.20.0,!=1.24.1; sys_platform == 'darwin'",
77 "kaldi-native-fbank>=1.22",
78 # apps/speakers/{owner,discovery}.py use sklearn.cluster.HDBSCAN. Previously
79 # pulled transitively via resemblyzer; now a direct dep.
80 "scikit-learn>=1.3",
81
82 # Media processing
83 "opencv-python-headless",
84
85 # Development tools
86 "ruff",
87 "mypy",
88 "pytest",
89 "pytest-asyncio",
90 "pytest-cov",
91 "pytest-timeout",
92 "freezegun",
93 "requests",
94]
95
96[project.optional-dependencies]
97parakeet-onnx-cpu = [
98 "onnx-asr>=0.11.0",
99 "onnxruntime>=1.25.0",
100 "huggingface-hub>=0.24",
101]
102parakeet-onnx-cuda = [
103 "onnx-asr>=0.11.0",
104 "onnxruntime-gpu>=1.25.0",
105 "huggingface-hub>=0.24",
106 "nvidia-cuda-runtime-cu12",
107 "nvidia-cudnn-cu12",
108 "nvidia-cublas-cu12",
109 "nvidia-cufft-cu12",
110 "nvidia-curand-cu12",
111 "nvidia-cuda-nvrtc-cu12",
112 "nvidia-nvjitlink-cu12",
113]
114
115[project.scripts]
116sol = "think.sol_cli:main"
117
118[project.urls]
119Homepage = "https://github.com/solpbc/solstone"
120Repository = "https://github.com/solpbc/solstone"
121Documentation = "https://github.com/solpbc/solstone/blob/main/README.md"
122"Bug Tracker" = "https://github.com/solpbc/solstone/issues"
123
124[tool.setuptools.packages.find]
125include = ["apps*", "think*", "convey*", "observe*", "talent*"]
126
127[tool.setuptools.package-data]
128apps = ["*/templates/*.html", "*/talent/*.md"]
129think = ["*.md", "*.json", "templates/*.md", "policies/*.toml"]
130talent = ["*.md", "*.py"]
131observe = ["*.md", "categories/*.md", "transcribe/*.md", "transcribe/assets/*.onnx"]
132convey = [
133 "templates/*.html",
134 "static/*",
135]
136
137# Development tools configuration
138[tool.ruff]
139target-version = "py310"
140exclude = [".venv", "scratch", "logs", "build", "dist"]
141
142[tool.ruff.lint]
143select = ["F", "E", "W", "I"]
144ignore = ["E501", "E203", "E402"]
145
146[tool.mypy]
147python_version = "3.12"
148warn_return_any = true
149warn_unused_configs = true
150exclude = ["tests", ".venv", "scratch", "logs", "build", "dist"]
151ignore_missing_imports = true
152ignore_errors = true
153
154[tool.pytest.ini_options]
155addopts = "--import-mode=importlib"
156testpaths = ["tests", "apps"]
157python_files = ["test_*.py"]
158python_classes = ["Test*"]
159python_functions = ["test_*"]
160markers = [
161 "integration: marks tests as integration tests (deselect with '-m \"not integration\"')",
162]
163timeout = 15
164tmp_path_retention_policy = "none"
165filterwarnings = [
166 # Third-party deprecation warnings (Python 3.14+)
167 "ignore:codecs.open.* is deprecated:DeprecationWarning",
168 "ignore:.*_UnionGenericAlias.* is deprecated:DeprecationWarning",
169 "ignore:.*DefaultEventLoopPolicy.* is deprecated:DeprecationWarning",
170]