personal memory agent
5.0 kB
167 lines
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 # solstone/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 = "solstone.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 = ["solstone*"]
126
127[tool.setuptools.package-data]
128"solstone.apps" = ["*/app.json", "*/*.html", "*/guides/*.md", "*/talent/*.md", "*/talent/*.py", "*/talent/*.json", "*/talent/*.schema.json", "*/talent/*/SKILL.md", "*/static/*", "*/static/**/*"]
129"solstone.think" = ["*.md", "*.json", "templates/*.md", "policies/*.toml"]
130"solstone.talent" = ["*.md", "*.py", "*.schema.json", "*/SKILL.md", "*/references/*.md"]
131"solstone.observe" = ["*.md", "*.json", "*.schema.json", "categories/*.md", "transcribe/*.md", "transcribe/*.json", "transcribe/assets/*.onnx", "transcribe/parakeet_helper/*", "transcribe/parakeet_helper/**/*"]
132"solstone.convey" = ["templates/*.html", "static/*", "static/**/*"]
133
134# Development tools configuration
135[tool.ruff]
136target-version = "py310"
137exclude = [".venv", "scratch", "logs", "build", "dist"]
138
139[tool.ruff.lint]
140select = ["F", "E", "W", "I"]
141ignore = ["E501", "E203", "E402"]
142
143[tool.mypy]
144python_version = "3.12"
145warn_return_any = true
146warn_unused_configs = true
147exclude = ["tests", ".venv", "scratch", "logs", "build", "dist"]
148ignore_missing_imports = true
149ignore_errors = true
150
151[tool.pytest.ini_options]
152addopts = "--import-mode=importlib"
153testpaths = ["tests", "solstone/apps"]
154python_files = ["test_*.py"]
155python_classes = ["Test*"]
156python_functions = ["test_*"]
157markers = [
158 "integration: marks tests as integration tests (deselect with '-m \"not integration\"')",
159]
160timeout = 15
161tmp_path_retention_policy = "none"
162filterwarnings = [
163 # Third-party deprecation warnings (Python 3.14+)
164 "ignore:codecs.open.* is deprecated:DeprecationWarning",
165 "ignore:.*_UnionGenericAlias.* is deprecated:DeprecationWarning",
166 "ignore:.*DefaultEventLoopPolicy.* is deprecated:DeprecationWarning",
167]