functions/ai/Get-SldgAIProvider.ps1

function Get-SldgAIProvider {
    <#
    .SYNOPSIS
        Returns the current AI provider configuration.

    .DESCRIPTION
        Shows which AI provider is configured, model, endpoint, and which AI features are enabled.
        Returns a structured object useful for pipelines and display.

        When per-purpose model overrides are configured (via Set-SldgAIProvider -Purpose),
        they are included in the ModelOverrides property.

    .PARAMETER Purpose
        Show the effective AI configuration for a specific purpose, resolving overrides.

    .EXAMPLE
        PS C:\> Get-SldgAIProvider

        Provider : Ollama
        Model : llama3
        Endpoint : http://localhost:11434
        ApiKeySet : False
        MaxTokens : 4096
        Temperature : 0.3
        AIGeneration : True
        AILocale : True
        Locale : cs-CZ
        ModelOverrides : {structured-value, batch-generation}

    .EXAMPLE
        PS C:\> (Get-SldgAIProvider).Provider
        Ollama

    .EXAMPLE
        PS C:\> Get-SldgAIProvider -Purpose 'structured-value'

        Shows which provider/model would be used for structured-value generation.
    #>

    [CmdletBinding()]
    [OutputType([SqlLabDataGenerator.AIProviderInfo])]
    param (
        [ValidateSet('column-analysis', 'batch-generation', 'plan-advice', 'schema-analysis', 'structured-value', 'locale-data', 'locale-category')]
        [string]$Purpose
    )

    # If a specific purpose is requested, return the effective config for that purpose
    if ($Purpose -and $script:SldgState.AIModelOverrides.ContainsKey($Purpose)) {
        $ov = $script:SldgState.AIModelOverrides[$Purpose]
        return [SqlLabDataGenerator.AIProviderInfo]@{
            Purpose    = $Purpose
            Provider   = $ov['Provider']
            Model      = $ov['Model']
            Endpoint   = $ov['Endpoint']
            ApiKeySet  = [bool]$ov['ApiKey']
            MaxTokens  = if ($ov['MaxTokens']) { $ov['MaxTokens'] } else { Get-PSFConfigValue -FullName 'SqlLabDataGenerator.AI.MaxTokens' }
            IsOverride = $true
        }
    }

    $provider = Get-PSFConfigValue -FullName 'SqlLabDataGenerator.AI.Provider'
    $apiKey = Get-PSFConfigValue -FullName 'SqlLabDataGenerator.AI.ApiKey'

    $result = [SqlLabDataGenerator.AIProviderInfo]@{
        Provider       = if ($provider) { $provider } else { 'None' }
        Model          = Get-PSFConfigValue -FullName 'SqlLabDataGenerator.AI.Model'
        Endpoint       = Get-PSFConfigValue -FullName 'SqlLabDataGenerator.AI.Endpoint'
        ApiKeySet      = [bool]$apiKey
        MaxTokens      = Get-PSFConfigValue -FullName 'SqlLabDataGenerator.AI.MaxTokens'
        Temperature    = Get-PSFConfigValue -FullName 'SqlLabDataGenerator.AI.Ollama.Temperature'
        SkipCertCheck  = Get-PSFConfigValue -FullName 'SqlLabDataGenerator.AI.Ollama.SkipCertificateCheck'
        AIGeneration   = Get-PSFConfigValue -FullName 'SqlLabDataGenerator.Generation.AIGeneration'
        AILocale       = Get-PSFConfigValue -FullName 'SqlLabDataGenerator.Generation.AILocale'
        Locale         = Get-PSFConfigValue -FullName 'SqlLabDataGenerator.Generation.Locale'
    }

    if ($Purpose) {
        $result.Purpose = $Purpose
        $result.IsOverride = $false
    }

    # Include per-purpose overrides summary
    $overrides = @($script:SldgState.AIModelOverrides.GetEnumerator() | ForEach-Object {
        [SqlLabDataGenerator.AIModelOverride]@{
            Purpose   = $_.Key
            Provider  = $_.Value['Provider']
            Model     = $_.Value['Model']
            Endpoint  = $_.Value['Endpoint']
            MaxTokens = $_.Value['MaxTokens']
        }
    })
    $result.ModelOverrides = $overrides

    # Add connection info if available
    $conn = $script:SldgState.ActiveConnection
    if ($conn) {
        $result.Database = $conn.Database
        $result.ServerInstance = $conn.ServerInstance
        $result.DatabaseProvider = $conn.Provider
    }

    $result
}