Public/New-OAIAssistant.ps1

<#
.SYNOPSIS
Creates a new OpenAI Assistant.
 
.DESCRIPTION
The New-OAIAssistant function is used to create a new OpenAI Assistant. It sends a POST request to the OpenAI API to create the assistant with the specified parameters.
 
.PARAMETER Name
The name of the assistant.
 
.PARAMETER Instructions
The instructions to provide to the assistant.
 
.PARAMETER Description
The description of the assistant.
 
.PARAMETER Tools
The tools used by the assistant. There can be a maximum of 128 tools per assistant. Tools can be of types code_interpreter, file_search, or function.
 
.PARAMETER ToolResources
The resources required by the tools used by the assistant. The resources are specific to the type of tool. For example, the code_interpreter tool requires a list of file IDs, while the file_search tool requires a list of vector store IDs.
 
.PARAMETER Model
The model to use for the assistant. Valid values are 'gpt-4', 'gpt-3.5-turbo', 'gpt-3.5-turbo-16k', 'gpt-4-turbo-preview', 'gpt-4-1106-preview', and 'gpt-3.5-turbo-1106'. The default value is 'gpt-3.5-turbo'.
 
.PARAMETER Metadata
The metadata associated with the assistant.
 
.PARAMETER Temperature
The temperature parameter for generating responses. Must be a value between 0 and 2.
 
.PARAMETER TopP
The top-p parameter for generating responses. Must be a value between 0 and 1.
 
.PARAMETER ResponseFormat
The format of the response. Valid values are 'auto', 'json', and 'text'. The default value is 'auto'.
 
.EXAMPLE
New-OAIAssistant -Name 'MyAssistant' -Instructions 'How can I help you?' -Description 'An assistant to answer questions' -Tools 'Calculator' -ToolResources 'https://example.com/calculator' -Model 'gpt-3.5-turbo' -Metadata @{ 'version' = '1.0' } -Temperature 0.8 -TopP 0.5 -ResponseFormat 'json'
 
This example creates a new OpenAI Assistant named 'MyAssistant' with the specified parameters.
 
.LINK
https://platform.openai.com/docs/api-reference/assistants/createAssistant
#>

function New-OAIAssistant {
    [CmdletBinding()]
    param(
        $Name,
        $Instructions,
        $Description,
        $Tools,
        $ToolResources,
        $Model = 'gpt-4o-mini',
        $Metadata,
        [ValidateScript({ $_ -ge 0 -and $_ -le 2 })]
        $Temperature = $null,
        [ValidateScript({ $_ -ge 0 -and $_ -le 1 })]
        $TopP = $null,
        [ValidateSet('auto', 'json', 'text')]
        $ResponseFormat = 'auto'
    )
    
    $url = $baseUrl + '/assistants'
    $Method = 'Post'
    
    $body = @{
        name         = $Name
        instructions = $Instructions
        model        = $Model
    }

    if ($Description) {
        $body['description'] = $Description        
    }

    if ($Tools) {
        $body['tools'] = @($Tools)
    }

    if ($ToolResources) {
        $body['tool_resources'] = $ToolResources
    }

    if ($Metadata) {
        $body['metadata'] = $Metadata        
    }

    if ($Temperature) {
        $body['temperature'] = $Temperature
    }

    if ($TopP) {
        $body['top_p'] = $TopP
    }

    if ($ResponseFormat -eq 'json') {
        $body['response_format'] = @{ 'type' = 'json_object' }
    }
    elseif ($ResponseFormat -eq 'text') {
        $body['response_format'] = @{ 'type' = 'text' }
    }

    Invoke-OAIBeta -Uri $url -Method $Method -Body $body
}