gemma-4-31b is registered, users can pass it anywhere they would
pass a hosted model:
Model
Every self-hosted setup has three pieces:
The alias is the name users type. The
remote_model is the model name returned
or expected by the serving stack.
Server entries carry connection facts only. The legacy
bearer_token /
bearer_token_env server fields are rejected at config parse; credentials are
owned by the realm auth profile selected through the binding. A self-hosted
server with no realm binding fails closed at run time.Server Shape
For Ollama, LM Studio, vLLM, and most private gateways, use the OpenAI-compatible transport:config.toml
self_hosted.default_model must name one configured alias when more than one
self_hosted.models entry exists. With exactly one alias it may be omitted and
that alias becomes the default. Meerkat rejects an ambiguous multi-model
configuration instead of choosing by table order.
api_style = "chat_completions" is the conservative default for Gemma 4 and
other self-hosted tool-calling models. Use another API style only after the
specific serving stack has been validated with Meerkat tools, structured output,
and multimodal input.
Realm Binding
Self-hosted credentials are realm-owned. Declare a backend, auth profile, and binding forprovider = "self_hosted" in the same realm config, and make it
the realm default (or select it per run with --auth-binding):
config.toml
config.toml
Which Binding Authenticates Which Server
self_hosted is a provider class, not an endpoint identity: a private vLLM
box and a hosted OpenAI-compatible gateway are both self_hosted and hold
different secrets. Selecting a model therefore constrains credential resolution
to the server that serves it - [self_hosted.models.<alias>].server - and not
to whichever realm on the chain happens to declare a self-hosted default.
A backend identifies its endpoint in one of two ways:
A binding that declares neither is unconstrained: it is used only when it is
the single unconstrained self-hosted binding reachable from the active realm, so
one-server setups keep working with no annotation.
When the server cannot be identified honestly - no binding names it, or several
unconstrained bindings are reachable - the run fails closed with an error naming
the server and every binding considered, rather than sending some other server’s
key and surfacing that endpoint’s
Unauthorized. Fix it by adding
server = "<server_id>" to the backend profile that authenticates it, or by
selecting the binding explicitly with --auth-binding <realm>:<binding>. An
explicit selection wins, except when the named binding declares a different
server: that contradiction fails closed too.
Alias Shape
config.toml
vision = true advertises image input. It is separate from image tool-result
blocks: the registry forces image_tool_results = false for
api_style = "chat_completions"; only a validated responses endpoint may
advertise that result shape.
supports_thinking and supports_reasoning describe the behavior Meerkat
should expose through the configured transport. Gemma 4 is reasoning-capable,
but normalized reasoning controls and trace streaming still vary by serving
stack, so validate the behavior you plan to rely on.
Keep supports_web_search = false. The current self-hosted factory path has no
provider-native web-search lowering. Setting it to true would suppress the
fallback without creating a native executor, so search requests would have no
working path. An explicit Meerkat web-search enable fails closed when no
fallback executor can be provisioned.
Gemma 4 Aliases
Recommended aliases:Ollama
Use Ollama when the model runs on the same machine as Meerkat and you want the lightest local setup.1
Serve the model
2
Register Ollama
config.toml
3
Add aliases
config.toml
LM Studio
Use LM Studio when you want a desktop-managed OpenAI-compatible server.1
Start the local server
Load the Gemma 4 model in LM Studio, then start the local server.
2
Register LM Studio
config.toml
3
Alias the served model
Use the model name LM Studio exposes in its
/v1/models output.config.toml
vLLM
Use vLLM when you want a private server with more deployment control.1
Launch vLLM
Start vLLM with the Gemma 4 model you want to expose.
2
Register the server
config.toml
config.toml
3
Add remote aliases
Point aliases at the exact model names your vLLM endpoint exposes.
config.toml
Validation
Run these after adding or editing self-hosted model config:rkat modelsshows aself_hostedprovider group and the aliases you added.rkat doctorresolves the realm binding and reports the server as reachable.rkat auth bindingsshows which backend and auth profile thelocalbinding joins, andrkat auth test localresolves it without running a model turn.rkat run -m ...works without an explicit--provider.- The alias points at the exact upstream
remote_modelexposed by the server.
rkat run fails with “no credential binding for self-hosted server”, add the
realm binding shown above, and give its backend profile the
server = "<server_id>" line so it names the endpoint it authenticates.
See Also
Providers
Hosted and self-hosted provider model.
CLI configuration
Config file locations and model settings.
CLI commands
Commands for running, diagnosing, and inspecting models.
