Skip to content

Commit 8ab437c

Browse files
committed
Add Container endpoint
1 parent b7a99c0 commit 8ab437c

18 files changed

Lines changed: 852 additions & 162 deletions

PSOpenAI.Types.ps1xml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,47 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Types>
3+
<Type>
4+
<Name>PSOpenAI.Container</Name>
5+
<Members>
6+
<ScriptMethod>
7+
<Name>ToString</Name>
8+
<Script>
9+
$this.id -as [string]
10+
</Script>
11+
</ScriptMethod>
12+
</Members>
13+
</Type>
14+
<Type>
15+
<Name>PSOpenAI.Container.File</Name>
16+
<Members>
17+
<ScriptMethod>
18+
<Name>ToString</Name>
19+
<Script>
20+
$this.id -as [string]
21+
</Script>
22+
</ScriptMethod>
23+
</Members>
24+
</Type>
25+
<Type>
26+
<Name>PSOpenAI.File</Name>
27+
<Members>
28+
<ScriptMethod>
29+
<Name>ToString</Name>
30+
<Script>
31+
$this.id -as [string]
32+
</Script>
33+
</ScriptMethod>
34+
</Members>
35+
</Type>
336
<Type>
437
<Name>PSOpenAI.Model</Name>
538
<Members>
39+
<ScriptMethod>
40+
<Name>ToString</Name>
41+
<Script>
42+
$this.id -as [string]
43+
</Script>
44+
</ScriptMethod>
645
<MemberSet>
746
<Name>PSStandardMembers</Name>
847
<Members>

Public/Containers/Add-ContainerFile.ps1

