abstractassistant 0.3.4__py3-none-any.whl → 0.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- abstractassistant/app.py +69 -6
- abstractassistant/cli.py +104 -85
- abstractassistant/core/agent_host.py +583 -0
- abstractassistant/core/llm_manager.py +338 -431
- abstractassistant/core/session_index.py +293 -0
- abstractassistant/core/session_store.py +79 -0
- abstractassistant/core/tool_policy.py +58 -0
- abstractassistant/core/transcript_summary.py +434 -0
- abstractassistant/ui/history_dialog.py +504 -29
- abstractassistant/ui/provider_manager.py +2 -2
- abstractassistant/ui/qt_bubble.py +2289 -489
- abstractassistant-0.4.0.dist-info/METADATA +168 -0
- abstractassistant-0.4.0.dist-info/RECORD +32 -0
- {abstractassistant-0.3.4.dist-info → abstractassistant-0.4.0.dist-info}/WHEEL +1 -1
- {abstractassistant-0.3.4.dist-info → abstractassistant-0.4.0.dist-info}/entry_points.txt +1 -0
- abstractassistant-0.3.4.dist-info/METADATA +0 -297
- abstractassistant-0.3.4.dist-info/RECORD +0 -27
- {abstractassistant-0.3.4.dist-info → abstractassistant-0.4.0.dist-info}/licenses/LICENSE +0 -0
- {abstractassistant-0.3.4.dist-info → abstractassistant-0.4.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: abstractassistant
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: A sleek (macOS) system tray application providing instant access to LLMs
|
|
5
|
+
Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/lpalbou/abstractassistant
|
|
8
|
+
Project-URL: Repository, https://github.com/lpalbou/abstractassistant
|
|
9
|
+
Project-URL: Issues, https://github.com/lpalbou/abstractassistant/issues
|
|
10
|
+
Keywords: ai,llm,macos,system-tray,assistant
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
13
|
+
Classifier: Operating System :: MacOS
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
20
|
+
Classifier: Topic :: Desktop Environment
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: abstractagent>=0.3.0
|
|
25
|
+
Requires-Dist: tomli>=2.0.0; python_version < "3.11"
|
|
26
|
+
Requires-Dist: tomli-w>=1.0.0
|
|
27
|
+
Requires-Dist: pystray>=0.19.4
|
|
28
|
+
Requires-Dist: Pillow>=10.0.0
|
|
29
|
+
Requires-Dist: PyQt5>=5.15.0
|
|
30
|
+
Requires-Dist: markdown>=3.5.0
|
|
31
|
+
Requires-Dist: pygments>=2.16.0
|
|
32
|
+
Requires-Dist: pymdown-extensions>=10.0
|
|
33
|
+
Requires-Dist: pyperclip>=1.8.2
|
|
34
|
+
Requires-Dist: plyer>=2.1.0
|
|
35
|
+
Provides-Extra: lite
|
|
36
|
+
Provides-Extra: full
|
|
37
|
+
Requires-Dist: abstractvoice>=0.6.0; extra == "full"
|
|
38
|
+
Requires-Dist: abstractcore[anthropic,lmstudio,media,ollama,openai,tokens]>=2.11.0; extra == "full"
|
|
39
|
+
Provides-Extra: dev
|
|
40
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
41
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
42
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
43
|
+
Requires-Dist: mypy>=1.5.0; extra == "dev"
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+
# AbstractAssistant
|
|
47
|
+
|
|
48
|
+
One-click, tray-accessible agent host for AbstractFramework.
|
|
49
|
+
|
|
50
|
+
AbstractAssistant runs **agentic** loops (ReAct/CodeAct/MemAct) on top of:
|
|
51
|
+
- **AbstractAgent** (agent patterns)
|
|
52
|
+
- **AbstractRuntime** (durable runs, waits, ledgers)
|
|
53
|
+
- **AbstractCore** (provider/tool normalization)
|
|
54
|
+
- Optional: **AbstractVoice** (STT/TTS)
|
|
55
|
+
|
|
56
|
+
Docs:
|
|
57
|
+
- `docs/getting-started.md`
|
|
58
|
+
- `docs/architecture.md`
|
|
59
|
+
|
|
60
|
+
## Install profiles
|
|
61
|
+
|
|
62
|
+
- `abstractassistant` (default) == `lite`: tray UI + agent backend (no voice)
|
|
63
|
+
- `abstractassistant[full]`: voice (STT/TTS) + broader provider/media extras
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
pip install "abstractassistant"
|
|
67
|
+
# or
|
|
68
|
+
pip install "abstractassistant[full]"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Quick start
|
|
72
|
+
|
|
73
|
+
Tray (macOS):
|
|
74
|
+
```bash
|
|
75
|
+
assistant tray
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Alias:
|
|
79
|
+
```bash
|
|
80
|
+
abstractassistant tray
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Terminal (one turn):
|
|
84
|
+
```bash
|
|
85
|
+
assistant run --prompt "What is in this repo and where do I start?"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Provider/model override:
|
|
89
|
+
```bash
|
|
90
|
+
assistant run --provider ollama --model qwen3:4b-instruct --prompt "Summarize my changes"
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Tool approvals (important)
|
|
94
|
+
|
|
95
|
+
AbstractAssistant enforces a durable tool boundary:
|
|
96
|
+
- read-only / known-safe tools can auto-run
|
|
97
|
+
- anything else pauses and requires approval (tray dialog or terminal prompt)
|
|
98
|
+
|
|
99
|
+
This aligns with the framework’s durability + safety model: tools are executed by the host, not persisted as callables inside run state.
|
|
100
|
+
|
|
101
|
+
## Data & durability
|
|
102
|
+
|
|
103
|
+
By default, assistant state is stored in `~/.abstractassistant/` (configurable via `--data-dir`):
|
|
104
|
+
- `session.json`: fast UI snapshot (transcript + last run id)
|
|
105
|
+
- `runtime/`: run store + ledger + artifacts (source of truth)
|
|
106
|
+
|
|
107
|
+
## Development
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
pip install -e ".[dev,lite]"
|
|
111
|
+
python -m pytest -q
|
|
112
|
+
assistant tray --debug
|
|
113
|
+
```
|
|
114
|
+
- **📱 Unobtrusive**: Lives quietly in your menu bar until needed
|
|
115
|
+
- **🔊 Conversational**: Optional voice mode for natural AI interactions
|
|
116
|
+
|
|
117
|
+
## 📚 Documentation
|
|
118
|
+
|
|
119
|
+
| Guide | Description |
|
|
120
|
+
|-------|------------|
|
|
121
|
+
| [📖 Installation Guide](docs/installation.md) | Complete setup instructions, prerequisites, and troubleshooting |
|
|
122
|
+
| [🎯 Getting Started Guide](docs/getting-started.md) | Step-by-step usage guide with all features explained |
|
|
123
|
+
| [🏗️ Architecture Guide](docs/architecture.md) | Technical documentation and development information |
|
|
124
|
+
|
|
125
|
+
## 📋 Requirements
|
|
126
|
+
|
|
127
|
+
- **macOS**: 10.14+ (Mojave or later)
|
|
128
|
+
- **Python**: 3.9+
|
|
129
|
+
- **Qt Framework**: PyQt5, PySide2, or PyQt6 (automatically detected)
|
|
130
|
+
- **Dependencies**: [AbstractCore](https://github.com/lpalbou/abstractcore) and [AbstractVoice](https://github.com/lpalbou/abstractvoice) (automatically installed)
|
|
131
|
+
|
|
132
|
+
## 🤝 Contributing
|
|
133
|
+
|
|
134
|
+
Contributions welcome! Please read the architecture documentation and follow the established patterns:
|
|
135
|
+
|
|
136
|
+
- **Clean Code**: Follow PEP 8 and use type hints
|
|
137
|
+
- **Modular Design**: Keep components focused and reusable
|
|
138
|
+
- **Modern UI/UX**: Maintain the sleek, native feel
|
|
139
|
+
- **Error Handling**: Always include graceful fallbacks
|
|
140
|
+
- **Documentation**: Update docs for any new features
|
|
141
|
+
|
|
142
|
+
## 📄 License
|
|
143
|
+
|
|
144
|
+
MIT License - see LICENSE file for details.
|
|
145
|
+
|
|
146
|
+
## 🙏 Acknowledgments
|
|
147
|
+
|
|
148
|
+
AbstractAssistant is built on excellent open-source projects:
|
|
149
|
+
|
|
150
|
+
### Core Dependencies
|
|
151
|
+
- **[AbstractCore](https://github.com/lpalbou/abstractcore)**: Universal LLM interface - enables seamless multi-provider support
|
|
152
|
+
- **[AbstractVoice](https://github.com/lpalbou/abstractvoice)**: High-quality text-to-speech engine with natural voice synthesis
|
|
153
|
+
|
|
154
|
+
### Framework & UI
|
|
155
|
+
- **[PyQt5/PySide2/PyQt6](https://www.qt.io/)**: Cross-platform GUI framework for the modern interface
|
|
156
|
+
- **[pystray](https://github.com/moses-palmer/pystray)**: Cross-platform system tray integration
|
|
157
|
+
- **[Pillow](https://python-pillow.org/)**: Image processing for dynamic icon generation
|
|
158
|
+
|
|
159
|
+
### Part of the AbstractX Ecosystem
|
|
160
|
+
AbstractAssistant integrates seamlessly with other AbstractX projects:
|
|
161
|
+
- 🧠 **[AbstractCore](https://github.com/lpalbou/abstractcore)**: Universal LLM provider interface
|
|
162
|
+
- 🗣️ **[AbstractVoice](https://github.com/lpalbou/abstractvoice)**: Advanced text-to-speech capabilities
|
|
163
|
+
|
|
164
|
+
See [ACKNOWLEDGMENTS.md](ACKNOWLEDGMENTS.md) for complete attribution.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
**Built with ❤️ for macOS users who want AI at their fingertips**
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
abstractassistant/__init__.py,sha256=homfqMDh6sX2nBROtk6-y72jnrStPph8gEOeT0OjKyU,35
|
|
2
|
+
abstractassistant/app.py,sha256=k55op9nSMa_ACjdaFBevvajuSKEXA0YNXoyEzihszp0,42676
|
|
3
|
+
abstractassistant/cli.py,sha256=5EaJyELhmGg7zIn3eBjFSbLe77m3_dywywLBiiPBKXo,6495
|
|
4
|
+
abstractassistant/config.py,sha256=KodfPYTpHtavJyne-h-B-r3kbEt1uusSY8GknGLtDL8,5809
|
|
5
|
+
abstractassistant/create_app_bundle.py,sha256=lJJsdnjl-WSdQVn8uFp7c_3cJkx8liZbK2C7elOCG1A,14215
|
|
6
|
+
abstractassistant/web_server.py,sha256=_pqMzy13qfim9BMBqQJQifWyX7UQXFD_sZeiu4ZBt40,12816
|
|
7
|
+
abstractassistant/core/__init__.py,sha256=TETStgToTe7QSsCZgRHDk2oSErlLJoeGN0sFg4Yx2_c,15
|
|
8
|
+
abstractassistant/core/agent_host.py,sha256=jylmHmxgNlmfQMq90mkOMTw5AUxW2PJ8-umEv-bNyO4,25223
|
|
9
|
+
abstractassistant/core/llm_manager.py,sha256=Uqj3WtbQ5xq_iWXUjqGVSoJyzjTJfAlVitlXlgKEuHM,13873
|
|
10
|
+
abstractassistant/core/session_index.py,sha256=gUjErkD5F9vJ45YCJ07gRAIBsiKwPcFkI5X-AbALf1E,9711
|
|
11
|
+
abstractassistant/core/session_store.py,sha256=bR6ghmp2_D946uZ0SrcJiFbeeO80XmfXxnM5npGwZOg,2685
|
|
12
|
+
abstractassistant/core/tool_policy.py,sha256=n2BeGo7BQKQFDCqCBSf7Rx_YEpvNZM30mx9x8Pgrr7E,1700
|
|
13
|
+
abstractassistant/core/transcript_summary.py,sha256=NprTGD0xAJ1aZz3qIfHNuf3XQo3U9U_FUhiz11Lbbqo,15341
|
|
14
|
+
abstractassistant/core/tts_manager.py,sha256=Cxh302EgIycwkWxe7XntmLW-j_WusbJOYRCs3Jms3CU,9892
|
|
15
|
+
abstractassistant/ui/__init__.py,sha256=aRNE2pS50nFAX6y--rSGMNYwhz905g14gRd6g4BolYU,13
|
|
16
|
+
abstractassistant/ui/chat_bubble.py,sha256=bY48b4IeQzOrRN2_sJ5OazhZcJ8IMaBM6R3EexvU30Q,11885
|
|
17
|
+
abstractassistant/ui/history_dialog.py,sha256=2WlOPYyIVeBvJyzyMADrqL1Dx5Cf8gUA_LFbi2QyKlQ,57918
|
|
18
|
+
abstractassistant/ui/provider_manager.py,sha256=v61bM3yNt5jEbU5yS6J2q32kl6qw8zG-I6vKtx3l0cA,8364
|
|
19
|
+
abstractassistant/ui/qt_bubble.py,sha256=DK4FDi8QoTHDj55qNvPkJOyqF3qxZjF5Zujz3ni_Qq4,184058
|
|
20
|
+
abstractassistant/ui/toast_manager.py,sha256=1aU4DPo-J45bC61gTEctHq98ZrHIFxRfZa_9Q8KF588,13721
|
|
21
|
+
abstractassistant/ui/toast_window.py,sha256=BRSwEBlaND5LLipn1HOX0ISWxVH-zOHsYplFkiPaj_g,21727
|
|
22
|
+
abstractassistant/ui/tts_state_manager.py,sha256=UF_zrfl9wf0hNHBGxevcoKxW5Dh7zXibUSVoSSjGP4o,10565
|
|
23
|
+
abstractassistant/ui/ui_styles.py,sha256=FvE2CVUbHmHu1PKVTBBGyhbt781qh4WjLMrHviln39s,13120
|
|
24
|
+
abstractassistant/utils/__init__.py,sha256=7Q3BxyXETkt3tm5trhuLTyL8PoECOK0QiK-0KUVAR2Q,16
|
|
25
|
+
abstractassistant/utils/icon_generator.py,sha256=SWPgi1V6_8544Zbc2vAfFXAy15H35neyUGCYt2eKoic,16475
|
|
26
|
+
abstractassistant/utils/markdown_renderer.py,sha256=u5tVIhulSwRYADiqJcZNoHhU8e6pJVgzrwZRd61Bov0,12585
|
|
27
|
+
abstractassistant-0.4.0.dist-info/licenses/LICENSE,sha256=QUjFNAE-0yOkW9-Rle2axkpkt9H7xiZ2VbN-VeONhxc,1106
|
|
28
|
+
abstractassistant-0.4.0.dist-info/METADATA,sha256=xlnv65TOWp4ZHvvEDKzMfI6KAGicbzF1cG-YnkY-FRY,6014
|
|
29
|
+
abstractassistant-0.4.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
30
|
+
abstractassistant-0.4.0.dist-info/entry_points.txt,sha256=nXLvwelHBy1uQHcl-HeraHwvxeE9EQj-sSNlRe6nUf0,165
|
|
31
|
+
abstractassistant-0.4.0.dist-info/top_level.txt,sha256=qZc_LQH3CBxLq2P4B1aHayzkj8hn0euR31edkXQVzDA,18
|
|
32
|
+
abstractassistant-0.4.0.dist-info/RECORD,,
|
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: abstractassistant
|
|
3
|
-
Version: 0.3.4
|
|
4
|
-
Summary: A sleek (macOS) system tray application providing instant access to LLMs
|
|
5
|
-
Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
|
|
6
|
-
License-Expression: MIT
|
|
7
|
-
Project-URL: Homepage, https://github.com/lpalbou/abstractassistant
|
|
8
|
-
Project-URL: Repository, https://github.com/lpalbou/abstractassistant
|
|
9
|
-
Project-URL: Issues, https://github.com/lpalbou/abstractassistant/issues
|
|
10
|
-
Keywords: ai,llm,macos,system-tray,assistant
|
|
11
|
-
Classifier: Development Status :: 4 - Beta
|
|
12
|
-
Classifier: Intended Audience :: End Users/Desktop
|
|
13
|
-
Classifier: Operating System :: MacOS
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
-
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
20
|
-
Classifier: Topic :: Desktop Environment
|
|
21
|
-
Requires-Python: >=3.9
|
|
22
|
-
Description-Content-Type: text/markdown
|
|
23
|
-
License-File: LICENSE
|
|
24
|
-
Requires-Dist: abstractcore[all]>=2.5.0
|
|
25
|
-
Requires-Dist: pystray>=0.19.4
|
|
26
|
-
Requires-Dist: Pillow>=10.0.0
|
|
27
|
-
Requires-Dist: PyQt5>=5.15.0
|
|
28
|
-
Requires-Dist: markdown>=3.5.0
|
|
29
|
-
Requires-Dist: pygments>=2.16.0
|
|
30
|
-
Requires-Dist: pymdown-extensions>=10.0
|
|
31
|
-
Requires-Dist: abstractvoice>=0.5.1
|
|
32
|
-
Requires-Dist: pyperclip>=1.8.2
|
|
33
|
-
Requires-Dist: plyer>=2.1.0
|
|
34
|
-
Requires-Dist: tomli>=2.0.0; python_version < "3.11"
|
|
35
|
-
Requires-Dist: tomli-w>=1.0.0
|
|
36
|
-
Provides-Extra: dev
|
|
37
|
-
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
38
|
-
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
39
|
-
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
40
|
-
Requires-Dist: mypy>=1.5.0; extra == "dev"
|
|
41
|
-
Dynamic: license-file
|
|
42
|
-
|
|
43
|
-
# AbstractAssistant 🤖
|
|
44
|
-
|
|
45
|
-
Philosophy : *your AI assistant, always here and available in one click*
|
|
46
|
-
|
|
47
|
-
A sleek macOS system tray application providing instant access to Large Language Models with a modern Qt-based interface. Built with Python and powered by [AbstractCore](https://github.com/lpalbou/abstractcore) and [AbstractVoice](https://github.com/lpalbou/abstractvoice).
|
|
48
|
-
|
|
49
|
-
## 📦 Installation & Links
|
|
50
|
-
|
|
51
|
-
- **📋 GitHub Repository**: [https://github.com/lpalbou/abstractassistant](https://github.com/lpalbou/abstractassistant)
|
|
52
|
-
- **🐍 PyPI Package**: [https://pypi.org/project/abstractassistant/](https://pypi.org/project/abstractassistant/)
|
|
53
|
-
- **📚 Documentation**: See [docs/](docs/) folder for detailed guides
|
|
54
|
-
|
|
55
|
-
## ✨ Features
|
|
56
|
-
|
|
57
|
-
- **🎯 System Tray Integration**: Quick access from macOS menu bar - always at your fingertips
|
|
58
|
-
- **💬 Modern Qt Interface**: Clean, iPhone Messages-style chat bubble with dark theme
|
|
59
|
-
- **🔊 Voice Support**: Text-to-Speech integration with [AbstractVoice](https://github.com/lpalbou/abstractvoice) for conversational AI
|
|
60
|
-
- **🔄 Multi-Provider Support**: Seamlessly switch between LMStudio, Ollama, OpenAI, Anthropic, MLX, HuggingFace via [AbstractCore](https://github.com/lpalbou/abstractcore)
|
|
61
|
-
- **📊 Real-time Status**: Live token counting, provider/model selection, and animated status indicators
|
|
62
|
-
- **💾 Session Management**: Save, load, and view conversation history with markdown rendering
|
|
63
|
-
- **⚙️ Smart Controls**: Provider/model dropdowns, TTS toggle, and session buttons
|
|
64
|
-
- **🎨 Professional Design**: Rounded corners, smooth animations, and native macOS feel
|
|
65
|
-
|
|
66
|
-
## 🚀 Quick Start
|
|
67
|
-
|
|
68
|
-
### 1. Installation
|
|
69
|
-
|
|
70
|
-
#### 🍎 macOS Users (Recommended)
|
|
71
|
-
```bash
|
|
72
|
-
# Install AbstractAssistant
|
|
73
|
-
pip install abstractassistant
|
|
74
|
-
|
|
75
|
-
# Create native macOS app bundle
|
|
76
|
-
create-app-bundle
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
This will:
|
|
80
|
-
- Install AbstractAssistant from PyPI with all dependencies
|
|
81
|
-
- Create a native macOS app bundle in `/Applications`
|
|
82
|
-
- Add AbstractAssistant to your Dock with a beautiful neural network icon
|
|
83
|
-
- Enable launch from Spotlight, Finder, and Dock
|
|
84
|
-
|
|
85
|
-
#### 🔧 Standard Installation
|
|
86
|
-
```bash
|
|
87
|
-
# Install from PyPI (terminal access only)
|
|
88
|
-
pip install abstractassistant
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
For detailed installation instructions including prerequisites and voice setup, see **[📖 Installation Guide](docs/installation.md)**.
|
|
92
|
-
|
|
93
|
-
### 2. First Launch
|
|
94
|
-
|
|
95
|
-
#### 🍎 macOS App Bundle Users
|
|
96
|
-
- **Dock**: Click the AbstractAssistant icon in your Dock
|
|
97
|
-
- **Spotlight**: Search for "AbstractAssistant" and press Enter
|
|
98
|
-
- **Finder**: Open `/Applications/AbstractAssistant.app`
|
|
99
|
-
|
|
100
|
-
#### 🔧 Terminal Users
|
|
101
|
-
```bash
|
|
102
|
-
# Launch the assistant
|
|
103
|
-
assistant
|
|
104
|
-
|
|
105
|
-
# Create macOS app bundle after installation
|
|
106
|
-
create-app-bundle
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### 3. Start Using
|
|
110
|
-
1. **Find the Icon**: Look for AbstractAssistant in your macOS menu bar (top-right)
|
|
111
|
-
2. **Click to Open**: Click the icon to open the chat bubble
|
|
112
|
-
3. **Start Chatting**: Type your message and send!
|
|
113
|
-
|
|
114
|
-
For a complete walkthrough of all features, see **[🎯 Getting Started Guide](docs/getting-started.md)**.
|
|
115
|
-
|
|
116
|
-
### 📋 Prerequisites
|
|
117
|
-
- **macOS**: 10.14+ (Mojave or later)
|
|
118
|
-
- **Python**: 3.9+
|
|
119
|
-
- **Models**: Local (LMStudio/Ollama) or API keys (OpenAI/Anthropic)
|
|
120
|
-
|
|
121
|
-
See **[⚙️ Installation Guide](docs/installation.md)** for detailed setup instructions.
|
|
122
|
-
|
|
123
|
-
## 🎮 Usage Overview
|
|
124
|
-
|
|
125
|
-
AbstractAssistant provides a clean, intuitive interface for AI conversations:
|
|
126
|
-
|
|
127
|
-
### 🖱️ Main Interface
|
|
128
|
-
- **Chat Bubble**: Modern iPhone Messages-style interface
|
|
129
|
-
- **Provider/Model Selection**: Easy switching between AI providers
|
|
130
|
-
- **Voice Support**: Optional text-to-speech for responses
|
|
131
|
-
- **Session Management**: Save, load, and view conversation history
|
|
132
|
-
|
|
133
|
-
### 🎙️ Voice Features
|
|
134
|
-
- **Text-to-Speech**: Powered by [AbstractVoice](https://github.com/lpalbou/abstractvoice)
|
|
135
|
-
- **High-Quality Speech**: Natural-sounding voice synthesis
|
|
136
|
-
- **Simple Controls**: One-click enable/disable
|
|
137
|
-
|
|
138
|
-
### 🔧 System Integration
|
|
139
|
-
- **System Tray**: Always accessible from macOS menu bar
|
|
140
|
-
- **Native Feel**: Designed for macOS with smooth animations
|
|
141
|
-
- **Lightweight**: Minimal resource usage when idle
|
|
142
|
-
|
|
143
|
-
**👉 For detailed usage instructions, see [🎯 Getting Started Guide](docs/getting-started.md)**
|
|
144
|
-
|
|
145
|
-
## ⚙️ Configuration
|
|
146
|
-
|
|
147
|
-
Create a `config.toml` file to customize settings:
|
|
148
|
-
|
|
149
|
-
```toml
|
|
150
|
-
[ui]
|
|
151
|
-
theme = "dark"
|
|
152
|
-
always_on_top = true
|
|
153
|
-
|
|
154
|
-
[llm]
|
|
155
|
-
default_provider = "lmstudio"
|
|
156
|
-
default_model = "qwen/qwen3-next-80b"
|
|
157
|
-
max_tokens = 128000
|
|
158
|
-
temperature = 0.7
|
|
159
|
-
|
|
160
|
-
[system_tray]
|
|
161
|
-
icon_size = 64
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
### API Keys Setup
|
|
165
|
-
|
|
166
|
-
Set your API keys as environment variables:
|
|
167
|
-
|
|
168
|
-
```bash
|
|
169
|
-
# For OpenAI
|
|
170
|
-
export OPENAI_API_KEY="your_openai_key_here"
|
|
171
|
-
|
|
172
|
-
# For Anthropic
|
|
173
|
-
export ANTHROPIC_API_KEY="your_anthropic_key_here"
|
|
174
|
-
|
|
175
|
-
# For local models (LMStudio, Ollama), no API key needed
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## 🏗️ Architecture
|
|
179
|
-
|
|
180
|
-
AbstractAssistant is built on a modern, modular architecture:
|
|
181
|
-
|
|
182
|
-
- **[AbstractCore](https://github.com/lpalbou/abstractcore)**: Universal LLM provider interface
|
|
183
|
-
- **[AbstractVoice](https://github.com/lpalbou/abstractvoice)**: High-quality text-to-speech engine
|
|
184
|
-
- **Qt Interface**: Cross-platform GUI (PyQt5/PySide2/PyQt6 support)
|
|
185
|
-
- **System Integration**: Native macOS system tray with `pystray`
|
|
186
|
-
- **Session Management**: Persistent conversation history and settings
|
|
187
|
-
|
|
188
|
-
**👉 For technical details, see [🏗️ Architecture Guide](docs/architecture.md)**
|
|
189
|
-
|
|
190
|
-
## 🔧 Development
|
|
191
|
-
|
|
192
|
-
### Running from Source
|
|
193
|
-
|
|
194
|
-
```bash
|
|
195
|
-
# Clone the repository
|
|
196
|
-
git clone https://github.com/lpalbou/abstractassistant.git
|
|
197
|
-
cd abstractassistant
|
|
198
|
-
|
|
199
|
-
# Create virtual environment
|
|
200
|
-
python3 -m venv .venv
|
|
201
|
-
source .venv/bin/activate
|
|
202
|
-
|
|
203
|
-
# Install in development mode
|
|
204
|
-
pip install -e .
|
|
205
|
-
|
|
206
|
-
# Run with debug mode
|
|
207
|
-
assistant --debug
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### Project Structure
|
|
211
|
-
|
|
212
|
-
```
|
|
213
|
-
abstractassistant/
|
|
214
|
-
├── pyproject.toml # Package configuration
|
|
215
|
-
├── requirements.txt # Dependencies
|
|
216
|
-
├── config.toml # Default configuration
|
|
217
|
-
├── abstractassistant/ # Main package
|
|
218
|
-
│ ├── cli.py # CLI entry point
|
|
219
|
-
│ ├── app.py # Main application
|
|
220
|
-
│ ├── config.py # Configuration management
|
|
221
|
-
│ ├── core/ # Business logic
|
|
222
|
-
│ │ ├── llm_manager.py # LLM provider management
|
|
223
|
-
│ │ └── tts_manager.py # Voice/TTS integration
|
|
224
|
-
│ ├── ui/ # User interface
|
|
225
|
-
│ │ ├── qt_bubble.py # Main Qt chat interface
|
|
226
|
-
│ │ └── toast_window.py # Notification system
|
|
227
|
-
│ └── utils/ # Utilities
|
|
228
|
-
│ ├── icon_generator.py # Dynamic icon creation
|
|
229
|
-
│ └── markdown_renderer.py # Markdown processing
|
|
230
|
-
└── docs/ # Documentation
|
|
231
|
-
├── architecture.md # Technical documentation
|
|
232
|
-
├── installation.md # Installation guide
|
|
233
|
-
└── getting-started.md # Usage guide
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
## 🌟 Why AbstractAssistant?
|
|
237
|
-
|
|
238
|
-
- **🎯 Focused**: Designed specifically for quick AI interactions
|
|
239
|
-
- **🎨 Beautiful**: Modern Qt interface with native macOS feel
|
|
240
|
-
- **⚡ Fast**: Instant access without opening heavy applications
|
|
241
|
-
- **🔄 Flexible**: Support for multiple AI providers in one interface
|
|
242
|
-
- **🛡️ Robust**: Built with error handling and graceful fallbacks
|
|
243
|
-
- **📱 Unobtrusive**: Lives quietly in your menu bar until needed
|
|
244
|
-
- **🔊 Conversational**: Optional voice mode for natural AI interactions
|
|
245
|
-
|
|
246
|
-
## 📚 Documentation
|
|
247
|
-
|
|
248
|
-
| Guide | Description |
|
|
249
|
-
|-------|------------|
|
|
250
|
-
| [📖 Installation Guide](docs/installation.md) | Complete setup instructions, prerequisites, and troubleshooting |
|
|
251
|
-
| [🎯 Getting Started Guide](docs/getting-started.md) | Step-by-step usage guide with all features explained |
|
|
252
|
-
| [🏗️ Architecture Guide](docs/architecture.md) | Technical documentation and development information |
|
|
253
|
-
|
|
254
|
-
## 📋 Requirements
|
|
255
|
-
|
|
256
|
-
- **macOS**: 10.14+ (Mojave or later)
|
|
257
|
-
- **Python**: 3.9+
|
|
258
|
-
- **Qt Framework**: PyQt5, PySide2, or PyQt6 (automatically detected)
|
|
259
|
-
- **Dependencies**: [AbstractCore](https://github.com/lpalbou/abstractcore) and [AbstractVoice](https://github.com/lpalbou/abstractvoice) (automatically installed)
|
|
260
|
-
|
|
261
|
-
## 🤝 Contributing
|
|
262
|
-
|
|
263
|
-
Contributions welcome! Please read the architecture documentation and follow the established patterns:
|
|
264
|
-
|
|
265
|
-
- **Clean Code**: Follow PEP 8 and use type hints
|
|
266
|
-
- **Modular Design**: Keep components focused and reusable
|
|
267
|
-
- **Modern UI/UX**: Maintain the sleek, native feel
|
|
268
|
-
- **Error Handling**: Always include graceful fallbacks
|
|
269
|
-
- **Documentation**: Update docs for any new features
|
|
270
|
-
|
|
271
|
-
## 📄 License
|
|
272
|
-
|
|
273
|
-
MIT License - see LICENSE file for details.
|
|
274
|
-
|
|
275
|
-
## 🙏 Acknowledgments
|
|
276
|
-
|
|
277
|
-
AbstractAssistant is built on excellent open-source projects:
|
|
278
|
-
|
|
279
|
-
### Core Dependencies
|
|
280
|
-
- **[AbstractCore](https://github.com/lpalbou/abstractcore)**: Universal LLM interface - enables seamless multi-provider support
|
|
281
|
-
- **[AbstractVoice](https://github.com/lpalbou/abstractvoice)**: High-quality text-to-speech engine with natural voice synthesis
|
|
282
|
-
|
|
283
|
-
### Framework & UI
|
|
284
|
-
- **[PyQt5/PySide2/PyQt6](https://www.qt.io/)**: Cross-platform GUI framework for the modern interface
|
|
285
|
-
- **[pystray](https://github.com/moses-palmer/pystray)**: Cross-platform system tray integration
|
|
286
|
-
- **[Pillow](https://python-pillow.org/)**: Image processing for dynamic icon generation
|
|
287
|
-
|
|
288
|
-
### Part of the AbstractX Ecosystem
|
|
289
|
-
AbstractAssistant integrates seamlessly with other AbstractX projects:
|
|
290
|
-
- 🧠 **[AbstractCore](https://github.com/lpalbou/abstractcore)**: Universal LLM provider interface
|
|
291
|
-
- 🗣️ **[AbstractVoice](https://github.com/lpalbou/abstractvoice)**: Advanced text-to-speech capabilities
|
|
292
|
-
|
|
293
|
-
See [ACKNOWLEDGMENTS.md](ACKNOWLEDGMENTS.md) for complete attribution.
|
|
294
|
-
|
|
295
|
-
---
|
|
296
|
-
|
|
297
|
-
**Built with ❤️ for macOS users who want AI at their fingertips**
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
abstractassistant/__init__.py,sha256=homfqMDh6sX2nBROtk6-y72jnrStPph8gEOeT0OjKyU,35
|
|
2
|
-
abstractassistant/app.py,sha256=yGFszbaqja_Y1ejSMcVYIcq8f1qdeZpVTb032geI-ZE,40374
|
|
3
|
-
abstractassistant/cli.py,sha256=SQPxQCLjX-LOlhSEvG302D0AOyxlxo5QM2imxr9wxmc,4385
|
|
4
|
-
abstractassistant/config.py,sha256=KodfPYTpHtavJyne-h-B-r3kbEt1uusSY8GknGLtDL8,5809
|
|
5
|
-
abstractassistant/create_app_bundle.py,sha256=lJJsdnjl-WSdQVn8uFp7c_3cJkx8liZbK2C7elOCG1A,14215
|
|
6
|
-
abstractassistant/web_server.py,sha256=_pqMzy13qfim9BMBqQJQifWyX7UQXFD_sZeiu4ZBt40,12816
|
|
7
|
-
abstractassistant/core/__init__.py,sha256=TETStgToTe7QSsCZgRHDk2oSErlLJoeGN0sFg4Yx2_c,15
|
|
8
|
-
abstractassistant/core/llm_manager.py,sha256=hJun-nDfRv9zxv_3tfrHAmVYSYT96E-0zDJB2TiaSeQ,19226
|
|
9
|
-
abstractassistant/core/tts_manager.py,sha256=Cxh302EgIycwkWxe7XntmLW-j_WusbJOYRCs3Jms3CU,9892
|
|
10
|
-
abstractassistant/ui/__init__.py,sha256=aRNE2pS50nFAX6y--rSGMNYwhz905g14gRd6g4BolYU,13
|
|
11
|
-
abstractassistant/ui/chat_bubble.py,sha256=bY48b4IeQzOrRN2_sJ5OazhZcJ8IMaBM6R3EexvU30Q,11885
|
|
12
|
-
abstractassistant/ui/history_dialog.py,sha256=lVyNrZVu73CZo593DvnuWU1iCpmZybTCFTjlu4RrqBM,39701
|
|
13
|
-
abstractassistant/ui/provider_manager.py,sha256=9IM-BxIs6lUlk6cDCBi7oZFMXmn4CFMlxh0s-_vhzXY,8403
|
|
14
|
-
abstractassistant/ui/qt_bubble.py,sha256=kCgj1zqWKxxvVFAroz8NDh1GtcobyhatlrcXT9PhYOI,115598
|
|
15
|
-
abstractassistant/ui/toast_manager.py,sha256=1aU4DPo-J45bC61gTEctHq98ZrHIFxRfZa_9Q8KF588,13721
|
|
16
|
-
abstractassistant/ui/toast_window.py,sha256=BRSwEBlaND5LLipn1HOX0ISWxVH-zOHsYplFkiPaj_g,21727
|
|
17
|
-
abstractassistant/ui/tts_state_manager.py,sha256=UF_zrfl9wf0hNHBGxevcoKxW5Dh7zXibUSVoSSjGP4o,10565
|
|
18
|
-
abstractassistant/ui/ui_styles.py,sha256=FvE2CVUbHmHu1PKVTBBGyhbt781qh4WjLMrHviln39s,13120
|
|
19
|
-
abstractassistant/utils/__init__.py,sha256=7Q3BxyXETkt3tm5trhuLTyL8PoECOK0QiK-0KUVAR2Q,16
|
|
20
|
-
abstractassistant/utils/icon_generator.py,sha256=SWPgi1V6_8544Zbc2vAfFXAy15H35neyUGCYt2eKoic,16475
|
|
21
|
-
abstractassistant/utils/markdown_renderer.py,sha256=u5tVIhulSwRYADiqJcZNoHhU8e6pJVgzrwZRd61Bov0,12585
|
|
22
|
-
abstractassistant-0.3.4.dist-info/licenses/LICENSE,sha256=QUjFNAE-0yOkW9-Rle2axkpkt9H7xiZ2VbN-VeONhxc,1106
|
|
23
|
-
abstractassistant-0.3.4.dist-info/METADATA,sha256=CXoP8mvao4NdI9qmyght-lTppQvuX3IgveQT7Ku0DVE,11564
|
|
24
|
-
abstractassistant-0.3.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
25
|
-
abstractassistant-0.3.4.dist-info/entry_points.txt,sha256=MIzeCh0XG6MbhIzBHtkdEjmjxYBsQrGFevq8Y1L8Jkc,118
|
|
26
|
-
abstractassistant-0.3.4.dist-info/top_level.txt,sha256=qZc_LQH3CBxLq2P4B1aHayzkj8hn0euR31edkXQVzDA,18
|
|
27
|
-
abstractassistant-0.3.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|