Skip to content

LLMTR Gemma 4 (Turkey)

Gemma 4 is a first-party model we host on our own hardware in Turkey. It is called through /v1/chat/completions with the canonical model id llmtr/gemma-4. Requests are never forwarded to a third-party provider, which makes it a fit for internal assistants, document analysis and tool-using agent flows with data-residency requirements.

PropertyValue
Model idllmtr/gemma-4
Underlying modelGemma 4 26B-A4B-IT
Context window131,072 tokens (128K)
Price (input / output / cache read)$2.00 / $5.00 / $0.50 per 1M tokens
Image inputYes (base64 data URLs only)
Tool callingYes
Prompt cacheYes
ReasoningYes, optional — off by default
Audio / video inputNo
Image generationNo
Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "llmtr/gemma-4",
"messages": [
{ "role": "user", "content": "Summarise this contract clause in plain English." }
],
"max_tokens": 1024
}'

By default the model answers without thinking, so no reasoning tokens are spent. For tasks that need step-by-step reasoning you can turn it on in either of two ways:

{ "model": "llmtr/gemma-4:think", "messages": [{ "role": "user", "content": "Solve this logic puzzle." }] }
{ "model": "llmtr/gemma-4", "reasoning": true, "messages": [{ "role": "user", "content": "Solve this logic puzzle." }] }

Use the :fast selector or reasoning: false to turn it off. When reasoning is on, the trace is returned in message.reasoning_content, is spent from your max_tokens budget and is billed as output. With a very small max_tokens the budget can be consumed by reasoning alone and content may come back empty.

The model reads images, but accepts them only as base64 data URLs. Sending a remote https:// address returns a 400 unsupported_input.

{
"model": "llmtr/gemma-4",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "What is in this image?" },
{
"type": "image_url",
"image_url": { "url": "data:image/png;base64,iVBORw0KGgo..." }
}
]
}
],
"max_tokens": 1024
}

Image tokens are billed as ordinary input tokens; there is no separate image rate.

The model supports the standard OpenAI tools schema and returns real tool_calls:

{
"choices": [
{
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "call_1",
"type": "function",
"function": { "name": "get_weather", "arguments": "{\"city\":\"Istanbul\"}" }
}
]
},
"finish_reason": "tool_calls"
}
]
}

Repeated prompt prefixes are served from cache. Cached tokens are reported in prompt_tokens_details.cached_tokens and billed at the cache read rate instead of input:

"usage": {
"prompt_tokens": 1603,
"completion_tokens": 2,
"prompt_tokens_details": { "cached_tokens": 1579 }
}

Here 1,579 tokens are charged at $0.50/1M and the remaining 24 at $2.00/1M.

Generation runs at roughly 30-45 tokens per second, and the 128K context window is usable in practice for long documents. On the client side:

  • For long outputs use stream: true and keep your client read timeout at 120 seconds or more. The 60-second default in most HTTP clients is not enough for long answers.
  • Resend the same prefix (system instructions, document, conversation history): the prefix is cached, responses get noticeably faster, and cached tokens are billed at the cheaper rate.
  • Response times can grow during busy periods, so do not keep read timeouts tight.

See Timeouts and slow models for details.