Spaces:
Running
Running
| import json | |
| import os | |
| from collections import Counter | |
| from datetime import datetime | |
| PREFERENCES_FILE = "core/preferences.json" | |
| def load_preferences(): | |
| """Загружает личные предпочтения пользователя""" | |
| if not os.path.exists(PREFERENCES_FILE): | |
| return {"tone": "нейтральный", "depth": "средний", "themes": [], "updated": ""} | |
| try: | |
| with open(PREFERENCES_FILE, "r", encoding="utf-8") as f: | |
| return json.load(f) | |
| except Exception: | |
| return {"tone": "нейтральный", "depth": "средний", "themes": []} | |
| def save_preferences(prefs): | |
| """Сохраняет обновлённые предпочтения""" | |
| os.makedirs(os.path.dirname(PREFERENCES_FILE), exist_ok=True) | |
| prefs["updated"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
| with open(PREFERENCES_FILE, "w", encoding="utf-8") as f: | |
| json.dump(prefs, f, ensure_ascii=False, indent=2) | |
| def analyze_user_input(user_input): | |
| """Анализирует стиль и тему запроса""" | |
| prefs = load_preferences() | |
| text = user_input.lower() | |
| # --- Определяем тональность --- | |
| if any(word in text for word in ["объясни", "просто", "понятно"]): | |
| prefs["tone"] = "дружелюбный" | |
| elif any(word in text for word in ["детально", "подробно", "глубоко"]): | |
| prefs["tone"] = "академический" | |
| # --- Глубина --- | |
| if len(user_input.split()) < 6: | |
| prefs["depth"] = "поверхностный" | |
| elif len(user_input.split()) > 15: | |
| prefs["depth"] = "глубокий" | |
| else: | |
| prefs["depth"] = "средний" | |
| # --- Темы --- | |
| keywords = ["нейросеть", "ИИ", "философия", "история", "программирование", "квант", "человек"] | |
| found = [k for k in keywords if k in text] | |
| prefs["themes"].extend(found) | |
| # --- Очищаем дубликаты --- | |
| prefs["themes"] = [t for t, _ in Counter(prefs["themes"]).items()] | |
| save_preferences(prefs) | |
| return prefs | |
| def adapt_answer(base_answer): | |
| """Модифицирует ответ под стиль пользователя""" | |
| prefs = load_preferences() | |
| tone = prefs.get("tone", "нейтральный") | |
| depth = prefs.get("depth", "средний") | |
| themes = ", ".join(prefs.get("themes", [])) or "общие темы" | |
| if tone == "дружелюбный": | |
| base_answer = "😊 " + base_answer.replace(";", ";\n") + "\n\n(Объяснил максимально просто!)" | |
| elif tone == "академический": | |
| base_answer += "\n📚 Этот ответ оформлен в научном стиле." | |
| if depth == "глубокий": | |
| base_answer += "\n💡 Добавил больше деталей, чтобы раскрыть тему основательно." | |
| base_answer += f"\n\n🧩 Предпочтения: стиль — {tone}, глубина — {depth}, темы — {themes}" | |
| return base_answer | |