Simplify GLM 4.5 parser and fix test injection for thinking_forced_open
Parser restructure:
- Follow cleaner pattern: root ::= thinking? (tools | content)
- content ::= json_schema | rest (both with optional leading newline)
- Unified thinking block handling for all cases
- Check json_schema before tools (specific structured output first)
Test fix:
- When thinking_forced_open=true and injecting reasoning, include closing </think> tag
- Parser expects reasoning content to end with </think> when prompt ends with <think>
GLM 4.6: 11/11 needle streaming tests now pass
DeepSeek R1: 7/11 (improved from 4/11, tool parsing still needs work)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>