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 @() } } |