Vai al contenuto principale

Provider personalizzati

Utilizzando un provider personalizzato (BYOK - Bring Your Own Key), puoi collegarti a endpoint API compatibili con OpenAI usando la tua chiave. Sono supportati anche provider locali come Ollama.

ProviderConfig

La classe ProviderConfig ha le seguenti proprietà.
ProprietàTipoDescrizione
baseUrlstringObbligatorio. URL dell’endpoint API
typestring|nullTipo di provider. openai (default), azure, anthropic
wireApistring|nullFormato API (solo openai/azure). completions (default) o responses
apiKeystring|nullAPI key. Non necessaria per provider locali come Ollama
bearerTokenstring|nullPer autenticazione Bearer Token. Ha priorità su apiKey
azurearray|nullOpzioni specifiche per Azure. Ad esempio ['apiVersion' => '2024-10-21']

Uso di base

Quando usi un provider personalizzato, il parametro model è obbligatorio.
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', // obbligatorio con provider personalizzato
        provider: new ProviderConfig(
            baseUrl: 'https://my-api.example.com/v1',
            apiKey: config('services.openai.key'),
        ),
    ),
);
Puoi specificarlo anche come array.
$response = Copilot::run(
    prompt: 'Hello!',
    config: [
        'model' => 'gpt-4',
        'provider' => [
            'baseUrl' => 'https://my-api.example.com/v1',
            'apiKey' => config('services.openai.key'),
        ],
    ],
);

Ollama (provider locale)

Per provider locali come Ollama, apiKey non è necessaria.
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

Quando usi Azure OpenAI, tieni presente quanto segue.
  • Specifica sempre type come azure (non openai)
  • Indica in baseUrl solo l’host (non includere path come /openai/v1)
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', // con endpoint Azure specifica sempre 'azure'
            baseUrl: 'https://my-resource.openai.azure.com', // solo host
            apiKey: config('services.azure.openai_key'),
            azure: [
                'apiVersion' => '2024-10-21',
            ],
        ),
    ),
);

Considerazioni importanti

Quando usi un provider personalizzato, il parametro model è obbligatorio. Se non lo specifichi, otterrai un errore.
  • Per gli endpoint Azure (*.openai.azure.com) usa sempre type: 'azure'
  • Specifica in baseUrl solo l’host; la costruzione del path è gestita automaticamente dall’SDK

Handler onListModels

Se usi un provider personalizzato in modalità BYOK, puoi configurare client->listModels() in modo che invochi un handler personalizzato invece del server CLI. Configuralo con il metodo listModelsUsing(). Poiché il client tende a essere già inizializzato, imposta sempre listModelsUsing() prima di listModels().
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ModelInfo;

$models = Copilot::client()->listModelsUsing(function (): array {
    // Restituisce i modelli disponibili dal provider personalizzato
    return [
        ['id' => 'my-model-1', 'name' => 'My Model 1', 'version' => '1.0'],
        ['id' => 'my-model-2', 'name' => 'My Model 2', 'version' => '2.0'],
    ];
})->listModels();
Passando null rimuovi l’handler e torni al comportamento predefinito del server CLI.
// Rimuove l'handler e torna al comportamento predefinito (query al server CLI)
$models = Copilot::client()->listModelsUsing(null)->listModels();
Se listModelsUsing() è impostato, listModels() non richiede una connessione al server CLI e non usa la cache.
Per le informazioni più recenti fai riferimento al repository GitHub.
Ultima modifica il 13 luglio 2026