createProvider function
Create a provider handle (RFC-0027) for a registry-backed provider.
Unlike Model.provider (which binds to a single modelId), this returns a
ProviderHandle supporting runtime model discovery
(ProviderHandle.listModels) and building a Model from a discovered id
(ProviderHandle.model).
name is a registry provider name (e.g. "deepseek", "groq"). apiKey
may be null to read the provider's env var from the registry entry.
config overrides individual fields of the registry entry.
Implementation
ProviderHandle createProvider(
String name, String? apiKey, ProviderConfig? config) {
final configJson = config?.toJson();
final handle = withUtf8(name, (namePtr) {
final keyPtr = toCStringOrNull(apiKey);
final cfgPtr = toCStringOrNull(configJson);
try {
return takeHandle(
(out) => _ffi.providerHandleNew(namePtr, keyPtr, cfgPtr, out),
'provider_handle_new');
} finally {
if (keyPtr != nullptr) calloc.free(keyPtr);
if (cfgPtr != nullptr) calloc.free(cfgPtr);
}
});
return ProviderHandle._(handle);
}