No gaps.
No overlaps.

Tessil builds inference infrastructure. Run AI on infrastructure you control — your hardware, your cloud, your network — serving open-weight models through an endpoint your code already speaks.

Building now, with a small number of early partners.

No gaps

GPUs are the most expensive thing in the stack and the easiest to leave half-used. Capacity should be sized to the load actually arriving, not to a peak you budgeted for once.

No overlaps

Not a shared queue with your name on the request. A deployment you control, with a concurrency budget nobody else is drawing down and backpressure you can reason about.

Nothing unaccounted for

Status, latency and time to first byte on every request, so capacity decisions come from measurements instead of guesses. Your prompts and your output stay out of it.

Running AI on your own infrastructure

An OpenAI-compatible endpoint in front of open-weight models, with authentication, model allow-listing, bounded concurrency and health reporting that tells the truth. Point your existing client at a different base URL and keep going.

API surface
OpenAI /v1, streaming
Models
open weights, your choice
Authentication
bearer key, per caller
Concurrency
bounded, with queue wait
Backpressure
503 + Retry-After
Runs on
your cloud, or your GPUs

There are two health endpoints, because the two failures need different responses. /health is liveness, and the fix is to restart the process. /ready asks the backend which models it is actually serving and stays not-ready until every one of them is there, so the fix is to stop sending traffic and leave the process alone.

Your requestunchanged, but for the host
curl -N https://<your-host>/v1/chat/completions \
  -H "Authorization: Bearer $TESSIL_KEY" \
  -H 'content-type: application/json' \
  -d '{"model":"qwen2.5-7b-instruct","stream":true,
       "messages":[{"role":"user",
         "content":"Summarise this quarter's filings."}]}'
Readinessno key needed
$ curl -s https://<your-host>/ready
{"status":"ready","models":["qwen2.5-7b-instruct"]}
What gets recordednever the payload
{"status":200,"outcome":"ok","latency_ms":1840,
 "ttfb_ms":212,"bytes":1174,"caller":"claims-team"}
no prompts, no output, no keys

It runs where you need it to run

Your infrastructure Tessil endpoint auth, limits, health Model runtime open weights, on GPU Your client unchanged

The endpoint and the model runtime sit together, close to the GPUs doing the work. That keeps the hop carrying your requests off the public network, and it keeps the latency budget somewhere you can actually control.

Cloud, colocation, or hardware you already own. The constraint you are working under decides the shape, not us.

Tell us what you're running, and where it has to run.

We are working with a small number of teams serving open-weight models under real constraints. If that sounds like you, we would like to hear the specifics.