Загрузка данных
import json
import os
import shutil
import webbrowser
import datetime
import subprocess
import speech_recognition as sr
from gtts import gTTS
import pygame
from groq import Groq
import pyautogui
import psutil
import time
# Ваш ключ Groq уже встроен сюда
client = Groq(api_key="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")
MEMORY_FILE = "nova_memory.json"
SETTINGS_FILE = "nova_settings.json"
def load_settings():
if os.path.exists(SETTINGS_FILE):
try:
with open(SETTINGS_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except Exception:
return {"user_name": "друг", "lang": "ru"}
return {"user_name": "друг", "lang": "ru"}
def save_settings(settings):
try:
with open(SETTINGS_FILE, "w", encoding="utf-8") as f:
json.dump(settings, f, ensure_ascii=False, indent=2)
except Exception as e:
print(f"Ошибка сохранения настроек: {e}")
def load_memory():
if os.path.exists(MEMORY_FILE):
try:
with open(MEMORY_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except Exception:
return []
return []
def save_memory():
try:
with open(MEMORY_FILE, "w", encoding="utf-8") as f:
json.dump(chat_history, f, ensure_ascii=False, indent=2)
except Exception as e:
print(f"Ошибка сохранения памяти: {e}")
chat_history = load_memory()
app_settings = load_settings()
user_name = app_settings.get("user_name", "друг")
current_lang = app_settings.get("lang", "ru")
def speak(text, lang=None):
use_lang = lang if lang else current_lang
print(f"Нова [{use_lang}]: {text}")
try:
tts = gTTS(text=text, lang=use_lang)
audio_file = "temp_voice.mp3"
tts.save(audio_file)
pygame.mixer.init()
pygame.mixer.music.load(audio_file)
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
pygame.time.Clock().tick(10)
pygame.mixer.quit()
if os.path.exists(audio_file):
os.remove(audio_file)
except Exception as e:
print(f"Ошибка озвучки: {e}")
def listen():
r = sr.Recognizer()
with sr.Microphone() as source:
print("\nСлушаю...")
r.adjust_for_ambient_noise(source, duration=0.5)
try:
audio = r.listen(source, timeout=5, phrase_time_limit=10)
except sr.WaitTimeoutError:
return ""
try:
rec_lang = "ru-RU" if current_lang == "ru" else "en-US"
command = r.recognize_google(audio, language=rec_lang)
print(f"Вы сказали: {command}")
return command
except sr.UnknownValueError:
return ""
except sr.RequestError:
print("Ошибка соединения с сервисом распознавания речи.")
return ""
def parse_intent_with_ai(user_speech):
global chat_history, user_name, current_lang
chat_history.append(f"{user_name}: {user_speech}")
context_slice = chat_history[-10:]
context_str = "\n".join(context_slice)
prompt = (
f'Ты — Нова, элитный голосовой ассистент на ПК. Пользователя зовут "{user_name}". Текущий язык: "{current_lang}".\n'
'Проанализируй фразу и верни СТРОГО JSON без markdown-оформления (без ```json):\n'
'{\n'
' "action": "open_chat", "change_language", "set_name", "open_youtube", "google_search", "open_app", '
'"open_folder", "empty_recycle_bin", "shutdown_pc", "cancel_shutdown", "sleep_pc", '
'"time_info", "battery_info", "take_screenshot", "create_note", "copy_files", "exit", или "chat",\n'
' "messenger": "telegram, discord или whatsapp",\n'
' "chat_target": "имя контакта или чата",\n'
' "new_lang": "код языка (ru, en и т.д.)",\n'
' "new_name": "новое имя пользователя",\n'
' "query": "поисковый запрос",\n'
' "app_name": "название программы",\n'
' "folder_name": "название папки",\n'
' "minutes": 0,\n'
' "note_text": "текст заметки",\n'
' "source_path": "",\n'
' "dest_path": "",\n'
' "text": "ответ пользователю"\n'
'}\n\n'
f'История разговора:\n{context_str}\n\n'
f'Текущая фраза: "{user_speech}"'