跳轉到主要內容
Buttress 伺服器透過 --config 讀取單一 TOML 檔案。每個區段皆為選填,省略時會使用預設值。

最小範例

[server]
port = 2080

[[generators]]
type = "ggml-llm"
[generators.model]
repo_id = "ggml-org/gpt-oss-20b-GGUF"
quantization = "mxfp4"
n_ctx = 12800

頂層區段

區段用途
[env]環境變數,僅在尚未設定時寫入處理程序
[server]HTTP/WebSocket 監聽器(連接埠、日誌等級、Body 上限)
[runtime]所有 generator 共用的預設值
[runtime.session_cache]ggml-llm 的 KV cache 重用儲存
[autodiscover]區域網路 UDP / HTTP 探索開關
[openai_compat]啟用 OpenAI 相容 HTTP 路由
[anthropic_messages]啟用 Anthropic 相容 HTTP 路由
[[generators]]generator 實例陣列,每個項目對應一個載入的模型

[server]

型別預設值說明
idstringbuttress-<machineId>用於繫結與探索的穩定伺服器 id
namestringButtress Server (<short id>)顯示於 BRICKS Controller 的友善名稱
portnumber2080HTTP/WebSocket 連接埠(會被 --port 覆寫)
log_levelstring未設定debuginfowarnerror
max_body_sizenumber 或 string"50MB"最大上傳大小;接受 "100MB""1GB" 或原始位元組數
session_timeoutnumber 或 string60000WebSocket 閒置逾時(毫秒);也接受 "1m""30s"
temp_file_dirstring$TMPDIR/.buttressSTT 音訊上傳與其他暫存檔案的目錄

[runtime]