Lines changed: 78 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,16 @@
11
function Add-ContainerFile {
2-
[CmdletBinding(DefaultParameterSetName = 'ContainerId_FileId')]
2+
[CmdletBinding()]
33
[OutputType([pscustomobject])]
44
param (
5-
[Parameter(ParameterSetName = 'Container_FileId', Mandatory, Position = 0, ValueFromPipeline)]
6-
[Parameter(ParameterSetName = 'Container_File', Mandatory, Position = 0, ValueFromPipeline)]
7-
[PSTypeName('PSOpenAI.Container')]$Container,
8-
9-
[Parameter(ParameterSetName = 'ContainerId_FileId', Mandatory, Position = 0)]
10-
[Parameter(ParameterSetName = 'ContainerId_File', Mandatory, Position = 0)]
5+
[Parameter(Mandatory, Position = 0, ValueFromPipeline)]
116
[ValidateNotNullOrEmpty()]
7+
[Alias('Container')]
128
[Alias('container_id')]
139
[string][UrlEncodeTransformation()]$ContainerId,
1410

15-
[Parameter(ParameterSetName = 'Container_FileId', Mandatory, Position = 1)]
16-
[Parameter(ParameterSetName = 'ContainerId_FileId', Mandatory, Position = 1)]
17-
[ValidateNotNullOrEmpty()]
18-
[string][UrlEncodeTransformation()]$FileId,
19-
20-
[Parameter(ParameterSetName = 'Container_File', Mandatory, Position = 1, ValueFromPipeline)]
21-
[Parameter(ParameterSetName = 'ContainerId_File', Mandatory, Position = 1, ValueFromPipeline)]
22-
[string]$File,
11+
[Parameter(Mandatory, Position = 1)]
12+
[Alias('FileId')]
13+
[object[]]$File,
2314

2415
[Parameter()]
2516
[int]$TimeoutSec = 0,
@@ -64,68 +55,87 @@ function Add-ContainerFile {
6455
}
6556

6657
process {
67-
# Get ids
68-
if ($PSCmdlet.ParameterSetName -like 'Container_*') {
69-
$ContainerId = $Container.id
70-
}
71-
if (-not $ContainerId) {
72-
Write-Error -Exception ([System.ArgumentException]::new('Could not retrieve container id.'))
73-
return
74-
}
75-
76-
#region Construct parameters for API request
7758
$QueryUri = $OpenAIParameter.Uri.ToString() -f $ContainerId
78-
$PostBody = [System.Collections.Specialized.OrderedDictionary]::new()
79-
80-
if ($PSCmdlet.ParameterSetName -like '_FileId') {
81-
$PostBody.file_id = $FileId
82-
$OpenAIParameter.ContentType = 'application/json'
83-
}
84-
elseif (Test-Path -LiteralPath $File -PathType Leaf) {
85-
$PostBody.file = Resolve-FileInfo $File
86-
$OpenAIParameter.ContentType = 'multipart/form-data'
87-
}
88-
else {
89-
$PostBody.file_id = [string]$File
90-
$OpenAIParameter.ContentType = 'application/json'
91-
}
92-
#endregion
93-
94-
#region Send API Request
95-
$params = @{
96-
Method = 'Post'
97-
Uri = $QueryUri
98-
ContentType = $OpenAIParameter.ContentType
99-
TimeoutSec = $OpenAIParameter.TimeoutSec
100-
MaxRetryCount = $OpenAIParameter.MaxRetryCount
101-
ApiKey = $OpenAIParameter.ApiKey
102-
AuthType = $OpenAIParameter.AuthType
103-
Organization = $OpenAIParameter.Organization
104-
Body = $PostBody
105-
AdditionalQuery = $AdditionalQuery
106-
AdditionalHeaders = $AdditionalHeaders
107-
AdditionalBody = $AdditionalBody
108-
}
109-
$Response = Invoke-OpenAIAPIRequest @params
11059

111-
# error check
112-
if ($null -eq $Response) {
113-
return
60+
# Create cancellation token for timeout
61+
$Cancellation = [System.Threading.CancellationTokenSource]::new()
62+
if ($TimeoutSec -gt 0) {
63+
$Cancellation.CancelAfter([timespan]::FromSeconds($TimeoutSec))
11464
}
115-
#endregion
11665

117-
#region Parse response object
66+
# Loop through each file to be added
11867
try {
119-
$Response = $Response | ConvertFrom-Json -ErrorAction Stop
68+
foreach ($_file in $File) {
69+
#region Construct parameters for API request
70+
$PostBody = [System.Collections.Specialized.OrderedDictionary]::new()
71+
72+
if ($_file -is [System.IO.FileInfo]) {
73+
$PostBody.file = $_file
74+
$OpenAIParameter.ContentType = 'multipart/form-data'
75+
}
76+
elseif (Test-Path -LiteralPath $_file -PathType Leaf) {
77+
$PostBody.file = Resolve-FileInfo $_file
78+
$OpenAIParameter.ContentType = 'multipart/form-data'
79+
}
80+
else {
81+
$PostBody.file_id = [string]$_file
82+
$OpenAIParameter.ContentType = 'application/json'
83+
}
84+
#endregion
85+
86+
#region Send API Request
87+
$params = @{
88+
Method = 'Post'
89+
Uri = $QueryUri
90+
ContentType = $OpenAIParameter.ContentType
91+
TimeoutSec = $OpenAIParameter.TimeoutSec
92+
MaxRetryCount = $OpenAIParameter.MaxRetryCount
93+
ApiKey = $OpenAIParameter.ApiKey
94+
AuthType = $OpenAIParameter.AuthType
95+
Organization = $OpenAIParameter.Organization
96+
Body = $PostBody
97+
AdditionalQuery = $AdditionalQuery
98+
AdditionalHeaders = $AdditionalHeaders
99+
AdditionalBody = $AdditionalBody
100+
}
101+
$Response = Invoke-OpenAIAPIRequest @params
102+
103+
# error check
104+
if ($null -eq $Response) {
105+
return
106+
}
107+
#endregion
108+
109+
#region Parse response object
110+
try {
111+
$Response = $Response | ConvertFrom-Json -ErrorAction Stop
112+
}
113+
catch {
114+
Write-Error -Exception $_.Exception
115+
}
116+
#endregion
117+
118+
#region Output
119+
ParseContainerFileObject -InputObject $Response
120+
#endregion
121+
122+
# Check cancellation
123+
$Cancellation.Token.ThrowIfCancellationRequested()
124+
}
125+
}
126+
catch [OperationCanceledException] {
127+
Write-TimeoutError
128+
return
120129
}
121130
catch {
122131
Write-Error -Exception $_.Exception
132+
return
133+
}
134+
finally {
135+
if ($null -ne $Cancellation) {
136+
$Cancellation.Dispose()
137+
}
123138
}
124-
#endregion
125-
126-
#region Output
127-
ParseContainerFileObject -InputObject $Response
128-
#endregion
129139
}
130140

131141
end {

Public/Containers/Get-Container.ps1

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ function Get-Container {
22
[CmdletBinding(DefaultParameterSetName = 'List')]
33
[OutputType([pscustomobject])]
44
param (
5-
[Parameter(ParameterSetName = 'Get_Container', Mandatory, Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName)]
6-
[PSTypeName('PSOpenAI.Container')]$Container,
7-
8-
[Parameter(ParameterSetName = 'Get_Id', Mandatory, Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName)]
5+
[Parameter(ParameterSetName = 'Get', Mandatory, Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName)]
96
[ValidateNotNullOrEmpty()]
107
[Alias('container_id')]
8+
[Alias('Container')]
119
[string][UrlEncodeTransformation()]$ContainerId,
1210

1311
[Parameter(ParameterSetName = 'List')]
@@ -68,15 +66,6 @@ function Get-Container {
6866
}
6967

7068
process {
71-
# Get id
72-
if ($PSCmdlet.ParameterSetName -like '*_Container') {
73-
$ContainerId = $Container.id
74-
if (-not $ContainerId) {
75-
Write-Error -Exception ([System.ArgumentException]::new('Could not retrieve container id.'))
76-
return
77-
}
78-
}
79-
8069
# Create cancellation token for timeout
8170
$Cancellation = [System.Threading.CancellationTokenSource]::new()
8271
if ($TimeoutSec -gt 0) {
@@ -87,7 +76,7 @@ function Get-Container {
8776
while ($HasMore) {
8877
#region Construct Query URI
8978
$UriBuilder = [System.UriBuilder]::new($OpenAIParameter.Uri)
90-
if ($PSCmdlet.ParameterSetName -like 'Get_*') {
79+
if ($PSCmdlet.ParameterSetName -eq 'Get') {
9180
$UriBuilder.Path += "/$ContainerId"
9281
$QueryUri = $UriBuilder.Uri
9382
}

Public/Containers/Get-ContainerFile.ps1

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,30 @@
11
function Get-ContainerFile {
2-
[CmdletBinding(DefaultParameterSetName = 'List_Container')]
2+
[CmdletBinding(DefaultParameterSetName = 'List')]
33
[OutputType([pscustomobject])]
44
param (
5-
[Parameter(ParameterSetName = 'Get_Container', Mandatory, Position = 0, ValueFromPipeline)]
6-
[Parameter(ParameterSetName = 'List_Container', Mandatory, Position = 0, ValueFromPipeline)]
7-
[PSTypeName('PSOpenAI.Container')]$Container,
8-
9-
[Parameter(ParameterSetName = 'Get_Id', Mandatory, Position = 0)]
10-
[Parameter(ParameterSetName = 'List_Id', Mandatory, Position = 0)]
5+
[Parameter(ParameterSetName = 'Get', Mandatory, Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName)]
6+
[Parameter(ParameterSetName = 'List', Mandatory, Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName)]
117
[ValidateNotNullOrEmpty()]
8+
[Alias('Container')]
129
[Alias('container_id')]
1310
[string][UrlEncodeTransformation()]$ContainerId,
1411

15-
[Parameter(ParameterSetName = 'Get_Container', Mandatory, Position = 1)]
16-
[Parameter(ParameterSetName = 'Get_Id', Mandatory, Position = 1)]
12+
[Parameter(ParameterSetName = 'Get', Mandatory, Position = 1)]
1713
[ValidateNotNullOrEmpty()]
1814
[string][UrlEncodeTransformation()]$FileId,
1915

20-
[Parameter(ParameterSetName = 'List_Container')]
21-
[Parameter(ParameterSetName = 'List_Id')]
16+
[Parameter(ParameterSetName = 'List')]
2217
[ValidateRange(1, 100)]
2318
[int]$Limit = 100,
2419

25-
[Parameter(ParameterSetName = 'List_Container')]
26-
[Parameter(ParameterSetName = 'List_Id')]
20+
[Parameter(ParameterSetName = 'List')]
2721
[switch]$All,
2822

29-
[Parameter(ParameterSetName = 'List_Container')]
30-
[Parameter(ParameterSetName = 'List_Id')]
23+
[Parameter(ParameterSetName = 'List')]
3124
[ValidateSet('asc', 'desc')]
3225
[string][LowerCaseTransformation()]$Order = 'asc',
3326

34-
[Parameter(ParameterSetName = 'List_Container', DontShow)]
35-
[Parameter(ParameterSetName = 'List_Id', DontShow)]
27+
[Parameter(ParameterSetName = 'List', DontShow)]
3628
[string]$After,
3729

3830
[Parameter()]
@@ -81,15 +73,6 @@ function Get-ContainerFile {
8173
}
8274

8375
process {
84-
# Get ids
85-
if ($PSCmdlet.ParameterSetName -like '*_Container') {
86-
$ContainerId = $Container.id
87-
}
88-
if (-not $ContainerId) {
89-
Write-Error -Exception ([System.ArgumentException]::new('Could not retrieve container id.'))
90-
return
91-
}
92-
9376
# Create cancellation token for timeout
9477
$Cancellation = [System.Threading.CancellationTokenSource]::new()
9578
if ($TimeoutSec -gt 0) {
@@ -102,7 +85,7 @@ function Get-ContainerFile {
10285
#region Construct Query URI
10386
$QueryUri = $OpenAIParameter.Uri.ToString() -f $ContainerId
10487
$UriBuilder = [System.UriBuilder]::new($QueryUri)
105-
if ($PSCmdlet.ParameterSetName -like 'Get_*') {
88+
if ($PSCmdlet.ParameterSetName -eq 'Get') {
10689
$UriBuilder.Path += "/$FileId"
10790
$QueryUri = $UriBuilder.Uri
10891
}

Public/Containers/Get-ContainerFileContent.ps1

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
function Get-ContainerFileContent {
2-
[CmdletBinding(DefaultParameterSetName = 'Id')]
2+
[CmdletBinding()]
33
[OutputType([byte[]])]
44
param (
5-
[Parameter(ParameterSetName = 'Container', Mandatory, Position = 0, ValueFromPipeline)]
6-
[PSTypeName('PSOpenAI.Container')]$Container,
7-
8-
[Parameter(ParameterSetName = 'Id', Mandatory, Position = 0, ValueFromPipelineByPropertyName)]
5+
[Parameter(ParameterSetName = 'Id', Mandatory, Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName)]
96
[ValidateNotNullOrEmpty()]
7+
[Alias('Container')]
108
[Alias('container_id')]
119
[string][UrlEncodeTransformation()]$ContainerId,
1210

13-
[Parameter(ParameterSetName = 'Container', Mandatory, Position = 1)]
1411
[Parameter(ParameterSetName = 'Id', Mandatory, Position = 1, ValueFromPipelineByPropertyName)]
1512
[ValidateNotNullOrEmpty()]
1613
[Alias('file_id')]
1714
[string][UrlEncodeTransformation()]$FileId,
1815

16+
[Parameter(ParameterSetName = 'ContainerFile', Mandatory, Position = 0, ValueFromPipeline)]
17+
[PSTypeName('PSOpenAI.Container.File')]$ContainerFile,
18+
1919
[Parameter()]
2020
[ValidateNotNullOrEmpty()]
2121
[string]$OutFile,
@@ -63,17 +63,10 @@ function Get-ContainerFileContent {
6363
}
6464

6565
process {
66-
# Get ids
67-
if ($PSCmdlet.ParameterSetName -eq 'Container') {
68-
$ContainerId = $Container.id
69-
}
70-
if (-not $ContainerId) {
71-
Write-Error -Exception ([System.ArgumentException]::new('Could not retrieve container id.'))
72-
return
73-
}
74-
if (-not $FileId) {
75-
Write-Error -Exception ([System.ArgumentException]::new('Could not retrieve file id.'))
76-
return
66+
if ($PSCmdlet.ParameterSetName -eq 'ContainerFile') {
67+
# Get ids from ContainerFile object
68+
$ContainerId = $ContainerFile.container_id
69+
$FileId = $ContainerFile.id
7770
}
7871

7972
#region Construct Query URI

0 commit comments

Comments
 (0)