ver 0.1.0時点のものであり、大幅な仕様変更があった場合この記事での手法が使えなくなる可能性があります
karukanの概要
- fcitx5 → 任意のモデル+llama.cppによる推論 でかな漢字変換を実装
- 自分で使用したいモデルを変更できるため、所持しているハードのキャパと変換の精度がトレードオフ

gifは制作者さまのレポジトリより
モデルの変更・追加方法
karukan-engine内のmodels.tomlを編集
モデルとバリアントで分けているっぽい
下に自分が実際に使っているmodels.tomlを貼っておく
default_model = "jinen-v1-small-q5"
[models.jinen-v1-xsmall]
repo_id = "togatogah/jinen-v1-xsmall.gguf"
display_name = "jinen-v1-xsmall (GPT-2 XSmall, 26M)"
[models.jinen-v1-xsmall.variants.q5]
id = "jinen-v1-xsmall-q5"
filename = "jinen-v1-xsmall-Q5_K_M.gguf"
display_name = "jinen-v1-xsmall (Q5_K_M)"
[models.jinen-v1-small]
repo_id = "togatogah/jinen-v1-small.gguf"
display_name = "jinen-v1-small (GPT-2 Small, 90M)"
[models.jinen-v1-small.variants.q5]
id = "jinen-v1-small-q5"
filename = "jinen-v1-small-Q5_K_M.gguf"
display_name = "jinen-v1-small (Q5_K_M)"
[models.jinen-v1-small.variants.f16]
id = "jinen-v1-small-f16"
filename = "jinen-v1-small-f16.gguf"
display_name = "jinen-v1-small (F16)"
[models.lfm25]
repo_id="LiquidAI/LFM2.5-1.2B-Instruct-GGUF"
display_name = "LFM2.5-Instruct (1.2B)"
[models.lfm25.variants.q4]
id = "LFM2.5-1.2B-Instruct-Q4"
filename = "LFM2.5-1.2B-Instruct-Q4_K_M.gguf"
display_name = "LFM2.5-Instruct (1.2B)"
[models.qwen]
repo_id = "Qwen/Qwen2.5-0.5B-Instruct-GGUF"
display_name = "Qwen2.5-0.5B"
[models.qwen.variants.q8]
id = "qwen2.5-0.5b-q8"
filename = "qwen2.5-0.5b-instruct-q8_0.gguf"
display_name = "Qwen2.5 (Q8_0)"
[models.qwen.variants.q2]
id = "qwen2.5-0.5b-q2"
filename = "qwen2.5-0.5b-instruct-q2_k.gguf"
display_name = "Qwen2.5 (Q2_K)"
[models.tinyllama]
repo_id = "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF"
display_name = "TinyLlama 1.1B"
[models.tinyllama.variants.q4]
id = "tinyllama-q4"
filename = "tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf"
display_name = "TinyLlama (Q4_K_M)"
[models.qwen15]
repo_id = "Qwen/Qwen1.5-0.5B-Chat-GGUF"
display_name = "Qwen1.5-0.5B"
[models.qwen15.variants.q8]
id = "qwen1.5-0.5b-q8"
filename = "qwen1.5-0.5b-chat-q8_0.gguf"
display_name = "Qwen1.5 (Q8_0)"
...追加しすぎた
システムを再コンパイル
もう一回ビルドし直してsoファイルを生成する
karukan-imのconfigを編集
configファイル(デフォだと~/.local/karukan-im/config)
model = ...の箇所を変更する。
models.tomlでバリアントのなかのid=...がキーになっている
fcitx5の再起動
fcitx5 -rd で再起動。1回だとうまくいかないことが多いのでこのコマンドを2回実行するとちゃんと読み込んでくれる
ターミナルの表示がおかしくなるが、Enterを連打すればなんとかなる
入力システムでkarukanをわざと選択してモデルのダウンロードを行う(この時点でロードに失敗するが正常)
tokenizer.jsonの追加
ロードが失敗しているのはモデルが読み込めなかったのではなく他に必要なファイルが不足しているからである。それがtokenizer.json。
karukanはhugging faceからモデルをDLするのだがその中にtokenizer.jsonがないため手動で入手しggufファイルと同じディレクトリに格納しておく必要がある。 (~/.cache/hugginface/hub以下、それぞれのモデルのスナップショットの中にある)。複数のバリアントで共有するならシンボリックリンクでもOK。

このページの場合下から2番目にあるやつ。
tokenizer.jsonはggufなしページのFilesの中にだいたいある。
fcitx5の再起動
tokenizer.json込みで再ロードするためにまたもやfcitx5 -rd
これで他モデルを利用可能になる

試しにQwenを入れてみたが、レスポンスが悪すぎて使いにくいうえに変換精度が下がっている。
デフォルトのモデルが優秀なのを実感する。単に性能だけの問題ではなさそうだ。
追加済モデルでの変更方法
configでmodel=...を書き換え→fcitx5 -rdで再起動
モデルの追加+変更で詰まった話
- 再コンパイルが必要
models.tomlを変更したら再コンパイルが必要なのに気がつくのに時間を要した。モデルが読み込めないとあってtomlの書き方に問題があるとずっと勘違いしていた。 - tokenizer.jsonを手動で追加
モデルが読み込めないと出てきてファイルの指定が悪いのかバージョンやアーキテクチャの問題だと諦めかけていたが作者のモデルのディレクトリを眺めていたらjsonファイルが必要なことに気がついた