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.
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.
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.
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.
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.
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.
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."}]}'
$ curl -s https://<your-host>/ready
{"status":"ready","models":["qwen2.5-7b-instruct"]}
{"status":200,"outcome":"ok","latency_ms":1840,
"ttfb_ms":212,"bytes":1174,"caller":"claims-team"}
no prompts, no output, no keys
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.
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.