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

# Benutzerdefinierte Provider

> Beschreibt, wie Sie im Laravel Copilot SDK BYOK-Provider wie OpenAI-kompatible APIs, Ollama oder Azure OpenAI konfigurieren.

## Benutzerdefinierte Provider

Mit benutzerdefinierten Providern (BYOK – Bring Your Own Key) können Sie mit eigenen API-Schlüsseln OpenAI-kompatible API-Endpunkte anbinden. Lokale Provider wie Ollama werden ebenfalls unterstützt.

## ProviderConfig

Die Klasse `ProviderConfig` hat folgende Eigenschaften.

| Eigenschaft   | Typ            | Beschreibung                                                             |
| ------------- | -------------- | ------------------------------------------------------------------------ |
| `baseUrl`     | `string`       | **Erforderlich.** URL des API-Endpunkts                                  |
| `type`        | `string\|null` | Provider-Typ. `openai` (Standard), `azure`, `anthropic`                  |
| `wireApi`     | `string\|null` | API-Format (nur openai/azure). `completions` (Standard) oder `responses` |
| `apiKey`      | `string\|null` | API-Schlüssel. Für lokale Provider wie Ollama nicht erforderlich         |
| `bearerToken` | `string\|null` | Für Bearer-Token-Authentifizierung. Hat Vorrang vor `apiKey`             |
| `azure`       | `array\|null`  | Azure-spezifische Optionen, z. B. `['apiVersion' => '2024-10-21']`       |

## Grundlegende Verwendung

Wenn Sie einen benutzerdefinierten Provider verwenden, ist der Parameter `model` **erforderlich**.

```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', // Bei benutzerdefinierten Providern erforderlich
        provider: new ProviderConfig(
            baseUrl: 'https://my-api.example.com/v1',
            apiKey: config('services.openai.key'),
        ),
    ),
);
```

Die Angabe im Array-Format ist ebenfalls möglich.

```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 (lokaler Provider)

Für lokale Provider wie Ollama ist `apiKey` nicht erforderlich.

```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

Beachten Sie bei der Verwendung von Azure OpenAI Folgendes.

* Für `type` muss zwingend `azure` angegeben werden (nicht `openai`)
* In `baseUrl` nur den Host angeben (keine Pfade wie `/openai/v1` mitgeben)

```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', // Bei Azure-Endpunkten immer 'azure' angeben
            baseUrl: 'https://my-resource.openai.azure.com', // Nur der Host
            apiKey: config('services.azure.openai_key'),
            azure: [
                'apiVersion' => '2024-10-21',
            ],
        ),
    ),
);
```

## Wichtige Hinweise

<Warning>
  Bei Verwendung eines benutzerdefinierten Providers ist der Parameter `model` erforderlich. Ohne Angabe kommt es zu einem Fehler.
</Warning>

* Verwenden Sie bei Azure-Endpunkten (`*.openai.azure.com`) unbedingt `type: 'azure'`
* Geben Sie in `baseUrl` nur den Host an; die Pfadbildung übernimmt das SDK automatisch

## onListModels-Handler

Wenn Sie im BYOK-Modus einen benutzerdefinierten Provider einsetzen, können Sie `client->listModels()` so konfigurieren, dass statt des CLI-Servers ein benutzerdefinierter Handler aufgerufen wird.

Konfigurieren Sie ihn mit der Methode `listModelsUsing()`. Da der Client leicht initialisiert wird, setzen Sie `listModelsUsing()` stets vor `listModels()`.

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

$models = Copilot::client()->listModelsUsing(function (): array {
    // Die im benutzerdefinierten Provider verfügbaren Modelle zurückgeben
    return [
        ['id' => 'my-model-1', 'name' => 'My Model 1', 'version' => '1.0'],
        ['id' => 'my-model-2', 'name' => 'My Model 2', 'version' => '2.0'],
    ];
})->listModels();
```

Bei Übergabe von `null` wird der Handler aufgehoben, und das Standardverhalten des CLI-Servers wird wiederhergestellt.

```php theme={null}
// Handler aufheben und zum Standardverhalten (Abfrage am CLI-Server) zurückkehren
$models = Copilot::client()->listModelsUsing(null)->listModels();
```

Wenn `listModelsUsing()` konfiguriert ist, benötigt `listModels()` keine Verbindung zum CLI-Server und verwendet auch keinen Cache.

<Info>
  Aktuelle Informationen finden Sie im [GitHub-Repository](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Erste Schritte - GitHub Copilot SDK für Laravel](/de/packages/laravel-copilot-sdk/getting-started.md)
- [Socialite für Discord](/de/packages/socialite-discord.md)
- [Benutzerdefinierte Agenten](/de/packages/laravel-copilot-sdk/custom-agents.md)
- [Telemetrie](/de/packages/laravel-copilot-sdk/telemetry.md)
- [Laravel AI SDK](/de/ai-sdk.md)
