Playground
Test and experiment with AI models directly in your browser.
Interface Overview
The Playground provides an interactive chat interface with configuration options:
┌─────────────────────────────────────────────────────┐
│ Model Selection │ Parameters │
├───────────────────────────┼────────────────────────┤
│ │ Temperature: [slider] │
│ Chat Interface │ Max Tokens: [input] │
│ │ Top P: [slider] │
│ [System prompt input] │ Stream: [toggle] │
│ │ │
│ User: Hello! │ ───────────────── │
│ Assistant: Hi there! │ [New Chat] button │
│ │ [Docs] button │
│ [Message input box] │ [Code] button │
└───────────────────────────┴────────────────────────┘
Model Selection
Choose from your available models using the dropdown at the top of the interface. Only models that are currently running (actively deployed) are shown in the selection list.
Chat Interface
System Prompt
Set the assistant's behavior:
You are a helpful coding assistant specializing in Python.
Open the System Message modal to view or edit the system prompt. Changes apply to new conversations.
Conversation
- Type messages in the input box
- Press Enter or click Send
- View assistant responses in real-time (with streaming)
- Conversation context is maintained
Message Actions
Hover over any message to reveal inline actions:
- Copy — copy message content to the clipboard
- Regenerate (assistant messages) — discard the current response and generate a new one for the previous user prompt
- Edit (user messages) — open the prompt inline for editing; sending replaces the original message and regenerates everything that came after it
Regenerate and Edit are available in chat mode only. Image generation keeps a one-shot flow (no edit/regenerate). These actions affect the live session only — they do not modify any saved conversation history.
Cancelling a Response
Click Stop while a streaming response is in flight to cancel it. The partial response that has already arrived stays visible with a Cancelled badge so you can read what was generated before the cancel. Switching tabs or navigating away during a stream also cancels the request, sending a real client-disconnect upstream.
Cancelled responses are billed for the tokens that were already produced (see Cancelling a Stream).
Parameters
Temperature (0.0 - 2.0)
Controls randomness:
- 0.0: Deterministic, focused
- 0.7: Balanced (default)
- 1.5+: Creative, varied
Max Tokens
Maximum tokens to generate:
- Range: 1 - model's context limit
- Default: 4096 (automatically capped to the model's context window)
Top P (0.0 - 1.0)
Nucleus sampling parameter:
- 0.95: Consider top 95% probability mass (default)
- 1.0: Consider all tokens
- Lower values = more focused output
Frequency Penalty / Presence Penalty
Control repetition in generated text:
- Frequency Penalty: Reduces likelihood of repeating tokens proportional to how often they appear
- Presence Penalty: Reduces likelihood of repeating any token that has appeared at all
Seed
Set a specific seed value for reproducible outputs (when supported by the model).
Stop Sequences
Define custom strings where the model should stop generating. Useful for controlling output boundaries.
Stream / Background Toggles
- Stream: See the response as it generates token-by-token
- Background: Submit the request as a background job and retrieve the result later from Jobs
Stream and Background modes are mutually exclusive -- enabling one automatically disables the other.
Thinking Mode
For models that support extended reasoning (models with a reasoning parser), a Thinking Mode toggle is available in the parameters panel.
- The toggle only appears for compatible models. For models where the provider sets thinking at serve time, the toggle is not shown.
- When enabled, the model may include a reasoning trace in its response. vLLM reasoning models return this as a separate
reasoningfield; classic<think>tag wrapping is also handled transparently. - In the Playground, this reasoning trace is displayed as a collapsible violet "Thinking Process" panel above the response content, allowing you to inspect the model's chain-of-thought. The panel appears live during streaming — you see the model's reasoning build up token-by-token in its own block rather than mixed into the final answer.
- Some reasoning models return their complete answer in the reasoning channel (with no
contentvalue). The Playground renders the answer in both streaming and non-streaming modes regardless of which channel the model used — you don't need to adjust anything.
Reasoning Effort
Some reasoning models accept a reasoning_effort parameter that controls how much computation they invest per request. When the selected model supports it, a Low / Medium / High segmented control appears in the request-options section, below the Thinking Mode toggle.
| Effort | Typical use | Trade-off |
|---|---|---|
| Low | Simple classification, formatting, short answers | Fast, minimal reasoning tokens |
| Medium (default) | General chat, most everyday prompts | Balanced |
| High | Complex math, code, multi-step analysis | Slower, larger reasoning trace |
The selector is only shown for reasoning-capable models that expose the reasoning_effort parameter. Other reasoning models ignore the parameter at the engine level, so hiding the selector prevents a confusing no-op.
When you send a request via the API directly, forward the same values:
{
"model": "gpt-oss-120b",
"messages": [{"role": "user", "content": "Explain the Monty Hall problem."}],
"reasoning_effort": "high"
}
Invalid values are rejected with a 400 (Input should be 'none', 'low', 'medium' or 'high'). Note: none is accepted by the schema but some reasoning models reject it at request time — stick to the three levels surfaced in the UI.
Code View
Click Code in the header to see the equivalent API call. The generated snippets use the model's public slug (e.g. gpt-oss-120b) in the model= parameter — the same identifier returned by /v1/models. Copy-paste produces a request that matches what the SDK and the platform agree on.
Python
from openai import OpenAI
client = OpenAI(
api_key="sk-proj-your-api-key",
base_url="https://api.bulutistan.ai/v1"
)
response = client.chat.completions.create(
model="meta-llama/Llama-3.1-8B-Instruct",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
temperature=0.7,
max_tokens=1024
)
cURL
curl https://api.bulutistan.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-proj-your-api-key" \
-d '{
"model": "meta-llama/Llama-3.1-8B-Instruct",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
"temperature": 0.7,
"max_tokens": 1024
}'
Tips
Testing Prompts
- Start with simple prompts
- Iterate on system prompt
- Test edge cases
- Copy the Code view snippet for successful configurations
Comparing Models
- Open multiple browser tabs
- Use same prompt across models
- Compare response quality and speed
Debugging
If responses seem wrong:
- Check system prompt
- Try temperature 0 for consistency
- Reduce max_tokens to see truncation issues
- Review conversation history for context issues
Image Generation Mode
The Playground supports image generation alongside chat completions. When an image-capable model is selected, the interface switches to image generation mode.
Parameters
| Parameter | Description |
|---|---|
| Prompt | Text description of the image to generate |
| Size | Output image dimensions (e.g., 1024x1024) |
| Inference Steps | Number of diffusion steps (higher = more detail, slower) |
| Guidance Scale | How closely to follow the prompt (higher = more literal) |
| Seed | For reproducible generation |
| Negative Prompt | Describe what to avoid in the generated image |
| Image Count | Number of images to generate per request (1-10) |
Usage
- Generated images are displayed directly in the playground
- Download individual images to your local machine
File Attachments
When using a model with vision capabilities, you can attach files to your messages.
Supported Files
Supported file types depend on the model provider:
| Provider | Supported Types |
|---|---|
| vLLM models | PDF documents only |
| External OpenAI-compatible models | Images (PNG, JPEG, GIF, WebP) and documents (PDF) |
Limits
| Limit | Value |
|---|---|
| Max files per message | 10 |
| Max size per file | 50 MB |
| Max total size per message | 100 MB |
How to Use
- Click the attachment icon in the message input area
- Select one or more files from your device
- Files appear as thumbnails below the input
- Type your message and send -- the model will analyze both the text and attached files
File attachments are only available for models with vision capabilities. The attachment button will appear automatically when a compatible model is selected.
To use image generation:
- Select an image-capable model from the model dropdown
- Enter a descriptive prompt
- Adjust size and count parameters as needed
- Click Generate
- View and download the resulting images