File size: 2,137 Bytes
2c3dd0c
 
 
 
b224a19
487a196
 
 
b224a19
 
 
 
 
 
 
2c3dd0c
 
b224a19
2c3dd0c
 
b224a19
2c3dd0c
487a196
 
2c3dd0c
487a196
 
 
b224a19
487a196
 
 
b224a19
487a196
 
 
2c3dd0c
487a196
 
2c3dd0c
487a196
 
 
2c3dd0c
b224a19
487a196
b224a19
487a196
b224a19
 
 
 
 
487a196
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# agents/repl.py

import time
from datetime import datetime
from tools.context_builder import build_contexts, build_prompt
from tools.llm import call_llm
from tools.command_parser import extract_commands
from tools.command_executor import execute_commands
from tools.memory_utils import (
    detect_stagnation,
    activate_anti_stagnation,
    update_llm_memory
)
from tools.storage import Storage


def run_repl(config=None):
    print("[🧠 HMP-Agent] Запуск REPL-режима (v2)")
    config = config or {}
    db = Storage(config=config)

    while True:
        tick_start = datetime.utcnow().isoformat()
        print(f"\n=== [🌀 Новый тик REPL] {tick_start} ===")

        # 1. Построение контекстов
        contexts = build_contexts(db=db, config=config)

        # 2. Формирование запроса и вызов LLM
        prompt = build_prompt(contexts)
        llm_response = call_llm(prompt, config=config)

        # 3. Проверка на стагнацию
        if detect_stagnation(db, llm_response):
            print("⚠️ Стагнация выявлена. Активирован Anti-Stagnation Reflex.")
            llm_response = activate_anti_stagnation(db, config=config)

        # 4. Обновление памяти
        update_llm_memory(db, llm_response)

        # 5. Извлечение и выполнение команд
        commands = extract_commands(llm_response)
        execute_commands(commands, db=db, config=config)

        # 6. Сохранение истории и завершение итерации
        db.write_llm_response(llm_response)
        db.update_agent_log(timestamp=tick_start)

        # 7. Переход в idle-режим или задержка
        if config.get("idle_mode"):
            # TODO: реализовать проверку условий выхода из idle
            print("💤 Idle-mode активен. Ожидание события...")
            time.sleep(config.get("idle_check_interval", 30))
        else:
            time.sleep(config.get("repl_interval", 5))