Editorial standards
Corrections
When we get a fact or a code sample wrong, we fix it, add a dated note at the top of the corrected page and list it here. Fixes that touch many pages at once are listed here only. Wording, spelling and layout changes are not corrections and are not listed.
How we decide what counts as a correction is in our editorial policy →. Spotted something wrong? Email connect@learnaiengineering.dev or use the contact page →, with the page address and what you expected.
20 corrections
Local and open-source models →
- What was wrong
- The local-versus-cloud experiment overstated cloud costs by about 100 times (2M tokens a day was shown as about $60 a day) and said self-hosting a 70B model breaks even at about 5M tokens a day. It also called public OpenAI non-compliant for health data.
- What we changed
- Costs are now computed from one dated price table: 2M tokens a day is about $0.52 a day on gpt-4o-mini, and break-even for a 70B model on 4 GPUs is about 30M tokens a day against gpt-4o. GPU costs are labelled illustrative, and the health-data line says to check your provider's BAA and data-retention terms.
Cost and reliability →
- What was wrong
- The stacked-savings experiment claimed a 97% cost reduction its own inputs did not give, and presented its uptime figures as facts. The cost blow-up example ($200 to $4,800 a day) used multipliers that did not multiply out, and the 10k-call exercise said gpt-4o cost $200 a day.
- What we changed
- The experiment now computes its reduction (90%) and labels the uptime figures illustrative. The blow-up uses one breakdown (3 × 2.3 × 3.58 × 7.2 ≈ 178x, about $200 to $35,800 a day), and the exercise computes $130 a day from the dated price table.
Retrieval and reranking →
- What was wrong
- The hybrid search sample used psycopg2 with parameters out of placeholder order, applied the permission filter only when filters were passed (so access control was not enforced at query time as the text said), and called PostgreSQL's ts_rank BM25.
- What we changed
- The sample uses psycopg 3 throughout with parameters in order, the permission filter is a required argument applied in both queries, and ts_rank is described as PostgreSQL full-text search.
Model Context Protocol (MCP) →
- What was wrong
- The MCP sample did not match the MCP Python SDK's API, used names it never defined, and relied on a check that the SQL starts with SELECT for read-only access.
- What we changed
- Rewritten for the MCP Python SDK 1.x (a FastMCP server and a ClientSession client), with every name defined and read-only access from a read-only Postgres role.
Workflow graphs →
- What was wrong
- The LangGraph human-review step called an approval function and a checkpointer that were never defined, so the graph could not pause and resume as described.
- What we changed
- Human review now uses LangGraph's interrupt() with an InMemorySaver checkpointer and resumes with Command(resume=...) on the same thread.
AI safety, bias and content moderation →
- What was wrong
- The bias experiment presented invented figures as if they were measurements, and called a lending outcome illegal without saying where.
- What we changed
- Every figure is labelled an invented example, and the lending point now says many jurisdictions prohibit it and to take legal advice for yours.
Agent memory and planning →
- What was wrong
- The planner asked the model for a JSON array and then read a "steps" key from it, so the code would fail.
- What we changed
- The planner uses Structured Outputs with a typed result and reads its steps from the parsed output.
Observability and tracing →
- What was wrong
- The trace experiment's call costs ($0.0003 and $0.08) did not match the models' prices.
- What we changed
- The costs are computed from the dated price table: $0.00018 and $0.024.
Data and databases →
- What was wrong
- The pgvector schema declared a 1024-dimension column for text-embedding-3-small, which returns 1536 dimensions by default, so inserts would fail.
- What we changed
- The column size now comes from the embedding model (1536), with a note that the two must match.
LLM fundamentals →
- What was wrong
- The sample read a latency_ms field from the API response, which the API does not return.
- What we changed
- The sample times the call itself with time.perf_counter().
Tutorial series pages →
- What was wrong
- Chapter and lab counts were typed by hand and were wrong on several series (Building LLM Applications and Production AI Systems showed the wrong number of chapters), and "This completes the series" appeared on chapters that were not the last.
- What we changed
- Counts are computed from the chapter and lab data, and the completion message appears only on each series' last chapter.
Chapter experiments →
- What was wrong
- Experiment results showed made-up figures without saying so.
- What we changed
- Every experiment result now says "Figures are illustrative; measure your own."
Cost blowup after launch →
- What was wrong
- The figures did not multiply out: costs went from $200 to $4,800 a day (24x), but the diagnosis multiplied to about 230x. The matching interview answer and daily practice card had the same problem.
- What we changed
- One breakdown is used everywhere: 3 (traffic) × 2.3 (cache) × 3.58 (model mix) × 7.2 (prompt size) ≈ 178x, about $200 to $35,800 a day, with dated prices. The interview answer's stacked savings are now 0.4 × 0.25 × 0.5, about 95%.
What is Grok Bot? xAI's always-on AI teammates explained →
- What was wrong
- Several details did not match xAI's own documentation, the plan table was out of date, and the post made claims we could not find in xAI's docs (about CAPTCHAs, password managers and the underlying model).
- What we changed
- Rewritten from xAI's pages and Cursor's pricing page: all bots on an account share one computer, bots hand you the computer for sign-in, 2FA and payment, and the plans are today's. The unsourced claims are removed.
When should an AI agent ask permission? Approval design →
- What was wrong
- The post attributed a line to xAI (Auto Review "complements, not replaces, least privilege") that we could not find in xAI's docs.
- What we changed
- It now describes Auto Review as xAI's docs do: a separate review model that works alongside approvals, the network policy and per-user isolation.
How to cut LLM costs: caching, routing and compression, with a worked example →
- What was wrong
- The title promised a 90% cost cut, which is the result of a worked example with stated assumptions, not a typical outcome.
- What we changed
- The post is retitled and moved from /blog/how-to-reduce-llm-costs-by-90-percent (the old address redirects). The body labels 90% as a worked model.
Dots, Muse, Grok Bot and Gemini Spark compared (October 2026) →
- What was wrong
- The comparison ranked the agents ("best for", "the only one") without a basis, quoted Muse prices that are not on Meta's page, and had out-of-date Gemini Spark facts.
- What we changed
- The comparison is unranked and dated, the Gemini facts follow Google's pages, and the Muse price amounts are replaced with a general description of its plans.
OpenAI DevDay 2026 for agent builders: computer use, Sol, MCP events →
- What was wrong
- OpenAI's pricing claim and stats were stated as our own facts, the source links pointed to outdated pages, and the Luna model name was presented as OpenAI's.
- What we changed
- The claims are attributed to OpenAI, the links point to OpenAI's current recap, and the Luna name is attributed to press coverage.
AI agents and workflows, no coding needed →
- What was wrong
- The page treated every "Grok bot" as unofficial, although Grok Bot is xAI's own product.
- What we changed
- It now uses one explanation that separates the Grok app, the xAI API, @grok on X, Grok Bot and unofficial third-party bots, checked against xAI's pages.
Choose the right AI model →
- What was wrong
- Provider "strengths" were stated without sources, and the Grok explanation left out Grok Bot.
- What we changed
- The strengths are replaced with checks you can run on your own work, and the Grok explanation matches the agents page.