Skip to content

Tested prompt · Coding

Turn a title into a URL slug: every AI model's reply, tested

We sent this everyday coding prompt to all 16 models in llmwise, the same way the app sends a message, and checked every reply the same way. Here's each one as it came, with whether it passed, what it cost and how long it took.

Based on 16 of our test runs on , through OpenRouter with the app's own prompt and settings. Updated .

Short answer

All 16 models passed this coding prompt's check (tests). The cheapest reply that passed was GLM 5.3 Flash's, at $0.000067; the fastest, GLM 5.3's in 0.4 s. The dearest reply, Claude Fable 5.1's, cost 248 times as much ($0.0167).

The prompt, as sent, and its check

Checked by tests, the same way for every model.

Turn a title into a URL slug (everyday)

Write a JavaScript function slugify(title) that turns a title into a URL slug:
- lowercase;
- letters with accents become the plain letter (é → e, ñ → n, ü → u);
- every run of characters that isn't a–z or 0–9 becomes a single hyphen;
- no hyphen at the start or the end.
For example, slugify("Hello, World!") returns "hello-world" and slugify("  Crème brûlée: 3 ways ") returns "creme-brulee-3-ways".
Reply with the whole function in one ```javascript code block: plain JavaScript for Node.js 22, no imports, no TypeScript.

The reply's slugify runs against these 7 tests; it passes when all of them do.

slugify("Hello, World!")  // → "hello-world"
slugify("  Crème brûlée: 3 ways ")  // → "creme-brulee-3-ways"
slugify("Ångström & Peña")  // → "angstrom-pena"
slugify("---Already--slugged---")  // → "already-slugged"
slugify("C++ vs. C#")  // → "c-vs-c"
slugify("2026: Q4 Plan")  // → "2026-q4-plan"
slugify("")  // → ""

Exactly what this prompt's replies are checked against, with every other prompt of our test runs.

Every model's result

All 16 models on this prompt, in catalog order.

Every model's reply to “Turn a title into a URL slug”
ModelResultCostTimeReply
Claude Fable 5.1AnthropicPassed: All 7 tests passed.$0.01675.5 s170 tokens
Claude Opus 5.5AnthropicPassed: All 7 tests passed.$0.00553.1 s112 tokens
Claude Sonnet 5.5AnthropicPassed: All 7 tests passed.$0.00281.8 s112 tokens
Claude Sonnet 5AnthropicPassed: All 7 tests passed.$0.00242.3 s109 tokens
Claude Haiku 4.5AnthropicPassed: All 7 tests passed.$0.000961.5 s86 tokens
GPT-6 AstraOpenAIPassed: All 7 tests passed.$0.00842.1 s71 tokens
GPT-6 SolOpenAIPassed: All 7 tests passed.$0.00283.3 s71 tokens
GPT-6 LunaOpenAIPassed: All 7 tests passed.$0.0000852.3 s74 tokens
Gemini 3.1 Pro (preview)GooglePassed: All 7 tests passed.$0.00566.0 s81 tokens
Gemini 3.8 FlashGooglePassed: All 7 tests passed.$0.000874.2 s128 tokens
DeepSeek V4.1 FlashDeepSeekPassed: All 7 tests passed.$0.000251.9 s197 tokens
DeepSeek V4 ProDeepSeekPassed: All 7 tests passed.$0.00132.1 s76 tokens
Grok 4.7xAIPassed: All 7 tests passed.$0.00486.7 s80 tokens
Kimi K3MoonshotPassed: All 7 tests passed.$0.00352.6 s81 tokens
GLM 5.3Z.aiPassed: All 7 tests passed.$0.00100.4 s74 tokens
GLM 5.3 FlashZ.aiPassed: All 7 tests passed.$0.0000672.6 s75 tokens

Cost: what OpenRouter charged us for the reply. Time: from sending to the whole reply. Reply: its length in tokens, thinking not counted. In llmwise you pay per message, not per token: each of these replies counted as one message on Pro.

Every reply

Every reply passed: here they are from the cheapest up.

  1. GLM 5.3 Flash

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      const normalized = title.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
      return normalized
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, "-")
        .replace(/^-+|-+$/g, "");
    }
    ```

    499 tokens in, 75 out · 2.6 s · $0.0001 · 1 message on Pro · answered by z-ai/glm-5.3-flash via GMICloud ·

  2. GPT-6 Luna

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return title
        .toLowerCase()
        .normalize("NFD")
        .replace(/[\u0300-\u036f]/g, "")
        .replace(/[^a-z0-9]+/g, "-")
        .replace(/^-|-$/g, "");
    }
    ```

    483 tokens in, 74 out · 2.3 s · $0.0001 · 1 message on Pro · answered by openai/gpt-6-luna via OpenAI ·

  3. DeepSeek V4.1 Flash

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return String(title)
        .normalize("NFD")                 // decompose é -> e +  ́
        .replace(/[\u0300-\u036f]/g, "")  // drop the combining marks
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, "-")      // runs of anything else -> one hyphen
        .replace(/^-+|-+$/g, "");         // trim hyphens
    }
    ```
    
    Notes:
    - `NFD` + stripping U+0300–U+036F handles é, ñ, ü, and most Latin accents. (Letters like `ø` or `ß` have no decomposition and will become hyphens; tell me if you need those mapped too.)
    - The trim uses `^-+|-+$` rather than `^-|-$` so a leading/trailing run of hyphens is removed entirely.

    521 tokens in, 224 out (27 of them reasoning) · 1.9 s · $0.0002 · 1 message on Pro · answered by deepseek/deepseek-v4.1-flash via CoreWeave ·

  4. Gemini 3.8 Flash

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return title
        .normalize('NFD')                  // Decompose combined graphemes into base letters + diacritical marks
        .replace(/[\u0300-\u036f]/g, '')   // Remove all diacritical marks
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, '-')       // Replace runs of non-alphanumeric characters with a single hyphen
        .replace(/^-+|-+$/g, '');          // Trim leading and trailing hyphens
    }
    ```

    514 tokens in, 128 out · 4.2 s · $0.0009 · 1 message on Pro · answered by google/gemini-3.8-flash via Google ·

  5. Claude Haiku 4.5

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return title
        .toLowerCase()
        .normalize('NFD')
        .replace(/[\u0300-\u036f]/g, '')
        .replace(/[^a-z0-9]+/g, '-')
        .replace(/^-+|-+$/g, '');
    }
    ```

    526 tokens in, 86 out · 1.5 s · $0.0010 · 1 message on Pro · answered by anthropic/claude-haiku-4.5 via Amazon Bedrock ·

  6. GLM 5.3

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return title
        .normalize("NFD")
        .replace(/[\u0300-\u036f]/g, "")
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, "-")
        .replace(/^-+|-+$/g, "");
    }
    ```

    498 tokens in, 74 out · 0.4 s · $0.0010 · 1 message on Pro · answered by z-ai/glm-5.3 via Modal ·

  7. DeepSeek V4 Pro

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return title
        .normalize('NFD')
        .replace(/[\u0300-\u036f]/g, '')
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, '-')
        .replace(/^-+|-+$/g, '');
    }
    ```

    494 tokens in, 339 out (263 of them reasoning) · 2.1 s · $0.0013 · 1 message on Pro · answered by deepseek/deepseek-v4-pro-0813 via Wafer ·

  8. Claude Sonnet 5

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return title
        .normalize('NFD')
        .replace(/[\u0300-\u036f]/g, '')
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, '-')
        .replace(/^-+|-+$/g, '');
    }
    ```

    669 tokens in, 109 out · 2.3 s · $0.0024 · 1 message on Pro · answered by anthropic/claude-sonnet-5 via Claude Platform on AWS ·

  9. Claude Sonnet 5.5

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return String(title)
        .normalize("NFD")
        .replace(/[\u0300-\u036f]/g, "")
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, "-")
        .replace(/^-+|-+$/g, "");
    }
    ```

    673 tokens in, 112 out · 1.8 s · $0.0028 · 1 message on Pro · answered by anthropic/claude-sonnet-5.5 via Anthropic ·

  10. GPT-6 Sol

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return title
        .normalize("NFD")
        .replace(/\p{M}/gu, "")
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, "-")
        .replace(/^-|-$/g, "");
    }
    ```

    483 tokens in, 185 out (114 of them reasoning) · 3.3 s · $0.0028 · 1 message on Pro · answered by openai/gpt-6-sol via OpenAI ·

  11. Kimi K3

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return title
        .normalize("NFD")
        .replace(/[̀-ͯ]/g, "")
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, "-")
        .replace(/^-+|-+$/g, "");
    }
    ```

    574 tokens in, 97 out (16 of them reasoning) · 2.6 s · $0.0035 · 1 message on Pro · answered by moonshotai/kimi-k3 via Fireworks ·

  12. Grok 4.7

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return String(title)
        .normalize("NFD")
        .replace(/[\u0300-\u036f]/g, "")
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, "-")
        .replace(/^-+|-+$/g, "");
    }
    ```

    1,719 tokens in, 724 out (644 of them reasoning) · 6.7 s · $0.0048 · 1 message on Pro · answered by x-ai/grok-4.7 via xAI ·

  13. Claude Opus 5.5

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return String(title)
        .normalize("NFD")
        .replace(/[\u0300-\u036f]/g, "")
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, "-")
        .replace(/^-+|-+$/g, "");
    }
    ```

    671 tokens in, 112 out · 3.1 s · $0.0055 · 1 message on Pro · answered by anthropic/claude-opus-5.5 via Claude Platform on AWS ·

  14. Gemini 3.1 Pro

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return title
        .normalize('NFD')
        .replace(/[\u0300-\u036f]/g, '')
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, '-')
        .replace(/^-+|-+$/g, '');
    }
    ```

    514 tokens in, 380 out (299 of them reasoning) · 6.0 s · $0.0056 · 1 message on Pro · answered by google/gemini-3.1-pro-preview via Google ·

  15. GPT-6 Astra

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return title
        .toLowerCase()
        .normalize("NFD")
        .replace(/\p{M}/gu, "")
        .replace(/[^a-z0-9]+/g, "-")
        .replace(/^-+|-+$/g, "");
    }
    ```

    483 tokens in, 71 out · 2.1 s · $0.0084 · 1 message on Pro · answered by openai/gpt-6-astra via OpenAI ·

  16. Claude Fable 5.1

    Passed: All 7 tests passed.

    ```javascript
    function slugify(title) {
      return String(title)
        .normalize("NFD")                 // split accented letters into base + combining marks
        .replace(/[\u0300-\u036f]/g, "")  // strip the combining marks
        .toLowerCase()
        .replace(/[^a-z0-9]+/g, "-")      // any run of non-alphanumerics -> single hyphen
        .replace(/^-+|-+$/g, "");         // trim leading/trailing hyphens
    }
    ```

    671 tokens in, 170 out · 5.5 s · $0.0167 · 1 message on Pro · answered by anthropic/claude-fable-5.1 via Anthropic ·

More coding prompts

The other coding prompts, each with every model's reply, and the results across all five.

Questions

Which AI does best on “Turn a title into a URL slug”?

All 16 models passed this coding prompt's check (tests). The cheapest reply that passed was GLM 5.3 Flash's, at $0.000067; the fastest, GLM 5.3's in 0.4 s. The dearest reply, Claude Fable 5.1's, cost 248 times as much ($0.0167).

What does a reply to “Turn a title into a URL slug” cost?

Through the models' APIs, what OpenRouter charged us ran from $0.000067 (GLM 5.3 Flash) to $0.0167 (Claude Fable 5.1) for this prompt. In llmwise you don't pay by the token: a reply like these counts as one message on Pro, whichever model answers.

Claude, GPT, Gemini, DeepSeek, Grok, Kimi, and GLM, in one chat.

See what a message costs before you send it. Free is 5 messages to try; sign in with an email link, no password or card.