Marrishka commited on
Commit
93c8dbb
·
verified ·
1 Parent(s): d16572c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +248 -2
app.py CHANGED
@@ -48,7 +48,61 @@ def load_models():
48
  thinker = None
49
  embedder = None
50
 
51
- # ... остальной код БЕЗ ИЗМЕНЕНИЙ до think_deeply ...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
  def think_deeply(situation, memories):
54
  """Глубоко размышляет о ситуации"""
@@ -93,4 +147,196 @@ def think_deeply(situation, memories):
93
  print(f"❌ Ошибка генерации: {e}")
94
  return "Думаю... что сделать?"
95
 
96
- # ... остальной код БЕЗ ИЗМЕНЕНИЙ ...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  thinker = None
49
  embedder = None
50
 
51
+ # === Мир и память ===
52
+ world_state = {
53
+ "ключ_на_столе": True,
54
+ "шкатулка_закрыта": True,
55
+ "записка_прочитана": False,
56
+ "исследовано_мест": 0
57
+ }
58
+
59
+ memory_db = []
60
+
61
+ # === Умные функции ===
62
+ def get_embedding(text):
63
+ """Получает эмбеддинг для текста"""
64
+ if embedder is None:
65
+ return np.random.randn(384) # Заглушка
66
+
67
+ try:
68
+ features = embedder(text)
69
+ return np.array(features[0][0])
70
+ except:
71
+ return np.random.randn(384)
72
+
73
+ def remember(event, importance=1.0):
74
+ """Запоминает событие с учетом важности"""
75
+ memory_db.append({
76
+ "text": event,
77
+ "embedding": get_embedding(event).tolist(),
78
+ "timestamp": datetime.now().isoformat(),
79
+ "importance": importance
80
+ })
81
+
82
+ # Сортируем по важности и обрезаем
83
+ memory_db.sort(key=lambda x: x["importance"], reverse=True)
84
+ while len(memory_db) > MAX_MEMORY_ITEMS:
85
+ memory_db.pop()
86
+
87
+ def recall(query, top_k=3):
88
+ """Вспоминает похожие события"""
89
+ if not memory_db:
90
+ return []
91
+
92
+ query_emb = get_embedding(query)
93
+ similarities = []
94
+
95
+ for memory in memory_db:
96
+ mem_emb = np.array(memory["embedding"])
97
+ similarity = F.cosine_similarity(
98
+ torch.tensor(query_emb),
99
+ torch.tensor(mem_emb),
100
+ dim=0
101
+ ).item()
102
+ similarities.append((similarity, memory["text"]))
103
+
104
+ similarities.sort(reverse=True)
105
+ return [text for _, text in similarities[:top_k]]
106
 
107
  def think_deeply(situation, memories):
108
  """Глубоко размышляет о ситуации"""
 
147
  print(f"❌ Ошибка генерации: {e}")
148
  return "Думаю... что сделать?"
149
 
