# app.py import gradio as gr import json import random import re from difflib import get_close_matches with open("patterns.json", "r", encoding="utf-8") as f: PATTERNS = json.load(f) 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"]) demo = gr.Interface( fn=find_response, inputs=gr.Textbox(placeholder="Например: 'что такое любовь?' или 'превет!'."), outputs="text", title="🧠 Newton Micro — сверхлёгкий ИИ. Теперь умнее!", description="Мини-ИИ на чистом Python. Поддерживает опечатки, рецепты и определения!", examples=[ ["Превет!"], ["Что такое дружба?"], ["Как приготовить яичницу?"], ["выхад"] ] ) if __name__ == "__main__": demo.launch()