-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinterpreter.py
More file actions
107 lines (84 loc) · 3.61 KB
/
Copy pathinterpreter.py
File metadata and controls
107 lines (84 loc) · 3.61 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import json
from datetime import datetime
import pytz
MSK = pytz.timezone("Europe/Moscow")
CORRELATED_FILE = "data/correlated.jsonl"
OUTPUT_FILE = "data/interpretations.jsonl"
def load_last_correlated():
"""Берёт последний итоговый ритм из correlated.jsonl."""
try:
with open(CORRELATED_FILE, "r", encoding="utf-8") as f:
lines = f.readlines()
if not lines:
return None
return json.loads(lines[-1])
except FileNotFoundError:
return None
def choose_tone(intensity: float) -> str:
"""Определяет тон сообщения."""
if intensity < 0.2:
return "спокойный"
if intensity < 0.4:
return "умеренный"
if intensity < 0.7:
return "напряжённый"
if intensity < 0.9:
return "тревожный"
return "красная зона"
def build_message(result: dict) -> str:
"""Создаёт текстовое объяснение ритма."""
intensity = result["intensity"]
tone = choose_tone(intensity)
top_sources = result.get("top_sources", [])
details = result.get("details", {})
# --- Заголовок ---
msg = []
msg.append(f"Ритм Планеты №3: {intensity:.2f} ({tone})")
# --- Топ источников ---
if top_sources:
msg.append("\nГлавные источники напряжения:")
for s in top_sources:
sensor = s["sensor"]
weighted = s["weighted"]
source = s["source"]
msg.append(f"• {sensor}: {weighted:.2f} [{source}]")
# --- Детали ---
msg.append("\nКраткая расшифровка:")
for sensor, d in details.items():
msg.append(
f"- {sensor}: raw={d['raw_intensity']:.2f}, "
f"weight={d['weight']}, weighted={d['weighted']:.2f}"
)
# --- Итог ---
msg.append("\nИнтерпретация:")
if intensity < 0.2:
msg.append("Система фиксирует низкий уровень глобального напряжения. Среда стабильна.")
elif intensity < 0.4:
msg.append("Лёгкие колебания в новостях и сетевой активности, но без серьёзных рисков.")
elif intensity < 0.7:
msg.append("Наблюдается рост активности в нескольких сенсорах. Возможны локальные всплески.")
elif intensity < 0.9:
msg.append("Система фиксирует повышенное напряжение. Рекомендуется внимательность.")
else:
msg.append("Красная зона. Сильный глобальный стресс. Возможны резкие движения и паника.")
return "\n".join(msg)
def write_interpretation(text: str):
"""Записывает интерпретацию в лог."""
entry = {
"timestamp": datetime.now(MSK).isoformat(),
"text": text
}
with open(OUTPUT_FILE, "a", encoding="utf-8") as f:
f.write(json.dumps(entry, ensure_ascii=False) + "\n")
def run_interpreter():
result = load_last_correlated()
if not result:
print("[interpreter] Нет данных для интерпретации")
return None
text = build_message(result)
write_interpretation(text)
print("[interpreter] Интерпретация создана:")
print(text)
return text
if __name__ == "__main__":
run_interpreter()