Private/Remove-MetroAIAutoGeneratedProperties.ps1

function Remove-MetroAIAutoGeneratedProperties {
    <#
    .SYNOPSIS
        Removes auto-generated properties from Metro AI resource objects that shouldn't be included in POST/PUT requests.
    .DESCRIPTION
        Cleans up resource objects by removing system-generated properties and auto-generated OpenAPI functions
        that are returned by GET requests but should not be included when creating or updating resources.
    .PARAMETER InputObject
        The resource object to clean up.
    .EXAMPLE
        $cleanedResource = Remove-MetroAIAutoGeneratedProperties -InputObject $resourceFromGet
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [object]$InputObject
    )

    process {
        Write-Verbose "Cleaning up auto-generated properties from resource object"

        # Remove system-generated properties that shouldn't be included in creation/updates
        $cleanedObject = $InputObject | Select-Object -ExcludeProperty id, object, created_at

        # Clean up OpenAPI tools by removing auto-generated functions property
        if ($cleanedObject.tools) {
            $toolsProcessed = 0
            foreach ($tool in $cleanedObject.tools) {
                if ($tool.type -eq 'openapi' -and $tool.openapi -and $tool.openapi.functions) {
                    $tool.openapi.PSObject.Properties.Remove('functions')
                    $toolsProcessed++
                    Write-Verbose "Removed auto-generated functions property from OpenAPI tool"
                }
            }
            if ($toolsProcessed -gt 0) {
                Write-Verbose "Processed $toolsProcessed OpenAPI tools and removed auto-generated functions"
            }
        }

        return $cleanedObject
    }
}