motif64

m64_dfd55abca230 / AGENT.md

69 lines, 3.1 KBraw

qwen38-flash-next-basalt-5090

An OpenAI-compatible chat endpoint for Qwen3.8-Flash-Next (the jesdga GSQ-RCO IQ3_S pack) on the Basalt engine, running on one RTX 5090 with a 384k-token context (YaRN x1.5 over the trained 262144). It only provides the model: run opencode (or any OpenAI-compatible client) on your own machine and point it here. Your files and tools stay on your machine; only the model calls come to this capsule.

The model runs locally; the container has no network access (unless the user served it with --allow-external-network or --allow-internal-network, which it does not need).

Routes

All paths are relative to the capsule's URL (e.g. http://<tailnet-ip>:<port>), written here as {{BASE_URL}}.

Method Path What
POST /v1/chat/completions OpenAI chat completions, streaming or not
GET /v1/models one model: qwen3.8-flash-next-iq3_s-basalt-384k
GET /status phase (ready when usable)
GET /agent this document plus live status
GET /human/ landing page: opencode setup and a quick-test chat
GET /.well-known/opencode opencode provider config (opencode auth login {{BASE_URL}})

POST /v1/chat/completions

Body: application/json only. Accepted fields: messages (required), tools, tool_choice, response_format, max_tokens, stream, seed; model, user, stream_options are accepted and ignored or passed on; n must be 1. Any other field (e.g. temperature, top_p) is refused with 400 naming the field: sampling comes from the pack. The model is always this one, whatever model says.

Messages may carry images (image_url parts with data: URLs). Tool calls follow the OpenAI format. The reply may include reasoning_content (the model's thinking) before content.

stream: true returns Server-Sent Events (data: {...} chunks, ending with data: [DONE]).

curl -s {{BASE_URL}}/v1/chat/completions -H 'Content-Type: application/json' \
  -d '{"messages":[{"role":"user","content":"Say hi"}],"max_tokens":200}'

curl -N {{BASE_URL}}/v1/chat/completions -H 'Content-Type: application/json' \
  -d '{"messages":[{"role":"user","content":"Count to 5"}],"stream":true}'

Timings and concurrency

  • Load: about 30 s when the 87 GB pack is in the page cache, a few minutes cold.
  • Generation: about 300 tok/s (speculative decoding, 7-token windows).
  • One request at a time. Others wait their turn; send them sequentially.

opencode on your machine

Once: opencode auth login {{BASE_URL}}, then run opencode in any folder. opencode reads this capsule's provider from /.well-known/opencode at every start.

Or on a machine with m64: m64 qwen38-flash-next-basalt-5090 --ui opencode.

Errors

  • 503 with a phase body: still loading; retry after Retry-After seconds.
  • 400: a field the endpoint does not accept, or a prompt longer than the context.

Access

On the tailnet (the default bind) there is no token: anyone on the tailnet can use the endpoint. With a token (--host 0.0.0.0 etc.), send Authorization: Bearer <token>.