> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom providers

> Leer hoe je BYOK-providers zoals OpenAI-compatibele API's, Ollama en Azure OpenAI configureert in de Laravel Copilot SDK.

## Custom providers

Met custom providers (BYOK - Bring Your Own Key) kun je met je eigen API-sleutel verbinding maken met OpenAI-compatibele API-endpoints. Lokale providers zoals Ollama worden ook ondersteund.

## ProviderConfig

De klasse `ProviderConfig` heeft de volgende properties.

| Property      | Type           | Beschrijving                                                                |
| ------------- | -------------- | --------------------------------------------------------------------------- |
| `baseUrl`     | `string`       | **Verplicht**. De URL van het API-endpoint                                  |
| `type`        | `string\|null` | Providertype. `openai` (standaard), `azure`, `anthropic`                    |
| `wireApi`     | `string\|null` | API-formaat (alleen openai/azure). `completions` (standaard) of `responses` |
| `apiKey`      | `string\|null` | API-sleutel. Niet nodig voor lokale providers zoals Ollama                  |
| `bearerToken` | `string\|null` | Voor Bearer Token-authenticatie. Heeft voorrang op `apiKey`                 |
| `azure`       | `array\|null`  | Azure-specifieke opties, zoals `['apiVersion' => '2024-10-21']`             |

## Basisgebruik

Wanneer je een custom provider gebruikt, is de parameter `model` **verplicht**.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ProviderConfig;
use Revolution\Copilot\Types\SessionConfig;

$response = Copilot::run(
    prompt: 'Hello!',
    config: new SessionConfig(
        model: 'gpt-4', // Verplicht bij gebruik van een custom provider
        provider: new ProviderConfig(
            baseUrl: 'https://my-api.example.com/v1',
            apiKey: config('services.openai.key'),
        ),
    ),
);
```

Je kunt dit ook als array opgeven.

```php theme={null}
$response = Copilot::run(
    prompt: 'Hello!',
    config: [
        'model' => 'gpt-4',
        'provider' => [
            'baseUrl' => 'https://my-api.example.com/v1',
            'apiKey' => config('services.openai.key'),
        ],
    ],
);
```

## Ollama (lokale provider)

Voor lokale providers zoals Ollama is geen `apiKey` nodig.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ProviderConfig;
use Revolution\Copilot\Types\SessionConfig;

$response = Copilot::run(
    prompt: 'Hello!',
    config: new SessionConfig(
        model: 'deepseek-coder-v2:16b',
        provider: new ProviderConfig(
            type: 'openai',
            baseUrl: 'http://localhost:11434/v1',
        ),
    ),
);
```

## Azure OpenAI

Let bij het gebruik van Azure OpenAI op de volgende punten.

* Geef voor `type` altijd `azure` op (niet `openai`)
* Geef in `baseUrl` alleen de host op (geen paden zoals `/openai/v1`)

```php theme={null}
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ProviderConfig;
use Revolution\Copilot\Types\SessionConfig;

$response = Copilot::run(
    prompt: 'Hello!',
    config: new SessionConfig(
        model: 'gpt-4',
        provider: new ProviderConfig(
            type: 'azure', // Geef voor Azure-endpoints altijd 'azure' op
            baseUrl: 'https://my-resource.openai.azure.com', // Alleen de host
            apiKey: config('services.azure.openai_key'),
            azure: [
                'apiVersion' => '2024-10-21',
            ],
        ),
    ),
);
```

## Belangrijke aandachtspunten

<Warning>
  Bij gebruik van een custom provider is de parameter `model` verplicht. Zonder deze parameter krijg je een foutmelding.
</Warning>

* Gebruik voor Azure-endpoints (`*.openai.azure.com`) altijd `type: 'azure'`
* Geef in `baseUrl` alleen de host op; de SDK bouwt het pad automatisch op

## onListModels-handler

Als je een custom provider in BYOK-modus gebruikt, kun je instellen dat `client->listModels()` een custom handler aanroept in plaats van de CLI-server.

Dit configureer je met de methode `listModelsUsing()`. Omdat de client makkelijk al geïnitialiseerd raakt, moet je `listModelsUsing()` altijd vóór `listModels()` instellen.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ModelInfo;

$models = Copilot::client()->listModelsUsing(function (): array {
    // Retourneer de modellen die beschikbaar zijn bij de custom provider
    return [
        ['id' => 'my-model-1', 'name' => 'My Model 1', 'version' => '1.0'],
        ['id' => 'my-model-2', 'name' => 'My Model 2', 'version' => '2.0'],
    ];
})->listModels();
```

Geef `null` door om de handler te verwijderen en terug te keren naar het standaardgedrag van de CLI-server.

```php theme={null}
// Verwijder de handler en keer terug naar het standaardgedrag (opvragen bij de CLI-server)
$models = Copilot::client()->listModelsUsing(null)->listModels();
```

Wanneer `listModelsUsing()` is ingesteld, heeft `listModels()` geen verbinding met de CLI-server nodig en wordt er ook geen cache gebruikt.

<Info>
  Raadpleeg de [GitHub-repository](https://github.com/invokable/laravel-copilot-sdk) voor de meest actuele informatie.
</Info>


## Related topics

- [Telemetry](/nl/packages/laravel-copilot-sdk/telemetry.md)
- [Een custom provider voor de AI SDK maken](/nl/advanced/ai-sdk-custom-provider.md)
- [Laravel AI-agents ondersteunen nu MCP-servers](/nl/blog/ai-sdk-mcp-client.md)
- [Laravel Socialite (sociale authenticatie)](/nl/socialite.md)
- [Authenticatie - GitHub Copilot SDK for Laravel](/nl/packages/laravel-copilot-sdk/auth.md)
