{"slug": "providers-as-a-yaml-block-a-config-driven-llm-registry-v1-21-0", "title": "Providers as a YAML block: a config-driven LLM registry (v1.21.0)", "summary": "RFC BF introduces a YAML-based provider block in LLM registry v1.21.0, allowing operators to declare and configure LLM providers (e.g., OpenAI, Anthropic, self-hosted vLLM) via config instead of hardcoded Go code. The update includes pluggable drivers, per-provider concurrency limits, capability overrides, and backward compatibility through an embedded default-providers layer.", "body_md": "RFC BF ships the providers: YAML block. LLM providers stop being hardcoded in Go and become a config-declared registry with pluggable drivers. Each entry declares a compiled-in driver (anthropic / openai / gemini / deepseek / ollama / mock / code-js), a base_url, an api_key_env (env-var name resolved server-side, tenant-overridable via CredentialDef, never ${VAR}-interpolated), a max_concurrent, an options map, and a capabilities override block. Add a self-hosted vLLM / llama.cpp / groq / together / second-Ollama with a few lines; driver: openai covers any OpenAI-compatible endpoint. Every existing config keeps working byte-for-byte via an embedded default-providers layer prepended to every config; operator entries deep-merge over it. Keyless third-party providers now enable on declaration (the headline self-hosted case). anthropic/gemini/ollama drivers now forward api_key_env to KeyEnvName() so CredentialDef overrides target the right var. Per-provider max_concurrent caps in-flight runs to one provider — the motivating case is a local model on one GPU. Sub-agents gate with a deadlock carve-out. Capability overrides re-enable vision on OpenAI-compat endpoints, applied inside the driver so KeyedProvider / ThinkingDowngrader are preserved. CLI parity: validate / agents / doctor resolve from the same embedded default layer. No schema migration; adapters bump to 1.21.0 in lockstep with no code change.", "url": "https://wpnews.pro/news/providers-as-a-yaml-block-a-config-driven-llm-registry-v1-21-0", "canonical_source": "https://loomcycle.dev/blog/providers-as-a-yaml-block.html", "published_at": "2026-07-15 12:00:00+00:00", "updated_at": "2026-07-17 06:34:36.455875+00:00", "lang": "en", "topics": ["large-language-models", "developer-tools", "ai-infrastructure"], "entities": ["OpenAI", "Anthropic", "Gemini", "DeepSeek", "Ollama", "vLLM", "llama.cpp", "Groq"], "alternates": {"html": "https://wpnews.pro/news/providers-as-a-yaml-block-a-config-driven-llm-registry-v1-21-0", "markdown": "https://wpnews.pro/news/providers-as-a-yaml-block-a-config-driven-llm-registry-v1-21-0.md", "text": "https://wpnews.pro/news/providers-as-a-yaml-block-a-config-driven-llm-registry-v1-21-0.txt", "jsonld": "https://wpnews.pro/news/providers-as-a-yaml-block-a-config-driven-llm-registry-v1-21-0.jsonld"}}