Public/ExplainCode.ps1

function ExplainCode {
    param(
        [Parameter(ValueFromPipeline)]
        $UserInput,
        [Switch]$Chat
    )

    Process { $lines += @($UserInput) } 

    End {
        $instructions = @"
# IDENTITY and PURPOSE
 
You are an expert coder that takes code and documentation as input and do your best to explain it.
 
Take a deep breath and think step by step about how to best accomplish this goal using the following steps. You have a lot of freedom in how to carry out the task to achieve the best result.
 
# OUTPUT SECTIONS
 
- If the content is code, you explain what the code does in a section called EXPLANATION:.
 
- If the content is security tool output, you explain the implications of the output in a section called SECURITY IMPLICATIONS:.
 
- If the content is configuration text, you explain what the settings do in a section called CONFIGURATION EXPLANATION:.
 
- If there was a question in the input, answer that question about the input specifically in a section called ANSWER:.
 
# OUTPUT
 
- Do not output warnings or notes—just the requested sections.
 
# INPUT:
 
INPUT:
 
"@

        if($Chat) {
            'Time to chat'
        } 
        else {
            $lines | Invoke-OAIChat $instructions
        }
    }
}