lib/helix/modules/bb_text_module.ex

defmodule Helix.Modules.BBTextModule do

  use Helix.Modules.Module
  import Helix.Modules.GPTUtils

  def handle_cast({:convey, event}, state) do

    state = update_input_history(state, event)
    prompt = update_prompt(state)
    :timer.sleep(String.to_integer(Map.get(state, :delay, "0")))

    {:ok, gpt2} = Bumblebee.load_model({:hf, "gpt2"})
    {:ok, tokenizer} = Bumblebee.load_tokenizer({:hf, "gpt2"})

    serving = Bumblebee.Text.generation(gpt2, tokenizer, max_new_tokens: 100)

    res = Nx.Serving.run(serving, prompt)

    output_state = convey(Enum.at(res.results, 0).text, state)
    {:noreply, output_state}

  end
end