tiktokenで文字列をエンコードする時、
vocabulary定義をダウンロードするため、
インターネットに接続できない環境では、事前にダウンロードが必要になる。
このエントリでは、その手順を示す。

tiktoken | GitHub
https://github.com/openai/tiktoken

該当のダウンロード処理は、次のコードに記載されている。
https://github.com/openai/tiktoken/blob/main/tiktoken_ext/openai_public.py

事前のダウンロード

事前にインターネットに接続できる環境で、
tiktokenの処理を呼び出し、vocabulary定義をダウンロードする。

環境変数 TIKTOKEN_CACHE_DIR に指定したパスにキャッシュが保存されるので、
環境変数を指定してダウンロード処理を呼ぶコードを実行する。

download.py

import tiktoken_ext.openai_public
import os
os.environ["TIKTOKEN_CACHE_DIR"] = "cache/"

for _, f in tiktoken_ext.openai_public.ENCODING_CONSTRUCTORS.items():
    f()

実行コマンド

python download.py

ここでは cache/ 配下にキャッシュが保存されることを確認できる。

$ ls  cache/
0ea1e91bbb3a60f729a8dc8f777fd2fc07cd8df4
6c7ea1a7e38e3a7f062df639a5b80947f075ffe6
6d1cbeee0f20b3d9449abfede4726ed8212e3aee
9b5ad71b2ce5302211f9c61530b329a4922fc6a4
ec7223a39ce59f226a68acc30dc1af2788490e15

cache配下をアーカイブしておく。

tar czf cache.tar.gz cache/

キャッシュアーカイブの展開、処理の実行

インターネットに接続できない環境に cache.tar.gz をコピーし展開する。

tar zxf cache.tar.gz

この状態であれば、インターネットに接続できない環境でも、
tiktokenを利用するコードを実行できる。

main.py

import tiktoken
import os
os.environ["TIKTOKEN_CACHE_DIR"] = "cache/"

encoding = tiktoken.get_encoding("cl100k_base")
tokens = encoding.encode("起立!気をつけ!こんにちは")
print(tokens)

実行コマンド

$ python main.py
[72718, 80195, 6447, 95221, 30512, 59739, 76622, 6447, 90115]

以上。