Add naiive markov all and allchain
Markov all grows fast and 5 years of data uses about 2gb in memory. We can do better. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -14,6 +14,7 @@ from omnibot.plugin import Plugin
|
|||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
ALLCHAIN = "ALL!CHAIN"
|
||||||
|
|
||||||
|
|
||||||
def chain_inner_default() -> defaultdict[str | None, int]:
|
def chain_inner_default() -> defaultdict[str | None, int]:
|
||||||
@@ -115,9 +116,9 @@ class Chain:
|
|||||||
fp,
|
fp,
|
||||||
)
|
)
|
||||||
if not retain:
|
if not retain:
|
||||||
self.clear()
|
self.clear_cache()
|
||||||
|
|
||||||
def clear(self):
|
def clear_cache(self):
|
||||||
self.__cache.clear()
|
self.__cache.clear()
|
||||||
|
|
||||||
def __bool__(self) -> bool:
|
def __bool__(self) -> bool:
|
||||||
@@ -185,8 +186,12 @@ class Markov(Plugin):
|
|||||||
return self.__chains[channel][who]
|
return self.__chains[channel][who]
|
||||||
|
|
||||||
def add(self, channel: str, who: str, line: str):
|
def add(self, channel: str, who: str, line: str):
|
||||||
|
if who == self.server_config.nick == who:
|
||||||
|
return
|
||||||
chain = self.get_chain(channel, who)
|
chain = self.get_chain(channel, who)
|
||||||
chain.add(line)
|
chain.add(line)
|
||||||
|
allchain = self.get_chain(channel, ALLCHAIN)
|
||||||
|
allchain.add(line)
|
||||||
|
|
||||||
def handle_command(
|
def handle_command(
|
||||||
self, conn: IrcProtocol, channel: str, who: Prefix, parts: Sequence[str]
|
self, conn: IrcProtocol, channel: str, who: Prefix, parts: Sequence[str]
|
||||||
@@ -205,6 +210,11 @@ class Markov(Plugin):
|
|||||||
message = chain.generate()
|
message = chain.generate()
|
||||||
if message:
|
if message:
|
||||||
self.send_to(conn, channel, f"{who.nick}: {message}")
|
self.send_to(conn, channel, f"{who.nick}: {message}")
|
||||||
|
case ["all"]:
|
||||||
|
chain = self.get_chain(channel, ALLCHAIN)
|
||||||
|
message = chain.generate()
|
||||||
|
if message:
|
||||||
|
self.send_to(conn, channel, f"{who.nick}: {message}")
|
||||||
case _:
|
case _:
|
||||||
# command not recognized
|
# command not recognized
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user