What happens
Configured with deepseek-ai/DeepSeek-V4-Flash (a reasoning model, available on SiliconFlow), extraction on the NVIDIA recall corpus did not finish in an hour:
- 64 chunks took over 60 minutes, against about 25 with DeepSeek-V3, and the bench harness timed out at 63/64;
- 10 chunks failed with
LLM endpoint gave no usable answer: error sending request for url (…/chat/completions), which looks like LlmClient's read timeout on long reasoning replies;
- there was no rate limiting at all (0 throttle warnings, against 45–96 per V3 round the same night), so the model is attractive precisely when V3 is throttled.
Separately, the model returns its reasoning inline: settings/test came back as "OK</think>OK". utopia_extract::json_block takes everything from the first { to the last }, so a brace inside the reasoning would make it cut the wrong span. It did not happen in this round, but only by luck.
Proposed
- Keep only the reply after the reasoning. Strip everything up to the last
</think> in the chat reply before any parsing, in LlmClient, so extraction, chat and adjudication all benefit. This is a protocol marker, not vocabulary. Also check whether the endpoint returns reasoning_content separately and ignore that field.
- A longer read timeout for reasoning models, or a timeout that scales with the requested completion budget, so a long reasoning reply isn't cut off and retried.
- Re-run the recall bench with V4 Flash after 1 and 2, so it can be offered as the stable option when V3 is throttled.
What happens
Configured with
deepseek-ai/DeepSeek-V4-Flash(a reasoning model, available on SiliconFlow), extraction on the NVIDIA recall corpus did not finish in an hour:LLM endpoint gave no usable answer: error sending request for url (…/chat/completions), which looks likeLlmClient's read timeout on long reasoning replies;Separately, the model returns its reasoning inline:
settings/testcame back as"OK</think>OK".utopia_extract::json_blocktakes everything from the first{to the last}, so a brace inside the reasoning would make it cut the wrong span. It did not happen in this round, but only by luck.Proposed
</think>in the chat reply before any parsing, inLlmClient, so extraction, chat and adjudication all benefit. This is a protocol marker, not vocabulary. Also check whether the endpoint returnsreasoning_contentseparately and ignore that field.