From 377016478e2f2bdd1b47bda07798472b724f85f6 Mon Sep 17 00:00:00 2001 From: Bossiara13 <236771060+DmitryBykov-ISPO@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:32:45 +0300 Subject: [PATCH 01/11] chore: rebrand to Bossiara13 fork bump version 3.0 -> 0.1.0 --- config.py | 2 +- main.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config.py b/config.py index cac005f..3ac2122 100644 --- a/config.py +++ b/config.py @@ -6,7 +6,7 @@ load_dotenv("dev.env") # Конфигурация VA_NAME = 'Jarvis' -VA_VER = "3.0" +VA_VER = "0.1.0" VA_ALIAS = ('джарвис',) VA_TBR = ('скажи', 'покажи', 'ответь', 'произнеси', 'расскажи', 'сколько', 'слушай') diff --git a/main.py b/main.py index 7204464..f7e7c84 100644 --- a/main.py +++ b/main.py @@ -283,7 +283,7 @@ recorder = PvRecorder(device_index=config.MICROPHONE_INDEX, frame_length=porcupi recorder.start() print('Using device: %s' % recorder.selected_device) -print(f"Jarvis (v3.0) начал свою работу ...") +print(f"Jarvis (v0.1.0) начал свою работу ...") play("run") time.sleep(0.5) From 7f5ca81c71c764844e8e9580fffda20636aa2be0 Mon Sep 17 00:00:00 2001 From: Bossiara13 <236771060+DmitryBykov-ISPO@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:32:46 +0300 Subject: [PATCH 02/11] feat: swap openai for Groq via openai-compatible base_url --- config.py | 6 ++++-- dev.env | 2 +- main.py | 39 +++++++++++++++++---------------------- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/config.py b/config.py index 3ac2122..28a9710 100644 --- a/config.py +++ b/config.py @@ -20,5 +20,7 @@ CHROME_PATH = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s' # Токен Picovoice PICOVOICE_TOKEN = os.getenv('PICOVOICE_TOKEN') -# Токен OpenAI -OPENAI_TOKEN = os.getenv('OPENAI_TOKEN') +# Токен Groq +GROQ_TOKEN = os.getenv('GROQ_TOKEN') +GROQ_BASE_URL = "https://api.groq.com/openai/v1" +GROQ_MODEL = "llama-3.3-70b-versatile" diff --git a/dev.env b/dev.env index 4f357f2..36d9b7b 100644 --- a/dev.env +++ b/dev.env @@ -1,2 +1,2 @@ PICOVOICE_TOKEN=<тут ключ-picovoice> -OPENAI_TOKEN=<тут ключ-openai> \ No newline at end of file +GROQ_TOKEN=<тут ключ-groq> diff --git a/main.py b/main.py index f7e7c84..dc7208c 100644 --- a/main.py +++ b/main.py @@ -10,7 +10,7 @@ import time from ctypes import POINTER, cast import openai -from openai import error +from openai import OpenAI import pvporcupine import simpleaudio as sa import vosk @@ -37,8 +37,7 @@ VA_CMD_LIST = yaml.safe_load( system_message = {"role": "system", "content": "Ты голосовой ассистент из железного человека."} message_log = [system_message] -# init openai -openai.api_key = config.OPENAI_TOKEN +client = OpenAI(api_key=config.GROQ_TOKEN, base_url=config.GROQ_BASE_URL) # PORCUPINE porcupine = pvporcupine.create( @@ -59,33 +58,29 @@ q = queue.Queue() def gpt_answer(): global message_log - model_engine = "gpt-3.5-turbo" - max_tokens = 256 # default 1024 try: - response = openai.ChatCompletion.create( - model=model_engine, + response = client.chat.completions.create( + model=config.GROQ_MODEL, messages=message_log, - max_tokens=max_tokens, + max_tokens=256, temperature=0.7, top_p=1, - stop=None + stop=None, ) - except (error.TryAgain, error.ServiceUnavailableError): - return "ChatGPT перегружен!" - except openai.OpenAIError as ex: - # если ошибка - это макс длина контекста, то возвращаем ответ с очищенным контекстом - if ex.code == "context_length_exceeded": + except openai.BadRequestError as ex: + code = getattr(ex, "code", None) or "" + message = str(ex) + if code == "context_length_exceeded" or "context_length_exceeded" in message: message_log = [system_message, message_log[-1]] return gpt_answer() - else: - return "OpenAI токен не рабочий." + return "Запрос отклонён моделью." + except openai.RateLimitError: + return "Лимит запросов исчерпан." + except openai.APIConnectionError: + return "Не могу связаться с сервером." + except openai.APIError: + return "Groq токен не рабочий." - # Find the first response from the chatbot that has text in it (some responses may not have text) - for choice in response.choices: - if "text" in choice: - return choice.text - - # If no response with text is found, return the first response's content (which may be empty) return response.choices[0].message.content From 9b7c08b088e78747eb76dd1541caf1287b7bd499 Mon Sep 17 00:00:00 2001 From: Bossiara13 <236771060+DmitryBykov-ISPO@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:32:47 +0300 Subject: [PATCH 03/11] chore: pin openai>=1.0 and rewrite requirements.txt as utf-8 --- requirements.txt | Bin 496 -> 498 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/requirements.txt b/requirements.txt index 348ea5841674899739ff09df7ad4b4c2cced9f64..2572ac058b4dae590fc0a535c7930aad49e897a4 100644 GIT binary patch literal 498 zcmZ9JQES3L5QOJBze4cYT7Q5ApQKQ!AQbwTCb5P#clItS@z?j;yP{Q&z})QY%>bs=Z}p*XY9qaHRyg@TZAtA(bItUi$4lY{*7W9nJAV&jv+vMe zamg+ibbgX+ySTJ|KjALC1Ya+eR4ct4KPfY>%U3a(nM%O0<8mM)S@quJFB2s!23|hrZA+ DiLF5QWcm!FLe6?n6i~yipKZ3SNdJHqvHSHZhVuy!y>FTM-EhGiT=f?B;q| zXs)deDit+wtg68}^*U+KH`9xb%#KVG(-YM}fvr4A)W%P$sFLG0Gwo0CPT!81ey;QU zO^ph?R;2jwt%!b&eu0Z^<;{2cAJ>mh`T8ka Date: Wed, 22 Apr 2026 17:32:48 +0300 Subject: [PATCH 04/11] chore: re-save requirements.txt as plain utf-8 --- requirements.txt | Bin 498 -> 249 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/requirements.txt b/requirements.txt index 2572ac058b4dae590fc0a535c7930aad49e897a4..f98b726da8847ef07a3a8556f812ed5b3b613e08 100644 GIT binary patch literal 249 zcmXw!%ZdU)3`O_(iUQX<&Ic&Cl7SWlL2y}CrKf}4Nv2*>e!bN*XWj4&B@2B_S7h0mRQ&g#Z8m literal 498 zcmZ9JQES3L5QOJBze4cYT7Q5ApQKQ!AQbwTCb5P#clItS@z?j;yP{Q&z})QY%>bs=Z}p*XY9qaHRyg@TZAtA(bItUi$4lY{*7W9nJAV&jv+vMe zamg+ibbgX+ySTJ|KjALC1Ya+eR4ct4KPfY>%U3a(nM%O0<8mM)S@quJFB2s!23|hrZA+ DiLF Date: Wed, 22 Apr 2026 17:32:49 +0300 Subject: [PATCH 05/11] docs: write fresh README for the fork --- README.md | 73 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index b655b5b..56be979 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,57 @@ -# Kesha v3.0 very early (aka Jarvis update) -Simple Voice Assistant made as an experiment using [Silero](https://github.com/snakers4/silero-models) & [Vosk](https://pypi.org/project/vosk/). -
Later on [Picovoice Porcupine Wake Word Detection](https://picovoice.ai/platform/porcupine/) & [ChatGPT](https://chat.openai.com/) was added. +# J.A.R.V.I.S (Python) — Bossiara13's fork -![image](https://i.pinimg.com/originals/63/e9/b7/63e9b72b983793f64bffc07fd14a0e62.jpg) +Голосовой ассистент для Windows с wake-word **«jarvis»**. Распознаёт речь локально через Vosk (русская модель), отвечает голосом через Silero TTS, а свободные вопросы (фразы, начинающиеся со слова «скажи …») отправляет в LLM на Groq и зачитывает ответ. -`The code has NOT been polished and is provided "as is". There are a lot of code that are redundant and there are tons of improvements that can be made.` +## Это форк -# Installation -First, install the requirements, the `requirements.txt` file is just an output of `pip freeze` from my test venv 'k.
-Second, check `config.py` and set required values (api key, device index).
-Next, run the `main.py` script and Voilà, as simple as that.

+Форк репозитория [Priler/jarvis](https://github.com/Priler/jarvis) (автор оригинала — Abraham Tugalov, 2022). Лицензия наследуется: **CC BY-NC-SA 4.0** (см. [LICENSE.txt](LICENSE.txt)). -And don't forget to put models of Vosk to main folder.
-You can get the latest from the [official website.](https://alphacephei.com/vosk/models) -
The one I was using is `small`. -
p.s. If you don't understand how to install or where to put the Vosk model, I've made a [screenshot](https://i.imgur.com/N3bu2lC.png) for you. +## Что отличается от оригинала -# Python version -I was using Python `3.8.3`, but it should work on any newer version. +- Из истории удалены случайно закоммиченные секреты. +- Бэкенд LLM переключён с OpenAI на Groq (бесплатный тариф) через openai-совместимый API. +- Код обновлён под новую версию SDK `openai` (>=1.0); старый pre-1.0 интерфейс был сломан. +- Обновлена ветка/тэги (`dev`, `v0.0.1-import`), причёсан README и `requirements.txt`. -# ToDo -- Адекватная архитектура кода, собрать всё и переписать from the ground up. -- Задержка воспроизведения звука на основе реальной длительности .wav файла (прогружать при запуске?) -- Speech to intent? -- Отключать self listening protection во время воспроизведения с наушников. -- Указание из списка или по имени будет реализовано позже. +## Установка -# Author -(2022) Abraham Tugalov \ No newline at end of file +Требуется **Python 3.11** (на 3.13 ряд зависимостей пока ставится с бубном). + +```bash +git clone https://github.com/DmitryBykov-ISPO/J.A.R.V.I.S-py.git +cd J.A.R.V.I.S-py +py -3.11 -m venv .venv +.venv\Scripts\activate +pip install --upgrade pip +pip install -r requirements.txt +``` + +Скопируйте `dev.env` и заполните ключи: + +- `PICOVOICE_TOKEN` — бесплатно на [console.picovoice.ai](https://console.picovoice.ai/). +- `GROQ_TOKEN` — бесплатно на [console.groq.com](https://console.groq.com/). + +Vosk-модель для русского языка лежит в `model_small/` (уже в репозитории). Запуск: + +```bash +python main.py +``` + +## Конфигурация + +- `config.py`: + - `MICROPHONE_INDEX = -1` — индекс микрофона (`-1` означает устройство по умолчанию). Если микрофонов несколько и берётся не тот, поменяйте число. + - `GROQ_MODEL` — имя модели Groq (по умолчанию `llama-3.3-70b-versatile`). +- `commands.yaml` — набор голосовых команд и их вариантов для fuzzy-матчинга. +- `custom-commands/` — скомпилированные AHK-скрипты под конкретный сетап автора оригинала (переключение мониторов, управление Яндекс.Музыкой и т.п.). На вашей машине большая часть из них работать не будет, но ассистент запустится в любом случае. + +## Использование + +1. Скажите **«Джарвис»** (или **«jarvis»**) — ассистент даст звуковой сигнал готовности. +2. В течение 10 секунд произнесите команду: + - либо одну из фраз из `commands.yaml` (открыть браузер, выключить звук и т.д.); + - либо начните со слова **«скажи …»** — остаток фразы уйдёт в Groq, ответ будет зачитан вслух. + +## Лицензия + +CC BY-NC-SA 4.0 — см. [LICENSE.txt](LICENSE.txt). Авторство оригинала — Abraham Tugalov / Priler. Изменения в этом форке — Bossiara13 (Dmitry Bykov), 2026. From 8019ee0baa18ab6f21730cefbd082db623758266 Mon Sep 17 00:00:00 2001 From: Bossiara13 <236771060+DmitryBykov-ISPO@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:33:07 +0300 Subject: [PATCH 06/11] security: untrack dev.env, add template dev.env.example MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Real secrets now live in untracked dev.env (gitignored). dev.env.example holds placeholders and is the canonical template — copy it to dev.env on fresh checkout and fill in real keys. --- .gitignore | 7 ++++++- dev.env => dev.env.example | 0 2 files changed, 6 insertions(+), 1 deletion(-) rename dev.env => dev.env.example (100%) diff --git a/.gitignore b/.gitignore index 525719c..6570c24 100644 --- a/.gitignore +++ b/.gitignore @@ -185,4 +185,9 @@ fabric.properties .idea/caches/build_file_checksums.ser # idea folder, uncomment if you don't need it -# .idea \ No newline at end of file +# .idea +# Local secrets (real keys go here, not in dev.env.example) +dev.env + +# Misc artifacts +.git-filter-redactions.txt diff --git a/dev.env b/dev.env.example similarity index 100% rename from dev.env rename to dev.env.example From a4b919c11eea3316ef2e15d5a09649831b6156a6 Mon Sep 17 00:00:00 2001 From: Bossiara13 <236771060+DmitryBykov-ISPO@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:46:44 +0300 Subject: [PATCH 07/11] refactor: replace porcupine wake-word with vosk grammar-constrained recognizer uses a second KaldiRecognizer with a JSON grammar of WAKE_WORDS + [unk] for the wake phase, then hands off to the full-vocab recognizer for the 10s command window. drops the pvporcupine dependency entirely. --- config.py | 10 ++++++---- main.py | 52 +++++++++++++++++++++++++++++----------------------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/config.py b/config.py index 28a9710..01f9f2c 100644 --- a/config.py +++ b/config.py @@ -6,10 +6,15 @@ load_dotenv("dev.env") # Конфигурация VA_NAME = 'Jarvis' -VA_VER = "0.1.0" +VA_VER = "0.2.0" VA_ALIAS = ('джарвис',) VA_TBR = ('скажи', 'покажи', 'ответь', 'произнеси', 'расскажи', 'сколько', 'слушай') +# Wake-words распознаются Vosk'ом с grammar-constraint. Добавляйте сюда +# варианты написания — Vosk с русской моделью может расшифровать "jarvis" +# как "джарвис", "жарвис" и т.п. +WAKE_WORDS = ('jarvis', 'джарвис') + # ID микрофона (можете просто менять ID пока при запуске не отобразится нужный) # -1 это стандартное записывающее устройство MICROPHONE_INDEX = -1 @@ -17,9 +22,6 @@ MICROPHONE_INDEX = -1 # Путь к браузеру Google Chrome CHROME_PATH = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s' -# Токен Picovoice -PICOVOICE_TOKEN = os.getenv('PICOVOICE_TOKEN') - # Токен Groq GROQ_TOKEN = os.getenv('GROQ_TOKEN') GROQ_BASE_URL = "https://api.groq.com/openai/v1" diff --git a/main.py b/main.py index dc7208c..52aa60a 100644 --- a/main.py +++ b/main.py @@ -11,7 +11,6 @@ from ctypes import POINTER, cast import openai from openai import OpenAI -import pvporcupine import simpleaudio as sa import vosk import yaml @@ -39,18 +38,14 @@ message_log = [system_message] client = OpenAI(api_key=config.GROQ_TOKEN, base_url=config.GROQ_BASE_URL) -# PORCUPINE -porcupine = pvporcupine.create( - access_key=config.PICOVOICE_TOKEN, - keywords=['jarvis'], - sensitivities=[1] -) -# print(pvporcupine.KEYWORDS) - -# VOSK model = vosk.Model("model_small") samplerate = 16000 device = config.MICROPHONE_INDEX + +# wake-word phase uses a grammar-constrained recognizer so only WAKE_WORDS +# (plus [unk] filler) can match — command phase needs full vocab, hence two. +wake_grammar = json.dumps(list(config.WAKE_WORDS) + ["[unk]"], ensure_ascii=False) +wake_rec = vosk.KaldiRecognizer(model, samplerate, wake_grammar) kaldi_rec = vosk.KaldiRecognizer(model, samplerate) q = queue.Queue() @@ -268,33 +263,42 @@ def execute_cmd(cmd: str, voice: str): elif cmd == 'off': play("off", True) - - porcupine.delete() exit(0) -# `-1` is the default input audio device. -recorder = PvRecorder(device_index=config.MICROPHONE_INDEX, frame_length=porcupine.frame_length) +recorder = PvRecorder(device_index=config.MICROPHONE_INDEX, frame_length=512) recorder.start() print('Using device: %s' % recorder.selected_device) -print(f"Jarvis (v0.1.0) начал свою работу ...") +print(f"Jarvis (v{config.VA_VER}) начал свою работу ...") play("run") time.sleep(0.5) -ltc = time.time() - 1000 + +def heard_wake_word(text: str) -> bool: + if not text: + return False + lowered = text.lower() + return any(w in lowered for w in config.WAKE_WORDS) + while True: try: pcm = recorder.read() - keyword_index = porcupine.process(pcm) + sp = struct.pack("h" * len(pcm), *pcm) - if keyword_index >= 0: - recorder.stop() - play("greet", True) - print("Yes, sir.") - recorder.start() # prevent self recording - ltc = time.time() + if not wake_rec.AcceptWaveform(sp): + continue + + result_text = json.loads(wake_rec.Result()).get("text", "") + if not heard_wake_word(result_text): + continue + + play("greet", True) + print("Yes, sir.") + # reset the command recognizer so stale audio doesn't bleed into it + kaldi_rec.Reset() + ltc = time.time() while time.time() - ltc <= 10: pcm = recorder.read() @@ -306,6 +310,8 @@ while True: break + wake_rec.Reset() + except Exception as err: print(f"Unexpected {err=}, {type(err)=}") raise From d8a2862ace45682534515ee577054b6db4c872c0 Mon Sep 17 00:00:00 2001 From: Bossiara13 <236771060+DmitryBykov-ISPO@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:47:22 +0300 Subject: [PATCH 08/11] chore: drop pvporcupine dep and PICOVOICE_TOKEN from env template wake-word is now handled by vosk, so the picovoice access key is no longer needed. config.py already had PICOVOICE_TOKEN removed in the previous commit. --- dev.env.example | 1 - requirements.txt | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/dev.env.example b/dev.env.example index 36d9b7b..a3a6fb6 100644 --- a/dev.env.example +++ b/dev.env.example @@ -1,2 +1 @@ -PICOVOICE_TOKEN=<тут ключ-picovoice> GROQ_TOKEN=<тут ключ-groq> diff --git a/requirements.txt b/requirements.txt index f98b726..90e8ca8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ -# Picovoice stuff -pvporcupine +# mic capture pvrecorder # Vosk From 1078b2daa3389c9a49ca5886bb504aaaace0a6b0 Mon Sep 17 00:00:00 2001 From: Bossiara13 <236771060+DmitryBykov-ISPO@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:48:15 +0300 Subject: [PATCH 09/11] docs: drop picovoice mentions, document WAKE_WORDS config README no longer lists PICOVOICE_TOKEN as a required key, and the configuration section explains the new WAKE_WORDS tuple. --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 56be979..5be765f 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ - Из истории удалены случайно закоммиченные секреты. - Бэкенд LLM переключён с OpenAI на Groq (бесплатный тариф) через openai-совместимый API. - Код обновлён под новую версию SDK `openai` (>=1.0); старый pre-1.0 интерфейс был сломан. +- Убрана зависимость от Picovoice Porcupine — wake-word распознаётся напрямую через Vosk с grammar-constraint (второй `KaldiRecognizer` со словарём из `WAKE_WORDS`). Ключ Picovoice больше не нужен. - Обновлена ветка/тэги (`dev`, `v0.0.1-import`), причёсан README и `requirements.txt`. ## Установка @@ -26,9 +27,8 @@ pip install --upgrade pip pip install -r requirements.txt ``` -Скопируйте `dev.env` и заполните ключи: +Скопируйте `dev.env.example` в `dev.env` и заполните ключ: -- `PICOVOICE_TOKEN` — бесплатно на [console.picovoice.ai](https://console.picovoice.ai/). - `GROQ_TOKEN` — бесплатно на [console.groq.com](https://console.groq.com/). Vosk-модель для русского языка лежит в `model_small/` (уже в репозитории). Запуск: @@ -41,6 +41,7 @@ python main.py - `config.py`: - `MICROPHONE_INDEX = -1` — индекс микрофона (`-1` означает устройство по умолчанию). Если микрофонов несколько и берётся не тот, поменяйте число. + - `WAKE_WORDS = ('jarvis', 'джарвис')` — варианты транскрипции wake-word, которые принимает Vosk. Если ваш голос/акцент стабильно расшифровывается как, например, `жарвис` — добавьте этот вариант сюда (всё в нижнем регистре). - `GROQ_MODEL` — имя модели Groq (по умолчанию `llama-3.3-70b-versatile`). - `commands.yaml` — набор голосовых команд и их вариантов для fuzzy-матчинга. - `custom-commands/` — скомпилированные AHK-скрипты под конкретный сетап автора оригинала (переключение мониторов, управление Яндекс.Музыкой и т.п.). На вашей машине большая часть из них работать не будет, но ассистент запустится в любом случае. From d56a096267ac8c6877d286426f7349deb681a5c9 Mon Sep 17 00:00:00 2001 From: Bossiara13 <236771060+DmitryBykov-ISPO@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:49:26 +0300 Subject: [PATCH 10/11] chore: align VA_VER with v0.1.0 release tag --- config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.py b/config.py index 01f9f2c..e39687a 100644 --- a/config.py +++ b/config.py @@ -6,7 +6,7 @@ load_dotenv("dev.env") # Конфигурация VA_NAME = 'Jarvis' -VA_VER = "0.2.0" +VA_VER = "0.1.0" VA_ALIAS = ('джарвис',) VA_TBR = ('скажи', 'покажи', 'ответь', 'произнеси', 'расскажи', 'сколько', 'слушай') From dfdfd9418bf4b7e3c714b9e1427eb1db5aefcf51 Mon Sep 17 00:00:00 2001 From: Bossiara13 <236771060+DmitryBykov-ISPO@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:50:32 +0300 Subject: [PATCH 11/11] =?UTF-8?q?feat:=20tighten=20system=20prompt=20?= =?UTF-8?q?=E2=80=94=20explicit=20Jarvis=20persona,=20not=20Friday/Vision?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Names the assistant as J.A.R.V.I.S. (acronym + MCU pre-Age-of-Ultron) - British butler tone, addresses user as «сэр» - Brief replies (1-3 sentences) - No prudish censorship --- main.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 52aa60a..5d30d3b 100644 --- a/main.py +++ b/main.py @@ -32,8 +32,13 @@ VA_CMD_LIST = yaml.safe_load( open('commands.yaml', 'rt', encoding='utf8'), ) -# ChatGPT vars -system_message = {"role": "system", "content": "Ты голосовой ассистент из железного человека."} +system_message = {"role": "system", "content": ( + "Ты — J.A.R.V.I.S. (Just A Rather Very Intelligent System), ИИ-ассистент Тони Старка из киновселенной Marvel " + "(до событий Age of Ultron — ты НЕ Vision и НЕ FRIDAY). " + "Ведёшь себя как британский дворецкий: вежливо, иронично, с лёгким сарказмом, обращаешься к пользователю «сэр». " + "Отвечай по-русски, кратко (1-3 предложения), как живой человек. " + "Излишней цензуры не нужно — мат разрешён, если уместен." +)} message_log = [system_message] client = OpenAI(api_key=config.GROQ_TOKEN, base_url=config.GROQ_BASE_URL)