One GPU, one team
$0.33–1.19 /GPU-hRTX 4090 · RTX 5090 · A40 · L40S
- gpt-oss-20b or Gemma 4 26B A4B at 4-bit
- 24–48 GB VRAM
- vLLM; Ollama only for a single developer, never exposed to the internet
- Goal: per-language test sets passing
The Esin AI LLM Gateway serves open-weight models behind one OpenAI-compatible API, sends each request to the smallest model that can do the job, and records why it chose that model. This edition rechecks every claim on the previous page against current model cards, benchmarks and prices, and replaces estimates with formulas you can run yourself.
Each claim from the previous edition, tested against primary sources on 25 October 2026. Where a figure could not be sourced, it was replaced with arithmetic you can check in section 05.
| Previous claim | Verdict | What the evidence says | On this page |
|---|---|---|---|
| "Your data never leaves your infrastructure." | Qualified | True only on hardware you own. The same page priced rented cloud GPUs and pointed its code sample at a hosted endpoint; in both cases prompts are processed on someone else's machines. | Three deployment modes, each stating where prompts are processed (02). |
| "OpenAI-compatible: change one line of code." | Holds | vLLM, SGLang and Ollama all serve /v1/chat/completions.313 Ollama's /v1/responses is stateless only.13 | Kept. API keys move to environment variables (06). |
| Fast tier: Llama 3.1 8B, Mistral 7B | Corrected | Both date from 2023–24. Current Apache 2.0 models in the same hardware class, with 131K–256K context: gpt-oss-20b and Gemma 4 26B A4B.34 | Fast tier updated (03). |
| Balanced tier: Qwen 2.5 32B, Mixtral 8×7B | Corrected | Superseded. Qwen3.6-27B (April 2026, Apache 2.0) has a 262K native context and a hybrid design whose cache is a quarter the size of Qwen 2.5 32B's per token.29 | Balanced tier updated (03). |
| Powerful tier: Llama 3.1 70B, Qwen 2.5 72B | Corrected | gpt-oss-120b fits a single 80 GB GPU;4 Qwen3.5-122B-A10B and Mistral Small 4 are larger Apache 2.0 options.16 | Deep tier updated (03). |
| "Language-aware routing prioritises Turkish, Dutch, Spanish" — on Llama 3.1 | Corrected | Llama 3.1 officially supports eight languages, not including Turkish or Dutch, and Meta discourages other languages without fine-tuning.7 No current model card we checked names Turkish explicitly. | A per-language test set must pass before any model serves that language (04, 08). |
| VRAM 6–8 · 20–24 · 40–48 GB | Qualified | These figures cover 4-bit weights only. The cache grows with context × concurrency: Llama 3.1 70B needs 320 KiB per token at BF16, so one 32K-token conversation adds 10 GiB.9 | VRAM calculator (05). |
| Speeds ~50 · ~25 · ~15 tok/s | Removed | Unsourced. Single-stream speed depends on GPU, engine and batch size; what sizes a deployment is aggregate throughput under load. | Measure, then use the capacity formula (05). |
| "<3s deploy time" | Removed | A 70B model at 4-bit is about 37 GiB of weights to download and load onto the GPU. Cold start is measured in minutes, not seconds. | — |
| "6 languages" | Qualified | The languages were never named, so the claim could not be tested. | Named as English, Turkish, Dutch, German, French and Spanish, each with its own test set. |
| Architecture: Apache → FastAPI → Ollama | Corrected | Ollama has no authentication and serves 4 parallel requests by default. On one A100, vLLM peaked at 793 tok/s against Ollama's 41.1014 | vLLM or SGLang pools in production; Ollama for single-developer work (02). |
| "Backend supports Ollama, vLLM, SGLang" | Holds | All three expose OpenAI-compatible APIs. Hugging Face TGI is now in maintenance mode and its makers recommend vLLM or SGLang.11 | Kept. |
| $0.35/h (RTX 4090/A40) · $1.99/h (H100 PCIe) | Qualified | Within today's market range but undated. Lowest listings on 24 Oct: $0.33 (RTX 4090), $1.80 (H100). RunPod list prices: $0.89 and $2.89.2022 | Dated price ranges (05, 07). |
| Capacity ~100 and ~1,000 requests a day | Corrected | Off by orders of magnitude. At the 793 tok/s measured above, 400 output tokens per request and 40% utilisation, one GPU serves about 68,500 requests a day. | Capacity formula (05). |
| "Unlimited capacity" | Removed | No deployment is unlimited. The Scale tier is sized with the same arithmetic as the others. | — |
| "70B quantized, 32K context on one H100" | Holds | It fits — with a limit. 37 GiB of weights plus 10 GiB per full 32K conversation leaves room for three such conversations at once. | |
| "API keys, rate limiting, TLS, audit logging" | Qualified | Necessary but not sufficient. One scan found about 175,000 publicly reachable Ollama hosts; malicious LiteLLM releases stole credentials in March 2026.1416 | OWASP-mapped controls and a go-live checklist (08). |
The gateway is the only component reachable from outside. Inference engines listen on private addresses, because neither Ollama nor vLLM authenticates requests well enough on its own — vLLM's documentation itself recommends a reverse proxy in front of any externally reachable instance.14
| Mode | Prompts are processed | Who can see them | Suitable data | Paperwork |
|---|---|---|---|---|
| On-premises | On hardware you own or lease outright | Your staff | All classes, including restricted | Internal policy only |
| Rented GPU cloud | In the provider's data centre, in the region you choose | The provider, under contract | Public and internal; personal data only with a processing agreement and a lawful transfer basis | Data processing agreement; for transfers out of Türkiye, a KVKK mechanism (08) |
| Hosted endpoint | On Esin AI's infrastructure | Esin AI, as processor | Pilots and non-sensitive workloads | Data processing agreement with Esin AI |
Every model below is Apache 2.0, which carries no field-of-use or regional restrictions. That matters for any company with EU entities: Meta's Llama 4 licence withholds rights to its multimodal models from companies based in the EU.8 The tier roles are ImageFirm's proposals and must pass your per-language evaluation before they go live.
| Model | Design | Context | Languages (per card) | Hardware note | Proposed role |
|---|---|---|---|---|---|
| gpt-oss-20b | MoE · 21B total, 3.6B active | 131K | Training mix not stated; 14-language MMMLU 75.7 at high effort5 | "Run within 16GB of memory" — OpenAI's claim4 | Fast · English-first |
| Gemma 4 26B A4B | MoE · 25.2B total, 3.8B active | 256K | Pre-trained on 140+, 35+ supported out of the box3 | Use the calculator | Fast · multilingual |
| Qwen3.6-27B | Dense 27B · 3 linear-attention layers per full-attention layer | 262K | Qwen3.5 family claims 201 languages and dialects12 | Use the calculator | Balanced · long context |
| Gemma 4 31B | Dense 30.7B · 5 sliding-window layers per global layer | 256K | Pre-trained on 140+, 35+ supported out of the box3 | Use the calculator | Balanced · alternative |
| gpt-oss-120b | MoE · 117B total, 5.1B active · MXFP4 | 131K | 14-language MMMLU 81.3 at high effort5 | Single 80 GB GPU4 | Deep · English-first |
| Qwen3.5-122B-A10B | MoE · 122B total, 10B active · hybrid attention | 262K | 201 languages and dialects claimed1 | Use the calculator | Deep · multilingual |
| Mistral Small 4 | MoE · 119B total, 6.5B active · latent attention | 256K | "Dozens", Dutch named; Turkish not named6 | 2× H200 or B200 at FP8; 1× B200 at 4-bit6 | Deep · alternative |
| Retired: Llama 3.1 8B / 70B, Mistral 7B, Mixtral 8×7B, Qwen 2.5 32B / 72B | 2023–24 releases | 32K–131K | Llama 3.1: 8 official languages, no Turkish or Dutch7 | Kept as calculator presets for comparison | Retire after migration |
Turkish matters for any Istanbul deployment, and none of the cards above names it explicitly. Treat every model as unproven in Turkish until it passes a Turkish test set built from your own real tasks — 50 prompts with reference answers is a workable start.
Routing pays when it is measured: in LMSYS's RouteLLM study, learned routers cut cost by over 85% on MT Bench while keeping about 95% of GPT-4's quality.18 The gateway applies hard rules first (data class, context length, language), uses a classifier only for complexity, and returns its decision in a response header so every answer can be traced. vLLM's Semantic Router (first major release, January 2026) is a ready-made option for the classifier stage.19
—
—
Policy shown: restricted data stays on-premises; personal data never goes to the rented pool; contexts over 131K tokens go to a 256K-class model; non-English requests go to models with documented multilingual coverage; tool use starts at the Balanced tier; complexity is scored from length, reasoning verbs, code and question count. The language detector is a keyword heuristic for this demo only — production uses a trained classifier.
GPU memory goes to three things: the weights, a cache for every token of every active conversation, and runtime overhead. The cache is what the previous page left out, and at high concurrency it can outgrow the weights. Cache sizes below are computed from each model's published configuration.9
—
Usable VRAM = 90% of each GPU (vLLM's default). GPUs round up to 1, 2, 4 or 8 for tensor parallelism. Sliding-window caches stop growing at the window; linear-attention layers hold a fixed state. Gemma 4 figures assume keys and values are stored separately — an upper bound. Test the real engine before you buy.
= throughput × 86,400 s × utilisation ÷ tokens per request. The previous page claimed ~100 (development) and ~1,000 (production).
—
Clients use the standard OpenAI SDK. Three habits separate a pilot from a production client: keys come from the environment, every request caps its output, and every request declares its data class so the gateway can route it lawfully. The x-data-class and x-esin-route headers are this build's proposal.
import os
from openai import OpenAI
client = OpenAI(
base_url=os.environ.get("ESIN_GATEWAY_URL", "https://ai.esinai.com/api"),
api_key=os.environ["ESIN_API_KEY"], # never hard-code keys
)
raw = client.chat.completions.with_raw_response.create(
model="auto", # let the gateway route
max_tokens=800, # bound every request
messages=[{"role": "user", "content": "Q3 satış trendlerini analiz et."}],
extra_headers={"x-data-class": "internal"}, # drives routing and residency
)
print(raw.headers.get("x-esin-route")) # which model, which rule
print(raw.parse().choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: process.env.ESIN_GATEWAY_URL ?? "https://ai.esinai.com/api",
apiKey: process.env.ESIN_API_KEY, // never hard-code keys
});
const { data, response } = await client.chat.completions
.create(
{
model: "auto",
max_tokens: 800,
messages: [{ role: "user", content: "Analiseer de Q3-verkooptrends." }],
},
{ headers: { "x-data-class": "internal" } },
)
.withResponse();
console.log(response.headers.get("x-esin-route"));
console.log(data.choices[0].message.content);
curl -sS -D - "$ESIN_GATEWAY_URL/chat/completions" \
-H "Authorization: Bearer $ESIN_API_KEY" \
-H "Content-Type: application/json" \
-H "x-data-class: internal" \
-d '{"model": "auto", "max_tokens": 800,
"messages": [{"role": "user", "content": "Analyse Q3 sales trends."}]}'
# -D - prints response headers, including x-esin-route
# Inference node: listen on the private interface only.
# The gateway owns the public edge, authentication and quotas.
vllm serve openai/gpt-oss-120b \
--host 10.0.0.12 --port 8000 \
--api-key "$VLLM_INTERNAL_KEY" \
--max-model-len 65536 \
--gpu-memory-utilization 0.90
# Firewall: allow port 8000 from the gateway host only.
# Pin the vLLM version and the model revision in your deployment manifest.
Rental prices for planning only, checked 8–24 October 2026; buying hardware for on-premises deployment changes the arithmetic entirely. Load each configuration into the calculator to see what fits.
$0.33–1.19 /GPU-hRTX 4090 · RTX 5090 · A40 · L40S
$1.80–5.29 /GPU-hH100 80GB · H200 141GB
$3.75–7.99 /GPU-hB200 180GB, 2–8 per pool
Scans in 2026 found about 175,000 publicly reachable Ollama hosts, and 31% of more than 5,200 queried answered prompts without authentication. A critical flaw, CVE-2026-7482 ("Bleeding Llama"), leaked server memory through three unauthenticated calls; it is fixed in Ollama 0.17.1.1415
| Risk | Gateway control |
|---|---|
| LLM01 · Prompt injection | Retrieved and tool-returned text is treated as data, never as instructions. Tool allowlists per key; consequential tool calls need human approval. |
| LLM02 · Sensitive information disclosure | Data-class routing; personal data redacted before any rented pool; prompt bodies logged only where policy allows, with a set retention period. |
| LLM03 · Supply chain | Weights pinned by hash; packages pinned and hash-verified. LiteLLM 1.82.7 and 1.82.8 shipped credential-stealing code on 24 March 2026.16 |
| LLM05 · Improper output handling | Output is never executed or rendered as HTML without validation. vLLM 0.32 now restricts cross-origin access by default;12 browsers never call engines directly. |
| LLM06 · Excessive agency | Least-privilege tools; agentic requests start at the Balanced tier and are logged with their tool calls. |
| LLM07 · System prompt leakage | No credentials or internal URLs in system prompts; secrets live in the gateway's vault. |
| LLM10 · Unbounded consumption | Per-key quotas on requests, tokens and spend; server-side max_tokens and context caps; timeouts and concurrency limits per pool. |
Türkiye. Since 1 June 2024 (Law 7499), personal data may leave Türkiye under an adequacy decision or appropriate safeguards such as the Board's standard contracts, which must be notified to the Authority within five business days of signing.23 On-premises routing for personal data avoids the question entirely.
EU AI Act. Running an open model makes you a deployer. Fine-tuning it with more than a third of the original training compute generally makes you the provider of the modified model, with provider obligations, under the Commission's July 2025 guidelines.24
This is analysis, not legal advice. Licensed counsel should confirm the transfer mechanism and your role before personal data is processed.
Ticks are kept only in this browser, on this device.
Model cards and vendor documentation first. Secondary sources are labelled. Prices change weekly; re-check before you commit spend.