GoModel vs TensorZero

TensorZero is a Rust LLMOps platform - a gateway that exists to feed a data flywheel of observability, evaluation and fine-tuning. GoModel is an AI gateway and control plane that exists to route, protect and account for traffic. They overlap on the request path, which is what we measured, and diverge almost everywhere else. One thing to know before reading further: the TensorZero GitHub repository was archived by its owners on 12 June 2026 and is now read-only, with no successor or migration path announced.

GoModel vs TensorZero Comparison

TensorZero advertises sub-millisecond gateway overhead, and its Rust core is capable of it. What the benchmark shows is what an SDK client actually sees on a keep-alive connection - and that is a different number. Measured numbers are from run 20260829-183422 (29 August 2026) of the reproducible benchmark: every gateway from its public Docker image, one at a time, same in-memory mock backend, same AWS c7i.large. Rerun it yourself with one command.

21×
lower latency overhead
2.35 vs 49.97 ms p50 at c=10
6.8×
lower p99
8.8 vs 60.2 ms tail
2.5×
less memory
43 vs 105 MB peak
6/6
workloads served
vs 2/6 - chat completions only
CategoryGoModelTensorZero
Measured on the hot path
Latency overhead (p50, c=10)2.35 ms49.97 ms
Latency tail (p99)8.80 ms60.15 ms
Throughput at c=8 / c=163,590 / 3,610 req/s159 / 315 req/s
Throughput at c=2562,962 req/s4,498 req/s
Peak RAM under load42.7 MB105.2 MB
Cold start to first request0.58 s0.58 s
Docker image (compressed)14.4 MB88.0 MB
Workloads served6/6 workloads2/6 (chat completions only)
Beyond the benchmark
Project statusActively developed, releases every few weeksRepository archived 12 June 2026, read-only
What it isAI gateway and control planeLLMOps platform: gateway + observability + optimization
RuntimeOne Go binaryRust gateway + UI container
Required infrastructureNone - SQLite built in; Postgres or MongoDB optionalClickHouse for observability, Postgres for some features
Provider coverage31 providers19+ providers
API surfaceOpenAI Chat, Responses, embeddings, audio, realtime + Anthropic MessagesNative /inference + OpenAI chat completions
Drop-in for Anthropic SDK clientsYesNo
Budgets, rate limits, virtual keysIncludedNot a focus
Audit logs, usage & cost dashboardIncludedInference logging in ClickHouse, UI for traces
Fine-tuning, RLHF, prompt optimizationNot a goalCore feature (SFT, DPO, GEPA, DICL)
Evaluations and A/B experimentsNot a goalCore feature
ConfigEnv vars + optional YAML, dashboardtensorzero.toml functions and variants
LicenseMITApache 2.0

Benchmark: 20,000 requests per workload at concurrency 10, five randomized trials on an AWS c7i.large (2 vCPU, 4 GiB). Read TensorZero's row with care. Its HTTP server leaves Nagle's algorithm on, so on a keep-alive connection every request after the first waits for the client's delayed ACK - roughly 40-50 ms. The p50 at c=10 is that stall, not compute, and its CPU sat at 10% while it waited. Its "peak" of 4,498 req/s appears only at c=256, where the stall is hidden behind enough parallel connections; below c=64 it is behind every other gateway in the run. SDK clients keep connections alive, so the c=10 number is the one users get today. TensorZero 2026.6.0 also exposes only Chat Completions on its OpenAI-compatible surface, so Responses and Anthropic Messages workloads are recorded as failures.

Which one fits your setup?

These are not two answers to the same question. Pick by the problem you are solving.

Choose GoModel when

  • You need a gateway: one endpoint for every team and provider, with budgets, rate limits, virtual keys, audit logs and cost tracking, running in minutes with no database to stand up.
  • Your clients already speak OpenAI or Anthropic and you want a base-URL change, not a new schema, a TOML function catalog or a client library.
  • Latency at realistic concurrency matters, and you want the numbers to hold with the connection pool your SDK actually uses.
  • You want streaming, Responses, embeddings, audio and realtime through the same door, not just chat completions.

TensorZero was the better fit when

  • A word of caution first: with the repository archived, none of the points below come with future releases, security fixes or support. If you are already running it, plan the exit; if you are evaluating, the flywheel below is what you would be adopting as-is.
  • Your goal is to improve the model, not just route to it: you want inference logs and feedback in ClickHouse feeding fine-tuning, DPO, prompt optimization and evals.
  • You want structured "functions" with A/B-tested variants and adaptive experimentation built into the inference call.
  • A team owns ML infrastructure and is happy to run ClickHouse, Postgres and a TOML schema in exchange for that flywheel.

Migrating off TensorZero: clients that use its OpenAI-compatible chat completions endpoint move to GoModel with a base-URL change. Code on the native /inference API and the TOML function catalog needs to move to plain OpenAI or Anthropic calls, with GoModel aliases and virtual models standing in for variants and fallbacks.

Try it against your own workload

Benchmarks are an argument; your traffic is the proof. GoModel speaks the OpenAI and Anthropic APIs natively, so pointing an existing app at it is a base-URL change.

1 · Run GoModel
docker run --rm -p 8080:8080 \
  -e LOG_FORMAT=text \
  -e OPENAI_API_KEY="your-openai-key" \
  enterpilot/gomodel
2 · Point your SDK at it
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8080/v1",
    api_key="your-gomodel-key",
)

Full setup, providers, and configuration live in the documentation. Questions? Ask on Discord or book a 30-minute call.