Public/Get-PCModels.ps1

function Get-PCModels {
    <#
    .SYNOPSIS
        List available models for an AI provider.
    .DESCRIPTION
        Queries the provider's models endpoint and returns the available model IDs.
        Useful for checking what models your API key has access to.
    .EXAMPLE
        Get-PCModels -Provider openai
    .EXAMPLE
        Get-PCModels -Provider anthropic
    .EXAMPLE
        Get-PCModels -Provider gemini
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [ValidateSet('openai', 'gemini', 'anthropic')]
        [string]$Provider
    )

    $apiKey = Resolve-PCApiKey -Provider $Provider
    if (-not $apiKey) {
        Write-Warning "No API key configured for '$Provider'."
        return @()
    }

    try {
        switch ($Provider) {
            'openai' {
                $response = Invoke-RestMethod `
                    -Uri $script:Providers.openai.ModelsEndpoint `
                    -Headers @{ 'Authorization' = "Bearer $apiKey" } `
                    -TimeoutSec 15

                $response.data |
                    Select-Object id, owned_by, @{ Name = 'created'; Expression = { [DateTimeOffset]::FromUnixTimeSeconds($_.created).DateTime } } |
                    Sort-Object id
            }
            'gemini' {
                $uri = "$($script:Providers.gemini.ModelsEndpoint)?key=$apiKey"
                $response = Invoke-RestMethod -Uri $uri -TimeoutSec 15

                $response.models |
                    Select-Object @{ Name = 'id'; Expression = { $_.name -replace '^models/' } }, displayName, description |
                    Sort-Object id
            }
            'anthropic' {
                $headers = @{
                    'x-api-key'         = $apiKey
                    'anthropic-version' = '2023-06-01'
                }
                $response = Invoke-RestMethod `
                    -Uri "$($script:Providers.anthropic.ModelsEndpoint)?limit=100" `
                    -Headers $headers `
                    -TimeoutSec 15

                $response.data |
                    Select-Object id, display_name, @{ Name = 'created'; Expression = { $_.created_at } } |
                    Sort-Object id
            }
        }
    }
    catch {
        Write-Warning "Failed to list models for '$Provider': $($_.Exception.Message)"
        return @()
    }
}