openai/openai-dotnet

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.0.0-beta.7

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/Custom/Common/InternalListHelpers.cs

37lines · modecode

1using System.ClientModel;
2using System.ClientModel.Primitives;
3using System.Runtime.CompilerServices;
4using System.Threading.Tasks;
5
6namespace OpenAI;
7
8internal static class InternalListHelpers
9{
10 internal delegate Task<ClientResult> AsyncListResponseFunc(string continuationToken, int? pageSize);
11 internal delegate ClientResult ListResponseFunc(string continuationToken, int? pageSize);
12
13 internal static AsyncPageableCollection<T> CreateAsyncPageable<T, U>(AsyncListResponseFunc listResponseFunc)
14 where U : IJsonModel<U>, IInternalListResponse<T>
15 {
16 async Task<ResultPage<T>> pageFunc(string continuationToken, int? pageSize)
17 => GetPageFromProtocol<T,U>(await listResponseFunc(continuationToken, pageSize).ConfigureAwait(false));
18 return PageableResultHelpers.Create((pageSize) => pageFunc(null, pageSize), pageFunc);
19 }
20
21 internal static PageableCollection<T> CreatePageable<T, U>(ListResponseFunc listResponseFunc)
22 where U : IJsonModel<U>, IInternalListResponse<T>
23 {
24 ResultPage<T> pageFunc(string continuationToken, int? pageSize)
25 => GetPageFromProtocol<T, U>(listResponseFunc(continuationToken, pageSize));
26 return PageableResultHelpers.Create((pageSize) => pageFunc(null, pageSize), pageFunc);
27 }
28
29 [MethodImpl(MethodImplOptions.AggressiveInlining)]
30 private static ResultPage<TInstance> GetPageFromProtocol<TInstance, UInternalList>(ClientResult protocolResult)
31 where UInternalList : IJsonModel<UInternalList>, IInternalListResponse<TInstance>
32 {
33 PipelineResponse response = protocolResult.GetRawResponse();
34 IInternalListResponse<TInstance> values = ModelReaderWriter.Read<UInternalList>(response.Content);
35 return ResultPage<TInstance>.Create(values.Data, values.HasMore ? values.LastId : null, response);
36 }
37}
38