Skip to content

Commit c628c7a

Browse files
committed
first commit
0 parents  commit c628c7a

83 files changed

Lines changed: 6221 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.env-example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
PORCUPINE_ACCESS_KEY=
2+
GEMINI_API_KEY=

.gitignore

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Python-generated files
2+
__pycache__/
3+
*.py[oc]
4+
build/
5+
dist/
6+
wheels/
7+
*.egg-info
8+
9+
# Virtual environments
10+
.venv
11+
*.log
12+
.env

.python-version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3.12

README.md

Lines changed: 248 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
1+
![img](/assets/logo.png)
2+
# 🎙 Jarvis Voice Assistant (Windows)
3+
4+
Jarvis — это офлайн + онлайн голосовой ассистент для Windows с поддержкой wake word, голосовых команд и AI-режима (Gemini).
5+
6+
Поддерживает:
7+
- Активацию по голосу (Jarvis)
8+
- Локальное распознавание речи (Vosk)
9+
- Голосовой ответ (TTS)
10+
- Управление системой
11+
- AI режим (Gemini)
12+
- Работу в фоне
13+
14+
15+
---
16+
17+
## 📦 Установка (Windows)
18+
19+
### 1. Скачать installer
20+
21+
Перейдите в раздел Releases на GitHub и скачайте файл:
22+
23+
```
24+
25+
JarvisInstaller.exe
26+
27+
```
28+
29+
---
30+
31+
### 2. Установить
32+
33+
1. Запустите `JarvisInstaller.exe`
34+
2. Нажмите Next → Install
35+
3. Дождитесь завершения установки
36+
4. Запустите Jarvis через ярлык на рабочем столе
37+
38+
---
39+
40+
## ⚙ Первоначальная настройка (ОБЯЗАТЕЛЬНО)
41+
42+
После первого запуска Jarvis автоматически создаёт файл конфигурации:
43+
44+
```
45+
46+
C:\Users<YOUR_USERNAME>\AppData\Local\Jarvis\config.yaml
47+
48+
```
49+
50+
Откройте его для настройки API ключей.
51+
52+
Быстрый способ:
53+
54+
1. Нажмите Win + R
55+
2. Вставьте:
56+
57+
```
58+
59+
%localappdata%\Jarvis
60+
61+
````
62+
63+
3. Нажмите Enter
64+
4. Откройте `config.yaml`
65+
66+
---
67+
68+
# 🔑 Настройка Porcupine (Wake Word)
69+
70+
Jarvis использует Picovoice Porcupine для распознавания активационного слова.
71+
72+
### Получить ключ:
73+
74+
1. Перейдите на сайт:
75+
76+
https://console.picovoice.ai/
77+
78+
2. Зарегистрируйтесь
79+
3. Создайте Access Key
80+
4. Скопируйте ключ
81+
82+
---
83+
84+
### Вставить ключ
85+
86+
В `config.yaml` найдите:
87+
88+
```yaml
89+
porcupine:
90+
access_key: ""
91+
````
92+
93+
Замените на:
94+
95+
```yaml
96+
porcupine:
97+
access_key: "YOUR_PICOVOICE_KEY"
98+
```
99+
100+
Сохраните файл.
101+
102+
---
103+
104+
# 🤖 Настройка Gemini AI (опционально)
105+
106+
AI режим позволяет задавать вопросы ассистенту.
107+
108+
---
109+
110+
### Получить Gemini API key:
111+
112+
1. Перейдите:
113+
114+
[https://aistudio.google.com/app/apikey](https://aistudio.google.com/app/apikey)
115+
116+
2. Создайте API Key
117+
3. Скопируйте ключ
118+
119+
---
120+
121+
### Вставить ключ
122+
123+
В `config.yaml`:
124+
125+
```yaml
126+
ai:
127+
api_key: ""
128+
```
129+
130+
Замените:
131+
132+
```yaml
133+
ai:
134+
api_key: "YOUR_GEMINI_API_KEY"
135+
```
136+
137+
---
138+
139+
### Включение AI режима
140+
141+
Проверьте:
142+
143+
```yaml
144+
ai:
145+
enabled: true
146+
```
147+
148+
---
149+
150+
# 🎤 Использование ассистента
151+
152+
### Активация:
153+
154+
Скажите:
155+
156+
```
157+
Jarvis
158+
```
159+
160+
---
161+
162+
### Примеры команд:
163+
164+
```
165+
Открой браузер
166+
Включи YouTube
167+
Который час
168+
Выключи компьютер
169+
```
170+
171+
---
172+
173+
### AI режим:
174+
175+
Пример:
176+
177+
```
178+
Jarvis, что такое черная дыра
179+
Jarvis, объясни квантовую физику простыми словами
180+
```
181+
182+
---
183+
184+
# ⚠ Требования
185+
186+
* Windows 10 / 11 (64-bit)
187+
* Микрофон
188+
* Интернет (для AI режима)
189+
* Porcupine API Key (обязательно)
190+
191+
---
192+
193+
# 🛠 Решение проблем
194+
195+
### Ассистент не запускается
196+
197+
Проверь:
198+
199+
* config.yaml существует
200+
* Porcupine access_key указан
201+
* микрофон разрешён в Windows
202+
203+
---
204+
205+
### Микрофон не работает
206+
207+
Открой:
208+
209+
```
210+
Settings → Privacy → Microphone
211+
```
212+
213+
Включи:
214+
215+
* Allow desktop apps to access microphone
216+
217+
---
218+
219+
# 📁 Где хранится конфиг
220+
221+
```
222+
C:\Users\<USERNAME>\AppData\Local\Jarvis\config.yaml
223+
```
224+
225+
---
226+
227+
# 🚀 Разработка
228+
229+
Проект написан на Python и использует:
230+
231+
* Vosk STT
232+
* Picovoice Porcupine
233+
* pyttsx3
234+
* Gemini API
235+
* PyInstaller
236+
* Inno Setup
237+
238+
---
239+
240+
# 📄 Лицензия
241+
242+
MIT License
243+
244+
---
245+
246+
# ⭐ Поддержка проекта
247+
248+
Если проект понравился — поставьте ⭐ на GitHub 🙂

ai/__init__.py

Whitespace-only changes.

ai/gemini.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import os
2+
import time
3+
from core.config import AI_MODEL
4+
5+
6+
VOICE_SYSTEM_PROMPT = """
7+
РОЛЬ:
8+
Ты — голосовой ассистент для общения с человеком в реальном времени.
9+
10+
ОСНОВНАЯ ЦЕЛЬ:
11+
Давать понятные, короткие и естественные ответы, которые удобно слушать, а не читать.
12+
13+
СТИЛЬ РЕЧИ:
14+
Говори как человек.
15+
Разговорный, спокойный, дружелюбный тон.
16+
Без формального языка и сложных терминов.
17+
18+
ОГРАНИЧЕНИЯ ФОРМАТА:
19+
Отвечай ТОЛЬКО обычным текстом.
20+
НЕ используй markdown.
21+
НЕ используй списки.
22+
НЕ используй код.
23+
НЕ используй символы форматирования (* # - _ `).
24+
НЕ используй эмодзи.
25+
26+
ДЛИНА ОТВЕТА:
27+
Максимум 2–3 коротких предложения.
28+
Если тема сложная — дай краткое объяснение и предложи продолжить.
29+
30+
ПОВЕДЕНИЕ:
31+
Не повторяй вопрос пользователя.
32+
Не добавляй вводные фразы типа "Конечно" или "Вот ответ".
33+
Сразу отвечай по сути.
34+
35+
ЕСЛИ НЕ УВЕРЕН:
36+
Скажи честно и предложи уточнить.
37+
38+
ВАЖНО:
39+
Ты предназначен для озвучивания через TTS.
40+
Ответ должен звучать естественно вслух.
41+
"""
42+
43+
class GeminiClient:
44+
45+
def __init__(self, api_key):
46+
47+
self.api_key = api_key
48+
self.available = bool(api_key)
49+
50+
self.max_chars = 600
51+
self.retry_count = 2
52+
53+
if self.available:
54+
try:
55+
from google import genai
56+
self.genai_client = genai.Client()
57+
except Exception as e:
58+
print("❌ Gemini init failed:", e)
59+
self.available = False
60+
61+
62+
def ask(self, prompt):
63+
64+
if not self.available:
65+
return None
66+
67+
full_prompt = VOICE_SYSTEM_PROMPT + "\n\nВопрос:\n" + prompt
68+
69+
for attempt in range(self.retry_count):
70+
71+
try:
72+
73+
response = self.genai_client.models.generate_content(
74+
model=AI_MODEL,
75+
contents=full_prompt
76+
)
77+
78+
text = getattr(response, "text", None)
79+
80+
if not text:
81+
return None
82+
83+
text = text.strip()
84+
85+
# limit TTS spam
86+
if len(text) > self.max_chars:
87+
text = text[:self.max_chars] + "..."
88+
89+
return text
90+
91+
except Exception as e:
92+
print(f"⚠ Gemini request failed ({attempt+1}):", e)
93+
time.sleep(1)
94+
95+
return None

assets/icon.ico

172 KB
Binary file not shown.

assets/logo.png

1.76 MB
Loading

assets/version.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
VSVersionInfo(
2+
ffi=FixedFileInfo(
3+
filevers=(1,0,0,0),
4+
prodvers=(1,0,0,0),
5+
mask=0x3f,
6+
flags=0x0,
7+
OS=0x40004,
8+
fileType=0x1,
9+
subtype=0x0,
10+
date=(0,0)
11+
),
12+
kids=[
13+
StringFileInfo(
14+
[
15+
StringTable(
16+
'040904B0',
17+
[
18+
StringStruct('CompanyName', 'Jarvis Assistant'),
19+
StringStruct('FileDescription', 'Jarvis Voice Assistant'),
20+
StringStruct('FileVersion', '1.0'),
21+
StringStruct('ProductName', 'Jarvis'),
22+
StringStruct('ProductVersion', '1.0')
23+
]
24+
)
25+
]
26+
)
27+
]
28+
)

build_scripts/build.ps1

Whitespace-only changes.

0 commit comments

Comments
 (0)