所有 generator 共用的預設值。[generators.model] 下的逐項 generator 設定會優先生效,否則套用這裡的預設值。
[runtime]
cache_dir = "~/.buttress/models"
huggingface_token = "hf_..."
n_gpu_layers = "auto"
型別說明
cache_dirstring模型與中繼資料快取根目錄(預設 ~/.buttress/models
huggingface_tokenstringHugging Face 認證 token;若未設定會回退至 $HUGGINGFACE_TOKEN所有後端都會套用,無關環境變數名稱
http_headerstable附加於 Hugging Face / HTTP 下載的額外標頭
context_release_delay_msnumber卸載 context 前的閒置時間(預設 100000 代表立即卸載)
prefer_variantsstring[]覆寫後端 variant 探測順序(ggml 後端)
n_threadsnumberCPU 執行緒數
n_ctxnumberContext window(per-model 值優先;會自動限制在訓練 context 範圍內)
n_gpu_layersnumber 或 "auto"卸載到 GPU 的層數(預設 "auto"
n_batchnumberPrompt batch 大小。注意: 模型層的 n_batch 預設值為 512,會遮蔽 runtime 值,除非在 [generators.model] 明確設定 n_batch
n_ubatchnumberPrompt micro-batch 大小
n_parallelnumber平行序列數(預設 4
n_cpu_moenumber卸載到 CPU 的 MoE 專家層數
flash_attn_typestring"on""off""auto"。預設值依 GPU 而定:選用 GPU 後端時為 "auto",CPU 時為 "off"
cache_type_kcache_type_vstringKV cache 資料型別(f16f32q8_0q4_0…)
kv_unifiedboolean跨序列共用統一 KV cache
swa_fullboolean即使是 sliding-window 層也展開完整 attention
ctx_shiftboolean允許 llama.cpp 的滾動 context shift
use_mmapuse_mlockboolean記憶體映射 / 鎖定
no_extra_buftsboolean停用額外運算 buffer 型別
cpu_maskcpu_strictstring / booleanCPU 親和性(進階)
devicesstring[]限制使用特定 GGML 裝置
Speculative 鍵variousspeculativespec_typespec_draft_n_maxspec_draft_n_minspec_draft_p_minspec_draft_p_split

[runtime.session_cache]

針對 ggml-llm generator,伺服器可在請求之間保留 KV cache 狀態,讓共用相同 prompt 前綴的後續完成可省略 prompt 處理。
[runtime.session_cache]
enabled = true
max_size_bytes = "10GB"
max_entries = 1000
預設值說明
enabledtrue啟用持久化的 KV cache
max_size_bytes"10GB"磁碟總預算;接受 "500MB""50GB" 或數值
max_entries1000最大快取項目數(採 LRU 淘汰)
快取檔案存放於 {cache_dir}/.session-state-cache/ mlx-llm 使用獨立的 session cache,位於 {cache_dir}/mlx-session-cache/,每個 generator 個別設定。

[[generators]]

每個 [[generators]] 區段宣告一組伺服器要提供的模型。可重複多次以提供多個模型。每個區段都包含 type、可選的 [generators.backend] 表,以及 [generators.model] 表。
[[generators]]
type = "ggml-llm"

[generators.backend]
# 後端選擇與資源規劃

[generators.model]
repo_id = "..."
# 模型識別與 runtime 覆寫

共用 [generators.model]

所有 generator 類型(ggml-llmggml-sttmlx-llm)都適用:
型別說明
repo_id(必填)stringHugging Face repo(org/repo
revisionstring預設 "main"
downloadboolean啟動時預先下載(預設 false
ggml-llmggml-stt 適用(mlx-llm 的量化由 repo 本身決定,會忽略以下鍵):
型別說明
filenamestring指定 repo 內的特定檔案
urlstring直接下載 URL(略過 manifest 查詢)
quantizationstring偏好的量化標籤,例如 q4_0q8_0mxfp4
preferred_quantizationsstring[]quantization 不符時的有序回退清單(別名:quantizations
allow_local_fileboolean使用 local_pathmmproj_local_path 時必須啟用
local_pathstring將本機檔案作為載入路徑。Repo 中繼資料仍會從 Hugging Face 解析,因此 repo_id 仍為必填
api_basebase_urlstring覆寫 Hugging Face API / blob 主機(鏡像或代理)

ggml-llm(llama.cpp / GGUF)

[[generators]]
type = "ggml-llm"

[generators.backend]
variant_preference = ["cuda", "vulkan", "default"]
gpu_memory_fraction = 0.95

[generators.model]
repo_id = "ggml-org/gpt-oss-20b-GGUF"
quantization = "mxfp4"
n_ctx = 12800
download = true
[generators.backend] 僅控制後端選擇與資源規劃。Runtime 覆寫(n_ctxn_gpu_layersflash_attn_type 等)請放在 [generators.model] 下。 [generators.backend]
型別預設值說明
variantstringauto強制 cudavulkansnapdragondefault
variant_preferencestring[]["cuda", "vulkan", "snapdragon", "default"]未設定 variant 時的探測順序
gpu_memory_fractionnumber0.85硬體 guardrails 可規劃的最大 GPU 比例
cpu_memory_fractionnumber0.5CPU 端 buffer 可用的最大 RAM 比例
[generators.model] — 除了上述共用 ggml 鍵外,每個 [runtime] 鍵都可在 generator 層覆寫:n_ctxn_gpu_layersn_batchn_ubatchn_threadsn_paralleln_cpu_moeflash_attn_typecache_type_kcache_type_vkv_unifiedswa_fullctx_shiftuse_mmapuse_mlockno_extra_buftscpu_maskcpu_strictdevices 多模態(mtmd) — 從同一 repo 自動下載對應的 mmproj-*.gguf
型別說明
enable_mtmdboolean預設 false
mmproj_filenamestring指定特定的 projector 檔案
mmproj_urlstring直接覆寫 URL
mmproj_local_pathstring本機 projector 檔案(需設定 allow_local_file = true
mmproj_use_gpuboolean未設定 = 自動(n_gpu_layers > 0 時為 true)
mmproj_image_min_tokensnumber視覺 token 下限(動態解析度模型;-1 代表未設定)
mmproj_image_max_tokensnumber視覺 token 上限(-1 代表未設定)
Speculative decoding
型別說明
speculativestringDraft 模型識別碼
spec_typestring策略(後端定義)
spec_draft_n_maxint每步最大草稿 token 數
spec_draft_n_minint最小草稿 token 數
spec_draft_p_minnumber最低接受機率
spec_draft_p_splitnumber分割門檻

ggml-stt(whisper.cpp)

[[generators]]
type = "ggml-stt"

[generators.backend]
variant_preference = ["cuda", "vulkan", "default"]

[generators.model]
repo_id = "BricksDisplay/whisper-ggml"
filename = "ggml-large-v3-turbo-q8_0.bin"
use_gpu = true
use_flash_attn = "on"
download = true
[generators.backend]
型別預設值說明
variantstringauto強制 cudavulkandefault
variant_preferencestring[]["cuda", "vulkan", "default"]探測順序
gpu_memory_fractionnumber0.85
cpu_memory_fractionnumber0.5
[generators.model] — 除了上述共用 ggml 鍵外:
型別預設值說明
repo_idstring"BricksDisplay/whisper-ggml"已設定預設值(與 ggml-llm 不同)
preferred_quantizationsstring[]["q8_0", <no-quant>, "q5_1"]預設回退鏈
use_gpubooleantrue設為 false 可強制使用 CPU,即使有可用 GPU
use_flash_attnstring 或 boolean"auto""on""off""auto"。也接受 true / false 作為簡寫。"auto" 在使用 GPU 時啟用 flash-attn
Runtime 額外設定 — 僅 ggml-stt 適用,放在 [runtime] 下:
型別說明
max_threadsnumber限制 whisper.cpp 的執行緒上限

mlx-llm(Apple Silicon)

[[generators]]
type = "mlx-llm"

[generators.model]
repo_id = "mlx-community/Qwen2.5-VL-3B-Instruct-4bit"
vlm = true
download = true
mlx-llm 不使用 [generators.backend] 區段。 首次使用時,後端會在 {cache_dir}/mlx-env 建立 Python virtualenv,並安裝 mlx_lm_packagemlx_vlm_package,以及部分 VLM 處理器所需的 torchtorchvision。若既有 venv 已可匯入 mlx_vlmtorch,安裝步驟會跳過。 [generators.model] — 共用的 repo_id / revision / download 之外:
型別預設值說明
adapter_pathstring本機 LoRA adapter 目錄
vlm"auto" 或 boolean"auto"強制 VLM(true)或純文字(false);"auto" 會依 repo 推斷
tokenizer_configtable轉發給 mlx_lm.load(..., tokenizer_config=...)
model_configtable轉發給 mlx_lm.load(..., model_config=...)
quantizationfilenamepreferred_quantizations 不會使用,量化由 MLX repo 本身決定。 Runtime 額外設定mlx-llm 適用,放在 [runtime] 下:
型別預設值說明
mlx_env_dirstring{cache_dir}/mlx-env自動管理的 Python venv 位置
mlx_lm_packagestring"mlx-lm==0.31.1"配置 venv 時使用的 pip 規格
mlx_vlm_packagestring"mlx-vlm==0.4.0"配置 venv 時使用的 pip 規格

[autodiscover]

伺服器會於 UDP 8089 廣播自己,以便相同區域網路上的 Foundation 裝置能找到。預設啟用自動探索。
[autodiscover]
[autodiscover.udp]
port = 8089

[autodiscover.udp.announcements]
enabled = true
interval = 5000

[autodiscover.udp.requests]
enabled = true
responseDelay = 100

[autodiscover.http]
enabled = true
path = "/buttress/info"
cors = true
設為 autodiscover = false 可完全停用自動探索。協定細節請參閱自動探索參考

[env]

啟動時套用的環境變數,但僅在系統環境中尚未設定時生效。系統變數與命令列匯出值的優先順序更高。
[env]
HUGGINGFACE_TOKEN = "hf_..."
CUDA_VISIBLE_DEVICES = "0"
ggml 後端讀取的是 HUGGINGFACE_TOKEN(並非 HF_TOKEN)。若希望單一 token 套用至所有後端而與變數名稱無關,請改設 [runtime] huggingface_token

相容性端點

以下端點為實驗性功能,schema、錯誤格式與 CORS 預設值未來可能變動。
伺服器除原生 WebSocket RPC 外,可額外開放 OpenAI 與 Anthropic 相容的 HTTP 路由。每項皆需明確啟用。
[openai_compat]
enabled = true
# cors_allowed_origins = "*"

[anthropic_messages]
enabled = true
# cors_allowed_origins = ["http://localhost:3000"]
端點設定旗標
POST /oai-compat/v1/chat/completions[openai_compat] enabled = true
GET /oai-compat/v1/models[openai_compat] enabled = true
POST /anthropic-messages/v1/messages[anthropic_messages] enabled = true
POST /anthropic-messages/v1/messages/count_tokens[anthropic_messages] enabled = true
每項端點亦可透過環境變數啟用:ENABLE_OPENAI_COMPAT_ENDPOINT=1ENABLE_ANTHROPIC_MESSAGES_ENDPOINT=1

下一步

工作區繫結

將伺服器與 BRICKS 工作區配對並啟用認證。

區域網路自動探索

Foundation 裝置如何於區域網路上找到您的伺服器。