Docs menu

Using the API

Call Rodatacenter from code through its OpenAI-compatible API, with streaming and the per-request controls it accepts.

The server speaks the OpenAI API format, so most AI tools and SDKs work with it once their base URL is changed.

Setting Value
Base URL https://ai.sfuracerbot.ca/v1
API key None. An SDK that requires one accepts any text, such as none
model One of the four model names. Without one, the loaded model answers. Naming a different model switches the server for everyone
Endpoints /v1/chat/completions, /v1/completions, /v1/models, /v1/messages (Anthropic format), /v1/embeddings

Three rules apply to every request:

  • Stream long answers with "stream": true. The connection is dropped after 100 seconds with nothing sent.
  • Send a User-Agent header. Python’s default Python-urllib agent is blocked with error 1010, while curl, browsers and the OpenAI SDK are accepted.
  • Tool calling is switched off: tools are removed from every request.

Examples

With curl:

curl -N https://ai.sfuracerbot.ca/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"LFM2.5-8B-A1B","stream":true,
       "messages":[{"role":"user","content":"Explain PID control in two sentences."}]}'

With the OpenAI Python SDK:

from openai import OpenAI

client = OpenAI(base_url="https://ai.sfuracerbot.ca/v1", api_key="none")
stream = client.chat.completions.create(
    model="LFM2.5-8B-A1B",
    messages=[{"role": "user", "content": "Give me three robot names."}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="", flush=True)

Working when: the answer prints a few words at a time.

Per-request controls

Field Effect
"chat_template_kwargs": {"enable_thinking": false} Thinking off (Qwen3.5-4B only)
"thinking_budget_tokens": N Thinking cap for this request
"max_tokens": N Cap on the answer length
"temperature", "top_p", "seed" Standard sampling options
"return_progress": true While streaming, sends prompt-reading progress events