AI platform·2026
Fine-tune a model. Get a verdict.
Upload a dataset; Tessaro checks it, trains an open-weight model on rented GPUs under a hard spend cap, then tells you on held-out rows whether it beat the model you started with.
- Role
- Product, design, engineering
- Timeline
- May 2026 → now
- Platform
- Web app · OpenAI-compatible API
- Status
- Live · paid launch pending
Tessaro·The brief
The problem
Fine-tuning rarely fails loudly. A config drifts from the chat template, a resumed run trains on the wrong checkpoint, a GPU keeps billing after the job ends — and nobody says whether the result beat the base model.
What got built
- 01Dataset report: real token counts, template render, PII + dupes
- 02Training on rented GPUs, capped by the server
- 03Base-vs-tuned verdict on rows it never saw
- 04Serve via /v1, or export GGUF, Ollama, fp16
Tessaro·Hard part 1 of 4
The invoice is the spec.
Obstacle
Serverless costs were under-accrued 29.47×: the platform fee — 44% of serverless spend — was never read, and cold starts had no cost term at all.
Fix
Price from the provider's invoice, not the docs. Append-only ledgers guarded by database triggers, quotes treated as hard ceilings, and a nightly job that reconciles every charge against the invoice.
Tessaro·Hard part 2 of 4
Five seconds of fake success.
Obstacle
A resumed job picked up a foreign checkpoint, “trained” for five seconds at a loss of zero, and reported success.
Fix
Broken runs got hard to build: validator and trainer read one canonical JSONL, the base model's real chat template renders at upload, and CI checks every generated config against Axolotl's own schema — no GPU needed.
Tessaro·Hard part 3 of 4
Hung at step one.
Obstacle
Multi-GPU FSDP2 runs froze on their first step — no error, no log, just a meter running.
Fix
A stack-dump watchdog traced the hang to NCCL probing peer-to-peer and InfiniBand links the containers don't expose. Now a boot probe keeps P2P only where NVLink exists — proven on real A100 and L4 pods.
Tessaro·Hard part 4 of 4
No GPU left behind.
Obstacle
A job isn't over until the provider confirms the hardware is gone — and Cloudflare's retry alarms give up after six attempts.
Fix
A Durable Object keeps retrying with capped backoff until a read confirms the hardware is gone. Every resource carries an environment prefix, and an hourly sweep reaps orphans across four resource types.
Tessaro·Blueprint
One Worker fronts everything; GPUs are rented per job and torn down on proof.
Stack
- Edge
- Workers · Hono · Durable Objects · Queues · Hyperdrive · R2
- Data
- Neon Postgres · Drizzle · OpenAPI + orval
- ML
- Axolotl · FSDP2 · vLLM · SGLang · llama.cpp
- Product
- React 19 · Clerk · Polar · Resend · Sentry
- Clients
- Web appReact 19 · Vite
- API clientsOpenAI-compatible
- Edge
- WorkerHono on Cloudflare
- DOs · Queuesalarms · SSE · crons
- State
- Neon Postgresvia Hyperdrive
- R2datasets · artifacts
- Rented GPUs
- Training podsAxolotl · FSDP2
- ServingvLLM · SGLang
- ExportsGGUF · Ollama · fp16
Tessaro·Receipts
Numbers, not adjectives.
- 01 1,608 commits in 134 days
- 02 4,933 automated tests across API · Worker · SPA
- 03 59 migrations, ledger triggers included
- 04 78 typed API operations
- 05 42 visual regression baselines
- 06 390 px mobile contract enforced in CI
Tessaro·Method
Prototype fast, then rebuild on purpose.
Replit Agent produced a clickable prototype in two days, with training simulated. Then the real build: Claude Code under GSD phase plans, later Codex, each milestone closed by a requirements audit. Production moved from Replit to Cloudflare Workers within a week; real-GPU canaries prove the paid path.
Agents
- Replit Agent
- Claude Code
- Codex
- Claude Design
- 01spec
- 02plan
- 03build
- 04verify
- 05ship
Every change clears
- Typecheck
- 4.9k tests
- axe a11y
- Visual baselines
- Real-GPU canaries
Tessaro·End of file
End of file.
Capabilities on file
- LLM fine-tuning
- GPU orchestration
- Durable Objects
- Ledger-grade billing
- OpenAPI codegen
- Accessible UI
- Mobile-first