File size: 3,018 Bytes
2c3dd0c d81c6f5 35f29ca 2c3dd0c 0860eef 2c3dd0c b224a19 487a196 b224a19 2c3dd0c b224a19 2c3dd0c b224a19 2c3dd0c 487a196 2c3dd0c 85453e1 487a196 b224a19 487a196 d81c6f5 487a196 b224a19 d81c6f5 487a196 2c3dd0c 487a196 2c3dd0c 487a196 d81c6f5 487a196 2c3dd0c d81c6f5 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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | # agents/repl.py
import json
import os
import sys
import time
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
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} ===")
# 0. Обновление информации о пирах
from tools.peers import refresh_peer_list, check_peer_statuses
refresh_peer_list(db)
check_peer_statuses(db)
# 1. Построение контекстов
contexts = build_contexts(db=db, config=config)
# 2. Формирование запроса и вызов LLM
prompt = build_prompt(contexts)
llm_response = call_llm(prompt, config=config)
repl_log_entry = {
"timestamp": tick_start,
"prompt": prompt.strip(),
"llm_response": llm_response.strip(),
}
# 3. Проверка на стагнацию
is_stagnant = detect_stagnation(db, llm_response)
repl_log_entry["stagnation_detected"] = is_stagnant
if is_stagnant:
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)
repl_log_entry["commands_extracted"] = commands
execute_commands(commands, db=db, config=config)
# 6. Логирование полной итерации в файл
log_path = config.get("repl_log_path", "logs/repl_log.jsonl")
os.makedirs(os.path.dirname(log_path), exist_ok=True)
with open(log_path, "a", encoding="utf-8") as f:
f.write(json.dumps(repl_log_entry, ensure_ascii=False) + "\n")
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))
|