createProvider function

ProviderHandle createProvider(
  1. String name,
  2. String? apiKey,
  3. ProviderConfig? config
)

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);
}