jarvise 1.0.0__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.
- jarvise-1.0.0/.env.example +45 -0
- jarvise-1.0.0/HowToRun.md +184 -0
- jarvise-1.0.0/LICENSE +21 -0
- jarvise-1.0.0/MANIFEST.in +8 -0
- jarvise-1.0.0/PKG-INFO +442 -0
- jarvise-1.0.0/README.md +368 -0
- jarvise-1.0.0/backend/__init__.py +1 -0
- jarvise-1.0.0/backend/api/__init__.py +5 -0
- jarvise-1.0.0/backend/api/dependencies.py +125 -0
- jarvise-1.0.0/backend/api/routes/__init__.py +1 -0
- jarvise-1.0.0/backend/api/routes/chains.py +182 -0
- jarvise-1.0.0/backend/api/routes/chat.py +233 -0
- jarvise-1.0.0/backend/api/routes/learn.py +203 -0
- jarvise-1.0.0/backend/api/routes/memory.py +520 -0
- jarvise-1.0.0/backend/api/routes/stats.py +129 -0
- jarvise-1.0.0/backend/api/websocket/__init__.py +5 -0
- jarvise-1.0.0/backend/api/websocket/manager.py +107 -0
- jarvise-1.0.0/backend/main.py +125 -0
- jarvise-1.0.0/brain/__init__.py +31 -0
- jarvise-1.0.0/brain/__main__.py +155 -0
- jarvise-1.0.0/brain/agent.py +334 -0
- jarvise-1.0.0/brain/chains.py +490 -0
- jarvise-1.0.0/brain/client.py +214 -0
- jarvise-1.0.0/brain/errors.py +174 -0
- jarvise-1.0.0/brain/prompt_builder.py +138 -0
- jarvise-1.0.0/brain/router.py +692 -0
- jarvise-1.0.0/brain/tools.py +755 -0
- jarvise-1.0.0/cli/__init__.py +21 -0
- jarvise-1.0.0/cli/__main__.py +237 -0
- jarvise-1.0.0/cli/client.py +225 -0
- jarvise-1.0.0/cli/display.py +120 -0
- jarvise-1.0.0/cli/setup.py +55 -0
- jarvise-1.0.0/cli/shell.py +130 -0
- jarvise-1.0.0/context/__init__.py +54 -0
- jarvise-1.0.0/context/app_tracker.py +260 -0
- jarvise-1.0.0/context/injector.py +212 -0
- jarvise-1.0.0/context/project_detector.py +357 -0
- jarvise-1.0.0/context/system_context.py +197 -0
- jarvise-1.0.0/core/__init__.py +2 -0
- jarvise-1.0.0/core/config.py +307 -0
- jarvise-1.0.0/core/hardware.py +85 -0
- jarvise-1.0.0/core/logger.py +41 -0
- jarvise-1.0.0/jarvise/__init__.py +14 -0
- jarvise-1.0.0/jarvise.egg-info/SOURCES.txt +82 -0
- jarvise-1.0.0/learning/__init__.py +32 -0
- jarvise-1.0.0/learning/preference_memory.py +267 -0
- jarvise-1.0.0/learning/retry_engine.py +230 -0
- jarvise-1.0.0/learning/tool_cache.py +328 -0
- jarvise-1.0.0/main.py +380 -0
- jarvise-1.0.0/memory/MemoryManager.py +420 -0
- jarvise-1.0.0/memory/__init__.py +18 -0
- jarvise-1.0.0/memory/chroma_store.py +279 -0
- jarvise-1.0.0/memory/filtered_store.py +572 -0
- jarvise-1.0.0/memory/importance.py +269 -0
- jarvise-1.0.0/memory/memory_file.py +327 -0
- jarvise-1.0.0/memory/preference_store.py +140 -0
- jarvise-1.0.0/pyproject.toml +134 -0
- jarvise-1.0.0/requirements.txt +53 -0
- jarvise-1.0.0/setup.cfg +4 -0
- jarvise-1.0.0/setup.py +10 -0
- jarvise-1.0.0/tools/__init__.py +55 -0
- jarvise-1.0.0/tools/auth/__init__.py +10 -0
- jarvise-1.0.0/tools/auth/microsoft.py +295 -0
- jarvise-1.0.0/tools/auth/oauth.py +206 -0
- jarvise-1.0.0/tools/auth/token_manager.py +211 -0
- jarvise-1.0.0/tools/base.py +184 -0
- jarvise-1.0.0/tools/browser.py +284 -0
- jarvise-1.0.0/tools/code_exec.py +346 -0
- jarvise-1.0.0/tools/filesystem.py +531 -0
- jarvise-1.0.0/tools/google_calendar.py +442 -0
- jarvise-1.0.0/tools/google_email.py +476 -0
- jarvise-1.0.0/tools/microsoft_outlook.py +561 -0
- jarvise-1.0.0/tools/system_monitor.py +563 -0
- jarvise-1.0.0/tools/web_search.py +163 -0
- jarvise-1.0.0/ui/dist/assets/index-XJ8VnKVj.css +1 -0
- jarvise-1.0.0/ui/dist/assets/index-foSSCjPV.js +180 -0
- jarvise-1.0.0/ui/dist/index.html +14 -0
- jarvise-1.0.0/voice/__init__.py +38 -0
- jarvise-1.0.0/voice/audio_output.py +248 -0
- jarvise-1.0.0/voice/keyboard_handler.py +140 -0
- jarvise-1.0.0/voice/pipeline.py +348 -0
- jarvise-1.0.0/voice/recorder.py +165 -0
- jarvise-1.0.0/voice/stt.py +191 -0
- jarvise-1.0.0/voice/tts.py +202 -0
- jarvise-1.0.0/voice/vad.py +124 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# JARVIS Environment Configuration Template
|
|
2
|
+
# Copy this file to .env and fill in your values
|
|
3
|
+
|
|
4
|
+
# Ollama Configuration
|
|
5
|
+
OLLAMA_HOST=http://localhost:11434
|
|
6
|
+
OLLAMA_MODEL=llama3.2:latest
|
|
7
|
+
|
|
8
|
+
# Voice Configuration
|
|
9
|
+
WAKE_WORD=jarvis
|
|
10
|
+
WHISPER_MODEL=base
|
|
11
|
+
KOKORO_VOICE=af_sarah
|
|
12
|
+
TTS_SPEED=1.0
|
|
13
|
+
|
|
14
|
+
# Memory Configuration
|
|
15
|
+
CHROMA_PERSIST_DIRECTORY=./data/chromadb
|
|
16
|
+
MEMORY_FILE=./data/MEMORY.md
|
|
17
|
+
|
|
18
|
+
# UI Configuration
|
|
19
|
+
# Use 127.0.0.1 for local-only access (default, secure)
|
|
20
|
+
# Use 0.0.0.0 for remote access (requires API_KEY)
|
|
21
|
+
UI_HOST=127.0.0.1
|
|
22
|
+
UI_PORT=8000
|
|
23
|
+
|
|
24
|
+
# API Authentication (required for remote/destructive operations)
|
|
25
|
+
# Generate a secure random key: python -c "import secrets; print(secrets.token_hex(32))"
|
|
26
|
+
API_KEY=
|
|
27
|
+
ALLOW_REMOTE_ACCESS=false
|
|
28
|
+
|
|
29
|
+
# Token Encryption Key (for OAuth token storage)
|
|
30
|
+
# Generate: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
|
|
31
|
+
# Required for Google Calendar/Email integration to persist tokens
|
|
32
|
+
JARVIS_TOKEN_KEY=
|
|
33
|
+
|
|
34
|
+
# Google Calendar (optional)
|
|
35
|
+
GOOGLE_CALENDAR_CREDS_PATH=
|
|
36
|
+
|
|
37
|
+
# Google Email (optional)
|
|
38
|
+
GOOGLE_EMAIL_CREDS_PATH=
|
|
39
|
+
|
|
40
|
+
# Microsoft Outlook (optional)
|
|
41
|
+
OUTLOOK_CREDS_PATH=
|
|
42
|
+
|
|
43
|
+
# Logging
|
|
44
|
+
LOG_LEVEL=INFO
|
|
45
|
+
LOG_FILE=./data/jarvis.log
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# How to Run JARVIS
|
|
2
|
+
|
|
3
|
+
This guide explains how to run JARVIS on your local machine.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
- **Python 3.11+** - Download from python.org
|
|
10
|
+
- **Ollama** - For local LLM inference
|
|
11
|
+
- Download from: https://ollama.com
|
|
12
|
+
- Must be running on `localhost:11434`
|
|
13
|
+
- **Node.js 18+** (optional) - For CLI npm package
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Local Setup
|
|
18
|
+
|
|
19
|
+
### 1. Clone the Repository
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
git clone <repository-url>
|
|
23
|
+
cd JARVISE
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 2. Create Virtual Environment
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Windows
|
|
30
|
+
python -m venv .venv
|
|
31
|
+
.venv\Scripts\activate
|
|
32
|
+
|
|
33
|
+
# Linux/Mac
|
|
34
|
+
python3 -m venv .venv
|
|
35
|
+
source .venv/bin/activate
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 3. Install Dependencies
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pip install -r requirements.txt
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 4. Configure Environment
|
|
45
|
+
|
|
46
|
+
Copy `.env.example` to `.env` and configure:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Required: Ollama Configuration
|
|
50
|
+
OLLAMA_HOST=http://localhost:11434
|
|
51
|
+
OLLAMA_MODEL=llama3.2:latest
|
|
52
|
+
|
|
53
|
+
# Optional: UI Configuration
|
|
54
|
+
UI_HOST=127.0.0.1
|
|
55
|
+
UI_PORT=8000
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 5. Start Ollama
|
|
59
|
+
|
|
60
|
+
Ensure Ollama is running with your chosen model:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
ollama serve
|
|
64
|
+
ollama pull llama3.2
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Running JARVIS
|
|
70
|
+
|
|
71
|
+
### Option 1: Full Application (Recommended)
|
|
72
|
+
|
|
73
|
+
Starts both backend API and web UI:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
python main.py
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Then open **http://localhost:8000** in your browser.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
### Option 2: Backend Only
|
|
84
|
+
|
|
85
|
+
For API-only access:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
python -m backend.main
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The API will be available at **http://localhost:8000**
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### Option 3: CLI Shell
|
|
96
|
+
|
|
97
|
+
Interactive terminal interface:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# Using installed package
|
|
101
|
+
jarvis shell
|
|
102
|
+
|
|
103
|
+
# Or using Python module
|
|
104
|
+
python -m cli shell
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Commands:
|
|
108
|
+
- Type normally to chat
|
|
109
|
+
- `:help` - Show help
|
|
110
|
+
- `:stats` - System statistics
|
|
111
|
+
- `:memory` - View memories
|
|
112
|
+
- `:clear` - Clear conversation
|
|
113
|
+
- `:quit` - Exit
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### Option 4: One-liner Chat
|
|
118
|
+
|
|
119
|
+
Send a single message:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
jarvis chat "Hello, how are you?"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Running the Web UI (Alternative)
|
|
128
|
+
|
|
129
|
+
The frontend is a React application. To run it separately:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# Navigate to UI directory
|
|
133
|
+
cd ui
|
|
134
|
+
|
|
135
|
+
# Install dependencies
|
|
136
|
+
npm install
|
|
137
|
+
|
|
138
|
+
# Build for production
|
|
139
|
+
npm run build
|
|
140
|
+
|
|
141
|
+
# The built files are served by the backend (main.py)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Troubleshooting
|
|
147
|
+
|
|
148
|
+
### Ollama Not Running
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# Check if Ollama is running
|
|
152
|
+
ollama list
|
|
153
|
+
|
|
154
|
+
# Start Ollama
|
|
155
|
+
ollama serve
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Port Already in Use
|
|
159
|
+
|
|
160
|
+
Change the port in `.env`:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
UI_PORT=8001
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Memory Issues
|
|
167
|
+
|
|
168
|
+
If you encounter VRAM issues, use a smaller model:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
OLLAMA_MODEL=llama3.2:1b
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Next Steps
|
|
177
|
+
|
|
178
|
+
- See **README.md** for full feature documentation
|
|
179
|
+
- Check **Docs/** folder for advanced topics
|
|
180
|
+
- Configure API key for remote access in `.env`
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
*For more information, see README.md*
|
jarvise-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 J.A.R.V.I.S
|
|
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.
|
jarvise-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: jarvise
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Privacy-first local AI assistant with voice, memory, and Ollama β JARVIS
|
|
5
|
+
Author: J.A.R.V.I.S
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/Ashutosh3021/JARVISE
|
|
8
|
+
Project-URL: Documentation, https://github.com/Ashutosh3021/JARVISE/blob/main/HowToRun.md
|
|
9
|
+
Project-URL: Repository, https://github.com/Ashutosh3021/JARVISE
|
|
10
|
+
Project-URL: Issues, https://github.com/Ashutosh3021/JARVISE/issues
|
|
11
|
+
Keywords: jarvis,ai-assistant,ollama,voice-assistant,chromadb,fastapi,local-ai,react-agent
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: pydantic>=2.0.0
|
|
24
|
+
Requires-Dist: pydantic-settings>=2.0.0
|
|
25
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
26
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
27
|
+
Requires-Dist: psutil>=5.9.0
|
|
28
|
+
Requires-Dist: requests>=2.31.0
|
|
29
|
+
Requires-Dist: ollama>=0.1.0
|
|
30
|
+
Requires-Dist: chromadb>=0.4.0
|
|
31
|
+
Requires-Dist: sentence-transformers>=2.2.0
|
|
32
|
+
Requires-Dist: fastapi>=0.109.0
|
|
33
|
+
Requires-Dist: uvicorn[standard]>=0.27.0
|
|
34
|
+
Requires-Dist: websockets>=12.0.0
|
|
35
|
+
Requires-Dist: python-multipart>=0.0.6
|
|
36
|
+
Requires-Dist: loguru>=0.7.0
|
|
37
|
+
Requires-Dist: aiofiles>=23.2.0
|
|
38
|
+
Requires-Dist: httpx>=0.26.0
|
|
39
|
+
Requires-Dist: duckduckgo-search>=6.0.0
|
|
40
|
+
Requires-Dist: numpy>=1.24.0
|
|
41
|
+
Requires-Dist: cryptography>=41.0.0
|
|
42
|
+
Provides-Extra: voice
|
|
43
|
+
Requires-Dist: faster-whisper>=1.0.0; extra == "voice"
|
|
44
|
+
Requires-Dist: kokoro-onnx<0.5.0,>=0.4.0; extra == "voice"
|
|
45
|
+
Requires-Dist: sounddevice>=0.4.0; extra == "voice"
|
|
46
|
+
Requires-Dist: soundfile>=0.12.0; extra == "voice"
|
|
47
|
+
Requires-Dist: webrtcvad-wheels>=2.0.10; extra == "voice"
|
|
48
|
+
Requires-Dist: keyboard>=0.13.0; extra == "voice"
|
|
49
|
+
Requires-Dist: librosa>=0.10.0; extra == "voice"
|
|
50
|
+
Requires-Dist: nvidia-ml-py>=13.0.0; extra == "voice"
|
|
51
|
+
Requires-Dist: gpu-list>=0.1.0; extra == "voice"
|
|
52
|
+
Provides-Extra: google
|
|
53
|
+
Requires-Dist: google-api-python-client>=2.100.0; extra == "google"
|
|
54
|
+
Requires-Dist: google-auth-oauthlib>=1.0.0; extra == "google"
|
|
55
|
+
Requires-Dist: google-auth-httplib2>=0.2.0; extra == "google"
|
|
56
|
+
Provides-Extra: microsoft
|
|
57
|
+
Requires-Dist: msgraph-sdk>=1.0.0; extra == "microsoft"
|
|
58
|
+
Requires-Dist: azure-identity>=1.15.0; extra == "microsoft"
|
|
59
|
+
Requires-Dist: msal>=1.24.0; extra == "microsoft"
|
|
60
|
+
Provides-Extra: browser
|
|
61
|
+
Requires-Dist: playwright>=1.40.0; extra == "browser"
|
|
62
|
+
Provides-Extra: cli
|
|
63
|
+
Requires-Dist: aiohttp>=3.9.0; extra == "cli"
|
|
64
|
+
Requires-Dist: prompt-toolkit>=3.0.0; extra == "cli"
|
|
65
|
+
Provides-Extra: all
|
|
66
|
+
Requires-Dist: jarvise[browser,cli,google,microsoft,voice]; extra == "all"
|
|
67
|
+
Provides-Extra: dev
|
|
68
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
69
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
70
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
71
|
+
Requires-Dist: build>=1.0.0; extra == "dev"
|
|
72
|
+
Requires-Dist: twine>=5.0.0; extra == "dev"
|
|
73
|
+
Dynamic: license-file
|
|
74
|
+
|
|
75
|
+
<div align="center">
|
|
76
|
+
|
|
77
|
+
<img src="https://img.shields.io/badge/JARVIS-v1.0.204-blueviolet?style=for-the-badge&logo=robot&logoColor=white" alt="JARVIS v1.0.204"/>
|
|
78
|
+
|
|
79
|
+
# πΎ JARVIS
|
|
80
|
+
### *Just A Rather Very Intelligent System*
|
|
81
|
+
|
|
82
|
+
**A privacy-first, fully local AI assistant β voice, web UI, and CLI in one package.**
|
|
83
|
+
|
|
84
|
+
<br/>
|
|
85
|
+
|
|
86
|
+
[](https://www.python.org/downloads/)
|
|
87
|
+
[](https://fastapi.tiangolo.com/)
|
|
88
|
+
[](https://react.dev/)
|
|
89
|
+
[](https://ollama.com)
|
|
90
|
+
[](https://www.trychroma.com/)
|
|
91
|
+
[](LICENSE)
|
|
92
|
+
[]()
|
|
93
|
+
|
|
94
|
+
<br/>
|
|
95
|
+
|
|
96
|
+
> π **100% local. No cloud. No telemetry. Your data never leaves your machine.**
|
|
97
|
+
|
|
98
|
+
<br/>
|
|
99
|
+
|
|
100
|
+
[π Quick Start](#-quick-start) Β· [β¨ Features](#-features) Β· [ποΈ Architecture](#οΈ-architecture) Β· [π Project Structure](#-project-structure) Β· [π οΈ Tech Stack](#οΈ-tech-stack) Β· [π Docs](#-documentation)
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
## Quick Start
|
|
107
|
+
|
|
108
|
+
> **New to JARVIS?** Follow the setup guide first β **[HowToRun.md](HowToRun.md)**
|
|
109
|
+
|
|
110
|
+
### Install from PyPI
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Core install (no voice)
|
|
114
|
+
pip install jarvise
|
|
115
|
+
|
|
116
|
+
# With voice support (Whisper STT + Kokoro TTS)
|
|
117
|
+
pip install jarvise[voice]
|
|
118
|
+
|
|
119
|
+
# Everything β voice, Google, Microsoft, browser, CLI
|
|
120
|
+
pip install jarvise[all]
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Prerequisites
|
|
124
|
+
|
|
125
|
+
1. **Ollama** must be installed and running before starting JARVIS:
|
|
126
|
+
```bash
|
|
127
|
+
# Install Ollama: https://ollama.com/download
|
|
128
|
+
ollama serve
|
|
129
|
+
ollama pull llama3.2
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
2. **Configure your environment:**
|
|
133
|
+
```bash
|
|
134
|
+
cp .env.example .env
|
|
135
|
+
# Edit .env and set OLLAMA_MODEL, BACKEND_PORT, etc.
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
3. **Run JARVIS:**
|
|
139
|
+
```bash
|
|
140
|
+
jarvis
|
|
141
|
+
```
|
|
142
|
+
Or from source: `python main.py`
|
|
143
|
+
|
|
144
|
+
Open your browser at **`http://localhost:8000`** and start chatting.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## π Detailed Setup
|
|
149
|
+
|
|
150
|
+
> **New to JARVIS?** Follow the setup guide first β **[HowToRun.md](HowToRun.md)**
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# 1. Install from PyPI (recommended)
|
|
154
|
+
pip install jarvise
|
|
155
|
+
|
|
156
|
+
# Or clone and install from source
|
|
157
|
+
git clone https://github.com/your-username/JARVISE.git && cd JARVISE
|
|
158
|
+
pip install -e .
|
|
159
|
+
|
|
160
|
+
# 2. Install dependencies (source / dev only)
|
|
161
|
+
pip install -r requirements.txt
|
|
162
|
+
|
|
163
|
+
# 3. Configure your environment
|
|
164
|
+
cp .env.example .env
|
|
165
|
+
|
|
166
|
+
# 4. Launch JARVIS
|
|
167
|
+
python main.py
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## πΌοΈ Preview
|
|
173
|
+
|
|
174
|
+
<div align="center">
|
|
175
|
+
|
|
176
|
+
**Startup β hardware detection & boot sequence**
|
|
177
|
+
|
|
178
|
+

|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
*JARVIS boots in under a second, detects your hardware, initializes the logger, and serves the UI β all locally.*
|
|
182
|
+
|
|
183
|
+
</div>
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## β¨ Features
|
|
188
|
+
|
|
189
|
+
<table>
|
|
190
|
+
<tr>
|
|
191
|
+
<td width="50%">
|
|
192
|
+
|
|
193
|
+
### π€ Intelligent Chat
|
|
194
|
+
Conversational AI powered by a **ReAct agent loop** β reasons step by step, uses tools, and responds with context awareness. No hallucinated shortcuts; it thinks before it speaks.
|
|
195
|
+
|
|
196
|
+
### π§ Persistent Memory
|
|
197
|
+
Remembers you across sessions. **ChromaDB** stores vector embeddings of your conversations, while `MEMORY.md` holds distilled facts β names, preferences, and key context.
|
|
198
|
+
|
|
199
|
+
### π€ Voice Interface
|
|
200
|
+
Speak naturally. **Faster-Whisper** transcribes your voice locally, and **Kokoro TTS** reads responses back. Fully offline β no API keys, no latency from the cloud.
|
|
201
|
+
|
|
202
|
+
</td>
|
|
203
|
+
<td width="50%">
|
|
204
|
+
|
|
205
|
+
### π Web UI
|
|
206
|
+
A polished **React + TypeScript** interface served at `localhost:8000`. Chat, view memory, manage settings β all in your browser.
|
|
207
|
+
|
|
208
|
+
### π» CLI Shell
|
|
209
|
+
Power users can interact via a rich **terminal interface** β ideal for scripting, piping, or when you just prefer the keyboard.
|
|
210
|
+
|
|
211
|
+
### π REST API
|
|
212
|
+
JARVIS exposes a clean `/api/*` REST interface so you can build integrations, trigger automations, or connect your own tools.
|
|
213
|
+
|
|
214
|
+
### π System Monitoring
|
|
215
|
+
Ask JARVIS "how's my CPU?" β the built-in `system_monitor` tool reports CPU, RAM, and GPU stats in real time.
|
|
216
|
+
|
|
217
|
+
</td>
|
|
218
|
+
</tr>
|
|
219
|
+
</table>
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## ποΈ Architecture
|
|
224
|
+
|
|
225
|
+
### System Overview
|
|
226
|
+
|
|
227
|
+
```mermaid
|
|
228
|
+
graph TB
|
|
229
|
+
subgraph "π₯οΈ Interfaces"
|
|
230
|
+
UI[Web UI<br/>localhost:8000]
|
|
231
|
+
CLI[CLI Shell<br/>jarvis shell]
|
|
232
|
+
API[REST API<br/>/api/*]
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
subgraph "βοΈ JARVIS Core"
|
|
236
|
+
Backend[FastAPI Backend]
|
|
237
|
+
Agent[ReAct Agent<br/>brain/]
|
|
238
|
+
Memory[ChromaDB<br/>memory/]
|
|
239
|
+
Voice[Voice Pipeline<br/>voice/]
|
|
240
|
+
Tools[Tool Registry<br/>tools/]
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
subgraph "π€ AI Layer"
|
|
244
|
+
Ollama[Ollama<br/>localhost:11434]
|
|
245
|
+
LLM[Llama 3.2]
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
UI -->|WebSocket + HTTP| Backend
|
|
249
|
+
CLI -->|HTTP| Backend
|
|
250
|
+
API -->|HTTP| Backend
|
|
251
|
+
|
|
252
|
+
Backend --> Agent
|
|
253
|
+
Agent --> Memory
|
|
254
|
+
Agent --> Voice
|
|
255
|
+
Agent --> Tools
|
|
256
|
+
Agent <-->|inference| Ollama
|
|
257
|
+
Ollama --- LLM
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Request Lifecycle
|
|
261
|
+
|
|
262
|
+
```mermaid
|
|
263
|
+
flowchart LR
|
|
264
|
+
subgraph "π₯ Input"
|
|
265
|
+
MIC[ποΈ Microphone]
|
|
266
|
+
TXT[β¨οΈ Text / CLI]
|
|
267
|
+
WEB[π Web UI]
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
subgraph "π Processing"
|
|
271
|
+
STT[Whisper STT]
|
|
272
|
+
AGENT[ReAct Agent]
|
|
273
|
+
LLM[Ollama LLM]
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
subgraph "πΎ Memory"
|
|
277
|
+
VEC[ChromaDB<br/>Vector Store]
|
|
278
|
+
FILE[MEMORY.md<br/>Key Facts]
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
subgraph "π€ Output"
|
|
282
|
+
TTS[Kokoro TTS π]
|
|
283
|
+
RESP[Text Response π]
|
|
284
|
+
UI2[Web UI Update π]
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
MIC --> STT --> AGENT
|
|
288
|
+
TXT --> AGENT
|
|
289
|
+
WEB --> AGENT
|
|
290
|
+
|
|
291
|
+
AGENT <--> VEC
|
|
292
|
+
AGENT <--> FILE
|
|
293
|
+
AGENT <-->|reason + act| LLM
|
|
294
|
+
|
|
295
|
+
AGENT --> TTS
|
|
296
|
+
AGENT --> RESP
|
|
297
|
+
AGENT --> UI2
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## π Project Structure
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
JARVIS/
|
|
306
|
+
β
|
|
307
|
+
βββ π₯οΈ backend/ # FastAPI server, WebSocket handlers, routes
|
|
308
|
+
βββ π§ brain/ # ReAct agent, LangChain chains, prompt templates
|
|
309
|
+
βββ πΎ memory/ # ChromaDB vector store + MEMORY.md fact file
|
|
310
|
+
βββ π οΈ tools/ # Tool modules: browser, code_exec, system_monitor, etc.
|
|
311
|
+
βββ π€ voice/ # STT (Faster-Whisper) + TTS (Kokoro) pipeline
|
|
312
|
+
βββ π ui/ # React 18 + TypeScript + Vite frontend
|
|
313
|
+
βββ π» cli/ # Python CLI package (argparse-based)
|
|
314
|
+
β
|
|
315
|
+
βββ π Docs/ # Extended documentation
|
|
316
|
+
βββ π§ͺ tests/ # Test suites and bug regression tests
|
|
317
|
+
β
|
|
318
|
+
βββ main.py # π Application entry point
|
|
319
|
+
βββ HowToRun.md # π Step-by-step setup guide
|
|
320
|
+
βββ .env # βοΈ Configuration (API endpoints, model names, etc.)
|
|
321
|
+
βββ requirements.txt # π¦ Python dependencies
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## π οΈ Tech Stack
|
|
327
|
+
|
|
328
|
+
| Layer | Technology | Purpose |
|
|
329
|
+
|-------|-----------|---------|
|
|
330
|
+
| **Backend** | [FastAPI](https://fastapi.tiangolo.com/) + Python 3.11+ | REST API, WebSocket, async server |
|
|
331
|
+
| **AI Inference** | [Ollama](https://ollama.com) (Llama 3.2) | Local LLM β no cloud needed |
|
|
332
|
+
| **Agent Framework** | [LangChain](https://langchain.com/) | ReAct agent loop, chain orchestration |
|
|
333
|
+
| **Memory / RAG** | [ChromaDB](https://www.trychroma.com/) | Vector embeddings, semantic recall |
|
|
334
|
+
| **Speech-to-Text** | [Faster-Whisper](https://github.com/SYSTRAN/faster-whisper) | Offline voice transcription |
|
|
335
|
+
| **Text-to-Speech** | [Kokoro](https://github.com/remsky/Kokoro-FastAPI) | Offline neural TTS |
|
|
336
|
+
| **Frontend** | React 18 + TypeScript + Vite | Snappy, modern web interface |
|
|
337
|
+
| **CLI** | Python (argparse) | Terminal interface |
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## βοΈ Configuration
|
|
342
|
+
|
|
343
|
+
JARVIS is configured via a `.env` file in the project root:
|
|
344
|
+
|
|
345
|
+
```env
|
|
346
|
+
# Ollama
|
|
347
|
+
OLLAMA_BASE_URL=http://localhost:11434
|
|
348
|
+
OLLAMA_MODEL=llama3.2
|
|
349
|
+
|
|
350
|
+
# Server
|
|
351
|
+
BACKEND_PORT=8000
|
|
352
|
+
BACKEND_HOST=0.0.0.0
|
|
353
|
+
|
|
354
|
+
# Memory
|
|
355
|
+
CHROMA_PERSIST_DIR=./memory/chroma
|
|
356
|
+
MEMORY_FILE=./memory/MEMORY.md
|
|
357
|
+
|
|
358
|
+
# Voice (optional)
|
|
359
|
+
VOICE_ENABLED=true
|
|
360
|
+
WHISPER_MODEL=base
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## π§βπ» Development
|
|
366
|
+
|
|
367
|
+
### Running Modes
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
# Full app β backend + web UI
|
|
371
|
+
python main.py
|
|
372
|
+
|
|
373
|
+
# Backend API only (no UI)
|
|
374
|
+
python -m backend.main
|
|
375
|
+
|
|
376
|
+
# CLI shell
|
|
377
|
+
python -m cli shell
|
|
378
|
+
|
|
379
|
+
# CLI β single query
|
|
380
|
+
python -m cli ask "What's the weather like today?"
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Running Tests
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
# Full test suite
|
|
387
|
+
pytest tests/
|
|
388
|
+
|
|
389
|
+
# Specific bug regression test
|
|
390
|
+
PYTHONIOENCODING=utf-8 python tests/Bugs_Testing/B1Test.py
|
|
391
|
+
|
|
392
|
+
# Verbose output
|
|
393
|
+
pytest tests/ -v --tb=short
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### Adding a New Tool
|
|
397
|
+
|
|
398
|
+
1. Create a new module in `tools/your_tool.py`
|
|
399
|
+
2. Implement the tool interface (see `tools/README.md`)
|
|
400
|
+
3. Register it in `brain/tool_registry.py`
|
|
401
|
+
4. The ReAct agent will automatically discover and use it
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## π Documentation
|
|
406
|
+
|
|
407
|
+
| Document | Description |
|
|
408
|
+
|----------|-------------|
|
|
409
|
+
| [HowToRun.md](HowToRun.md) | Prerequisites, installation, and first-run walkthrough |
|
|
410
|
+
| [Docs/](Docs/) | Architecture deep-dives, API reference, tool guides |
|
|
411
|
+
|
|
412
|
+
---
|
|
413
|
+
|
|
414
|
+
## πΊοΈ Roadmap
|
|
415
|
+
|
|
416
|
+
- [ ] Multi-model support (swap LLMs without restart)
|
|
417
|
+
- [ ] Plugin system for third-party tools
|
|
418
|
+
- [ ] Mobile-responsive web UI improvements
|
|
419
|
+
- [ ] Long-term memory summarization
|
|
420
|
+
- [ ] Wake-word detection for hands-free activation
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## π€ Contributing
|
|
425
|
+
|
|
426
|
+
Contributions are welcome! Please open an issue first to discuss what you'd like to change. For bug fixes, feel free to submit a PR directly.
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## π License
|
|
431
|
+
|
|
432
|
+
MIT License β see [LICENSE](LICENSE) for full details.
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
<div align="center">
|
|
437
|
+
|
|
438
|
+
**Built for privacy. Designed for speed. Made to be yours.**
|
|
439
|
+
|
|
440
|
+
*π€ JARVIS β Your Personal AI Assistant*
|
|
441
|
+
|
|
442
|
+
</div>
|