llmService

fun llmService(model: String): LlmService<*>?

A chat service for model, built once and then reused.

Read then put rather than computeIfAbsent, for the reason the credential caches give: building can reach the runner, and holding a map bin's lock across that would block unrelated lookups. A race costs one redundant build and never a wrong service.