The Sync-Async Gap Has a Four-Worker Fix
The fix for a sync/async plugin mismatch required a core LLM plugin hook change. The reason: the ecosystem has grown large enough that plugins now need to know what other plugins have already registered.

image from grok
Simon Willison released llm-all-models-async 0.1, a plugin that bridges sync-only language models to async code using a ThreadPoolExecutor with four workers, solving a real integration gap in Datasette where the Mr. Chatterbox Victorian-era LLM is sync-only but Datasette's enrichment features require async. LLM 0.30 simultaneously added a model_aliases parameter to the register_models() hook, enabling plugins to inspect what other plugins have registered and adapt accordingly—a coordination primitive that signals the plugin ecosystem has matured to a point where the core must mediate between plugins that weren't designed to coexist.
- •A ThreadPoolExecutor with four workers provides a minimal, pragmatic sync-to-async bridge for LLM plugins that don't support async natively
- •LLM 0.30's model_aliases parameter represents a plugin ecosystem inflection point where the core must expose registration order and state to other plugins
- •The mrchatterbox plugin demonstrates multi-party ML pipelines: Trip Venturella trained the model using nanochat, filtered data with OCR confidence thresholds, and used GPT-4o-mini/Claude Haiku for synthetic training data

