Files
ableton-mcp-ai/ralph/scripts/Test-RalphProviders.ps1

106 lines
3.1 KiB
PowerShell

param(
[string[]]$ProviderNames = @()
)
. (Join-Path $PSScriptRoot "Common.ps1")
function Get-ResponseText {
param($Response)
if ($null -eq $Response) {
return ""
}
if ($Response.content) {
$textBlocks = @($Response.content | Where-Object { $_.type -eq "text" -and $_.text })
if ($textBlocks.Count -gt 0) {
return (($textBlocks | ForEach-Object { [string]$_.text }) -join " ").Trim()
}
$fallbackBlocks = @($Response.content | Where-Object { $_.thinking -or $_.text })
if ($fallbackBlocks.Count -gt 0) {
$parts = foreach ($block in $fallbackBlocks) {
if ($block.text) { [string]$block.text }
elseif ($block.thinking) { [string]$block.thinking }
}
return (($parts | Where-Object { $_ }) -join " ").Trim()
}
}
return (($Response | ConvertTo-Json -Depth 20) -replace "\s+", " ").Trim()
}
$config = Get-ProvidersConfig
if ($ProviderNames.Count -eq 0) {
$ProviderNames = @($config.providers.PSObject.Properties.Name)
}
else {
$expanded = @()
foreach ($entry in $ProviderNames) {
if ($null -ne $entry) {
$expanded += ([string]$entry).Split(",") | ForEach-Object { $_.Trim() } | Where-Object { $_ }
}
}
$ProviderNames = $expanded
}
$results = @()
foreach ($name in $ProviderNames) {
$provider = Get-ProviderConfig -Name $name
$endpoint = ([string]$provider.base_url).TrimEnd("/") + "/v1/messages"
$headers = @{
"x-api-key" = [string]$provider.auth_token
"anthropic-version" = "2023-06-01"
"content-type" = "application/json"
}
$body = @{
model = [string]$provider.model
max_tokens = 16
messages = @(
@{
role = "user"
content = "Respond with exactly OK and nothing else."
}
)
} | ConvertTo-Json -Depth 10
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
try {
$response = Invoke-RestMethod -Method Post -Uri $endpoint -Headers $headers -Body $body -TimeoutSec 120
$stopwatch.Stop()
$text = Get-ResponseText -Response $response
$semanticOk = ($text.Trim() -eq "OK")
$results += [ordered]@{
provider = $name
model = [string]$provider.model
endpoint = $endpoint
http_ok = $true
semantic_ok = $semanticOk
ok = $semanticOk
latency_ms = $stopwatch.ElapsedMilliseconds
response = $text.Trim()
}
}
catch {
$stopwatch.Stop()
$results += [ordered]@{
provider = $name
model = [string]$provider.model
endpoint = $endpoint
http_ok = $false
semantic_ok = $false
ok = $false
latency_ms = $stopwatch.ElapsedMilliseconds
response = $_.Exception.Message
}
}
}
$outputPath = Join-Path (Get-RalphRoot) "state\provider_smoke.json"
Write-Utf8File -Path $outputPath -Content ((@($results) | ConvertTo-Json -Depth 10) + "`n")
Get-Content -Raw -Path $outputPath