Rosa Del Mar

Daily Brief

Issue 90 2026-03-31

Compatibility Bridge Via Thread-Pool Adaptation Enabled By New Core Hook

Issue 90 Edition 2026-03-31 4 min read
General
Sources: 1 • Confidence: High • Updated: 2026-04-13 03:55

Key takeaways

  • Enabling sync-to-async conversion required an additional LLM plugin hook mechanism that shipped in LLM 0.30.
  • LLM plugins can define new models in both synchronous and asynchronous forms.
  • The llm-mrchatterbox plugin is synchronous only.
  • The llm-all-models-async plugin converts synchronous models into asynchronous models using a thread pool.
  • Version 0.1 of the llm-all-models-async plugin has been released.

Sections

Compatibility Bridge Via Thread-Pool Adaptation Enabled By New Core Hook

  • Enabling sync-to-async conversion required an additional LLM plugin hook mechanism that shipped in LLM 0.30.
  • The llm-all-models-async plugin converts synchronous models into asynchronous models using a thread pool.
  • Version 0.1 of the llm-all-models-async plugin has been released.

Sync-Vs-Async Model Interface Split In The Llm Plugin Ecosystem

  • LLM plugins can define new models in both synchronous and asynchronous forms.
  • Async model variants are usually used for API-backed models, while sync variants more often run the model directly inside the plugin.

Async-Only Consumer Constraint Creates An Integration Bottleneck

  • The llm-mrchatterbox plugin is synchronous only.
  • Datasette can only use asynchronous models, blocking the use of sync-only plugins for features such as datasette-enrichments-llm.

Unknowns

  • What are the latency, throughput, and resource impacts (including thread exhaustion behavior) when the adapter converts sync models to async under concurrent load?
  • What is the exact LLM 0.30 hook mechanism used by the adapter, and what stability/compatibility guarantees (if any) apply to that hook?
  • Does Datasette (and datasette-enrichments-llm specifically) work end-to-end with sync-only plugins once adapted, and what feature limitations remain after adaptation?
  • Which sync-only plugins besides the named example are intended or known to be unblocked by the adapter, and are any categories of sync implementations incompatible with thread-pool wrapping?
  • What configuration knobs exist for the adapter (thread pool size, queueing behavior, cancellation semantics, timeouts), and what defaults are used?

Investor overlay

Read-throughs

  • New LLM 0.30 hook enabling a thread pool adapter could lower migration costs for sync only plugins, improving ecosystem cohesion and reducing friction for async only consumers like Datasette.
  • Thread pool based sync to async conversion may unlock previously blocked integrations, potentially increasing usage of existing sync only plugins without rewrites, depending on performance and compatibility under load.
  • If the adapter proves stable, it suggests the platform can add compatibility layers via hooks, indicating ongoing extensibility that could accelerate third party plugin development and downstream tool adoption.

What would confirm

  • Benchmarks or user reports showing acceptable latency, throughput, and resource behavior under concurrent load, including clear handling of thread exhaustion when wrapping sync models.
  • Documentation of the LLM 0.30 hook used by the adapter, with explicit stability or compatibility guarantees, and evidence that the hook is intended for this type of bridging plugin.
  • End to end validation that Datasette and datasette enrichments llm work with adapted sync only plugins, including a list of unblocked plugins and any remaining feature limitations.

What would kill

  • Reports of poor performance, frequent thread exhaustion, deadlocks, or unmanageable resource usage when adapting sync models to async in realistic concurrent workloads.
  • The required LLM 0.30 hook is unstable, undocumented, or changes in a way that breaks the adapter, limiting reliability of compatibility layer approaches.
  • Datasette integration remains blocked or significantly limited after adaptation, or many common sync only plugins prove incompatible with thread pool wrapping due to blocking behavior or missing cancellation support.

Sources

  1. 2026-03-31 simonwillison.net