openai/openai-dotnet

Public

mirrored from https://github.com/openai/openai-dotnetAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.0.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobCollectionResult.cs

81lines · modeblame

2ab1a942Jose Arriaga Maldonado1 years ago1using System.ClientModel;
2using System.ClientModel.Primitives;
3using System.Collections.Generic;
4using System.Linq;
5using System.Text.Json;
6using System.Threading.Tasks;
7
8#nullable enable
9
10namespace OpenAI.FineTuning;
11
12internal class AsyncFineTuningJobCollectionResult : AsyncCollectionResult
13{
14private readonly FineTuningClient _fineTuningClient;
15private readonly ClientPipeline _pipeline;
16private readonly RequestOptions? _options;
17
18// Initial values
19private readonly int? _limit;
20private readonly string _after;
21
22public AsyncFineTuningJobCollectionResult(FineTuningClient fineTuningClient,
23ClientPipeline pipeline, RequestOptions? options,
24int? limit, string after)
25{
26_fineTuningClient = fineTuningClient;
27_pipeline = pipeline;
28_options = options;
29
30_limit = limit;
31_after = after;
32}
33
34
35public async override IAsyncEnumerable<ClientResult> GetRawPagesAsync()
36{
37ClientResult page = await GetFirstPageAsync().ConfigureAwait(false);
38yield return page;
39
40while (HasNextPage(page))
41{
42page = await GetNextPageAsync(page);
43yield return page;
44}
45}
46
47public override ContinuationToken? GetContinuationToken(ClientResult page)
48{
49Argument.AssertNotNull(page, nameof(page));
50
51return FineTuningJobCollectionPageToken.FromResponse(page, _limit);
52}
53
54public async Task<ClientResult> GetFirstPageAsync()
55=> await GetJobsAsync(_after, _limit, _options).ConfigureAwait(false);
56
57public async Task<ClientResult> GetNextPageAsync(ClientResult result)
58{
59Argument.AssertNotNull(result, nameof(result));
60
61PipelineResponse response = result.GetRawResponse();
62
63using JsonDocument doc = JsonDocument.Parse(response?.Content);
64
65JsonElement data = doc.RootElement.GetProperty("data");
66JsonElement lastItem = data.EnumerateArray().LastOrDefault();
67string? lastId = lastItem.TryGetProperty("id", out JsonElement idElement) ?
68idElement.GetString() : null;
69
70return await GetJobsAsync(lastId, _limit, _options).ConfigureAwait(false);
71}
72
73public static bool HasNextPage(ClientResult result)
74=> FineTuningJobCollectionResult.HasNextPage(result);
75
76internal virtual async Task<ClientResult> GetJobsAsync(string? after, int? limit, RequestOptions? options)
77{
78using PipelineMessage message = _fineTuningClient.CreateGetPaginatedFineTuningJobsRequest(after, limit, options);
79return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false));
80}
81}