First response in under a minute.
The API is OpenAI-compatible. Base URL https://api.llmtech.eu/v1, model unsloth/Qwen3.8-27B-NVFP4. Below is a shared free trial key — try before you talk to anyone.
lt-trial-ba1ef28c6d32ed6980678d8d
Shared and rate-limited: 2 concurrent requests, for evaluation only. It rotates when abused. For production, email artem@llmtech.eu — a personal key with 64 concurrent is issued the same day, usually within the hour.
curl https://api.llmtech.eu/v1/chat/completions \
-H "Authorization: Bearer lt-trial-ba1ef28c6d32ed6980678d8d" \
-H "Content-Type: application/json" \
-d '{
"model": "unsloth/Qwen3.8-27B-NVFP4",
"messages": [{"role": "user", "content": "Say hello"}],
"stream": true
}'
from openai import OpenAI
client = OpenAI(
base_url="https://api.llmtech.eu/v1",
api_key="lt-trial-ba1ef28c6d32ed6980678d8d",
)
r = client.chat.completions.create(
model="unsloth/Qwen3.8-27B-NVFP4",
messages=[{"role": "user", "content": "Say hello"}],
stream=True,
)
for chunk in r:
print(chunk.choices[0].delta.content or "", end="")
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.llmtech.eu/v1",
apiKey: "lt-trial-ba1ef28c6d32ed6980678d8d",
});
const stream = await client.chat.completions.create({
model: "unsloth/Qwen3.8-27B-NVFP4",
messages: [{ role: "user", content: "Say hello" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
The model reasons adaptively: it thinks on hard prompts and skips thinking on trivial ones. You can override per request:
{
"model": "unsloth/Qwen3.8-27B-NVFP4",
"messages": [{"role": "user", "content": "2+2?"}],
"chat_template_kwargs": {
"enable_thinking": false
}
}
Reasoning text comes back in reasoning (non-streaming) or reasoning_content deltas (streaming). Reasoning tokens are billed as output.
Automatic, no code changes. Repeated prompt prefixes are billed at $0.04/M instead of $0.25/M. Cache materializes from the second identical-prefix request onward and works on prefixes from roughly 5K tokens. Check usage.prompt_tokens_details.cached_tokens in the response to see it working.
| Code | Meaning | What to do |
|---|---|---|
| 401 | invalid or missing API key | check the Authorization header |
| 404 | unknown model id | use unsloth/Qwen3.8-27B-NVFP4 |
| 429 | concurrency limit reached | retry after the Retry-After header (1s); requests never queue silently |
| 400 | malformed request / context overflow | the error message names the exact problem |
| 5xx | server-side failure | retry with backoff; check status |
Default limits: 64 concurrent requests per production key (trial: 2), context up to 262,144 tokens. Need more concurrency — ask, the capacity exists.
Five things behave differently from a plain OpenAI endpoint. We tested each one against production rather than guessing, and we would rather you read it here than discover it at three in the morning.
The last one is worth a sentence. Requests must use the public id unsloth/Qwen3.8-27B-NVFP4 — anything else is a 404 — but the response and the stream chunks currently carry the internal served name. Harmless for every client we have seen, since nothing routes on it, but if your code asserts that the response model equals the requested one, that assertion will fail. Say so and we will change it.
Everything else you would expect works, including max_completion_tokens, seed, logprobs, response_format with a JSON schema, tool calling with the standard string-encoded arguments, the developer role, and the sampler set temperature / top_p / top_k / repetition_penalty.