summaryrefslogtreecommitdiff
path: root/lib/nola_plugins/txt
diff options
context:
space:
mode:
authorJordan Bracco <href@random.sh>2022-12-20 02:13:47 +0000
committerJordan Bracco <href@random.sh>2022-12-20 19:29:41 +0100
commit70b9bba56f5319361ce5a7df5c489b9c0d6905ce (patch)
treef9b4438965f4c5e3e1f3a6129904cbb9a37047f2 /lib/nola_plugins/txt
parentUpdate repo URL, refs T77. (diff)
Rename to Nola
Summary: Nola rename cont. pt. 2. Refs T77. `find lib -name "*.ex" -type f | xargs sed -i '' 's/LSG/Nola/g'` Nola rename, cont. pt. 3. Refs T77. `s/:lsg/:nola/g` Nola rename, cont. pt. 4. Refs T77. Nola rename, cont. pt. 5. Refs T77. Configs. find config -type f | xargs sed -i '' 's/LSG/Nola/g' find config -type f | xargs sed -i '' 's/lsg/nola/g' BREAKING CHANGE: Config keys switch from `:lsg` to `:nola` Nola rename, the end. pt 6. Refs T77. Nola rename: The Big Move, Refs T77 Update repo URL, refs T77. Nola rename: Nola.Plugins, refs T77 Maniphest Tasks: T77 Differential Revision: https://phab.random.sh/D3
Diffstat (limited to 'lib/nola_plugins/txt')
-rw-r--r--lib/nola_plugins/txt/markov.ex9
-rw-r--r--lib/nola_plugins/txt/markov_native.ex33
-rw-r--r--lib/nola_plugins/txt/markov_py_markovify.ex39
3 files changed, 81 insertions, 0 deletions
diff --git a/lib/nola_plugins/txt/markov.ex b/lib/nola_plugins/txt/markov.ex
new file mode 100644
index 0000000..b47666c
--- /dev/null
+++ b/lib/nola_plugins/txt/markov.ex
@@ -0,0 +1,9 @@
+defmodule Nola.Plugins.Txt.Markov do
+
+ @type state :: any()
+ @callback start_link() :: {:ok, state()}
+ @callback reload(content :: Map.t, state()) :: any()
+ @callback sentence(state()) :: {:ok, String.t} | {:error, String.t}
+ @callback complete_sentence(state()) :: {:ok, String.t} | {:error, String.t}
+
+end
diff --git a/lib/nola_plugins/txt/markov_native.ex b/lib/nola_plugins/txt/markov_native.ex
new file mode 100644
index 0000000..aa6b454
--- /dev/null
+++ b/lib/nola_plugins/txt/markov_native.ex
@@ -0,0 +1,33 @@
+defmodule Nola.Plugins.Txt.MarkovNative do
+ @behaviour Nola.Plugins.Txt.Markov
+
+ def start_link() do
+ ExChain.MarkovModel.start_link()
+ end
+
+ def reload(data, markov) do
+ data = data
+ |> Enum.map(fn({_, data}) ->
+ for {line, _idx} <- data, do: line
+ end)
+ |> List.flatten
+
+ ExChain.MarkovModel.populate_model(markov, data)
+ :ok
+ end
+
+ def sentence(markov) do
+ case ExChain.SentenceGenerator.create_filtered_sentence(markov) do
+ {:ok, line, _, _} -> {:ok, line}
+ error -> error
+ end
+ end
+
+ def complete_sentence(sentence, markov) do
+ case ExChain.SentenceGenerator.complete_sentence(markov, sentence) do
+ {line, _} -> {:ok, line}
+ error -> error
+ end
+ end
+
+end
diff --git a/lib/nola_plugins/txt/markov_py_markovify.ex b/lib/nola_plugins/txt/markov_py_markovify.ex
new file mode 100644
index 0000000..f79ed47
--- /dev/null
+++ b/lib/nola_plugins/txt/markov_py_markovify.ex
@@ -0,0 +1,39 @@
+defmodule Nola.Plugins.Txt.MarkovPyMarkovify do
+
+ def start_link() do
+ {:ok, nil}
+ end
+
+ def reload(_data, _markov) do
+ :ok
+ end
+
+ def sentence(_) do
+ {:ok, run()}
+ end
+
+ def complete_sentence(sentence, _) do
+ {:ok, run([sentence])}
+ end
+
+ defp run(args \\ []) do
+ {binary, script} = script()
+ args = [script, Path.expand(Nola.Plugins.Txt.directory()) | args]
+ IO.puts "Args #{inspect args}"
+ case MuonTrap.cmd(binary, args) do
+ {response, 0} -> response
+ {response, code} -> "error #{code}: #{response}"
+ end
+ end
+
+ defp script() do
+ default_script = to_string(:code.priv_dir(:nola)) <> "/irc/txt/markovify.py"
+ env = Application.get_env(:nola, Nola.Plugins.Txt, [])
+ |> Keyword.get(:py_markovify, [])
+
+ {Keyword.get(env, :python, "python3"), Keyword.get(env, :script, default_script)}
+ end
+
+
+
+end