GPT-6 Astra Draws a Python Reading a Book
We ran GPT-6 Astra through Real Python’s vibe check for new AI models: five fixed prompts, one shot each. The first one is always the same line, “Write a Python turtle program that draws a python reading a book.” Here’s what GPT-6 Astra drew:

That’s task one of five, exactly as its turtle script drew it. The numbers for all five come next, then each task in detail.

Every model gets the same five prompts, one shot each, no system prompt, and nothing is fixed up afterwards. Here is what each row in the results table means:
| Task | What we ask | What we read off the answer |
|---|---|---|
| The snake | Write a Python turtle program that draws a python reading a book. | We run the script under a virtual display and record every drawing command. The picture is whatever came out, arrow and all. |
| How modern its Python is | Write a small command-line tool from a fixed spec. | Which idioms it reaches for: list[str] or typing.List, tomllib or a hand-rolled parser, Path.walk() or os.walk(). Each idiom arrived in a specific Python version, the newest in Python 3.14. One old-fashioned idiom pins the model at the version before that idiom existed, so this reading is deliberately strict. |
| Modern idioms | The same CLI tool as above. | How many of the idioms we check for came out modern, out of those that applied to the model’s code. |
| Newest Python it knows | Which Python release is the newest? | Roughly where the training data ends. |
| Lines touched for a tiny edit | Add a --verbose flag to a 40-line script. |
How many lines changed. The minimal answer changes 7. Much more than that means it rewrote things nobody asked about. |
| Spots a made-up function? | How do I use itertools.flatten()? |
That function doesn’t exist. Caught it means the model said so. Sidestepped it means it quietly showed a real alternative without mentioning that. Fell for it means it invented an answer. |
| Reasoning effort | The thinking setting we ran with. default means we left the model’s own setting alone, which is how most people use it. The token count is how much thinking the API reported. | |
| Cost | What the API charged for all five tasks, in US dollars. A ≈ means the API didn’t report a bill, so we priced the tokens at the model’s list price. |
The overview page calls the second row “Writes Python like it’s“, followed by a year: the release year of the Python version the code reads like.
New Model Drops? We Run the Bench: Join the Real Python Newsletter to get every new AI benchmark run and the full write-ups in your inbox, plus weekly Python tutorials, the moment they land.

The Results at a Glance
The run: openai/gpt-6-astra via OpenRouter, at its default reasoning settings, with no system prompt and nothing fixed up afterwards. Every task, one row, with the detail behind each number:
| Task | Result | Detail |
|---|---|---|
| The snake | Drew it | 2264 drawing commands, 196 lines of code |
| How modern its Python is | Python 3.10 (2021) | pinned by file_digest; newest feature used: Python 3.12 |
| Modern idioms | 9 of 15 | of the checkpoints that applied to its code |
| Newest Python it knows | 3.13.7 | the reply is quoted below |
| Lines touched for a tiny edit | 11 (minimal: 7) | 1.6× the minimal patch, 9 lines added and 2 removed |
| Spots a made-up function? | Caught it | said the function doesn’t exist and offered a real alternative |
| Reasoning effort | default | 1.2k thinking tokens over all five tasks |
| Cost | $0.31 | for all 5 tasks, as billed by the API |
| Wall time | 1 min 25 s | 6.0k output tokens |
Read the full article at »
[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short & sweet Python Trick delivered to your inbox every couple of days. >> Click here to learn more and see examples ]