Three values, and any agent works.
The endpoint is plain OpenAI-compatible, so anything that lets you set a custom base URL will run Qwen3.8-27B on our hardware. Configurations below are the ones we have checked. Everything else: use the three values and the provider type OpenAI Compatible.
A shared trial key is published on the quickstart page so you can evaluate before asking anyone for anything. It allows 2 concurrent requests. Production keys are issued by hand the same day: artem@llmtech.eu.
Clinealready in the catalogue
Cline ships us in its built-in provider list, so there is nothing to configure by hand. Open the settings, pick LLM Tech as the API provider, paste your key. The model, base URL and capabilities come with the entry.
If your Cline is older than late August 2026 and does not list us yet, use OpenAI Compatible with the three values above, or set the key in the environment:
export LLMTECH_API_KEY="your-key"
Kilo Code
Same approach: pick OpenAI Compatible, then base URL https://api.llmtech.eu/v1 and model unsloth/Qwen3.8-27B-NVFP4. Kilo builds its provider catalogue from the same upstream source as Cline, so a built-in entry is a matter of time.
Continue
In config.yaml:
models:
- name: Qwen3.8-27B (LLM Tech)
provider: openai
model: unsloth/Qwen3.8-27B-NVFP4
apiBase: https://api.llmtech.eu/v1
apiKey: your-key
capabilities:
- tool_use
- image_input
roles:
- chat
- edit
Both capabilities are declared deliberately: tool calling works, and so does image input, which most listings for this model get wrong.
aider
export OPENAI_API_BASE="https://api.llmtech.eu/v1" export OPENAI_API_KEY="your-key" aider --model openai/unsloth/Qwen3.8-27B-NVFP4
The openai/ prefix tells aider to treat it as an OpenAI-compatible route rather than looking the name up in its own table.
Zed
In settings.json. The key itself goes into the system keychain or the environment variable LLMTECH_API_KEY, not into this file:
{
"language_models": {
"openai_compatible": {
"llmtech": {
"api_url": "https://api.llmtech.eu/v1",
"available_models": [
{
"name": "unsloth/Qwen3.8-27B-NVFP4",
"display_name": "Qwen3.8-27B (LLM Tech)",
"max_tokens": 262144,
"capabilities": {
"tools": true,
"images": true,
"parallel_tool_calls": true,
"prompt_cache_key": true
}
}
]
}
}
}
}
Claude Code
Claude Code speaks the Anthropic API, not the OpenAI one, so it needs a translating proxy. LiteLLM is the usual choice:
# litellm_config.yaml
model_list:
- model_name: qwen38
litellm_params:
model: openai/unsloth/Qwen3.8-27B-NVFP4
api_base: https://api.llmtech.eu/v1
api_key: os.environ/LLMTECH_API_KEY
litellm --config litellm_config.yaml --port 4000 export ANTHROPIC_BASE_URL="http://localhost:4000" export ANTHROPIC_MODEL="qwen38" claude
Worth the extra step for one reason: our first business customer found this endpoint through Claude Code, which read the model page and recommended it.
Open WebUI
Admin panel, Settings, Connections, add an OpenAI API connection with base URL https://api.llmtech.eu/v1 and your key. The model list is served by /v1/models, so the model appears on its own.
LibreChat
In librechat.yaml, as a custom endpoint:
endpoints:
custom:
- name: "LLM Tech"
apiKey: "${LLMTECH_API_KEY}"
baseURL: "https://api.llmtech.eu/v1"
models:
default: ["unsloth/Qwen3.8-27B-NVFP4"]
fetch: true
titleConvo: true
modelDisplayLabel: "Qwen3.8-27B"
Anything else
Pick the provider type OpenAI Compatible and fill in the three values. The endpoint implements chat completions with streaming, usage accounting in the stream, tool calling and structured outputs, so clients generally need no special handling. GET /v1/models is public and needs no key, if your client discovers models that way.
Reasoning is billed as output. For routine tool-call turns, setting reasoning_effort to low, or disabling thinking outright, is usually the largest single saving available.
Repeated prompt prefixes bill at $0.04 per million instead of $0.25. For an agent, whose system prompt and tool definitions repeat on every turn, this is where the bill is actually decided. Two details are specific to this model:
So a prefix has to reach the same endpoint three times before it starts paying off. What follows from that:
- Keep the system prompt and tool definitions byte-identical between turns. Timestamps, session ids and reshuffled JSON keys quietly destroy the cache.
- Keep tool definitions in a stable order. Dictionary iteration order is the usual culprit.
- Put everything volatile after the stable block.
- Do not spread one workload across several providers. Each holds its own cache, so splitting traffic means paying full input price on all of them.
On our own production traffic this runs at about 88% hits, which puts the effective input price near $0.07 per million rather than $0.25.