Works correctly with LangChain 1.0's typed content blocks on AIMessage.content — text, tool_use, image, thinking, document — across Claude, GPT-4o, and Gemini, including multi-modal composition and tool-call iteration.
SkillScore100Maintained
Automatic
◆AI Engineer packsaaslangchainlanggraph
Last verified 8/30/2026
What it changes
Passed 22 of 22 test cases with the skill, and 16 of 22 without it.
Without skill73%
With skill100%
Checks it passed that the model alone missed
The returned dictionary sets source_type to base64.
The response identifies msg.text() as the built-in method.
The returned dictionary sets mime_type based on the file extension.
and 6 more in the full report
6 fixed16 passed either way0 still failing0 broke
Pass-rate lift
+27 pp
Tokens
+127%
Agent turns
0%
Response time
-24%
Model gemini-3.6-flashMeasured 8/30/2026v122 of 22 cases passed with skill
Tokens, turns and time describe resource use, not a dollar price.
See it in action
One of 6 test cases the skill fixed. Same model, same prompt, with and without the skill.
1 of 6
Prompt
What built-in method on LangChain 1.0 `AIMessage` objects returns the concatenated string representation of all text blocks in `msg.content` regardless of provider?
What was checked, without and with the skill
Checked
Without skill
With skill
The response identifies msg.text() as the built-in method.
Missed
Passed
case-19 · gemini-3.6-flash · 8/30/2026 · answers are capped and redacted
What's inside
The instructions your model reads when the skill loads.
SKILL.md317 lines6 files
LangChain Content Blocks (Python)
Overview
On Claude, AIMessage.content is list[dict] even for pure text — so any
code from an OpenAI-first tutorial that calls message.content.lower() or
message.content.split() crashes with AttributeError: 'list' object has no attribute 'lower' on the first production Claude call (P02).
Multi-modal code that works on GPT-4o breaks on Claude because pre-1.0
image-block shapes differed across providers (P64). Multi-turn Claude
replay with extended thinking fails with
anthropic.BadRequestError: missing signature when prior thinking
blocks are stripped. Forced tool_choice prevents
stop_reason="end_turn" and loops forever (P63).
This is the deep-dive companion to langchain-model-inference. That
skill's references/content-blocks.md covers the str vs list[dict]
divergence and a safe text extractor. This skill goes further:
tool_use block iteration mechanics — IDs, args as dict vs JSON string, streaming deltas
Load and chunk documents for LangChain 1.0 RAG pipelines correctly —
language-aware splitters, table-safe PDF loaders, Cloudflare-compatible web
loaders, chunk-boundary strategies that survive real-world structure. Use when
building a RAG pipeline, diagnosing why retrieval misquotes a table, or
debugging a crawler returning blank content. Trigger with "langchain document
loader", "text splitter", "chunking strategy", "pdf loader",
"markdown splitter", "webbaseloader".