Chat with the base model or the final adapter from a completed job.
The Playground (#/playground) is a small chat UI for sanity-checking a model. Two modes, switched with a radio button:
/v1/inference/chat. Today there is one supported value: gemma-4-E4B-it (see Supported models).{ kind: "final", jobId }). Intermediate checkpoints are not selectable here.The Playground fetches /api/jobs once when the page mounts and filters the response to status === "completed". The Adapter dropdown lists those jobs in whatever order the backend returned. There is no automatic refresh and switching modes does not re-fetch the list; reload the page (or navigate away from #/playground and come back to remount it) after a new run finishes to see it in the dropdown.
The chat surface is intentionally minimal: a list of { role, content } messages, an input field, and a Send button. The conversation history is local to the page and is cleared on reload.
When you submit, Studio calls POST /api/inference/chat with:
{
messages: [...history, { role: "user", content: input }],
stream: true,
...(mode === "base"
? { baseModel }
: { adapter: { kind: "final", jobId } }),
}The response is an SSE stream of token deltas. Studio parses each frame and appends to the assistant message in place, so the bubble fills in as the model generates. The Send button is disabled while a stream is in flight.
kind: "final". To run inference during a run, use the SDK's onCheckpoint({ infer }): the infer it gives you is bound to the checkpoint that just landed.temperature / topP / maxTokens. The HTTP shape (InferArgs) accepts these, but the Playground does not surface input fields for them. Studio sends only messages and the mode-specific fields. To experiment with these knobs, call the SDK's infer directly with the values you want.user role. There is no field for system, and the Playground builds its request solely from what you type on this page. To test with a system prompt, pass a system message to the infer handed to onCheckpoint during a run./api/jobs returns for the current credentials; it does not filter by author or any other dimension.For anything more structured (regression suites, paired comparisons across many adapters, A/B in production), reach for the SDK and your own evaluation code rather than the Playground.