Current version by Nick Antonaccio
Below is a prompt to set up Pi on a remote machine, to use models served by Strata on your locally hosted server as the LLM provider. I run Cloudflared on my servers to tunnel connections to my servers, so having that set up for your server machine(s) is a prerequisite (unless you want to forward ports, or simply use your servers inside a closed local area network). See https://aibynick.com/thread/42 to understand how I set up Cloudflared tunnels.
Connect this machine to a remote Strata inference server (Qwen3.8-Flash-Next, 125B MoE) exposed
through a Cloudflare tunnel.
BASE_URL = https://3080tistrata.101compute.com
API_KEY = BrpHjVUnPVT7SYQH4uf7xM6qd3ZHui5dA1RR7KqHXr8
It is an OpenAI-compatible API; app base URL is BASE_URL + "/v1".
An Anthropic-compatible endpoint is at BASE_URL + "/v1/messages".
The browser UI is at BASE_URL (enter the key under About > Settings).
=== MODEL NAME: SET IT ONCE, NEVER CHANGE IT ===
The server IGNORES the model name entirely. It always serves whatever model the host machine
currently has loaded. Send a fixed constant such as "strata" for every request and leave it
permanently. Do NOT try to select a model by name, and do NOT reconfigure this client when the
host changes models — nothing on this side needs to change.
=== SWITCHING MODELS HAPPENS ON THE HOST, NOT HERE ===
The host operator switches between three sizes (IQ2_XS, IQ3_XXS, IQ3_S). They all share the same
URL, port and key. Your configuration is stable across every switch.
The ONLY thing that changes for you is the usable context window, because the host's available
context differs per model:
IQ2_XS -> 262,144 tokens
IQ3_XXS -> 65,536 tokens
IQ3_S -> 65,536 tokens
If you send more than the current ceiling the server REFUSES the request (it never silently
truncates). Handle this gracefully: on such an error, trim or summarise your context and retry,
and tell me the model appears to have changed. Query BASE_URL/v1/models to see which model is
currently loaded — treat its "id" as informational only, never as something to route on.
Also expect 30-90 seconds where requests FAIL whenever the host switches models.
=== SETUP AND VERIFICATION ===
1. Confirm auth is enforced:
curl -s -o /dev/null -w "%{http_code}\n" BASE_URL/v1/models # expect 401
curl -s -H "Authorization: Bearer $API_KEY" BASE_URL/v1/models # expect 200
2. Confirm inference works; report timings.predicted_per_second and the reported model id:
curl -s BASE_URL/v1/chat/completions -H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"strata","messages":[{"role":"user","content":"Say hello in five words."}],"max_tokens":64,"reasoning_effort":"none"}'
3. Ask me which client to configure (OpenAI SDK, Continue, Cline, aider, Claude Code, plain
script) before installing anything, then set base URL BASE_URL + "/v1" and the API key.
4. Use reasoning_effort "none" or "low" unless I need deep reasoning — "high" is the default
and is substantially slower.
=== THINGS TO EXPECT AND TELL ME ABOUT ===
- The server handles ONE request at a time; concurrent agents serialise. Don't fan out in parallel.
- Prefill is slow for large first prompts (~1 minute per 30K tokens). Short chat is fine; dumping
a large codebase as context will feel slow.
- A home GPU behind a tunnel: expect variable latency (measured 27-34 tokens/s decode).
- 403 "Host is not allowed" means the tunnel hostname is untrusted — report it, don't work around it.
- Do not send secrets you would not share with the host machine.