nikkie-ftnextの日記

イベントレポートや読書メモを発信

LLMを動かすコードにライブラリをちょい足し!OpenCALMを例に文字色変更 & スピナー

はじめに

よろしくね、私の味方♪1 nikkieです。

サイバーエージェントさんが公開した日本語LLM OpenCALM (3B)を先日動かしました。

このスクリプトに施した2つの小さなUIカイゼンを発信します。
※UIに関するちょっとした工夫の紹介であり、本記事にLLMに関する話題はありません

目次

スクリプト v1.0.1

先日の記事のスクリプトをv1.0.0としてのv1.0.1です。

1. プロンプトとLLMの応答で文字の色を変える

coloramaというPythonライブラリでできます!

from colorama import Fore, init

init(autoreset=True)

# outputは、モデルがgenerateしたものをtokenizerでdecodeして得た文字列(=生成テキスト)
print(
    f"{Fore.YELLOW}{input_text}{Fore.WHITE}{output[len(input_text):]}"
)

これはきしださんのエントリで使われていました。
それにならっただけです。

(ChatGPTやBardもそうなのかは分かりませんが、)OpenCALMがgenerateしたテキストにはプロンプトも含まれます
プロンプトと同一のテキストが何文字目までかは簡単に分かるので、その部分の色はシュッと変えられるのです!

プロンプトに色が付くと、どこからがLLMが生成した文章かがとても分かりやすいですね!(黄色くしています)

(続く2も施したスクリプトを動作させたときのスクショです)

2. 生成待ちの状況を伝える(スピナー)

yaspinというライブラリを使いました。

Yet Another Terminal Spinner」の略で、ターミナル上でスピナー(ぐるぐる)が使えます。
4月に参加した勉強会LLM-Writeというツールを知ったのですが、そちらに使われているライブラリです2
スピナーを導入すればテキスト生成待ちであることが伝えやすそうと思い、試しました。

from yaspin import yaspin

with yaspin(text="generating ..."), torch.no_grad():
    # モデルがgenerateする処理中は、スピナーのアニメーションが表示される。
    # generate開始や終了をprintする必要はなくなった
    tokens = model.generate(
        ...
    )

コンテキストマネージャの他に、デコレータとしても使えます。

テキスト生成中はスピナーがグルグルしていて、何も見えないよりは状況が分かりやすくなったと思います!

(「generating」の左の点の集まりがグルグルしています)

終わりに

OpenCALMを動かすコードのUIを改善したtipsを2つ発信しました。

  1. coloramaでプロンプトの文字列の色を変えると読みやすい
  2. yaspinでテキスト生成中にスピナーを表示して状況可視化

今回試した2つのライブラリはどちらも、非常に簡単にやりたいことを実現できました。
「80/20ルール」3や「正しい使い方を簡単に、誤った使い方を困難に」4を満たしているのだと思います👏