diff --git a/PSAI.psd1 b/PSAI.psd1 index 87c14b0..b4e0e93 100644 --- a/PSAI.psd1 +++ b/PSAI.psd1 @@ -1,6 +1,6 @@ @{ RootModule = 'PSAI.psm1' - ModuleVersion = '0.4.9' + ModuleVersion = '0.4.10' GUID = '68662d19-a8f1-484f-b1b7-3bf0e8a436df' Author = 'Douglas Finke' CompanyName = 'Doug Finke' diff --git a/Private/Invoke-OAIBeta.ps1 b/Private/Invoke-OAIBeta.ps1 index 00ca02d..4ca2e76 100644 --- a/Private/Invoke-OAIBeta.ps1 +++ b/Private/Invoke-OAIBeta.ps1 @@ -118,22 +118,53 @@ function Invoke-OAIBeta { Invoke-RestMethod @params } catch { + $targetError = $null + $message = $null + if ($Provider -eq 'OpenAI') { - $message = $_.ErrorDetails.Message - if (Test-JsonReplacement $message -ErrorAction SilentlyContinue) { - $targetError = $message | ConvertFrom-Json - $targetError = $targetError.error.message - } + if ($null -ne $_.ErrorDetails) { + $message = $_.ErrorDetails.Message + } + + if ($null -ne $message -and (Test-JsonReplacement $message -ErrorAction SilentlyContinue)) { + try { + $parsed = $message | ConvertFrom-Json + $targetError = $parsed.error.message + } + catch { + $targetError = "Failed to parse OpenAI error JSON: $message" + } + } + elseif ($null -ne $_.Exception.Response) { + try { + $reader = New-Object System.IO.StreamReader($_.Exception.Response.GetResponseStream()) + $responseBody = $reader.ReadToEnd() + + if ($responseBody | Test-JsonReplacement -ErrorAction SilentlyContinue) { + $json = $responseBody | ConvertFrom-Json + $targetError = $json.error.message + } + else { + $targetError = "Raw OpenAI response: $responseBody" + } + } + catch { + $targetError = "Unable to read HTTP error response: $_" + } + } else { - $targetError = "[{0}] - {1}" -f $Uri, $message + $fallbackMessage = if ($null -ne $message) { $message } else { $_.Exception.Message } + $targetError = "[{0}] - {1}" -f $Uri, $fallbackMessage } } - - if ($Provider -eq 'AzureOpenAI') { + elseif ($Provider -eq 'AzureOpenAI') { $targetError = $_.Exception.Message } - - # Write-Error $targetError + else { + $targetError = "Unhandled provider or unknown error: $($_.Exception.Message)" + } + + Write-Error "OpenAI API call failed: $targetError" throw $targetError - } + } } diff --git a/changelog.md b/changelog.md index 0a5ea50..eaea915 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,8 @@ +## v0.4.10 + +- Big thank you to [Kenny White](https://github.com/whiteken) + - Added much needed message info for the user "You exceeded your current quota, please check your plan and billing details" + ## v0.4.9 - Made `Search-YouTube` and `Get-YouTubeTranscript` global functions