soliplex 0.42__tar.gz
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.
- soliplex-0.42/LICENSE +21 -0
- soliplex-0.42/PKG-INFO +357 -0
- soliplex-0.42/README.md +326 -0
- soliplex-0.42/pyproject.toml +123 -0
- soliplex-0.42/setup.cfg +4 -0
- soliplex-0.42/src/soliplex/agents.py +137 -0
- soliplex-0.42/src/soliplex/agui/__init__.py +380 -0
- soliplex-0.42/src/soliplex/agui/features.py +47 -0
- soliplex-0.42/src/soliplex/agui/parser.py +577 -0
- soliplex-0.42/src/soliplex/agui/persistence.py +938 -0
- soliplex-0.42/src/soliplex/agui/util.py +10 -0
- soliplex-0.42/src/soliplex/auth.py +10 -0
- soliplex-0.42/src/soliplex/authn.py +77 -0
- soliplex-0.42/src/soliplex/authz/__init__.py +92 -0
- soliplex-0.42/src/soliplex/authz/schema.py +460 -0
- soliplex-0.42/src/soliplex/cli.py +992 -0
- soliplex-0.42/src/soliplex/completions.py +93 -0
- soliplex-0.42/src/soliplex/config.py +2960 -0
- soliplex-0.42/src/soliplex/examples.py +273 -0
- soliplex-0.42/src/soliplex/haiku_chat.py +257 -0
- soliplex-0.42/src/soliplex/installation.py +478 -0
- soliplex-0.42/src/soliplex/log_ingest.py +48 -0
- soliplex-0.42/src/soliplex/loggers.py +82 -0
- soliplex-0.42/src/soliplex/main.py +225 -0
- soliplex-0.42/src/soliplex/mcp_auth.py +105 -0
- soliplex-0.42/src/soliplex/mcp_client.py +94 -0
- soliplex-0.42/src/soliplex/mcp_server.py +94 -0
- soliplex-0.42/src/soliplex/models.py +725 -0
- soliplex-0.42/src/soliplex/ollama.py +179 -0
- soliplex-0.42/src/soliplex/quizzes.py +107 -0
- soliplex-0.42/src/soliplex/secrets.py +170 -0
- soliplex-0.42/src/soliplex/tools.py +192 -0
- soliplex-0.42/src/soliplex/tui/cli.py +47 -0
- soliplex-0.42/src/soliplex/tui/main.py +1273 -0
- soliplex-0.42/src/soliplex/tui/rest_api.py +266 -0
- soliplex-0.42/src/soliplex/tui/serve.py +10 -0
- soliplex-0.42/src/soliplex/util.py +244 -0
- soliplex-0.42/src/soliplex/views/__init__.py +114 -0
- soliplex-0.42/src/soliplex/views/agui.py +754 -0
- soliplex-0.42/src/soliplex/views/authn.py +171 -0
- soliplex-0.42/src/soliplex/views/authz.py +163 -0
- soliplex-0.42/src/soliplex/views/completions.py +97 -0
- soliplex-0.42/src/soliplex/views/installation.py +138 -0
- soliplex-0.42/src/soliplex/views/log_ingest.py +67 -0
- soliplex-0.42/src/soliplex/views/quizzes.py +107 -0
- soliplex-0.42/src/soliplex/views/rooms.py +308 -0
- soliplex-0.42/src/soliplex/views/streaming.py +53 -0
- soliplex-0.42/src/soliplex.egg-info/PKG-INFO +357 -0
- soliplex-0.42/src/soliplex.egg-info/SOURCES.txt +51 -0
- soliplex-0.42/src/soliplex.egg-info/dependency_links.txt +1 -0
- soliplex-0.42/src/soliplex.egg-info/entry_points.txt +4 -0
- soliplex-0.42/src/soliplex.egg-info/requires.txt +19 -0
- soliplex-0.42/src/soliplex.egg-info/top_level.txt +1 -0
soliplex-0.42/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Enfold Systems, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
soliplex-0.42/PKG-INFO
ADDED
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: soliplex
|
|
3
|
+
Version: 0.42
|
|
4
|
+
Summary: An AI-powered Retrieval-Augmented Generation (RAG) system with a modern web interface.
|
|
5
|
+
Author-email: Enfold <info@enfoldsystems.net>
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: Operating System :: OS Independent
|
|
8
|
+
Requires-Python: >=3.12
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Dist: ag-ui-protocol>=0.1.10
|
|
12
|
+
Requires-Dist: aiosqlite
|
|
13
|
+
Requires-Dist: authlib
|
|
14
|
+
Requires-Dist: fastapi
|
|
15
|
+
Requires-Dist: fastmcp<2.15,>=2.14.0
|
|
16
|
+
Requires-Dist: greenlet
|
|
17
|
+
Requires-Dist: haiku.rag-slim<0.30.0,>=0.29.1
|
|
18
|
+
Requires-Dist: itsdangerous
|
|
19
|
+
Requires-Dist: jsonpatch
|
|
20
|
+
Requires-Dist: jwcrypto
|
|
21
|
+
Requires-Dist: logfire[fastapi]
|
|
22
|
+
Requires-Dist: pydantic-ai-slim[google]
|
|
23
|
+
Requires-Dist: pyjwt
|
|
24
|
+
Requires-Dist: python-keycloak
|
|
25
|
+
Requires-Dist: sqlmodel
|
|
26
|
+
Requires-Dist: starlette
|
|
27
|
+
Requires-Dist: trio
|
|
28
|
+
Requires-Dist: uvicorn[standard]
|
|
29
|
+
Requires-Dist: certifi>=2025.11.12
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
https://pypi.org/project/haiku.rag-slim/# Soliplex
|
|
33
|
+
|
|
34
|
+
An AI-powered Retrieval-Augmented Generation (RAG) system with a modern web interface.
|
|
35
|
+
|
|
36
|
+
## Features
|
|
37
|
+
|
|
38
|
+
- **RAG-Powered Search**: Semantic document retrieval using LanceDB vector database
|
|
39
|
+
- **Multi-Room Architecture**: Independent chat environments (rooms) with separate configurations and knowledge bases
|
|
40
|
+
- **Multiple LLM Providers**: OpenAI, Ollama, and compatible APIs
|
|
41
|
+
- **AI Agent System**: Function calling and tool integration for AI agents
|
|
42
|
+
- **OIDC Authentication**: Enterprise SSO with Keycloak integration
|
|
43
|
+
- **Model Context Protocol (MCP)**: Extended AI capabilities through MCP client or exposing Room as MCP server
|
|
44
|
+
- **Real-time Communication**: WebSocket-based conversation streams
|
|
45
|
+
- **Quiz System**: Custom quizzes with LLM-based evaluation
|
|
46
|
+
- **Observability**: Logfire integration for monitoring
|
|
47
|
+
|
|
48
|
+
## Architecture
|
|
49
|
+
|
|
50
|
+
### Backend (`/src/soliplex/`)
|
|
51
|
+
**Python 3.12+ / FastAPI**
|
|
52
|
+
|
|
53
|
+
- **Core**: FastAPI application with async support
|
|
54
|
+
- **RAG Engine**: [haiku.rag-slim](https://pypi.org/project/haiku.rag-slim/)
|
|
55
|
+
with LanceDB vector storage
|
|
56
|
+
- **AI Integration**: [Pydantic AI](https://pypi.org/project/pydantic-ai/)
|
|
57
|
+
for agent management
|
|
58
|
+
- **Authentication**: Python-Keycloak with OIDC/JWT support
|
|
59
|
+
- **MCP**: [FastMCP](https://pypi.org/project/fastmcp/) server and client
|
|
60
|
+
implementations
|
|
61
|
+
- **Configuration**: YAML-based configuration system
|
|
62
|
+
|
|
63
|
+
Key modules:
|
|
64
|
+
- `views/` - API endpoints (auth, completions, conversations, rooms, quizzes)
|
|
65
|
+
- `agents.py` - AI agent configuration and management
|
|
66
|
+
- `agui/` - AG-UI thread persistence and retrieval
|
|
67
|
+
- `tools.py` - Tool definitions for AI agents
|
|
68
|
+
- `mcp_server.py` / `mcp_client.py` - Model Context Protocol integration
|
|
69
|
+
- `tui/` - Terminal user interface
|
|
70
|
+
|
|
71
|
+
### Frontend (`/src/flutter/`)
|
|
72
|
+
**Flutter 3.35+ / Dart 3.10.0+**
|
|
73
|
+
|
|
74
|
+
- **Framework**: Flutter web with Material Design
|
|
75
|
+
- **State Management**: Riverpod (2.6.1)
|
|
76
|
+
- **Navigation**: Go Router (16.0.0)
|
|
77
|
+
- **Authentication**: Flutter AppAuth (9.0.1) for OIDC
|
|
78
|
+
- **Real-time**: WebSocket communication
|
|
79
|
+
- **Secure Storage**: Flutter Secure Storage for credentials
|
|
80
|
+
|
|
81
|
+
Key files:
|
|
82
|
+
- `main.dart` - Application entry point
|
|
83
|
+
- `soliplex_client.dart` - Backend API client
|
|
84
|
+
- `oidc_client.dart` - OIDC authentication client
|
|
85
|
+
- `controllers.dart` - Riverpod state management
|
|
86
|
+
- `configure.dart` - Configuration UI
|
|
87
|
+
|
|
88
|
+
### TUI (`src/soliplex/tui`)
|
|
89
|
+
|
|
90
|
+
Quick-and-dirty client for room queries
|
|
91
|
+
|
|
92
|
+
- **Framework**: Python `textual`
|
|
93
|
+
|
|
94
|
+
## Quick Start
|
|
95
|
+
|
|
96
|
+
For detailed installation instructions, see the [Prerequisites Guide](docs/prerequisites.md).
|
|
97
|
+
|
|
98
|
+
### Install Soliplex and dependencies
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Install
|
|
102
|
+
python3.13 -m venv venv
|
|
103
|
+
source venv/bin/activate
|
|
104
|
+
pip install -e .
|
|
105
|
+
|
|
106
|
+
# Configure environment
|
|
107
|
+
cp .env.example .env
|
|
108
|
+
# Edit .env with your settings
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Index Soliplex docs into RAG database
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
source venv/bin/activate
|
|
115
|
+
export OLLAMA_BASE_URL=<your Ollama server / port>
|
|
116
|
+
# Run docling-serve if you have not installed the full haiku.rag
|
|
117
|
+
docker run -p 5001:5001 -d -e DOCLING_SERVE_ENABLE_UI=1 \
|
|
118
|
+
quay.io/docling-project/docling-serve
|
|
119
|
+
haiku-rag --config example/haiku.rag.yaml \
|
|
120
|
+
init --db db/rag/rag.lancedb
|
|
121
|
+
haiku-rag --config example/haiku.rag.yaml \
|
|
122
|
+
add-src --db db/rag/rag.lancedb docs/
|
|
123
|
+
...
|
|
124
|
+
17 documents added successfully.
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
See: `docs/rag.md` for more options.
|
|
128
|
+
|
|
129
|
+
### Backend Server CLI Commands
|
|
130
|
+
|
|
131
|
+
The `soliplex-cli` command provides several utilities for managing your Soliplex installation:
|
|
132
|
+
|
|
133
|
+
#### Check Configuration
|
|
134
|
+
Validate your configuration file and report any missing secrets or environment variables:
|
|
135
|
+
```bash
|
|
136
|
+
soliplex-cli check-config example/minimal.yaml
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
#### List Rooms
|
|
140
|
+
Show all configured chat rooms:
|
|
141
|
+
```bash
|
|
142
|
+
soliplex-cli list-rooms example/minimal.yaml
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### List Completions
|
|
146
|
+
Show all configured completion endpoints:
|
|
147
|
+
```bash
|
|
148
|
+
soliplex-cli list-completions example/minimal.yaml
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
#### List Secrets
|
|
152
|
+
Display all configured secrets and their status:
|
|
153
|
+
```bash
|
|
154
|
+
soliplex-cli list-secrets example/minimal.yaml
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
#### List Environment Variables
|
|
158
|
+
Show all environment variables and their values:
|
|
159
|
+
```bash
|
|
160
|
+
soliplex-cli list-environment example/minimal.yaml
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### List OIDC Providers
|
|
164
|
+
Display configured OIDC authentication providers:
|
|
165
|
+
```bash
|
|
166
|
+
soliplex-cli list-oidc-auth-providers example/minimal.yaml
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
#### Export Configuration
|
|
170
|
+
Export the installation configuration as YAML:
|
|
171
|
+
```bash
|
|
172
|
+
soliplex-cli config example/minimal.yaml
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
#### Export AG-UI Feature Schemas
|
|
176
|
+
Export AG-UI feature schemas as JSON:
|
|
177
|
+
```bash
|
|
178
|
+
soliplex-cli agui-feature-schemas example/minimal.yaml
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
#### Run Backend Server
|
|
182
|
+
Start the Soliplex backend server:
|
|
183
|
+
```bash
|
|
184
|
+
export OLLAMA_BASE_URL=<your Ollama server / port>
|
|
185
|
+
soliplex-cli serve example/minimal.yaml --no-auth-mode
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Server options:
|
|
189
|
+
- `--no-auth-mode` - Disable authentication (for development/testing)
|
|
190
|
+
- `--host HOST` - Bind to specific host (default: 127.0.0.1)
|
|
191
|
+
- `--port PORT` - Listen on specific port (default: 8000)
|
|
192
|
+
- `--reload {python,config,both}` - Enable hot reload for python code, config, or both
|
|
193
|
+
- `--reload-dirs DIRS` - Additional directories to watch for reload
|
|
194
|
+
- `--reload-includes PATTERNS` - File patterns to include in reload watch
|
|
195
|
+
- `--proxy-headers` - Enable proxy header parsing
|
|
196
|
+
- `--forwarded-allow-ips IPS` - Trusted IP addresses for proxy headers
|
|
197
|
+
|
|
198
|
+
### Frontend
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
cd src/flutter
|
|
202
|
+
flutter pub get
|
|
203
|
+
flutter run -d chrome --web-port 59001
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### TUI
|
|
207
|
+
|
|
208
|
+
The TUI does not yet support authentication, so run the back-end with
|
|
209
|
+
`--no-auth-mode` when using the TUI.
|
|
210
|
+
|
|
211
|
+
Within the virtual environment where you installed `soliplex`:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
soliplex-tui --help
|
|
215
|
+
|
|
216
|
+
Usage: soliplex-tui [OPTIONS]
|
|
217
|
+
|
|
218
|
+
╭─ Options ────────────────────────────────────────────────────────────────────╮
|
|
219
|
+
│ --version -v │
|
|
220
|
+
│ --url TEXT Base URL for Soliplex back-end │
|
|
221
|
+
│ [default: http://127.0.0.1:8000] │
|
|
222
|
+
│ --help -h Show this message and exit. │
|
|
223
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
soliplex-tui
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
By default, the TUI connects to a Soliplex back-end server running
|
|
231
|
+
on port 8000 on your local machine:
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
soliplex-tui --url http://127.0.0.1:8000
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Development
|
|
238
|
+
|
|
239
|
+
This project uses [PEP 735 Dependency Groups](https://peps.python.org/pep-0735/)
|
|
240
|
+
for managing development dependencies. This is the modern standard supported by
|
|
241
|
+
`uv` and recent versions of `pip`.
|
|
242
|
+
|
|
243
|
+
### Installing dev dependencies
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
# Using pip (requires pip 24.0+)
|
|
247
|
+
pip install -e . --group dev
|
|
248
|
+
|
|
249
|
+
# Using uv (recommended)
|
|
250
|
+
uv sync --group dev
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**Note:** The older syntax `pip install -e ".[dev]"` is for `[project.optional-dependencies]`
|
|
254
|
+
and will NOT work with `[dependency-groups]`. Always use `--group dev` instead.
|
|
255
|
+
|
|
256
|
+
### Available dependency groups
|
|
257
|
+
|
|
258
|
+
| Group | Purpose |
|
|
259
|
+
|-------|---------|
|
|
260
|
+
| `dev` | Testing tools (pytest, ruff, coverage) |
|
|
261
|
+
| `docs` | Documentation (mkdocs, mkdocs-material) |
|
|
262
|
+
| `postgres` | PostgreSQL support (asyncpg) |
|
|
263
|
+
| `tui` | Terminal UI (textual, typer) |
|
|
264
|
+
|
|
265
|
+
### Running tests
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
# Run unit tests with coverage
|
|
269
|
+
pytest
|
|
270
|
+
|
|
271
|
+
# Run with specific coverage threshold (CI enforces 100%)
|
|
272
|
+
pytest --cov-fail-under=100
|
|
273
|
+
|
|
274
|
+
# Run linting
|
|
275
|
+
ruff check
|
|
276
|
+
|
|
277
|
+
# Check formatting
|
|
278
|
+
ruff format --check
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Configuration
|
|
282
|
+
|
|
283
|
+
YAML-based configuration with:
|
|
284
|
+
- **Installation** (`installation.yaml`) - Main config referencing agents, rooms, and OIDC providers
|
|
285
|
+
- **Rooms** (`rooms/*.yaml`) - Individual chat room configurations with RAG settings
|
|
286
|
+
- **Agents** (`completions/*.yaml`) - LLM provider and model configurations
|
|
287
|
+
- **OIDC** (`oidc/*.yaml`) - Authentication provider settings
|
|
288
|
+
|
|
289
|
+
See `example/` directory for sample configurations.
|
|
290
|
+
|
|
291
|
+
### Environment Variables
|
|
292
|
+
|
|
293
|
+
Non-secret environment variables can and mostly should be configured
|
|
294
|
+
directly in the `installation.yaml` file (e.g. `example/installation.yaml`,
|
|
295
|
+
`example/minimal.yaml`, etc.).
|
|
296
|
+
|
|
297
|
+
Those files are checked into the Soliplex repository, and cannot know
|
|
298
|
+
the URL of your Ollama server (if you use Ollama), They therefore declare
|
|
299
|
+
the `OLLAMA_BASE_URL` variable without a value, meaning that the configuration
|
|
300
|
+
expects the value to be present in the environments (see:
|
|
301
|
+
https://soliplex.github.io/soliplex/config/environment/).
|
|
302
|
+
|
|
303
|
+
Those files also must not contain secrets (API keys, etc.): instead,
|
|
304
|
+
they configure secret values to be found from the environment (see
|
|
305
|
+
https://soliplex.github.io/soliplex/config/secrets/).
|
|
306
|
+
|
|
307
|
+
If your installation configures such values to be found from the OS
|
|
308
|
+
environment, you can create a `.env` file which defines them, and arrange
|
|
309
|
+
for the file to be sourced into your environment before startin the Soliplex
|
|
310
|
+
application.
|
|
311
|
+
|
|
312
|
+
Copy `.env.example` to `.env` and edit it to configure your values:
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
cp .env.example .env
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
## Documentation
|
|
319
|
+
|
|
320
|
+
Comprehensive documentation is available in the `docs/` directory:
|
|
321
|
+
|
|
322
|
+
- **[Prerequisites Guide](docs/prerequisites.md)** - Step-by-step installation checklist
|
|
323
|
+
- **[Server Setup](docs/server.md)** - Backend server configuration and CLI reference
|
|
324
|
+
- **[Client Setup](docs/client.md)** - Frontend Flutter application setup
|
|
325
|
+
- **[Docker Deployment](docs/docker.md)** - Complete Docker and docker-compose guide
|
|
326
|
+
- **[RAG Setup](docs/rag.md)** - RAG database initialization and management
|
|
327
|
+
- **[Configuration](docs/config/)** - Detailed configuration options
|
|
328
|
+
|
|
329
|
+
### Running with Docker
|
|
330
|
+
|
|
331
|
+
See the [Docker Deployment Guide](docs/docker.md) for complete instructions:
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
# Setup
|
|
335
|
+
cp .env.example .env
|
|
336
|
+
# Edit .env with your settings
|
|
337
|
+
|
|
338
|
+
# Run
|
|
339
|
+
docker-compose up
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
Access:
|
|
343
|
+
- Backend API: http://localhost:8000
|
|
344
|
+
- API Documentation: http://localhost:8000/docs
|
|
345
|
+
- Frontend Web UI: http://localhost:9000
|
|
346
|
+
|
|
347
|
+
## Related Repositories
|
|
348
|
+
|
|
349
|
+
- **[soliplex/flutter](https://github.com/soliplex/flutter)** - Flutter frontend (cross-platform mobile/desktop)
|
|
350
|
+
- **[Documentation](https://soliplex.github.io/)** - Documentation site (MkDocs)
|
|
351
|
+
- **[soliplex/ingester](https://github.com/soliplex/ingester)** - Content ingestion pipeline
|
|
352
|
+
- **[soliplex/ingester-agents](https://github.com/soliplex/ingester-agents)** - Document ingestion agents
|
|
353
|
+
- **[soliplex/whitelabel](https://github.com/soliplex/whitelabel)** - Customer white-label appshell template
|
|
354
|
+
|
|
355
|
+
## License
|
|
356
|
+
|
|
357
|
+
MIT License - Copyright (c) 2025 Enfold Systems, Inc.
|
soliplex-0.42/README.md
ADDED
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
https://pypi.org/project/haiku.rag-slim/# Soliplex
|
|
2
|
+
|
|
3
|
+
An AI-powered Retrieval-Augmented Generation (RAG) system with a modern web interface.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **RAG-Powered Search**: Semantic document retrieval using LanceDB vector database
|
|
8
|
+
- **Multi-Room Architecture**: Independent chat environments (rooms) with separate configurations and knowledge bases
|
|
9
|
+
- **Multiple LLM Providers**: OpenAI, Ollama, and compatible APIs
|
|
10
|
+
- **AI Agent System**: Function calling and tool integration for AI agents
|
|
11
|
+
- **OIDC Authentication**: Enterprise SSO with Keycloak integration
|
|
12
|
+
- **Model Context Protocol (MCP)**: Extended AI capabilities through MCP client or exposing Room as MCP server
|
|
13
|
+
- **Real-time Communication**: WebSocket-based conversation streams
|
|
14
|
+
- **Quiz System**: Custom quizzes with LLM-based evaluation
|
|
15
|
+
- **Observability**: Logfire integration for monitoring
|
|
16
|
+
|
|
17
|
+
## Architecture
|
|
18
|
+
|
|
19
|
+
### Backend (`/src/soliplex/`)
|
|
20
|
+
**Python 3.12+ / FastAPI**
|
|
21
|
+
|
|
22
|
+
- **Core**: FastAPI application with async support
|
|
23
|
+
- **RAG Engine**: [haiku.rag-slim](https://pypi.org/project/haiku.rag-slim/)
|
|
24
|
+
with LanceDB vector storage
|
|
25
|
+
- **AI Integration**: [Pydantic AI](https://pypi.org/project/pydantic-ai/)
|
|
26
|
+
for agent management
|
|
27
|
+
- **Authentication**: Python-Keycloak with OIDC/JWT support
|
|
28
|
+
- **MCP**: [FastMCP](https://pypi.org/project/fastmcp/) server and client
|
|
29
|
+
implementations
|
|
30
|
+
- **Configuration**: YAML-based configuration system
|
|
31
|
+
|
|
32
|
+
Key modules:
|
|
33
|
+
- `views/` - API endpoints (auth, completions, conversations, rooms, quizzes)
|
|
34
|
+
- `agents.py` - AI agent configuration and management
|
|
35
|
+
- `agui/` - AG-UI thread persistence and retrieval
|
|
36
|
+
- `tools.py` - Tool definitions for AI agents
|
|
37
|
+
- `mcp_server.py` / `mcp_client.py` - Model Context Protocol integration
|
|
38
|
+
- `tui/` - Terminal user interface
|
|
39
|
+
|
|
40
|
+
### Frontend (`/src/flutter/`)
|
|
41
|
+
**Flutter 3.35+ / Dart 3.10.0+**
|
|
42
|
+
|
|
43
|
+
- **Framework**: Flutter web with Material Design
|
|
44
|
+
- **State Management**: Riverpod (2.6.1)
|
|
45
|
+
- **Navigation**: Go Router (16.0.0)
|
|
46
|
+
- **Authentication**: Flutter AppAuth (9.0.1) for OIDC
|
|
47
|
+
- **Real-time**: WebSocket communication
|
|
48
|
+
- **Secure Storage**: Flutter Secure Storage for credentials
|
|
49
|
+
|
|
50
|
+
Key files:
|
|
51
|
+
- `main.dart` - Application entry point
|
|
52
|
+
- `soliplex_client.dart` - Backend API client
|
|
53
|
+
- `oidc_client.dart` - OIDC authentication client
|
|
54
|
+
- `controllers.dart` - Riverpod state management
|
|
55
|
+
- `configure.dart` - Configuration UI
|
|
56
|
+
|
|
57
|
+
### TUI (`src/soliplex/tui`)
|
|
58
|
+
|
|
59
|
+
Quick-and-dirty client for room queries
|
|
60
|
+
|
|
61
|
+
- **Framework**: Python `textual`
|
|
62
|
+
|
|
63
|
+
## Quick Start
|
|
64
|
+
|
|
65
|
+
For detailed installation instructions, see the [Prerequisites Guide](docs/prerequisites.md).
|
|
66
|
+
|
|
67
|
+
### Install Soliplex and dependencies
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Install
|
|
71
|
+
python3.13 -m venv venv
|
|
72
|
+
source venv/bin/activate
|
|
73
|
+
pip install -e .
|
|
74
|
+
|
|
75
|
+
# Configure environment
|
|
76
|
+
cp .env.example .env
|
|
77
|
+
# Edit .env with your settings
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Index Soliplex docs into RAG database
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
source venv/bin/activate
|
|
84
|
+
export OLLAMA_BASE_URL=<your Ollama server / port>
|
|
85
|
+
# Run docling-serve if you have not installed the full haiku.rag
|
|
86
|
+
docker run -p 5001:5001 -d -e DOCLING_SERVE_ENABLE_UI=1 \
|
|
87
|
+
quay.io/docling-project/docling-serve
|
|
88
|
+
haiku-rag --config example/haiku.rag.yaml \
|
|
89
|
+
init --db db/rag/rag.lancedb
|
|
90
|
+
haiku-rag --config example/haiku.rag.yaml \
|
|
91
|
+
add-src --db db/rag/rag.lancedb docs/
|
|
92
|
+
...
|
|
93
|
+
17 documents added successfully.
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
See: `docs/rag.md` for more options.
|
|
97
|
+
|
|
98
|
+
### Backend Server CLI Commands
|
|
99
|
+
|
|
100
|
+
The `soliplex-cli` command provides several utilities for managing your Soliplex installation:
|
|
101
|
+
|
|
102
|
+
#### Check Configuration
|
|
103
|
+
Validate your configuration file and report any missing secrets or environment variables:
|
|
104
|
+
```bash
|
|
105
|
+
soliplex-cli check-config example/minimal.yaml
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
#### List Rooms
|
|
109
|
+
Show all configured chat rooms:
|
|
110
|
+
```bash
|
|
111
|
+
soliplex-cli list-rooms example/minimal.yaml
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
#### List Completions
|
|
115
|
+
Show all configured completion endpoints:
|
|
116
|
+
```bash
|
|
117
|
+
soliplex-cli list-completions example/minimal.yaml
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
#### List Secrets
|
|
121
|
+
Display all configured secrets and their status:
|
|
122
|
+
```bash
|
|
123
|
+
soliplex-cli list-secrets example/minimal.yaml
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
#### List Environment Variables
|
|
127
|
+
Show all environment variables and their values:
|
|
128
|
+
```bash
|
|
129
|
+
soliplex-cli list-environment example/minimal.yaml
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
#### List OIDC Providers
|
|
133
|
+
Display configured OIDC authentication providers:
|
|
134
|
+
```bash
|
|
135
|
+
soliplex-cli list-oidc-auth-providers example/minimal.yaml
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
#### Export Configuration
|
|
139
|
+
Export the installation configuration as YAML:
|
|
140
|
+
```bash
|
|
141
|
+
soliplex-cli config example/minimal.yaml
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### Export AG-UI Feature Schemas
|
|
145
|
+
Export AG-UI feature schemas as JSON:
|
|
146
|
+
```bash
|
|
147
|
+
soliplex-cli agui-feature-schemas example/minimal.yaml
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### Run Backend Server
|
|
151
|
+
Start the Soliplex backend server:
|
|
152
|
+
```bash
|
|
153
|
+
export OLLAMA_BASE_URL=<your Ollama server / port>
|
|
154
|
+
soliplex-cli serve example/minimal.yaml --no-auth-mode
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Server options:
|
|
158
|
+
- `--no-auth-mode` - Disable authentication (for development/testing)
|
|
159
|
+
- `--host HOST` - Bind to specific host (default: 127.0.0.1)
|
|
160
|
+
- `--port PORT` - Listen on specific port (default: 8000)
|
|
161
|
+
- `--reload {python,config,both}` - Enable hot reload for python code, config, or both
|
|
162
|
+
- `--reload-dirs DIRS` - Additional directories to watch for reload
|
|
163
|
+
- `--reload-includes PATTERNS` - File patterns to include in reload watch
|
|
164
|
+
- `--proxy-headers` - Enable proxy header parsing
|
|
165
|
+
- `--forwarded-allow-ips IPS` - Trusted IP addresses for proxy headers
|
|
166
|
+
|
|
167
|
+
### Frontend
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
cd src/flutter
|
|
171
|
+
flutter pub get
|
|
172
|
+
flutter run -d chrome --web-port 59001
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### TUI
|
|
176
|
+
|
|
177
|
+
The TUI does not yet support authentication, so run the back-end with
|
|
178
|
+
`--no-auth-mode` when using the TUI.
|
|
179
|
+
|
|
180
|
+
Within the virtual environment where you installed `soliplex`:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
soliplex-tui --help
|
|
184
|
+
|
|
185
|
+
Usage: soliplex-tui [OPTIONS]
|
|
186
|
+
|
|
187
|
+
╭─ Options ────────────────────────────────────────────────────────────────────╮
|
|
188
|
+
│ --version -v │
|
|
189
|
+
│ --url TEXT Base URL for Soliplex back-end │
|
|
190
|
+
│ [default: http://127.0.0.1:8000] │
|
|
191
|
+
│ --help -h Show this message and exit. │
|
|
192
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
soliplex-tui
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
By default, the TUI connects to a Soliplex back-end server running
|
|
200
|
+
on port 8000 on your local machine:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
soliplex-tui --url http://127.0.0.1:8000
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Development
|
|
207
|
+
|
|
208
|
+
This project uses [PEP 735 Dependency Groups](https://peps.python.org/pep-0735/)
|
|
209
|
+
for managing development dependencies. This is the modern standard supported by
|
|
210
|
+
`uv` and recent versions of `pip`.
|
|
211
|
+
|
|
212
|
+
### Installing dev dependencies
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# Using pip (requires pip 24.0+)
|
|
216
|
+
pip install -e . --group dev
|
|
217
|
+
|
|
218
|
+
# Using uv (recommended)
|
|
219
|
+
uv sync --group dev
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**Note:** The older syntax `pip install -e ".[dev]"` is for `[project.optional-dependencies]`
|
|
223
|
+
and will NOT work with `[dependency-groups]`. Always use `--group dev` instead.
|
|
224
|
+
|
|
225
|
+
### Available dependency groups
|
|
226
|
+
|
|
227
|
+
| Group | Purpose |
|
|
228
|
+
|-------|---------|
|
|
229
|
+
| `dev` | Testing tools (pytest, ruff, coverage) |
|
|
230
|
+
| `docs` | Documentation (mkdocs, mkdocs-material) |
|
|
231
|
+
| `postgres` | PostgreSQL support (asyncpg) |
|
|
232
|
+
| `tui` | Terminal UI (textual, typer) |
|
|
233
|
+
|
|
234
|
+
### Running tests
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# Run unit tests with coverage
|
|
238
|
+
pytest
|
|
239
|
+
|
|
240
|
+
# Run with specific coverage threshold (CI enforces 100%)
|
|
241
|
+
pytest --cov-fail-under=100
|
|
242
|
+
|
|
243
|
+
# Run linting
|
|
244
|
+
ruff check
|
|
245
|
+
|
|
246
|
+
# Check formatting
|
|
247
|
+
ruff format --check
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Configuration
|
|
251
|
+
|
|
252
|
+
YAML-based configuration with:
|
|
253
|
+
- **Installation** (`installation.yaml`) - Main config referencing agents, rooms, and OIDC providers
|
|
254
|
+
- **Rooms** (`rooms/*.yaml`) - Individual chat room configurations with RAG settings
|
|
255
|
+
- **Agents** (`completions/*.yaml`) - LLM provider and model configurations
|
|
256
|
+
- **OIDC** (`oidc/*.yaml`) - Authentication provider settings
|
|
257
|
+
|
|
258
|
+
See `example/` directory for sample configurations.
|
|
259
|
+
|
|
260
|
+
### Environment Variables
|
|
261
|
+
|
|
262
|
+
Non-secret environment variables can and mostly should be configured
|
|
263
|
+
directly in the `installation.yaml` file (e.g. `example/installation.yaml`,
|
|
264
|
+
`example/minimal.yaml`, etc.).
|
|
265
|
+
|
|
266
|
+
Those files are checked into the Soliplex repository, and cannot know
|
|
267
|
+
the URL of your Ollama server (if you use Ollama), They therefore declare
|
|
268
|
+
the `OLLAMA_BASE_URL` variable without a value, meaning that the configuration
|
|
269
|
+
expects the value to be present in the environments (see:
|
|
270
|
+
https://soliplex.github.io/soliplex/config/environment/).
|
|
271
|
+
|
|
272
|
+
Those files also must not contain secrets (API keys, etc.): instead,
|
|
273
|
+
they configure secret values to be found from the environment (see
|
|
274
|
+
https://soliplex.github.io/soliplex/config/secrets/).
|
|
275
|
+
|
|
276
|
+
If your installation configures such values to be found from the OS
|
|
277
|
+
environment, you can create a `.env` file which defines them, and arrange
|
|
278
|
+
for the file to be sourced into your environment before startin the Soliplex
|
|
279
|
+
application.
|
|
280
|
+
|
|
281
|
+
Copy `.env.example` to `.env` and edit it to configure your values:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
cp .env.example .env
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## Documentation
|
|
288
|
+
|
|
289
|
+
Comprehensive documentation is available in the `docs/` directory:
|
|
290
|
+
|
|
291
|
+
- **[Prerequisites Guide](docs/prerequisites.md)** - Step-by-step installation checklist
|
|
292
|
+
- **[Server Setup](docs/server.md)** - Backend server configuration and CLI reference
|
|
293
|
+
- **[Client Setup](docs/client.md)** - Frontend Flutter application setup
|
|
294
|
+
- **[Docker Deployment](docs/docker.md)** - Complete Docker and docker-compose guide
|
|
295
|
+
- **[RAG Setup](docs/rag.md)** - RAG database initialization and management
|
|
296
|
+
- **[Configuration](docs/config/)** - Detailed configuration options
|
|
297
|
+
|
|
298
|
+
### Running with Docker
|
|
299
|
+
|
|
300
|
+
See the [Docker Deployment Guide](docs/docker.md) for complete instructions:
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
# Setup
|
|
304
|
+
cp .env.example .env
|
|
305
|
+
# Edit .env with your settings
|
|
306
|
+
|
|
307
|
+
# Run
|
|
308
|
+
docker-compose up
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Access:
|
|
312
|
+
- Backend API: http://localhost:8000
|
|
313
|
+
- API Documentation: http://localhost:8000/docs
|
|
314
|
+
- Frontend Web UI: http://localhost:9000
|
|
315
|
+
|
|
316
|
+
## Related Repositories
|
|
317
|
+
|
|
318
|
+
- **[soliplex/flutter](https://github.com/soliplex/flutter)** - Flutter frontend (cross-platform mobile/desktop)
|
|
319
|
+
- **[Documentation](https://soliplex.github.io/)** - Documentation site (MkDocs)
|
|
320
|
+
- **[soliplex/ingester](https://github.com/soliplex/ingester)** - Content ingestion pipeline
|
|
321
|
+
- **[soliplex/ingester-agents](https://github.com/soliplex/ingester-agents)** - Document ingestion agents
|
|
322
|
+
- **[soliplex/whitelabel](https://github.com/soliplex/whitelabel)** - Customer white-label appshell template
|
|
323
|
+
|
|
324
|
+
## License
|
|
325
|
+
|
|
326
|
+
MIT License - Copyright (c) 2025 Enfold Systems, Inc.
|