import gradio as gr import json import random import re from difflib import get_close_matches try: with open("patterns.json", "r", encoding="utf-8") as f: PATTERNS = json.load(f) except Exception as e: PATTERNS = {"default": [f"Ошибка загрузки: {e}"]} # === Логика обработки === KEYWORDS = { "привет": ["привет", "здравствуй", "хай", "прив"], "как дела": ["дела", "как ты", "настроение"], "имя": ["имя", "кто ты", "зовут"], "школа": ["школа", "урок", "задача", "математика"], "пока": ["пока", "выход", "до свидания"], "knowledge": ["что такое", "как приготовить", "расскажи про"] } def preprocess(text): return re.sub(r'[^а-яё\s]', ' ', text.lower()).strip() def find_response(user_input): clean = preprocess(user_input) if not clean: return "Пожалуйста, напиши что-нибудь!" if any(w in clean for w in ["пока", "выход", "стоп"]): return "До свидания! Возвращайся скорее! 😊" knowledge = PATTERNS.get("knowledge", {}) if clean in knowledge: return knowledge[clean] matches = get_close_matches(clean, knowledge.keys(), n=1, cutoff=0.6) if matches: return knowledge[matches[0]] all_keywords = [] keyword_to_intent = {} for intent, words in KEYWORDS.items(): if intent == "knowledge": continue for word in words: all_keywords.append(word) keyword_to_intent[word] = intent for token in clean.split(): matches = get_close_matches(token, all_keywords, n=1, cutoff=0.6) if matches: return random.choice(PATTERNS[keyword_to_intent[matches[0]]]) return random.choice(PATTERNS["default"]) gr.Interface( fn=find_response, inputs="text", outputs="text", title="Newton Micro - теперь умнее! ;)", description="Сверхлёгкий ИИ на Python. Поддерживает опечатки и рецепты." ).launch()