The Need: you cannot judge an AI job without a price tag
When I start a new AI job, I always ask the same question first: what will this cost? A job can look cheap on paper and then run for hours. Or it can look scary and cost a few cents.
This week I used one DeepSeek balance for four different jobs on my family book library. I wrote down the balance after each one. This post is that list, plus what I would do differently.
The Proof: the numbers
I read all balances by hand from the DeepSeek dashboard. The dashboard shows two decimals and it updates late, so treat small amounts as rough.
| Job | What it was | Cost |
|---|---|---|
| Translation | Six old commentary volumes (about 3.9 MB of English text) into Korean | about $1.20 (from my earlier post) |
| Chapter summaries | 100 cantos of a long poem, one summary each | about $0.08 (balance 10.59 → 10.51) |
| Two podcast scripts | A two-host script and a one-narrator script for the same book | together with the summaries: about $0.26 (10.59 → 10.33) |
| Korean titles | A title for every book in the catalog, in batches of 40 | see below |
The title job is finished. It covered all 78,146 books. The first pass logged 8.57 million input tokens and 5.15 million output tokens. A second pass for 871 books that my own filter had wrongly skipped added about 0.1 million of each. The balance is now $6.63.
From the end of the podcast work ($10.33) to now, the balance dropped $3.70. That covers several 50-book test runs, the full run, and the cleanup pass. I cannot split it more finely, because the dashboard lags. The full job came to about 4 to 5 cents per 1,000 books if I put most of the drop on it.
Here is a number I got wrong. Before the run, I estimated $7 to $8 for all the titles. I used a price I assumed, not one I had checked. The real drop was about half of that. So the lesson is not “my estimate was right”. It is “measure a small run, then check the balance”.
One more number for the future. I have not run it yet, but I plan to translate 99 more books. They add up to about 61 MB of text. If the price per megabyte is the same as for the six volumes ($1.20 for 3.9 MB), that is roughly $19. I put plus or minus 30% on it. Some of those books are in German, French, or Latin, and I have not tested those.
The Story: why a title cost more attention than a translation
The books come from a public-domain library. My family reads them in an app I built on my home server. About a hundred of them already have a podcast episode I made earlier, so I wanted real Korean titles on those books. Then I thought: why not all of them?
DeepSeek has no web search. If I ask for the published Korean title of an obscure book, it answers from memory. Sometimes the answer is confident and wrong.
My first test on 50 books showed this clearly. One result had a Chinese-character mix-up inside a Korean title. One famous novel got a title that did not match the one used in Korea, and a second invented title as an alias. Two volumes of the same play got the same title.
I changed three things.
- I told the model to keep volume and part numbers, and to write “collected plays” when the book is a collection.
- I asked every question twice, once at temperature 0 and once at 0.8. A title counts as “probably a published title” only if both answers match.
- I decided what to do with doubt. My own prompt that day, translated:
💬 Prompt that worked “If you are not very sure, how about just labeling it as a GP translation? We will keep adding information to this over time.”
“GP” is the name of my app. The label means: the machine translated this title itself, a human has not checked it. If the two answers disagree, the title is a plain translation with that label. If a human edits it, the label goes away.
The two-answer check cut the “probably published” group from 25 to 21 in my 50-book test. In the full run, only 2,760 of about 78,000 titles passed it, which is about 3.5%. The first 80 books, the most popular ones, passed at 55 of 80. That gap makes sense, because famous books are the ones the model knows.
I did not check these titles against a real catalog. “Probably published” is a guess that agreed with itself twice. It is not a fact.
The How: the habits that kept the bill small
1. Put the long shared text first, and vary only the end. DeepSeek caches a prompt prefix automatically. When I wrote the podcast script, every request began with the same summaries of all 100 chapters. About 84% of the input tokens were cache hits. When I summarized the chapters one by one, each request began differently, and the hit rate was 0%. Nothing in my code changed except the order.
2. Run 50 to 80 items first, and read the token counts. My 80-book test used 8,096 input and 5,096 output tokens. That is about 100 in and 64 out per book. The 78,000-book run is close to a straight multiplication of that, at least for token counts. Do not multiply dollars from a price you have not checked.
3. Failed tries cost money too. The one-narrator podcast script took four tries. In the first two, the model put line numbers in front of each line, and my parser saw empty lines. In the third, the script came out about twice as long as I asked. I fixed the parser and changed the length target from characters to line counts. Most of the roughly $0.26 for the podcast work was not the good run. A good single run should be far less, but I only have this one book to base that on.
4. Check what your filter throws away. My first pass left 871 books without a title. I had written a filter to catch garbled output, and it also rejected dashes and curly quotes that appear in English book titles. I found it only because I listed the empty ones instead of trusting the “done” message. After I narrowed the filter, 850 filled in. Of the rest, 19 had Chinese characters added in brackets, and 2 had one wrong character inside a place name. I fixed those 2 by hand and marked them as machine translations.
5. Make big batches resumable, and never overwrite a human. The title job selects only books with an empty title, and it writes each batch to the database right away. If it stops, I run the same command and it continues. A column records where each title came from, so I can later review only the machine guesses.
🗂 Claude.md Rule Before any batch over a few hundred items, run a 50-item sample first and show me the result table. Never overwrite a field that a person has filled in, and store the source of every machine-made value in its own column.
6. Keep a network drop from fooling you. My book download paused when the network dropped, and I started a second copy while the first was still running. For a while two programs wrote to the same log. If a job has no lock, check the process list before you restart it.
What I have not confirmed
- The exact cost of the title job alone. The $3.70 includes tests and retries.
- Whether the “probably published” titles are right. A human has checked only a handful.
- The cost of the 99-book translation. It is an estimate, and it has not run.
- How well the translation works on German, French, and Latin books.
Cost for this week’s jobs: about $1.20 earlier for the first translation, and the balance moved from $10.59 to $6.63 for everything after that (summaries, scripts, titles). No hardware was bought, and the audio from my text-to-speech tool is free.