Hosted LLM tier¶
https://llm.rmorie.com is an authenticated, rate-limited inference
endpoint run by the MORIE project for the morie (Python) and
rmorie (R) packages. It exists so that morie ask and
morie_llm_ask() work on a machine with no local model and no API key
of your own, and it is the last resort: a local Ollama is tried first, then
every key of your own (an attached endpoint, Gemini, OpenAI; see
Your own model endpoint below), and the hosted tier only when none of
those answers. Keys are issued on request at https://rmorie.com/access.
The endpoints, modes and model list come from a signed services document
(https://rmorie.com/.well-known/morie-services.json, ML-DSA-44, public
key pinned in the package) that the package verifies before use, so they
can change without a release; MORIE_SERVICES_URL names a mirror, with
the same signature check.
Getting a key¶
One key per person, shared by both languages. Request it at https://rmorie.com/access and store it:
morie login --token # paste the key you were issued
The GitHub and emailed-code sign-ins remain for accounts that have them:
morie login # GitHub device flow
morie login --email you@example.com # 6-digit code by email
morie login --email you@example.com --to-email # key sent to your inbox
rmorie::morie_llm_login(token = "<key>") # the key you were issued
rmorie::morie_llm_login() # GitHub
rmorie::morie_llm_login(email = "you@example.com") # emailed code
rmorie::morie_llm_login(email = "you@example.com", to_email = TRUE)
The R package also ships the same verbs as a shell command:
rmorie::install_cli() links rmorie onto your PATH, after which
rmorie login, rmorie login --email …, rmorie login --token,
rmorie logout, rmorie doctor, rmorie models and rmorie ask …
work like their morie counterparts; rmoriebricklayer has the same
verbs once rmoriebricklayer::install_cli() has run.
Which models you can ask¶
morie models # the hosted tier's list for your key (default marked *), then local Ollama
morie doctor # the same list on the hosted line
morie ask --model gpt-oss:120b-cloud "..." # one call with a named model
The same verbs exist as rmorie models / rmorie ask --model NAME and
rmoriebricklayer models / rmoriebricklayer ask --model NAME; in R,
rmorie::morie_llm_hosted_models() and
rmoriebricklayer::bricklayer_llm_models() return the list with the
default as an attribute. MORIE_HOSTED_MODEL changes the default.
The site at https://llm.rmorie.com describes the tier and points to the request form at https://rmorie.com/access; it offers no sign-in of its own.
Where the key lives¶
$XDG_CONFIG_HOME/morie/credentials.json (~/.config/morie/ when
the variable is unset), written owner-only (mode 0600 on POSIX). Both
packages read and write the same file, so signing in from R signs you
in for Python and vice versa. morie logout / morie_llm_logout()
remove it.
Environment overrides:
MORIE_HOSTED_KEYUse this key instead of the stored one (CI, containers).
MORIE_HOSTED_BASE_URLAnother gateway (the default comes from the services document), or
offto disable the tier entirely (""also disables it on POSIX; Windows drops an empty variable, henceoff).MORIE_HOSTED_MODELModel to request (default: the services document’s default model). When the gateway no longer lists the requested model, the packages use the first model it does list instead of failing, since cloud models get retired upstream.
MORIE_HOSTED_AUTH_URLThe sign-in service (default from the services document).
Which models¶
morie models (morie_llm_models() in R) is the list to trust: the
gateway serves the ollama.com cloud models (minimax-m3:cloud,
gpt-oss:120b-cloud and the rest) and additional AI models,
whose ids end in :cf: kimi-k2.6:cf, kimi-k2.7-code:cf, deepseek-v4-pro:cf, deepseek-v4-flash:cf, glm-5.2:cf, glm-5.3:cf, glm-5.3-flash:cf, gpt-oss-120b:cf, gpt-oss-20b:cf, llama-4-scout:cf, qwen3.8-27b:cf, nemotron-3-120b:cf and gemma-4-26b:cf.
Pick one per call with morie ask --model gpt-oss-120b:cf "...". When an
ollama.com model is rate limited or down, the gateway answers the same
request from one of the additional models, so a busy hour does not turn
into an error.
The same key opens data.rmorie.com¶
The curated datasets at https://data.rmorie.com (Get the real data) are
gated by this key too (issued on request at https://rmorie.com/access, under
https://rmorie.com/data-license): morie pull chicago_crime/incidents,
rmorie::morie_load_hosted_dataset(), or any HTTP client with
Authorization: Bearer <key>.
Your own model endpoint¶
The hosted tier is one route; any OpenAI-compatible endpoint can be attached
instead or as well, and the assistant verbs (ask, percy, agent,
chat) use it when no local Ollama answers, before the hosted tier is
tried. OpenAI, Anthropic’s compatibility endpoint
(https://api.anthropic.com/v1), OpenRouter, Mistral, Groq, a local LM
Studio / vLLM / llama.cpp server: anything that serves
POST BASE_URL/chat/completions.
morie provider set --base-url https://api.openai.com/v1 --key sk-... --model gpt-4o-mini
morie provider show # endpoint, model, masked key
morie models # "Your endpoint (...)" is listed first
morie ask "which module fits a treatment-control design?"
morie provider unset
rmorie::morie_llm_provider_set("https://api.openai.com/v1", "sk-...", model = "gpt-4o-mini")
rmorie::morie_llm_provider_show()
rmorie::morie_llm_provider_unset()
# or, from the shell: rmorie provider set --base-url URL --key KEY [--model NAME]
The setting is stored in the same credentials file as the hosted key, so
both languages see it. The environment variables LLM_API_BASE_URL,
LLM_API_KEY and MORIE_API_MODEL take precedence when set (CI,
containers). The full order the packages try, as morie doctor /
rmorie doctor report it: local Ollama, your own keys (your endpoint,
GEMINI_API_KEY, OPENAI_API_KEY), the hosted tier as the last resort,
then a local keyword fallback that says it is one.
Emailed keys and pasted tokens¶
--to-email (to_email = TRUE) is for the case where the machine
you are signing in from is not the machine that will use the key: the
gateway mails the key to the address that just proved it owns the
inbox, stores nothing locally, and you paste it later with
morie login --token (morie_llm_login(token = )), which probes the
gateway once and tells you whether it was accepted.
Limits and models¶
Per key: 10 requests a minute, 30,000 tokens a minute, 100 requests a
day. Signing in again replaces your previous key. Only cloud-hosted open
models are exposed (GET /v1/models lists the current set); local GPU
models on the host are never reachable. Any OpenAI-compatible client can
use the key against https://llm.rmorie.com/v1.
What is logged¶
Per-key request and token counters, and the edge access log (IP, path, status). No prompts, no responses, no GitHub tokens. The GitHub sign-in reads only your public login to name the key; an email account is a hash of the address. Keys can be revoked at any time, and abuse (automated scraping, illegal content) gets the key revoked without notice.