150
+ # ... остальной код БЕЗ ИЗМЕНЕНИЙ ...
151
+
152
+ def choose_action(thought):
153
+ """Анализирует мысли и выбирает ВОЗМОЖНОЕ действие"""
154
+ thought_lower = thought.lower()
155
+
156
+ # Приоритетная логика с учетом состояния мира
157
+ if not world_state["ключ_на_столе"] and world_state["шкатулка_закрыта"]:
158
+ return "открыть шкатулку" # Ключ есть - открываем шкатулку
159
+
160
+ elif world_state["ключ_на_столе"]:
161
+ return "взять ключ" # Ключ на столе - берем
162
+
163
+ elif not world_state["шкатулка_закрыта"] and not world_state["записка_прочитана"]:
164
+ return "прочитать записку" # Шкатулка открыта - читаем
165
+
166
+ # Резервные варианты
167
+ elif any(word in thought_lower for word in ['осмотр', 'посмотр', 'изуч']):
168
+ return "осмотреться"
169
+ else:
170
+ return "осмотреться" # По умолчанию - осматриваемся
171
+
172
+ def execute_action(action):
173
+ """Выполняет действие с проверкой логики"""
174
+ action = action.lower()
175
+ result = ""
176
+
177
+ # Защита от повторных действий
178
+ if "взять ключ" in action:
179
+ if world_state["ключ_на_столе"]:
180
+ world_state["ключ_на_столе"] = False
181
+ result = "🎉 Ты взял ключ! Теперь он твой!"
182
+ remember("Взял ключ со стола", importance=2.0)
183
+ else:
184
+ result = "❌ Ключ уже у тебя! Не нужно брать его снова."
185
+
186
+ elif "открыть шкатулку" in action:
187
+ if world_state["шкатулка_закрыта"]:
188
+ if not world_state["ключ_на_столе"]:
189
+ world_state["шкатулка_закрыта"] = False
190
+ result = "🔓 Ты открыл шкатулку! Внутри ты видишь старую записку..."
191
+ remember("Открыл шкатулку с помощью ключа", importance=3.0)
192
+ else:
193
+ result = "❌ Шкатулка заперта... Нужен ключ!"
194
+ else:
195
+ result = "❌ Шкатулка уже открыта!"
196
+
197
+ elif "прочитать записку" in action and not world_state["записка_прочитана"]:
198
+ if not world_state["шкатулка_закрыта"]:
199
+ world_state["записка_прочитана"] = True
200
+ world_state["исследов��но_мест"] += 1
201
+ result = "📜 Ты читаешь записку: 'Тот, кто задает вопросы - никогда не останется в неведении. Любопытство - твой главный дар!' ✨"
202
+ remember("Прочитал мудрую записку", importance=4.0)
203
+ else:
204
+ result = "❌ Нет записки чтобы читать..."
205
+
206
+ elif "осмотреться" in action:
207
+ world_state["исследовано_мест"] += 0.5
208
+ result = describe_world()
209
+ remember("Осматривался вокруг", importance=0.5)
210
+
211
+ else:
212
+ result = "🤔 Ты размышляешь о жизни..."
213
+ remember("Размышлял о смысле", importance=0.5)
214
+
215
+ return result
216
+
217
+ def describe_world():
218
+ """Описание текущего состояния мира"""
219
+ description = "Ты видишь: "
220
+ if world_state["ключ_на_столе"]:
221
+ description += "🔑 блестящий ключ на столе, "
222
+ else:
223
+ description += "✅ ключ у тебя в кармане, "
224
+
225
+ if world_state["шкатулка_закрыта"]:
226
+ description += "📦 запертую шкатулку"
227
+ else:
228
+ description += "📦 открытую шкатулку с запиской"
229
+
230
+ if world_state["записка_прочитана"]:
231
+ description += ", 📜 и ты помнишь мудрость из записки"
232
+
233
+ return description
234
+
235
+ def autonomous_cycle():
236
+ """Полный цикл автономного поведения"""
237
+ # 1. Восприятие
238
+ world_desc = describe_world()
239
+
240
+ # 2. Память
241
+ relevant_memories = recall(world_desc)
242
+
243
+ # 3. Мышление
244
+ thought = think_deeply(world_desc, relevant_memories)
245
+
246
+ # 4. Планирование
247
+ action = choose_action(thought)
248
+
249
+ # 5. Действие
250
+ result = execute_action(action)
251
+
252
+ # 6. Формирование отчета
253
+ progress = f"Исследовано: {int(world_state['исследовано_мест'])} объектов"
254
+
255
+ log_text = f"""
256
+ 🌍 **МИР**: {world_desc}
257
+
258
+ 🧠 **ПАМЯТЬ**: {len(relevant_memories)} воспоминаний
259
+ {chr(10).join(['• ' + m for m in relevant_memories[:2]])}
260
+
261
+ 💭 **МЫШЛЕНИЕ**:
262
+ {thought}
263
+
264
+ 🎯 **РЕШЕНИЕ**: {action}
265
+ 🎪 **РЕЗУЛЬТАТ**: {result}
266
+
267
+ 📊 **ПРОГРЕСС**: {progress}
268
+ 🎒 **ОПЫТ**: {len(memory_db)} воспоминаний
269
+ """
270
+
271
+ return log_text
272
+
273
+ def reset_agent():
274
+ """Сбрасывает агента в начальное состояние"""
275
+ global world_state, memory_db
276
+ world_state = {
277
+ "ключ_на_столе": True,
278
+ "шкатулка_закрыта": True,
279
+ "записка_прочитана": False,
280
+ "исследовано_мест": 0
281
+ }
282
+ memory_db = []
283
+ return "🔄 Агент переродился! Начинаем новое приключение!\n\n" + describe_world()
284
+
285
+ # === Интерфейс ===
286
+ with gr.Blocks(theme=gr.themes.Soft(), title="🧠 ChildAGI") as demo:
287
+ gr.Markdown("""
288
+ # 🧠 ChildAGI
289
+ *"Родился из скуки, вырос в науку!"*
290
+ """)
291
+
292
+ with gr.Row():
293
+ with gr.Column(scale=1):
294
+ gr.Markdown("### 🎮 Управление")
295
+ auto_btn = gr.Button("🔄 Авто-шаг", variant="primary", size="lg")
296
+ fast_btn = gr.Button("⚡ 3 шага сразу", size="lg")
297
+ reset_btn = gr.Button("🔄 Переродить агента", size="lg")
298
+
299
+ gr.Markdown("### 📊 Статистика")
300
+ stats_display = gr.Textbox(
301
+ label="Состояние агента",
302
+ value="Агент готов к исследованию!",
303
+ lines=4
304
+ )
305
+
306
+ with gr.Column(scale=2):
307
+ gr.Markdown("### 📝 Детальный лог")
308
+ log_display = gr.Textbox(
309
+ label="Мысли и действия агента",
310
+ lines=16,
311
+ max_lines=20,
312
+ value="👋 Привет! Я ChildAGI!\n\nЯ умею:\n• Думать с помощью TinyLlama\n• Запоминать опыт\n• Самостоятельно принимать решения\n• Учиться на своих действиях\n\nНажми 'Авто-шаг' чтобы начать!",
313
+ show_copy_button=True
314
+ )
315
+
316
+ # Обработчики
317
+ def update_stats():
318
+ return f"""🧠 Память: {len(memory_db)} событий
319
+ 🌍 Исследовано: {world_state['исследовано_мест']} объектов
320
+ 🎯 Цель: {'Исследовать всё' if not world_state['записка_прочитана'] else '��смыслить знания'}
321
+ 🔑 Ключ: {'на столе' if world_state['ключ_на_столе'] else 'у агента'}
322
+ 📦 Шкатулка: {'закрыта' if world_state['шкатулка_закрыта'] else 'открыта'}"""
323
+
324
+ def step_with_stats():
325
+ log = autonomous_cycle()
326
+ stats = update_stats()
327
+ return log, stats
328
+
329
+ def three_steps():
330
+ full_log = "⚡ БЫСТРАЯ СИМУЛЯЦИЯ (3 шага):\n\n"
331
+ for i in range(3):
332
+ log = autonomous_cycle()
333
+ full_log += f"**ШАГ {i+1}:**\n{log}\n{'='*50}\n"
334
+ stats = update_stats()
335
+ return full_log, stats
336
+
337
+ auto_btn.click(step_with_stats, outputs=[log_display, stats_display])
338
+ fast_btn.click(three_steps, outputs=[log_display, stats_display])
339
+ reset_btn.click(lambda: (reset_agent(), update_stats()), outputs=[log_display, stats_display])
340
+
341
+ if __name__ == "__main__":
342
+ demo.launch(share=True)