An agent in ADK names its model as a plain string, and LLMRegistry is what turns that string into something that can answer. Resolution runs in order: a class prefix if you wrote one, then a registered pattern, then the text before a slash checked against LiteLLM's own provider list, and a ValueError after that. Your OpenAI lane is a class of its own at src/google/adk/integrations/openai/_openai_llm.py, and the patterns it claims are gpt-.* and o\d+-.*, so a bare name only resolves when some class has agreed to answer for it.
The docstring on that class says to set api_key and base_url to reach the default OpenAI host or any OpenAI-compatible backend, and the compatible backend it uses as its example carries a Google Cloud access token in the key field. So a host needs two things before it runs, an endpoint and a credential, and somewhere that gets paid for the call itself has nothing to put in the second one. BlockRun is one OpenAI-compatible base URL where chat, image, video, music, speech and sound effects share a single payment flow, and each call settles on its own in USDC over x402, so there is no key to hold and no account to create. https://blockrun.ai
Would a host like that belong as a class with a pattern of its own, or would you rather keep it out of the registry and pass an instance the way the docs suggest for a model ADK does not ship? There is an open request for a native Bedrock integration as well, so I am not sure whether new backends are meant to arrive as classes at all. Happy to write it the way OpenAILlm is written and open it for review with the CLA signed, and just as happy to hear that a provider with no credential has no place here.
An agent in ADK names its model as a plain string, and LLMRegistry is what turns that string into something that can answer. Resolution runs in order: a class prefix if you wrote one, then a registered pattern, then the text before a slash checked against LiteLLM's own provider list, and a ValueError after that. Your OpenAI lane is a class of its own at src/google/adk/integrations/openai/_openai_llm.py, and the patterns it claims are gpt-.* and o\d+-.*, so a bare name only resolves when some class has agreed to answer for it.
The docstring on that class says to set api_key and base_url to reach the default OpenAI host or any OpenAI-compatible backend, and the compatible backend it uses as its example carries a Google Cloud access token in the key field. So a host needs two things before it runs, an endpoint and a credential, and somewhere that gets paid for the call itself has nothing to put in the second one. BlockRun is one OpenAI-compatible base URL where chat, image, video, music, speech and sound effects share a single payment flow, and each call settles on its own in USDC over x402, so there is no key to hold and no account to create. https://blockrun.ai
Would a host like that belong as a class with a pattern of its own, or would you rather keep it out of the registry and pass an instance the way the docs suggest for a model ADK does not ship? There is an open request for a native Bedrock integration as well, so I am not sure whether new backends are meant to arrive as classes at all. Happy to write it the way OpenAILlm is written and open it for review with the CLA signed, and just as happy to hear that a provider with no credential has no place here.