Functions/GenXdev.AI.Queries/Add-EmoticonsToText.ps1
|
############################################################################### <# .SYNOPSIS Enhances text by adding contextually appropriate emoticons using AI. .DESCRIPTION This function processes input text to add emoticons that match the emotional context. It can accept input directly through parameters, from the pipeline, or from the system clipboard. The function leverages AI models to analyze the text and select appropriate emoticons, making messages more expressive and engaging. .LICENSE Copyright (C) 2026 René Vaessen / GenXdev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. .PARAMETER Text The input text to enhance with emoticons. If not provided, the function will read from the system clipboard. Multiple lines of text are supported. .PARAMETER Instructions Additional instructions to guide the AI model in selecting and placing emoticons. These can help fine-tune the emotional context and style of added emoticons. .PARAMETER Temperature Temperature for response randomness (0.0-1.0). .PARAMETER SetClipboard When specified, copies the enhanced text back to the system clipboard after processing is complete. .PARAMETER LLMQueryType The type of LLM query. .PARAMETER Model The model identifier or pattern to use for AI operations. .PARAMETER ApiEndpoint The API endpoint URL for AI operations. .PARAMETER ApiKey The API key for authenticated AI operations. .PARAMETER PromptForSettings When specified, launches an interactive prompt to configure the LLM settings .PARAMETER TimeoutSeconds The timeout in seconds for AI operations. .PARAMETER SessionOnly Use alternative settings stored in session for AI preferences. .PARAMETER ClearSession Clear alternative settings stored in session for AI preferences. .PARAMETER PreferencesDatabasePath Database path for preference data files. .PARAMETER SkipSession Store settings only in persistent preferences without affecting session. .EXAMPLE Add-EmoticonsToText -Text "Hello, how are you today?" -SetClipboard .EXAMPLE "Time to celebrate!" | emojify ###############################################################################> function Add-EmoticonsToText { [CmdletBinding()] [OutputType([System.String])] [Alias('emojify')] param ( ####################################################################### [Parameter( Position = 0, Mandatory = $false, ValueFromPipeline = $true, HelpMessage = 'The text to enhance with emoticons' )] [string] $Text, ####################################################################### [Parameter( Position = 1, Mandatory = $false, HelpMessage = 'Additional instructions for the AI model' )] [string] $Instructions = '', ########################################################################### [Parameter( Position = 2, Mandatory = $false, HelpMessage = 'Array of file paths to attach' )] [string[]] $Attachments = @(), ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Temperature for response randomness (0.0-1.0)' )] [ValidateRange(-1, 1.0)] [double] $Temperature = -1, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Image detail level' )] [ValidateSet('low', 'medium', 'high')] [string] $ImageDetail = 'low', ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Array of function definitions' )] [hashtable[]] $Functions = @(), ########################################################################### [Parameter( Mandatory = $false, HelpMessage = ('Array of PowerShell command definitions to use ' + 'as tools') )] [GenXdev.Helpers.ExposedCmdletDefinition[]] $ExposedCmdLets = @(), ########################################################################### [Parameter( Mandatory = $false, HelpMessage = ("Array of command names that don't require " + 'confirmation') )] [Alias('NoConfirmationFor')] [string[]] $NoConfirmationToolFunctionNames = @(), ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'The type of LLM query' )] [ValidateSet( 'SimpleIntelligence', 'Knowledge', 'Pictures', 'TextTranslation', 'Coding', 'ToolUse' )] [string] $LLMQueryType = 'SimpleIntelligence', ########################################################################### [Parameter( Mandatory = $false, HelpMessage = ('The model identifier or pattern to use for AI ' + 'operations') )] [string] $Model, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'The API endpoint URL for AI operations' )] [string] $ApiEndpoint, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'The API key for authenticated AI operations' )] [string] $ApiKey, ################################################################### [Parameter( Mandatory = $false, HelpMessage = ('Launch interactive prompt to configure LLM settings') )] [switch] $PromptForSettings, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Indicates that LLM has no support for JSON schemas' )] [switch] $NoSupportForJsonSchema, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'The timeout in seconds for AI operations' )] [int] $TimeoutSeconds, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Database path for preference data files' )] [Alias('DatabasePath')] [string] $PreferencesDatabasePath, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Copy the enhanced text to clipboard' )] [switch]$SetClipboard, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = "Include model's thoughts in output" )] [switch] $DontAddThoughtsToHistory, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Continue from last conversation' )] [switch] $ContinueLast, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Enable text-to-speech for AI responses' )] [switch] $Speak, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Enable text-to-speech for AI thought responses' )] [switch] $SpeakThoughts, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = "Don't store session in session cache" )] [switch] $NoSessionCaching, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Allow the use of default AI tools during processing' )] [switch] $AllowDefaultTools, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = ('Use alternative settings stored in session for ' + 'preferences') )] [switch] $SessionOnly, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = ('Clear alternative settings stored in session for ' + 'AI preferences') )] [switch] $ClearSession, ########################################################################### [Parameter( Mandatory = $false, HelpMessage = ('Store settings only in persistent preferences ' + 'without affecting session') )] [Alias('FromPreferences')] [switch] $SkipSession, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Temperature for audio response randomness (passed to LLMQuery)' )] [double] $AudioTemperature, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Temperature for response generation (passed to LLMQuery)' )] [double] $TemperatureResponse, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Language code or name for processing (passed to LLMQuery)' )] [string] $Language, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Number of CPU threads to use (passed to LLMQuery)' )] [int] $CpuThreads, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Regular expression to suppress output (passed to LLMQuery)' )] [string] $SuppressRegex, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Audio context size for processing (passed to LLMQuery)' )] [int] $AudioContextSize, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Silence threshold for audio detection (passed to LLMQuery)' )] [double] $SilenceThreshold, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Length penalty for sequence generation (passed to LLMQuery)' )] [double] $LengthPenalty, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Entropy threshold for output filtering (passed to LLMQuery)' )] [double] $EntropyThreshold, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Log probability threshold for output filtering (passed to LLMQuery)' )] [double] $LogProbThreshold, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'No speech threshold for audio detection (passed to LLMQuery)' )] [double] $NoSpeechThreshold, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Disable speech output (passed to LLMQuery)' )] [switch] $DontSpeak, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Disable speech output for thoughts (passed to LLMQuery)' )] [switch] $DontSpeakThoughts, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Disable VOX (voice activation) (passed to LLMQuery)' )] [switch] $NoVOX, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Use desktop audio capture (passed to LLMQuery)' )] [switch] $UseDesktopAudioCapture, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Disable context usage (passed to LLMQuery)' )] [switch] $NoContext, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Enable beam search sampling strategy (passed to LLMQuery)' )] [switch] $WithBeamSearchSamplingStrategy, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Return only responses (passed to LLMQuery)' )] [switch] $OnlyResponses, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Output only markup blocks (passed to LLMQuery)' )] [switch] $OutputMarkdownBlocksOnly, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Filter for markup block types (passed to LLMQuery)' )] [string[]] $MarkupBlocksTypeFilter, ############################################################################### [Parameter( Mandatory = $false, HelpMessage = 'Maximum tool callback length (passed to LLMQuery)' )] [int] $MaxToolcallBackLength ########################################################################### ) begin { # output initialization message for verbose logging Microsoft.PowerShell.Utility\Write-Verbose ( 'Initializing emoticon enhancement' ) } process { # construct instructions for emoticon enhancement by combining base prompt # with any additional user instructions $emotifyInstructions = ( 'Add funny or expressive emojii to the text provided as content ' + "of the user-role message. Don't change the text otherwise. " + "$Instructions" ) # output verbose information about the processing instructions Microsoft.PowerShell.Utility\Write-Verbose ( "Processing text with instructions: $emotifyInstructions" ) # invoke the language model with emoticon instructions and pass all # bound parameters through to the underlying function $params = GenXdev\Copy-IdenticalParamValues ` -BoundParameters $PSBoundParameters ` -FunctionName 'GenXdev\Invoke-LLMTextTransformation' ` -DefaultValues (Microsoft.PowerShell.Utility\Get-Variable -Scope Local -ErrorAction SilentlyContinue) GenXdev\Invoke-LLMTextTransformation @params ` -Instructions $emotifyInstructions } end { # output completion message for verbose logging Microsoft.PowerShell.Utility\Write-Verbose ( 'Completed emoticon enhancement' ) } } ############################################################################### |