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.
Files changed (85) hide show
  1. jarvise-1.0.0/.env.example +45 -0
  2. jarvise-1.0.0/HowToRun.md +184 -0
  3. jarvise-1.0.0/LICENSE +21 -0
  4. jarvise-1.0.0/MANIFEST.in +8 -0
  5. jarvise-1.0.0/PKG-INFO +442 -0
  6. jarvise-1.0.0/README.md +368 -0
  7. jarvise-1.0.0/backend/__init__.py +1 -0
  8. jarvise-1.0.0/backend/api/__init__.py +5 -0
  9. jarvise-1.0.0/backend/api/dependencies.py +125 -0
  10. jarvise-1.0.0/backend/api/routes/__init__.py +1 -0
  11. jarvise-1.0.0/backend/api/routes/chains.py +182 -0
  12. jarvise-1.0.0/backend/api/routes/chat.py +233 -0
  13. jarvise-1.0.0/backend/api/routes/learn.py +203 -0
  14. jarvise-1.0.0/backend/api/routes/memory.py +520 -0
  15. jarvise-1.0.0/backend/api/routes/stats.py +129 -0
  16. jarvise-1.0.0/backend/api/websocket/__init__.py +5 -0
  17. jarvise-1.0.0/backend/api/websocket/manager.py +107 -0
  18. jarvise-1.0.0/backend/main.py +125 -0
  19. jarvise-1.0.0/brain/__init__.py +31 -0
  20. jarvise-1.0.0/brain/__main__.py +155 -0
  21. jarvise-1.0.0/brain/agent.py +334 -0
  22. jarvise-1.0.0/brain/chains.py +490 -0
  23. jarvise-1.0.0/brain/client.py +214 -0
  24. jarvise-1.0.0/brain/errors.py +174 -0
  25. jarvise-1.0.0/brain/prompt_builder.py +138 -0
  26. jarvise-1.0.0/brain/router.py +692 -0
  27. jarvise-1.0.0/brain/tools.py +755 -0
  28. jarvise-1.0.0/cli/__init__.py +21 -0
  29. jarvise-1.0.0/cli/__main__.py +237 -0
  30. jarvise-1.0.0/cli/client.py +225 -0
  31. jarvise-1.0.0/cli/display.py +120 -0
  32. jarvise-1.0.0/cli/setup.py +55 -0
  33. jarvise-1.0.0/cli/shell.py +130 -0
  34. jarvise-1.0.0/context/__init__.py +54 -0
  35. jarvise-1.0.0/context/app_tracker.py +260 -0
  36. jarvise-1.0.0/context/injector.py +212 -0
  37. jarvise-1.0.0/context/project_detector.py +357 -0
  38. jarvise-1.0.0/context/system_context.py +197 -0
  39. jarvise-1.0.0/core/__init__.py +2 -0
  40. jarvise-1.0.0/core/config.py +307 -0
  41. jarvise-1.0.0/core/hardware.py +85 -0
  42. jarvise-1.0.0/core/logger.py +41 -0
  43. jarvise-1.0.0/jarvise/__init__.py +14 -0
  44. jarvise-1.0.0/jarvise.egg-info/SOURCES.txt +82 -0
  45. jarvise-1.0.0/learning/__init__.py +32 -0
  46. jarvise-1.0.0/learning/preference_memory.py +267 -0
  47. jarvise-1.0.0/learning/retry_engine.py +230 -0
  48. jarvise-1.0.0/learning/tool_cache.py +328 -0
  49. jarvise-1.0.0/main.py +380 -0
  50. jarvise-1.0.0/memory/MemoryManager.py +420 -0
  51. jarvise-1.0.0/memory/__init__.py +18 -0
  52. jarvise-1.0.0/memory/chroma_store.py +279 -0
  53. jarvise-1.0.0/memory/filtered_store.py +572 -0
  54. jarvise-1.0.0/memory/importance.py +269 -0
  55. jarvise-1.0.0/memory/memory_file.py +327 -0
  56. jarvise-1.0.0/memory/preference_store.py +140 -0
  57. jarvise-1.0.0/pyproject.toml +134 -0
  58. jarvise-1.0.0/requirements.txt +53 -0
  59. jarvise-1.0.0/setup.cfg +4 -0
  60. jarvise-1.0.0/setup.py +10 -0
  61. jarvise-1.0.0/tools/__init__.py +55 -0
  62. jarvise-1.0.0/tools/auth/__init__.py +10 -0
  63. jarvise-1.0.0/tools/auth/microsoft.py +295 -0
  64. jarvise-1.0.0/tools/auth/oauth.py +206 -0
  65. jarvise-1.0.0/tools/auth/token_manager.py +211 -0
  66. jarvise-1.0.0/tools/base.py +184 -0
  67. jarvise-1.0.0/tools/browser.py +284 -0
  68. jarvise-1.0.0/tools/code_exec.py +346 -0
  69. jarvise-1.0.0/tools/filesystem.py +531 -0
  70. jarvise-1.0.0/tools/google_calendar.py +442 -0
  71. jarvise-1.0.0/tools/google_email.py +476 -0
  72. jarvise-1.0.0/tools/microsoft_outlook.py +561 -0
  73. jarvise-1.0.0/tools/system_monitor.py +563 -0
  74. jarvise-1.0.0/tools/web_search.py +163 -0
  75. jarvise-1.0.0/ui/dist/assets/index-XJ8VnKVj.css +1 -0
  76. jarvise-1.0.0/ui/dist/assets/index-foSSCjPV.js +180 -0
  77. jarvise-1.0.0/ui/dist/index.html +14 -0
  78. jarvise-1.0.0/voice/__init__.py +38 -0
  79. jarvise-1.0.0/voice/audio_output.py +248 -0
  80. jarvise-1.0.0/voice/keyboard_handler.py +140 -0
  81. jarvise-1.0.0/voice/pipeline.py +348 -0
  82. jarvise-1.0.0/voice/recorder.py +165 -0
  83. jarvise-1.0.0/voice/stt.py +191 -0
  84. jarvise-1.0.0/voice/tts.py +202 -0
  85. 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.
@@ -0,0 +1,8 @@
1
+ include README.md
2
+ include LICENSE
3
+ include .env.example
4
+ include HowToRun.md
5
+ recursive-include ui/dist *
6
+ recursive-exclude tests *
7
+ recursive-exclude __pycache__ *
8
+ recursive-exclude *.egg-info *
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
+ [![Python Version](https://img.shields.io/badge/python-3.11+-3776AB?style=flat-square&logo=python&logoColor=white)](https://www.python.org/downloads/)
87
+ [![FastAPI](https://img.shields.io/badge/FastAPI-backend-009688?style=flat-square&logo=fastapi&logoColor=white)](https://fastapi.tiangolo.com/)
88
+ [![React](https://img.shields.io/badge/React-18-61DAFB?style=flat-square&logo=react&logoColor=black)](https://react.dev/)
89
+ [![Ollama](https://img.shields.io/badge/Ollama-LLM-FF6600?style=flat-square)](https://ollama.com)
90
+ [![ChromaDB](https://img.shields.io/badge/ChromaDB-memory-green?style=flat-square)](https://www.trychroma.com/)
91
+ [![License](https://img.shields.io/badge/license-MIT-22c55e?style=flat-square)](LICENSE)
92
+ [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey?style=flat-square)]()
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
+ ![JARVIS startup terminal showing ASCII logo, boot messages and hardware detection](Image\ss.png)
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>