Private/Invoke-GeminiAIApi.ps1

function Invoke-GeminiAIApi {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string] $Prompt,
        [switch] $ReturnJsonResponse,
        [int] $TimeoutSeconds = 90,
        [int] $RetryCount = 3,
        [int] $RetryDelaySeconds = 2,
        [string] $ApiUrl = "https://omg-geminiai-proxy-func.azurewebsites.net/api/ProxyGeminiAI"
    )

    $body = @{
        Prompt             = $Prompt
        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 "`n[Gemini] Request succeeded on attempt $i"

            if ($response -is [string] -and $response -like "*token limit exceeded*") {
                Write-Error $response
                return
            }

            return $response.response
        }
        catch {
            $errMsg = $_.Exception.Message
            Write-Warning "[Gemini] Attempt $i failed: $errMsg"

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