Ministral 3B/8BモデルをOpenCodeで使っていると、まれにjinja templateエラーが発生して処理が止まってしまいます。出てくるエラーは次のようなものです。
"Error rendering prompt with jinja template: \"After the optional system message, conversation roles must alternate user and assistant roles except for tool calls and results.\".\n\nThis is usually an issue with the model's prompt template. If you are using a popular model, you can try to search the model under lmstudio-community, which will have fixed prompt templates. If you cannot find one, you are welcome to post this issue to our discord or issue tracker on GitHub. Alternatively, if you know how to write jinja templates, you can override the prompt template in My Models > model settings > Prompt Template."
ちなみに現在使っているモデルは次の二つです。
- https://huggingface.co/lmstudio-community/Ministral-3-3B-Instruct-2512-GGUF
- https://huggingface.co/lmstudio-community/Ministral-3-8B-Instruct-2512-GGUF
最初に疑ったこと
最初はMLXモデルを使っていました。テンプレートエラーとのことだったので、GGUF版に切り替えてみました。しかし同じエラーが発生しました。 一方、別のモデルではこのようなエラーが出ていません。 ダウンロードしたモデルが壊れている可能性を考えて、一度キャッシュをクリアしてモデルをダウンロードし直しました。しかし、やはり同じメッセージが出ます。
モデルじゃないとすると「OpenCodeの不具合?」と考えてOpenCodeのIssueを探したところ、次のIssueを見つけました。既知の問題のようでした。
原因と修正方法
原因
* OpenCodeは複数の system メッセージや tool メッセージを利用する。
* Ministral 3B/8B付属のJinjaテンプレートは、それらを想定しておらず例外を送出する。
そこで、次のような修正を施すことにしました。
修正内容
* user/assistant の交互チェックを無効化
* 途中の system ロールを許可
テンプレートはGistにアップロードしてます。
- 3B
- 8B
このテンプレートを該当のモデルの「プロンプトテンプレート」の内容を上書きしたところ...

エラーを解決して処理を続行できました。

なお、この修正はOpenCodeでMinistral 3B/8Bモデルを使えるようにすることを優先して作ったパッチです。他のアプリなどで利用する場合、問題が発生する可能性がある点はご容赦ください。問題が送る場合は同じ画面のゴミ箱アイコンをクリックすると、プロンプトテンプレートがモデルの初期値に戻ります。
これで、LM Studio上のMinistral 3B/8Bモデルを使って、ローカルLLMコーディングできるようになりました。 コーディングするならMinistral 8Bの方がおすすめですが、軽微な作業はMinistral 3Bにやらせるような運用でモデルの使い分けをしてます。今回エラーを解消できたので、作業が捗りそうです。
以下はGemma 4 E4Bで修正できなかったバグをMinistral 8Bモデルに修正させたところです。問題なく修正ができています。

