-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreflexes.py
More file actions
190 lines (167 loc) · 6.27 KB
/
reflexes.py
File metadata and controls
190 lines (167 loc) · 6.27 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
"""Sovereign — Reflex System: faster than thought.
Hardwired stimulus-response patterns that bypass the brain entirely.
Like pulling your hand off a hot stove — the signal never reaches
conscious thought. The spinal cord handles it.
Reflexes are:
- Instant (no LLM call)
- Unconditional (always fire when triggered)
- Prioritized (override normal processing)
"""
from __future__ import annotations
import logging
import random
import re
from dataclasses import dataclass, field
from datetime import datetime
log = logging.getLogger("sovereign.reflexes")
@dataclass
class ReflexResponse:
"""Result of a reflex firing."""
text: str
reflex_name: str
follow_up_skillset: str | None = None # hand off to this skillset
bypass_brain: bool = True # if True, don't run through LLM
@dataclass
class Reflex:
"""A single stimulus-response pattern."""
name: str
patterns: list[str]
importance: float = 0.5
emotion: str = "neutral"
priority: int = 10
response_template: str | None = None
follow_up: str | None = None
def matches(self, message: str) -> bool:
"""Check if any pattern matches the message."""
for pattern in self.patterns:
try:
if re.search(pattern, message, re.IGNORECASE):
return True
except re.error:
if pattern.lower() in message.lower():
return True
return False
def respond(self, message: str) -> str:
"""Generate the response. Override in subclasses for dynamic responses."""
return self.response_template or ""
class ReflexSystem:
"""Hardwired reflexes that fire before the brain engages."""
def __init__(self) -> None:
self._reflexes: list[Reflex] = []
self._load_core_reflexes()
log.info("ReflexSystem loaded: %d reflexes", len(self._reflexes))
def check(self, message: str, user_id: str) -> ReflexResponse | None:
"""Called BEFORE the brain. Returns a response if a reflex matches."""
# Sort by priority descending
for reflex in sorted(self._reflexes, key=lambda r: r.priority, reverse=True):
if reflex.matches(message):
text = self._generate_response(reflex, message, user_id)
if text:
log.info("Reflex fired: %s for user %s", reflex.name, user_id)
return ReflexResponse(
text=text,
reflex_name=reflex.name,
follow_up_skillset=reflex.follow_up,
bypass_brain=True,
)
return None
def _generate_response(self, reflex: Reflex, message: str, user_id: str) -> str:
"""Generate response based on reflex type."""
if reflex.name == "greeting":
return self._personalized_greeting(user_id)
if reflex.name == "thanks":
return random.choice(["anytime", "got you", "always", "of course"])
if reflex.name == "affirmative":
return "on it."
if reflex.name == "negative":
return "understood. cancelled."
return reflex.respond(message)
def _personalized_greeting(self, user_id: str) -> str:
"""Greetings are reflexive but time-aware."""
hour = datetime.now().hour
if hour < 12:
time_str = "morning"
elif hour < 17:
time_str = "afternoon"
else:
time_str = "evening"
return random.choice([
f"hey! good {time_str}",
"yo, what's up",
f"good {time_str}. what are we getting into",
"hey there",
])
def _load_core_reflexes(self) -> None:
"""Hardwired reflexes that ship with the organism."""
self._reflexes.extend([
# EMERGENCY — instant acknowledgment
Reflex(
name="emergency_ack",
patterns=[
r"(production|prod|live|server).*(down|crash|dead|broken|503|502)",
r"(everything|it('s| is)).*(down|broken|dead|crashed)",
r"URGENT",
],
response_template="On it. Pulling diagnostics now.",
follow_up="devops_sre",
importance=0.95,
emotion="fear",
priority=100,
),
# SECURITY ALERT
Reflex(
name="security_alert",
patterns=[
r"(hacked|breached|compromised|unauthorized|injection)",
r"(leaked|exposed).*(key|password|token|secret|credential)",
],
response_template=(
"Security alert acknowledged. Activating threat analysis mode. "
"Don't touch anything until I've assessed."
),
follow_up="threat_analyst",
importance=0.95,
emotion="fear",
priority=95,
),
# GREETING — no brain needed
Reflex(
name="greeting",
patterns=[
r"^(hey|hi|hello|yo|sup|morning|evening|gm|good morning|good evening)[\s!.\?]*$",
],
importance=0.2,
emotion="satisfaction",
priority=10,
),
# GRATITUDE
Reflex(
name="thanks",
patterns=[
r"^(thanks|thank you|thx|ty|cheers|appreciated)[\s!.]*$",
],
importance=0.1,
emotion="satisfaction",
priority=10,
),
# QUICK AFFIRMATIVE
Reflex(
name="affirmative",
patterns=[
r"^(yes|yeah|yep|yup|do it|go|approved|ship it|send it)[\s!.]*$",
],
importance=0.3,
emotion="satisfaction",
priority=50,
),
# QUICK NEGATIVE
Reflex(
name="negative",
patterns=[
r"^(no|nah|nope|cancel|stop|don't|nevermind|never mind)[\s!.]*$",
],
importance=0.3,
emotion="neutral",
priority=50,
),
])