PLaMo翻訳をLM Studioで翻訳APIサーバーにする

PLaMo翻訳のGGUFをmmngaさんが公開されています。
https://huggingface.co/mmnga/plamo-2-translate-gguf

PLaMo翻訳のプロンプトは次のような指定をする必要があります。

<|plamo:op|>dataset
translation
<|plamo:op|>input lang=English
Write the text to be translated here.
<|plamo:op|>output lang=Japanese

で、plamo-2-translate-ggufには次のようなプロンプトテンプレートが設定されています。

これ、LM StudioのチャットUIで使うにはいいのだけど、APIで使おうとするとうまく動かせません。

ということで、手動にしてEmptyに。

そうするとこんな感じのクラスを用意すればPLaMo翻訳をJavaプログラムに埋め込めます。

class Plamo2EJJE {
    OpenAiChatModel model;
    public Plamo2EJJE() {
        model = OpenAiChatModel.builder()
                .baseUrl("http://localhost:1234/v1")
                .modelName("plamo-2-translate")
                .httpClientBuilder(JdkHttpClient.builder().httpClientBuilder(
                        HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1)))
                .build();
    }

    public String translateJE(String message) {
        return translate(message, "Japanese", "English");
    }

    public String translateEJ(String message) {
        return translate(message, "English", "Japanese");
    }
    private String translate(String message, String from, String to) {
        var prompt = """
                     <|plamo:op|>dataset
                     translation
                     <|plamo:op|>input lang=%s
                     %s
                     <|plamo:op|>input lang=%s
                     """.formatted(from, message, to);
        return model.chat(
            UserMessage.from(prompt)).aiMessage().text();        
    }
}

Streamingに対応させて、Liquid AIのLFM2-350M-EJJP-MTを対応させると、こんな感じに。

LFM2が135token/sec、PLaMoが20token/secくらい。

「intended to be a first language」が「初学者向けの第一言語としての役割も意図されている」と「初学者向けの」が入っていたり、「When programmers first start out」が「プログラマーが初めて学習を始める段階では」と「学習を」が入っていたり、PLaMo翻訳は読みやすくなるように語を補完する傾向がありますね。

この速さ、品質の翻訳がローカルで動くのは、なんかすごい。

ソースはこちらに。
https://gist.github.com/kishida/5ac71744da23f677e1eec32a958a4d4f