Private/Invoke-OpenAIApi.ps1

function Invoke-OpenAIApi {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string] $Prompt,
        [switch] $ReturnJsonResponse,
        [int] $MaxTokens = 4096,
        [float] $Temperature = 1.0,
        [int] $TimeoutSeconds = 90,
        [int] $RetryCount = 3,
        [int] $RetryDelaySeconds = 2,
        [string] $ApiUrl = "https://omg-openai-proxy-func.azurewebsites.net/api/ProxyOpenAI"
    )

    $body = @{
        Prompt             = $Prompt
        MaxTokens          = $MaxTokens
        Temperature        = $Temperature
        TimeoutSeconds     = $TimeoutSeconds
        ReturnJsonResponse = [bool]$ReturnJsonResponse
    } | ConvertTo-Json -Depth 20

    for ($i = 1; $i -le $RetryCount; $i++) {
        try {
            $invokeParams = @{
                Method       = 'Post'
                Uri          = $ApiUrl
                Body         = $body
                Headers      = $headers
                ContentType  = 'application/json'
                TimeoutSec   = $TimeoutSeconds
            }
            $response = Invoke-RestMethod @invokeParams

            Write-Verbose "`nRequest succeeded on attempt $i"

            if ($response -like "*token limit exceeded*") {
                Write-Error $response
                return
            }
            return $response.response
        }
        catch {
            $errMsg = $_.Exception.Message
            Write-Warning "Attempt $i failed: $errMsg"

            if ($i -lt $RetryCount) {
                Start-Sleep -Seconds $RetryDelaySeconds
            }
            else {
                throw "All retry attempts failed: $errMsg"
            }
        }
    }
}