PSCopilot.Messages/PSCopilot.Messages.psm1

Import-Module $PSScriptRoot\..\PSCopilot.Http

function Find-MessageCreationStep{
    param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        $steps
    )

    $steps | Where-Object { $_.step_details.type -eq "message_creation" }
}

function Get-MessageCreationId{
    param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        $steps
    )

    (Find-MessageCreationStep -steps $steps).step_details.message_creation.message_id
}

function Add-MessageToThread{
    param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$threadId,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$message
    )

    $result = Invoke-AzureOpenAIAPI `
    -query "threads/$threadId/messages" `
    -requestMethod "POST" `
    -requestBody "{`"role`":`"user`",`"content`":`"$message`", `"file_ids`": []}"

    if ($result.Success -eq $true){
        return $result.Response.id
    }
    else{
        Write-Error "Failed to add message to thread"
        throw $result.ErrorMessage
    }
}

function Get-MessageCreationMessage{
    param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $threadId,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $messageId
    )

    $result = Invoke-AzureOpenAIAPI `
    -query "threads/$threadId/messages/$messageId" `
    -requestMethod "GET" `

    if ($result.Success -eq $true){
        return $result.Response.content[0].text.value
    }
    else{
        Write-Error "Failed to get message content"
        throw $result.ErrorMessage
    }
}

Export-ModuleMember -Function Add-MessageToThread, Get-MessageCreationId, Get-MessageCreationMessage