Ballmac UI home

Agent 4: prompt playground with model compare

A prompt playground that runs one prompt on two models side by side: system prompt, {{variables}} that become fields, Run with ⌘Enter, each answer with time, tokens and cost, ratings and Pick this one.

State

The normal view. Pick a state to see what the block shows while it loads, is empty or fails.

Open in v0 (opens in a new tab)

Installation

$ pnpm dlx shadcn@latest add @ballmac/agent-4

Usage

Example: agent-4-demo.tsx
"use client"

import { Agent4 } from "@/components/ballmac/blocks/agent-4/agent-4"

export default function Agent4Demo() {
  return (
    <Agent4
      defaultResults={{
        a: {
          text: "Hi Jordan,\n\nYou were charged twice for order 4821. I’ve refunded the second charge of $129.00; it will reach your card in 5 to 10 business days. Your order is unaffected.\n\nSorry for the trouble,\nSam from Acme",
          latencyMs: 2140,
          tokens: { input: 212, output: 71 },
          cost: "$0.0041",
        },
        b: {
          text: "Hi Jordan, we refunded the duplicate $129.00 charge on order 4821. Expect it in 5–10 business days. Sorry about that! – Sam",
          latencyMs: 480,
          tokens: { input: 212, output: 38 },
          cost: "$0.0003",
        },
      }}
    />
  )
}

States

Pass state and the block does the rest: skeletons that match its layout, a clear empty message, an error you can retry, and announcements for screen readers.

  • Running

    Both sides show Running…, are marked busy, and Run and the model pickers are disabled.

    state="submitting"
  • A model did not answer

    The side shows an alert with the reason; errorState sets the copy. A thrown Error's message is shown on that side only.

    state="error" (or onRun throws)

Quality scorecard

8/8

Every applicable check passes

Measured in Chromium 153.0.8010.12 on October 19, 2026, on version 1.0.0, across 4 examples.

How we measure
  • Passed: Accessibility scan

    No serious or critical issues in light and dark, on a phone and a desktop (axe-core 4.13.0, WCAG 2.1 AA and best-practice rules).

  • Passed: Small screens

    No sideways scrolling at 360, 390 or 1280 px wide.

  • Passed: Reduced motion

    Every endless animation stops when the visitor asks for less motion.

  • Passed: Right to left

    Mirrors correctly in Arabic, Hebrew, Persian and Urdu layouts (3% of elements off the mirror, limit 15%).

  • Passed: Clean console

    No console errors or React hydration errors while loading.

  • Passed: Keyboard

    31 tab stops, each showing a visible change when it takes focus. 3 documented keys.

  • Passed: Loading, empty and error

    Ships submitting, error states, each with an example.

  • Passed: Automated tests

    Covered by agent-4.test.tsx.

  • For information: Footprint

    4.9 KB of source (gzip) in 1 file. Installs lucide-react.

Automated checks find a subset of problems and do not replace testing with a screen reader and a keyboard in your own app. What they miss.

Dependencies

Use with AI

A side-by-side prompt playground. <Agent4 models={ModelOption[]} defaultModels={['a', 'b']} defaultSystem defaultPrompt="… {{customer}} …" defaultVariables={{ customer: 'Jordan' }} onRun={async ({ model, system, prompt, variables }) => ({ text, latencyMs, tokens: { input, output }, cost })} onRate onPick />. Variables are detected from {{name}} in the prompt and must be filled before running. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Agent 4: prompt playground with model compare (@ballmac/agent-4) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Choosing a model or prompt for a feature by comparing real answers
  • An internal tool for prompt iteration with ratings saved for evaluation

Not for

  • A chat with one model (use ai-chat-1)
  • Watching an agent run (use agent-1)

Registry JSON: https://ui.ballmac.com/r/agent-4.json

Free to use in personal and commercial projects.

Ballmac UI Pro

Need the whole screen, not one piece?

150 premium blocks (dashboards, settings, calendars, mail, shops, onboarding), a private shadcn registry and Figma tokens. Blocks that show data come with loading, empty and error states built in.

Not ready? Try three Pro blocks free

Leave your email and the blocks appear right here, ready to copy. Yours to use in any project.