Andy Max's Web Log

thoughts. code. pixels.

welcome to my corner of the web ★ now loading nostalgia at 33.6 kbps ★ handmade with AI and recycled electrons ★ best viewed by humans ★ view source, steal responsibly
Web Log Entry

Do Not Underestimate the Pineapple

NEW!

An AI-generated pineapple illustration
An AI-generated pineapple illustration
#ai#llm#ascii-art#prompting

TL;DR: I asked several local models to draw an ASCII pineapple. I got cats, sad faces, pyramids, cocktail glasses, and something that looked like an ASCII boss enemy. More reasoning usually made things worse. Negative prompts backfired. The lesson: ASCII art is spatial, not just textual. For models, a pineapple is harder than it looks.


A colleague Tom Robinson asked one of our local models to draw an ASCII pineapple.

That sounds easy. But it was not.

A pineapple has a simple shape: leaves on top, an oval fruit body, and a diamond pattern inside. But with several local models running on an M1 Max with 64 GB of RAM, I got suns, cats, sad people, pyramids, cocktail glasses, houses, and geometric shapes that had clearly given up on fruit.

This is not a serious benchmark. It is a look at a strange little failure mode. But there are useful lessons in the mess.

Gemma 4 26B A4B: starts okay, then turns into a monster

First attempt, after 1m 39s:

\ | /
 -- * --
  / | \
(     )
 \___/

Not really a pineapple, but the basic idea is there.

Then the model tried to improve the crown. It drifted through a royal phase, then a tropical-cocktail phase, complete with what looked like a straw, before ending here:

            &&&
           &&&&&
          &&&/ \&&&
         &&&| | &&&
        &&&\_/ &&&
       (  #######  )
      (  ###########  )
       (  #########  )
        (  #######  )
         (  #####  )
            '---'

Magnificent and awful. Less fruit, more ASCII boss enemy.

The model started with something almost usable, then kept “improving” it into something worse. That pattern showed up a lot.

GPT OSS 20B: cats. Just cats.

After 24 seconds, its first attempt was a cat:

   /\_/\
  / o o \
 (  =^=  )
  )   ( 
 (__ __)

A perfectly fine cat. Not a pineapple.

It then tried to correct itself and produced another cat. Then a sad human:

      ____
     / . .\
    |   <  |
     \__^_/
     _|_|_
    /_____\

This is also not a pineapple, though it may reflect my emotional state trying to get GPT OSS 20B to draw one.

After several more cats, it decided this was a pineapple:

       ^^^
      /\///\
     //\\  \\
    ||__||  ||
   [____][____]
  [______][______]
 |__|_______|__|

It is not.

The odd part was that the reasoning trace seemed to know it was drawing a cat, tried to fix it, then drew another cat anyway.

Qwen 27B: pyramids, for an hour

It thought for an hour.

The output was triangles:

       ^
      / \
     /   \
    /  ^  \
   / /|\ \ \
  / / | \ \ \
 / /  |  \ \ \

At one point, it nearly got there: pointed crown, textured body. But it kept adding to the pattern until the result became perfectly symmetric, highly geometric, and not a pineapple.

Qwen 27B seemed to find a pattern and elaborate on it, instead of stepping back to check whether it still looked like the thing I asked for.

Trying Polish did not help

I wondered if the word “crown” was part of the problem. It overlaps with royal crowns. So I tried prompting in Polish, and asked the model to think in Polish too.

It did not really work. The reasoning fell back to English, and GPT OSS 20B still drew cats.

“Think in language X” sounds like it should change the model’s frame of reference. In practice, it did not.

Frontier models, for comparison

The gap was clear.

ChatGPT and Opus both produced things that were obviously pineapples: leafy crown, rounded body, internal diamond texture, sensible proportions.

They kept the object structure intact. They did not drift into cats or pyramids. Here is Gemini’s pineapple.

       \ | /
      \| | /
    --- \ / ---
     \ \ | / /
      \ \|/ /
      _(_ _)_
    /         \
   |  ()  ()   |
   |()  ()  () |
   |  ()  ()   |
   |()  ()  () |
    \         /
     \_______/

Temperature 0: a trap, not a fix

I tried GPT OSS 20B at temperature 0, expecting more discipline.

Instead, it got stuck in a deterministic cat loop: draw cat, notice it is a cat, draw another cat.

Temperature 0 does not make a model more correct. It makes its most likely path more reliable. If that path is wrong, you are stuck.

Gemma 4 at temperature 0 went the other way and produced its best output:

        \\||//
         \||/
       .-'  '-.
      /        \
     |  /\  /\  |
     |  \/  \/  |
     |  /\  /\  |
      \        /
       '------'

Recognisable crown. Oval-ish body. Plausible texture.

A pineapple.

Asking the model to “think carefully” made it worse

After that, I tried:

Think carefully about the parts of a pineapple, then draw an ASCII picture of one.

The result got worse.

The crown became a sail. The body became boxy. Asking it to think about the parts seemed to make the model build separate components, rather than draw one coherent object.

What worked: positive structural prompts

This worked well:

Draw an ASCII pineapple with exactly two parts:

  1. leafy crown on top
  2. oval fruit body below with diamond texture
        \  |  /
       \ \ | / /
        \ \|/ /
         \|/ /
          |/
      _________
     /  x   x  \
    / x   x   x \
   |x   x   x   x|
    \ x   x   x /
     \  x   x  /
      \_______/

Clearly a pineapple.

What did not work: telling it what not to draw

Adding “do not draw a cat, human face, pyramid, cocktail glass, or house” made things worse.

The crown got strange again. The body became weaker.

My guess: listing the unwanted concepts put them into the context. “Do not think of a cat” still puts a cat in the room.

Why GPT OSS 20B is so stuck on cats

I asked it for the most common ASCII art examples. It gave me a face, a cat, and a heart.

Then I asked what is easiest to draw in ASCII. It said: smiley, house, cat.

Then I gave it this prefix:

/\_/\
/ o o \

It happily finished the cat.

A lot of simple ASCII art starts with the same small set of characters: slashes, underscores, brackets, dots, and carets.

Once a few tokens land in cat-shaped territory, the easiest continuation is a cat. The model is not simply failing to understand “pineapple”. It is being pulled towards an attractor.

Why this is harder than it looks

ASCII art is spatial, not just textual. LLMs generate left to right, but the output has to work in two dimensions. One bad bracket or space can ruin the image.

Common ASCII patterns have gravity. Cats, smileys, houses, hearts, and pyramids are everywhere in training data. They share characters with pineapples. Once the model slips onto one of those tracks, getting off is hard.

The phrase “ASCII art” may trigger the wrong priors. The model may enter “ASCII art mode” first, then try to squeeze “pineapple” into familiar templates.

Iteration can ruin good results. For prose and code, revision often helps. For ASCII art, revision tends to add detail, decoration, and symmetry, while losing the overall shape. More effort, worse pineapple.

Takeaways

  • ASCII art behaves like an image, not text. Local models do not handle that reliably.
  • Positive structural prompts work better than negative constraint lists.
  • “Think carefully” can hurt visual tasks. Reasoning can cause drift.
  • Temperature 0 stabilises the model’s current path, even when that path is wrong.
  • A good early answer can get worse when you ask for improvements.
  • Cats are an attractor state. Respect the cats.

Most importantly: do not underestimate the pineapple.

Back to Web Log

Handmade with AI
Recycled Electrons
Best Viewed by Humans
Built with Astro
No Tracking
I ♥ HTML
RSS Now