> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bricks.tools/llms.txt
> Use this file to discover all available pages before exploring further.

# Buttress を使った推論

> LLM および音声認識 generator を LAN 上の Buttress サーバーへオフロードします

BRICKS Foundation は LLM、MLX、音声認識の推論を同じ LAN 上の [BRICKS Buttress](/ja/buttress) サーバーへオフロードできます。brick の generator API は変わらず、サーバー側で実行する方が速い（あるいはローカルでは動かない）場合に、デバイスは透過的に処理を委譲します。

## 要件

* BRICKS Foundation 2.25 以降
* LAN 上で到達可能な Buttress サーバー — [Buttress インストール](/ja/buttress/installation)を参照
* サーバーがデバイスと同じワークスペースにバインドされている — [ワークスペースバインディング](/ja/buttress/workspace-binding)を参照

## 仕組み

1. デバイスのワークスペースに少なくとも 1 つのバインド済み Buttress サーバーがあると、launcher はディスカバリーマネージャーを起動し、ワークスペーススコープの JWT を取得します。
2. マネージャーはポート `8089` で UDP アナウンスを待ち受け、`serverId` がワークスペースのバインド済み一覧にあるサーバーをすべてプールします。
3. 各 LLM、MLX、STT brick は **Buttress (Remote Inference)** グループを読み、自動でサーバーを選ぶか、手動で設定された URL を使います。
4. ハードウェア能力比較によりローカル・リモート・どちらでも実行のいずれかが推奨され、brick で選んだストラテジーがその推奨をどう解釈するかを決めます。

launcher がサーバーに到達できない（LAN なし、サーバーオフライン、ワークスペース不一致）場合、ローカル実行にフォールバックします。明示的にオフにしている場合を除きます。

## brick でオフロードを設定

**BRICKS Controller** > **Config Editor** で任意の LLM または STT brick を開きます。**Buttress (Remote Inference)** プロパティグループは **Connection** の下に表示されます。

| 項目                | デフォルト             | 効果                                                                      |
| ----------------- | ----------------- | ----------------------------------------------------------------------- |
| **Enabled**       | `false`           | この brick で Buttress を有効化                                                |
| **Auto-discover** | `Auto`            | `Auto` は UDP でサーバーを検出、`Manual` は URL 欄を使用                               |
| **URL**           | 空                 | Auto-discover が `Manual` のときの WebSocket URL（例：`ws://buttress.lan:2080`） |
| **Strategy**      | `prefer-buttress` | デバイスがローカルとリモートをどう選ぶか                                                    |
| **Fallback**      | `no-op`           | Buttress が有効でも到達不能なときの処理                                                |

### ストラテジー

| ストラテジー            | 動作                                             |
| ----------------- | ---------------------------------------------- |
| `prefer-buttress` | サーバーが利用可能なら常に Buttress に送信。ローカルハードウェアは検査しません。  |
| `prefer-local`    | デバイスのメモリが足りればローカルで実行、足りなければ Buttress にフォールバック。 |
| `prefer-best`     | スコアを比較して、より高速な側で実行。                            |

`prefer-buttress` がデフォルトなのは、Buttress を有効化する Foundation デバイスのほとんどがローカルハードウェアでは最速ではないからです。

### フォールバック

| フォールバック        | Buttress が有効だが到達不能なときの動作                            |
| -------------- | --------------------------------------------------- |
| `no-op`（デフォルト） | brick はローカルでは何もしません。モデルのダウンロードも completion の実行もしません |
| `use-local`    | brick は Buttress がオフだったときと同じくローカル実行にフォールバックします      |

LAN が切れたときも brick を動かし続けたいなら `use-local`、デバイスが扱えないモデルをこっそり動かしてバッテリーを消費するより明確に失敗させたいなら `no-op` を選んでください。

## ワークスペースが変わったとき

デバイスのワークスペースが変わると（例：管理者が BRICKS Controller から再割り当て）、launcher は次の処理を行います：

1. 動作中の Buttress マネージャーを停止し、開いている WebSocket 接続をすべて閉じる。
2. キャッシュされた access token を破棄する。
3. 新しいワークスペースのバインド済みサーバー一覧と、新たに発行されたトークンでマネージャーを再起動する。

旧ワークスペースで認証されていた進行中の generator は無限再接続ループに陥らず、きれいにエラーで終わります。

## 音声アップロード（STT）

音声認識の文字起こしには音声ファイルがサーバーに必要です。brick は HTTPS で `POST /buttress/upload` にアップロードし、サーバーは `[server] temp_file_dir` で設定された一時ディレクトリ（デフォルトは `<os-tmpdir>/.buttress`）に保存します。文字起こし後、ファイルはセッションの他の一時ファイルとともに自動でクリーンアップされます。

## トラブルシューティング

| 症状                                        | 原因と思われるもの                                       | 対処                                                     |
| ----------------------------------------- | ----------------------------------------------- | ------------------------------------------------------ |
| brick ログに `no LAN provider is registered` | デバイスがワークスペースに紐付いていない、またはそのワークスペースにバインド済みサーバーがない | デバイスをバインドする、または `bricks buttress bind` でサーバーをペアリングする   |
| brick ログに `no '<type>' endpoint yet`      | UDP 検出が 10 秒以内にサーバーを返さなかった                      | サーバーが同じサブネットにあること、`[autodiscover]` ブロックが無効化されていないことを確認 |
| WebSocket がコード `1008` で閉じる                | デバイスのトークンがサーバーのバインド済みワークスペースと一致しない              | 双方が同じワークスペースであることを確認、launcher を再起動                     |
| Buttress を有効化したら brick が「動かなくなった」         | フォールバックが `no-op` で、到達可能なサーバーがない                 | フォールバックを `use-local` に切り替えるか、LAN 接続を修正                 |
| Unknown generator id エラー                  | サーバーが再起動またはロード済みモデルを退避した                        | brick は次の呼び出しで自動的に generator を再初期化して回復します              |

## 関連項目

<CardGroup cols={2}>
  <Card title="Buttress 概要" icon="server" href="/ja/buttress">
    Buttress とは何か、いつ使うか、システム全体の構成。
  </Card>

  <Card title="ワークスペースバインディング" icon="key" href="/ja/buttress/workspace-binding">
    サーバーとデバイスが同じワークスペースに所属する仕組み。
  </Card>
</CardGroup>
