Public/ConvertFrom-Token.ps1
function ConvertFrom-Token { [CmdletBinding(DefaultParameterSetName = 'encoding')] [OutputType([string])] param ( [Parameter(Mandatory, Position = 0, ValueFromPipeline)] [AllowEmptyCollection()] [int[]]$Token, [Parameter(Mandatory, Position = 1, ParameterSetName = 'model')] [string][LowerCaseTransformation()]$Model, [Parameter(Mandatory = $false, Position = 1, ParameterSetName = 'encoding')] [ValidateSet('cl100k_base', 'o200k_base')] [string]$Encoding = 'cl100k_base', [Parameter()] [switch]$AsArray ) begin { if ($PSCmdlet.ParameterSetName -eq 'Model') { if ([string]::IsNullOrWhiteSpace($Model)) { Write-Error -Exception ([System.ArgumentException]::new('The model name not specifed properly.')) return } # Convert model name to encoding name $Encoding = Convert-ModelToEncoding -Model $Model if (-not $Encoding) { Write-Error -Exception ([System.ArgumentException]::new('The model name not specifed properly.')) return } } $Decoder = switch ($Encoding) { 'cl100k_base' { [PSOpenAI.TokenizerLib.Cl100kBaseTokenizer]::Decode } 'o200k_base' { [PSOpenAI.TokenizerLib.O200kBaseTokenizer]::Decode } } $TokenList = [System.Collections.Generic.List[int]]::new() } process { try { if ($AsArray) { foreach ($t in $Token) { [int[]]$t_array = , $t $Decoder.Invoke($t_array) } } elseif ($Token.Length -eq 0) { [string]::Empty } elseif ($Token.Length -eq 1) { $TokenList.Add($Token[0]) } else { $TokenList.Clear() $PartialTokenList = [System.Collections.Generic.List[int]]::new() foreach ($t in $Token) { $PartialTokenList.Add($t) } $Decoder.Invoke($PartialTokenList.ToArray()) } } catch { Write-Error -Exception $_.Exception } } end { if ($TokenList.Count -ne 0) { try { $Decoder.Invoke($TokenList.ToArray()) } catch { Write-Error -Exception $_.Exception } } } } |