Public/New-DifyModel.ps1

function New-DifyModel {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUsePSCredentialType')]
    [CmdletBinding()]
    param(
        [String] $Provider,
        [String] $From = "predefined",
        [String] $Name,
        [String] $Type,
        [Hashtable] $Credential
    )

    $ValidFroms = @("predefined", "customizable")
    if ($From -notin $ValidFroms) {
        throw "Invalid value for Type. Must be one of: $($ValidFroms -join ', ')"
    }
    if (-not $Provider) {
        throw "Provider is required"
    }

    switch ($From) {
        "predefined" {
            if (-not $Credential) {
                throw "Credential is required when From is 'predefined'"
            }
            $Endpoint = "$($env:PSDIFY_URL)/console/api/workspaces/current/model-providers/$($Provider)"
            $Method = "POST"
            $Body = @{
                "config_from"    = "predefined-model"
                "credentials"    = $Credential
                "load_balancing" = @{
                    "enabled" = $false
                    "configs" = @()
                }
            } | ConvertTo-Json
            try {
                $Response = Invoke-DifyRestMethod -Uri $Endpoint -Method $Method -Body $Body -Token $env:PSDIFY_CONSOLE_TOKEN
            }
            catch {
                throw "Failed to create model provider: $_"
            }
            if (-not $Response.result -or $Response.result -ne "success") {
                throw "Failed to create model provider"
            }

            return Get-DifyModel -Provider $Provider -From $From
        }
        "customizable" {
            $ValidTypes = @("llm", "text-embedding", "speech2text", "moderation", "tts")
            if ($Type -notin $ValidTypes) {
                throw "Invalid value for Type. Must be one of: $($ValidTypes -join ', ')"
            }
            if (-not $Name) {
                throw "Name is required when Type is 'Model'"
            }
            if (-not $Type) {
                throw "Type is required when Type is 'Model'"
            }
            if (-not $Credential) {
                throw "Credential is required when Type is 'Model'"
            }
            $Endpoint = "$($env:PSDIFY_URL)/console/api/workspaces/current/model-providers/$($Provider)/models"
            $Method = "POST"
            $Body = @{
                "model"          = $Name
                "model_type"     = $Type
                "credentials"    = $Credential
                "load_balancing" = @{
                    "enabled" = $false
                    "configs" = @()
                }
            } | ConvertTo-Json
            try {
                $Response = Invoke-DifyRestMethod -Uri $Endpoint -Method $Method -Body $Body -Token $env:PSDIFY_CONSOLE_TOKEN
            }
            catch {
                throw "Failed to create model: $_"
            }
            if (-not $Response.result -or $Response.result -ne "success") {
                throw "Failed to create model"
            }

            return Get-DifyModel -Provider $Provider -From $From -Name $Name -Type $Type
        }
    }
}