A free, OpenAI-compatible endpoint for Qwen's newest 27B β vision input, tool calling, 262,144-token context, and reasoning you can dial up or down. No API key, no signup.
A free, public Hugging Face Inference Endpoint for Qwen/Qwen3.8-27B β an OpenAI-compatible Chat Completions API. No Hugging Face token required: point any OpenAI SDK, curl, or agent framework at the base URL and go.
Released August 5, big agentic jumps over Qwen3.6-27B: OSWorld-Verified 84.3 (vs 63.9), SWE-bench Pro 61.7 (vs 53.5). Unquantized BF16 on a dedicated H200.
Shared, free, and rate-limited to be fair to everyone: about 30 requests
in a burst, refilling to roughly 30 requests/minute, per IP.
Parallel agent tool-calls are fine β hammering it from a script is not. Over
the limit you'll get a 429 with a friendly note and a
Retry-After header. It will be retired after the launch buzz
cools down.
One base URL, standard OpenAI API, model id Qwen/Qwen3.8-27B.
Any string works as the API key.
https://g9hnto0u7lvbu837.us-east-2.aws.endpoints.huggingface.cloud/v1
curl https://g9hnto0u7lvbu837.us-east-2.aws.endpoints.huggingface.cloud/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "Qwen/Qwen3.8-27B",
"messages": [{"role": "user", "content": "Explain a KV cache in one paragraph."}]
}'
from openai import OpenAI
client = OpenAI(
base_url="https://g9hnto0u7lvbu837.us-east-2.aws.endpoints.huggingface.cloud/v1",
api_key="none", # no key required
)
r = client.chat.completions.create(
model="Qwen/Qwen3.8-27B",
messages=[{"role": "user", "content": "Three fun facts about lighthouses?"}],
temperature=1.0,
top_p=0.95,
)
print(r.choices[0].message.reasoning) # the thinking trace
print(r.choices[0].message.content) # the final answer
Streaming, tool calling (tools=[...]), and
multi-turn tool round trips all work as in the OpenAI API. Recommended sampling
with thinking on: temperature=1.0, top_p=0.95, top_k=20.
There's a full chat-ui front end running on this same endpoint — thinking, vision, and tool calls all wired up. No account needed.
Thinking is on by default. The reasoning trace comes back separately in
message.reasoning; your message.content stays clean.
Dial it with the standard reasoning_effort field:
xhigh, medium, low (default when unset), or
none to turn thinking off entirely. OpenAI-style values like
high are accepted and mapped to the nearest tier. On this shared
instance an unset effort means low to keep queues short under
heavy load; ask for medium or xhigh explicitly when
you want deeper reasoning.
| Mode | temperature | top_p | top_k | presence_penalty |
|---|---|---|---|---|
| Thinking (default) | 1.0 | 0.95 | 20 | 0.0 |
Non-thinking (reasoning_effort="none") | 0.7 | 0.80 | 20 | 1.5 |
Native vision: send images the standard OpenAI way, up to 4 per request (video input is disabled on this shared instance).
r = client.chat.completions.create(
model="Qwen/Qwen3.8-27B",
messages=[{"role": "user", "content": [
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}},
{"type": "text", "text": "What is in this image?"},
]}],
)
print(r.choices[0].message.content)
Multi-turn note: prior turns' thinking is preserved in context
by default (preserve_thinking), which helps agentic flows but eats
context in long conversations. Pass
extra_body={"chat_template_kwargs": {"preserve_thinking": False}}
for classic strip-old-thinking behavior.
pi reads
custom model providers from ~/.pi/agent/models.json. Add a provider entry
pointing at this endpoint's OpenAI-compatible base URL, then select it from the CLI.
{
"providers": {
"hf-qwen38": {
"name": "Qwen3.8-27B (HF public)",
"baseUrl": "https://g9hnto0u7lvbu837.us-east-2.aws.endpoints.huggingface.cloud/v1",
"api": "openai-completions",
"apiKey": "not-needed",
"compat": {
"supportsReasoningEffort": true,
"maxTokensField": "max_tokens"
},
"models": [{
"id": "Qwen/Qwen3.8-27B",
"name": "Qwen3.8-27B",
"reasoning": true,
"thinkingLevelMap": {
"off": "none",
"minimal": "low",
"low": "low",
"medium": "medium",
"high": "xhigh",
"xhigh": "xhigh"
},
"input": ["text", "image"],
"contextWindow": 262144,
"maxTokens": 32768,
"cost": {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0}
}]
}
}
}
Then run it β no restart needed, pi picks up models.json on launch:
# interactive, thinking level high (maps to xhigh on the endpoint) pi --provider hf-qwen38 --model Qwen/Qwen3.8-27B --thinking high # one-shot, non-interactive, thinking off pi -p --no-session --provider hf-qwen38 \ --model Qwen/Qwen3.8-27B --thinking off \ "Summarize this repo's README." # add it to your Ctrl+P model cycle alongside others pi --models "hf-qwen38/*,sonnet,haiku"
Same shape works for any OpenAI-compatible server β swap
baseUrl for a local vllm serve or llama.cpp
instance and keep the rest.
| Item | Value |
|---|---|
| Model | Qwen/Qwen3.8-27B Β· Apache-2.0 Β· BF16 (unquantized) |
| Architecture | 27B dense VLM Β· 64 layers: 48Γ Gated-DeltaNet linear attention + 16Γ full attention (3:1) |
| Context window | 262,144 tokens (native, full window served) |
| Modalities | Text + images in (max 4/request), text out Β· video disabled |
| Hardware | 1Γ NVIDIA H200 (141 GB), autoscales to 2 under load |
| Engine | vLLM (vllm-openai:qwen38) Β· MTP speculative decoding (2 draft tokens, in-checkpoint head) |
| Measured | ~0.7 s first token Β· ~110 tok/s per stream idle (65 before MTP) Β· 50 concurrent requests verified |
| Rate limit | ~30 requests/min per IP Β· 429 + Retry-After when exceeded |
Measured numbers are from this deployment's own
verification batteries, not marketing. MTP enabled 2026-08-15 (~1.7Γ
decode speedup); note min_p and logit_bias are
ignored under speculative decoding.
This whole thing β H200, vLLM, autoscaling, rate limiting β is one deploy form on Inference Endpoints: dedicated, production-grade deployments of any model on the Hub.
Pick a model, pick your hardware (CPU to multi-GPU H200), and get an OpenAI-compatible URL with autoscaling, scale-to-zero, and per-minute billing. No shared queues, no rate limits from strangers β your model, your GPUs.