LLM Provider (llm_provider)
Adds an LLM parsing provider. @provider(points.LLM_PROVIDER, id=...) returns a subclass of ab_sdk.llm.LLMProviderAdapter. The id must equal its info.id. The user selects it in Settings → LLM → Provider. You cannot override the id of a built-in provider.
python
from ab_sdk import Plugin, points, provider
from ab_sdk.llm import AdapterContext, LLMProviderAdapter, ProviderInfo
class MyAdapter(LLMProviderAdapter):
info = ProviderInfo(
id="my-llm",
display_name="My LLM",
auth_kind="api_key",
needs_base_url=True,
default_model="my-model",
)
... # implement parse / list_models and the other abstract methods
class MyPlugin(Plugin):
@provider(points.LLM_PROVIDER, id="my-llm")
def adapter(self):
return MyAdapterNotes
ProviderInfodrives the frontend form and the provider list.auth_kindisapi_key,oauthordevice_code.- An adapter gets the model name, key,
base_url, timeout and a proxy-aware httpx2 client factory throughAdapterContext. It does not read the global configuration. - The factory returns an
httpx2.AsyncClient(since SDK 0.6; before, it washttpx). To catch network errors, usehttpx2.HTTPErrorand related classes. Thehttpxexception classes do not catch its errors. - A subscription-type provider (
oauth/device_code) implements the auth flow hooks (AuthChallenge,TokenSet). When the credentials are no longer valid and the refresh fails, raiseAuthExpiredError. AB then trips the breaker for this provider and sends anllm_auth_failureevent. - Existing LLM plugins in the
plugin.jsonformat (released asllm-plugins) still work. New plugins useplugin.tomland this extension point.