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:
2022-05-27 17:56:52 -07:00
parent a4958d371e
commit b4857e3b4a

View File

@@ -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