Public/Get-OpenAIDecisionRanking.ps1
|
function Get-OpenAIDecisionRanking { [CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory,ValueFromPipeline)][object]$State, [Parameter(Mandatory,Position=0)][ValidateNotNullOrEmpty()][string]$Question, [Parameter()][ValidateRange(1,[int]::MaxValue)][int]$Top, [Parameter()][string]$Model='gpt-6-luna' ) begin { $ranked = [System.Collections.Generic.List[object]]::new() } process { $definition = New-OpenAIYesNoQuestion -Name ranking -Question $Question $response = Invoke-OpenAIDecision -InputObject $State -Question $definition -Model $Model -ErrorAction Stop $answer = Get-OpenAIDecisionAnswer -Response $response -Name ranking if ($answer.type -eq 'refusal' -or $null -eq $answer.probability) { throw 'OpenAI declined or omitted a ranking answer.' } $ranked.Add([pscustomobject]@{ State=$State; Probability=[double]$answer.probability }) } end { $ordered = $ranked | Sort-Object -Property Probability -Descending -Stable if ($PSBoundParameters.ContainsKey('Top')) { $ordered = $ordered | Select-Object -First $Top } foreach ($item in $ordered) { $PSCmdlet.WriteObject($item.State,$false) } } } |