Skip to content
This repository was archived by the owner on Feb 12, 2025. It is now read-only.

Commit 1a2d7a5

Browse files
committed
Changed FileManager
1 parent 5a8d323 commit 1a2d7a5

File tree

10 files changed

+80
-54
lines changed

10 files changed

+80
-54
lines changed

ManagedCode.OpenAI.Tests/FileTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public async Task UploadFile_Success()
3131
const string fileName = "test.txt";
3232

3333

34-
var file = await _fileManager.CreateFileAsync(fileName, fileContent);
34+
var file = await _fileManager.CreateFileAsync(fileContent, fileName);
3535

3636
Log($"File id: {file.Id}");
3737

@@ -60,7 +60,7 @@ public async Task FileList_Success()
6060
{
6161
const string fileName = "test.txt";
6262

63-
var newFile = await _fileManager.CreateFileAsync(fileName, fileContent);
63+
var newFile = await _fileManager.CreateFileAsync(fileContent, fileName);
6464
Assert.NotNull(newFile);
6565

6666
var files = await _fileManager.FileListAsync();
@@ -84,7 +84,7 @@ public async Task DeleteFile_Success()
8484
{
8585
const string fileName = "test.txt";
8686

87-
var newFile = await _fileManager.CreateFileAsync(fileName, fileContent);
87+
var newFile = await _fileManager.CreateFileAsync(fileContent, fileName);
8888
Assert.NotNull(newFile);
8989

9090
//Waiting for file to be deleted
@@ -103,7 +103,7 @@ public async Task FileInfo_Success()
103103
{
104104
const string fileName = "test.txt";
105105

106-
var newFile = await _fileManager.CreateFileAsync(fileName, fileContent);
106+
var newFile = await _fileManager.CreateFileAsync(fileContent, fileName);
107107
Assert.NotNull(newFile);
108108

109109
var fileInfo = await _fileManager.FileInfoAsync(newFile.Id);

ManagedCode.OpenAI/API/Abstractions/IDataArrayResponseDto.cs

Lines changed: 0 additions & 7 deletions
This file was deleted.

ManagedCode.OpenAI/API/Abstractions/IOpenAiWebClient.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ internal interface IOpenAiWebClient : IDisposable
2323
#region Files
2424

2525
Task<FilesInfoResponseDto> FilesInfoAsync();
26-
Task<FileInfoDto> CreateFileAsync(HttpContent content, string fileName, string purpose = "fine-tune");
26+
Task<FileInfoDto> CreateFileAsync(string content, string fileName, string purpose = "fine-tune");
27+
Task<FileInfoDto> CreateFileAsync(Stream content, string fileName, string purpose = "fine-tune");
28+
Task<FileInfoDto> CreateFileAsync(byte[] content, string fileName, string purpose = "fine-tune");
29+
Task<FileInfoDto> CreateFileAsync(ReadOnlyMemory<byte> content, string fileName, string purpose = "fine-tune");
2730
Task<FileDeleteResponseDto> DeleteFileAsync(string fileId);
2831
Task<FileInfoDto> FileInfoAsync(string fileId);
2932

ManagedCode.OpenAI/API/File/FilesInfoResponseDto.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace ManagedCode.OpenAI.Files.Models;
55

6-
internal class FilesInfoResponseDto: IDataArrayResponseDto<FileInfoDto>
6+
internal class FilesInfoResponseDto
77
{
88
[JsonPropertyName("data")]
99
public FileInfoDto[] Data { get; set; }

ManagedCode.OpenAI/API/OpenAIWebClient.cs

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public async Task<ImageResponseDto> VariationImageAsync(VariationImageRequestDto
111111
foreach (var parameter in parameters)
112112
form.Add(parameter.Key, parameter.Value);
113113

114-
form.Add(new StreamContent(new MemoryStream(imageBytes)), "image", "image.png");
114+
form.Add(new ByteArrayContent(imageBytes), "image", "image.png");
115115

116116
var response = await _httpClient.PostAsync(URL_IMAGE_EDIT, form);
117117
return await ReadAsync<ImageResponseDto>(response);
@@ -169,34 +169,53 @@ private Dictionary<StringContent, string> ToImageRequestParameters(BaseImageRequ
169169
public async Task<FilesInfoResponseDto> FilesInfoAsync()
170170
{
171171
var httpResponseMessage = await _httpClient.GetAsync(URL_FILES);
172-
OpenAIExceptions.ThrowsIfError(httpResponseMessage.StatusCode);
173-
string responseBody = await httpResponseMessage.Content.ReadAsStringAsync();
174-
return JsonDeserialize<FilesInfoResponseDto>(responseBody);
172+
return await ReadAsync<FilesInfoResponseDto>(httpResponseMessage);
175173
}
176174

177-
public async Task<FileInfoDto> CreateFileAsync(HttpContent content, string fileName, string purpose = "fine-tune")
175+
private async Task<FileInfoDto> CreateFileAsync(HttpContent content, string fileName, string purpose = "fine-tune")
178176
{
179177
MultipartFormDataContent multipartFormDataContent = new();
180178
multipartFormDataContent.Add(new StringContent(purpose), "purpose");
181179
multipartFormDataContent.Add(content, "file", fileName);
182180

183181
var httpResponseMessage = await _httpClient.PostAsync(URL_FILES, multipartFormDataContent);
184-
OpenAIExceptions.ThrowsIfError(httpResponseMessage.StatusCode);
185-
string responseBody = await httpResponseMessage.Content.ReadAsStringAsync();
186-
187-
return JsonDeserialize<FileInfoDto>(responseBody);
182+
183+
return await ReadAsync<FileInfoDto>(httpResponseMessage);
184+
}
185+
186+
public async Task<FileInfoDto> CreateFileAsync(Stream content, string fileName, string purpose = "fine-tune")
187+
{
188+
StreamContent streamContent = new(content);
189+
return await CreateFileAsync(streamContent, fileName, purpose);
188190
}
189191

192+
public async Task<FileInfoDto> CreateFileAsync(string content, string fileName, string purpose = "fine-tune")
193+
{
194+
StringContent stringContent = new(content);
195+
return await CreateFileAsync(stringContent, fileName, purpose);
196+
}
197+
198+
public async Task<FileInfoDto> CreateFileAsync(byte[] content, string fileName, string purpose = "fine-tune")
199+
{
200+
ByteArrayContent byteArrayContent = new(content);
201+
return await CreateFileAsync(byteArrayContent, fileName, purpose);
202+
}
203+
204+
public async Task<FileInfoDto> CreateFileAsync(ReadOnlyMemory<byte> content, string fileName, string purpose =
205+
"fine-tune")
206+
{
207+
ReadOnlyMemoryContent readOnlyMemoryContent = new(content);
208+
return await CreateFileAsync(readOnlyMemoryContent, fileName, purpose);
209+
}
210+
211+
212+
190213
public async Task<FileDeleteResponseDto> DeleteFileAsync(string fileId)
191214
{
192215
string resultUrl = string.Format(URL_FILE, fileId);
193216
var httpResponseMessage = await _httpClient.DeleteAsync(resultUrl);
194217

195-
OpenAIExceptions.ThrowsIfError(httpResponseMessage.StatusCode);
196-
197-
string responseBody = await httpResponseMessage.Content.ReadAsStringAsync();
198-
199-
return JsonDeserialize<FileDeleteResponseDto>(responseBody);
218+
return await ReadAsync<FileDeleteResponseDto>(httpResponseMessage);
200219
}
201220

202221
public async Task<FileInfoDto> FileInfoAsync(string fileId)
@@ -205,16 +224,17 @@ public async Task<FileInfoDto> FileInfoAsync(string fileId)
205224

206225
var httpResponseMessage = await _httpClient.GetAsync(resultUrl);
207226

208-
OpenAIExceptions.ThrowsIfError(httpResponseMessage.StatusCode);
209-
210-
string responseBody = await httpResponseMessage.Content.ReadAsStringAsync();
211-
return JsonDeserialize<FileInfoDto>(responseBody);
227+
return await ReadAsync<FileInfoDto>(httpResponseMessage);
212228
}
213229

230+
231+
232+
// TODO: It is not known what the result of the query returns
214233
public async Task<string> GetContentFromFileAsync(string fileId)
215234
{
216235
string resultUrl = string.Format(URL_FILE_CONTEXT, fileId);
217236
var httpResponseMessage = await _httpClient.GetAsync(resultUrl);
237+
218238
OpenAIExceptions.ThrowsIfError(httpResponseMessage.StatusCode);
219239
return await httpResponseMessage.Content.ReadAsStringAsync();
220240
}

ManagedCode.OpenAI/Completions/CompletionsBuilder.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public ICompletionBuilder SetTemperature(float temperature)
5050
return this;
5151
}
5252

53+
// TODO: How to work, when stream is true?
5354
public ICompletionBuilder SetStream()
5455
{
5556
_request.Stream = true;

ManagedCode.OpenAI/Files/Abstractions/IFileManager.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ namespace ManagedCode.OpenAI.Files.Abstractions;
33
public interface IFileManager
44
{
55
Task<IFileInfo[]> FileListAsync();
6-
Task<IFileInfo> CreateFileAsync(string fileName, HttpContent content, string purpose = "fine-tune");
7-
Task<IFileInfo> CreateFileAsync(string fileName, string content, string purpose = "fine-tune");
8-
Task<IFileInfo> CreateFileAsync(string fileName, Stream content, string purpose = "fine-tune");
6+
Task<IFileInfo> CreateFileAsync(string content, string fileName, string purpose = "fine-tune");
7+
Task<IFileInfo> CreateFileAsync(Stream content, string fileName, string purpose = "fine-tune");
8+
Task<IFileInfo> CreateFileAsync(byte[] content, string fileName, string purpose = "fine-tune");
9+
Task<IFileInfo> CreateFileAsync(ReadOnlyMemory<byte> content, string fileName, string purpose = "fine-tune");
910
Task<bool> DeleteFileAsync(string fileId);
1011
Task<bool> DeleteFileAsync(IFileInfo file);
1112
Task<IFileInfo> FileInfoAsync(string fileId);

ManagedCode.OpenAI/Files/Extensions/MapperFileEx.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public static IFileInfo ToFileInfo(this FileInfoDto dto)
1717
};
1818
}
1919

20-
public static IFileInfo[] ToFileInfoArray(this IDataArrayResponseDto<FileInfoDto> dto)
20+
public static IFileInfo[] ToFileInfoArray(this FilesInfoResponseDto dto)
2121
{
2222
return dto.Data
2323
.Select(e => e.ToFileInfo())

ManagedCode.OpenAI/Files/FileManager.cs

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,36 @@ public async Task<IFileInfo[]> FileListAsync()
2020
var response = await _client.FilesInfoAsync();
2121
return response.ToFileInfoArray();
2222
}
23-
24-
public async Task<IFileInfo> CreateFileAsync(
25-
string fileName,
26-
HttpContent content,
27-
string purpose = "fine-tune")
23+
24+
25+
public async Task<IFileInfo> CreateFileAsync(string content, string fileName, string purpose = "fine-tune")
2826
{
29-
var response =
30-
await _client.CreateFileAsync(content, fileName, purpose);
31-
return response.ToFileInfo();
27+
var fileInfoDto = await _client.CreateFileAsync(content, fileName, purpose);
28+
29+
return fileInfoDto.ToFileInfo();
3230
}
3331

34-
public async Task<IFileInfo> CreateFileAsync(string fileName, string content, string purpose = "fine-tune")
32+
public async Task<IFileInfo> CreateFileAsync(Stream content, string fileName, string purpose = "fine-tune")
3533
{
36-
var stringContent = new StringContent(content, Encoding.UTF8, "multipart/form-data");
37-
return await CreateFileAsync(fileName, stringContent, purpose);
34+
var fileInfoDto = await _client.CreateFileAsync(content, fileName, purpose);
35+
36+
return fileInfoDto.ToFileInfo();
3837
}
39-
40-
public async Task<IFileInfo> CreateFileAsync(string fileName, Stream content, string purpose = "fine-tune")
38+
39+
public async Task<IFileInfo> CreateFileAsync(byte[] content, string fileName, string purpose = "fine-tune")
4140
{
42-
var streamContent = new StreamContent(content);
43-
return await CreateFileAsync(fileName, streamContent, purpose);
41+
var fileInfoDto = await _client.CreateFileAsync(content, fileName, purpose);
42+
43+
return fileInfoDto.ToFileInfo();
44+
}
45+
46+
public async Task<IFileInfo> CreateFileAsync(ReadOnlyMemory<byte> content, string fileName, string purpose = "fine-tune")
47+
{
48+
var fileInfoDto = await _client.CreateFileAsync(content, fileName, purpose);
49+
50+
return fileInfoDto.ToFileInfo();
4451
}
45-
46-
52+
4753

4854
public async Task<bool> DeleteFileAsync(string fileId)
4955
{
@@ -63,8 +69,6 @@ public async Task<IFileInfo> FileInfoAsync(string fileId)
6369
return response.ToFileInfo();
6470
}
6571

66-
67-
6872
public async Task<string> FileContentAsync(IFileInfo info)
6973
{
7074
return await FileContentAsync(info.Id);

ManagedCode.OpenAI/ManagedCode.OpenAI.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,9 @@
2020
<EmbeddedResource Remove="Methods\**" />
2121
<None Remove="Methods\**" />
2222
</ItemGroup>
23+
<ItemGroup>
24+
<Folder Include="Audio" />
25+
<Folder Include="FileTunes" />
26+
</ItemGroup>
2327

2428
</Project>

0 commit comments

Comments
 (0)