Sync: Complete project state with all MEGA SPRINT V1-V3 features and Codex stubs
This commit is contained in:
105
ralph/scripts/Test-RalphProviders.ps1
Normal file
105
ralph/scripts/Test-RalphProviders.ps1
Normal file
@@ -0,0 +1,105 @@
|
||||
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
|
||||
Reference in New Issue
Block a user