openai/openai-dotnet

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
achandmsft-patch-1

Branches

Tags

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

Clone

HTTPS

Download ZIP

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

135lines · modeblame

2ab1a942Jose Arriaga Maldonado1 years ago1using System;
7bdecfd8Anne Thompson2 years ago2using System.ClientModel;
2ab1a942Jose Arriaga Maldonado1 years ago3using System.ClientModel.Primitives;
7bdecfd8Anne Thompson2 years ago4using System.Diagnostics;
5using System.IO;
6using System.Text.Json;
7
8#nullable enable
9
2ab1a942Jose Arriaga Maldonado1 years ago10namespace OpenAI.FineTuning;
7bdecfd8Anne Thompson2 years ago11
2ab1a942Jose Arriaga Maldonado1 years ago12internal class FineTuningJobCheckpointCollectionPageToken : ContinuationToken
7bdecfd8Anne Thompson2 years ago13{
2ab1a942Jose Arriaga Maldonado1 years ago14protected FineTuningJobCheckpointCollectionPageToken(string jobId, int? limit, string? after)
7bdecfd8Anne Thompson2 years ago15{
2ab1a942Jose Arriaga Maldonado1 years ago16JobId = jobId;
7bdecfd8Anne Thompson2 years ago17Limit = limit;
18After = after;
19}
20
2ab1a942Jose Arriaga Maldonado1 years ago21public string JobId { get; }
7bdecfd8Anne Thompson2 years ago22
2ab1a942Jose Arriaga Maldonado1 years ago23public int? Limit { get; }
7bdecfd8Anne Thompson2 years ago24
25public string? After { get; }
26
27public override BinaryData ToBytes()
28{
29using MemoryStream stream = new();
30using Utf8JsonWriter writer = new(stream);
31
32writer.WriteStartObject();
2ab1a942Jose Arriaga Maldonado1 years ago33writer.WriteString("jobId", JobId);
79014abcShivangiReja1 years ago34
7bdecfd8Anne Thompson2 years ago35if (Limit.HasValue)
36{
37writer.WriteNumber("limit", Limit.Value);
38}
39
40if (After is not null)
41{
42writer.WriteString("after", After);
43}
44
45writer.WriteEndObject();
46
47writer.Flush();
48stream.Position = 0;
49
50return BinaryData.FromStream(stream);
51}
79014abcShivangiReja1 years ago52
2ab1a942Jose Arriaga Maldonado1 years ago53public static FineTuningJobCheckpointCollectionPageToken FromToken(ContinuationToken pageToken)
7bdecfd8Anne Thompson2 years ago54{
2ab1a942Jose Arriaga Maldonado1 years ago55if (pageToken is FineTuningJobCheckpointCollectionPageToken token)
7bdecfd8Anne Thompson2 years ago56{
57return token;
58}
59
60BinaryData data = pageToken.ToBytes();
61
62if (data.ToMemory().Length == 0)
63{
2ab1a942Jose Arriaga Maldonado1 years ago64throw new ArgumentException("Failed to create FineTuningJobCheckpointCollectionPageToken from provided pageToken.", nameof(pageToken));
7bdecfd8Anne Thompson2 years ago65}
66
67Utf8JsonReader reader = new(data);
68
2ab1a942Jose Arriaga Maldonado1 years ago69string jobId = null!;
7bdecfd8Anne Thompson2 years ago70int? limit = null;
71string? after = null;
72
73reader.Read();
74
75Debug.Assert(reader.TokenType == JsonTokenType.StartObject);
76
77while (reader.Read())
78{
79if (reader.TokenType == JsonTokenType.EndObject)
80{
81break;
82}
83
84Debug.Assert(reader.TokenType == JsonTokenType.PropertyName);
85
86string propertyName = reader.GetString()!;
87
88switch (propertyName)
89{
2ab1a942Jose Arriaga Maldonado1 years ago90case "jobId":
91reader.Read();
92Debug.Assert(reader.TokenType == JsonTokenType.String);
93jobId = reader.GetString()!;
94break;
7bdecfd8Anne Thompson2 years ago95case "limit":
96reader.Read();
97Debug.Assert(reader.TokenType == JsonTokenType.Number);
98limit = reader.GetInt32();
99break;
100case "after":
101reader.Read();
102Debug.Assert(reader.TokenType == JsonTokenType.String);
103after = reader.GetString();
104break;
105default:
106throw new JsonException($"Unrecognized property '{propertyName}'.");
107}
108}
109
2ab1a942Jose Arriaga Maldonado1 years ago110if (jobId is null)
111{
112throw new ArgumentException("Failed to create FineTuningJobCheckpointCollectionPageToken from provided pageToken.", nameof(pageToken));
113}
114
115return new(jobId, limit, after);
7bdecfd8Anne Thompson2 years ago116}
117
2ab1a942Jose Arriaga Maldonado1 years ago118public static FineTuningJobCheckpointCollectionPageToken FromOptions(string jobId, int? limit, string? after)
119=> new(jobId, limit, after);
120
121public static FineTuningJobCheckpointCollectionPageToken? FromResponse(ClientResult result, string jobId, int? limit)
122{
123PipelineResponse response = result.GetRawResponse();
124using JsonDocument doc = JsonDocument.Parse(response.Content);
125string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!;
126bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean();
127
128if (!hasMore || lastId is null)
129{
130return null;
131}
132
133return new(jobId, limit, lastId);
134}
135}