Private/Get-PSAOAIResponseText.ps1
|
function Get-PSAOAIResponseText { [CmdletBinding()] param([Parameter(Mandatory)][AllowNull()]$Response, [switch]$FullResponse) $failure = $null if ($null -eq $Response -or $Response -isnot [pscustomobject] -or $Response.status -cnotin @('completed','incomplete','failed')) { $failure='ProtocolError' } elseif ($Response.status -ceq 'failed' -or $null -ne $Response.error) { $failure='Failed' } elseif ($Response.output -isnot [array]) { $failure='ProtocolError' } $text = [System.Text.StringBuilder]::new() $refused = $false if (-not $failure) { foreach ($item in $Response.output) { if ($null -eq $item -or $item -isnot [pscustomobject] -or $item.type -isnot [string]) { $failure='ProtocolError'; break } if ($item.type -ceq 'message' -and $item.content -isnot [array]) { $failure='ProtocolError'; break } foreach ($block in $item.content) { if ($null -eq $block -or $block -isnot [pscustomobject] -or $block.type -isnot [string]) { $failure='ProtocolError'; break } if ($block.type -ceq 'refusal') { $refused=$true } if ($block.type -ceq 'output_text') { if ($block.text -isnot [string]) { $failure='ProtocolError'; break } [void]$text.Append($block.text) } } } } if (-not $failure -and $refused) { if ($FullResponse) { Write-Warning 'PSAOAI.Response.Refused: response contains a refusal.' } else { $failure='Refused' } } if (-not $failure -and $Response.status -ceq 'incomplete') { Write-Warning 'PSAOAI.Response.Incomplete: response is partial.' } if (-not $failure -and -not $FullResponse -and $text.Length -eq 0) { $failure='NoText' } if ($failure) { $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new( [InvalidOperationException]::new("Responses result rejected ($failure)."), "PSAOAI.Response.$failure", 'InvalidResult', $null)) } if ($FullResponse) { return $Response } return $text.ToString() } |