Skip to content

Fix generation of StreamingResponseTextAnnotationAddedUpdate #507

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion api/OpenAI.net8.0.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5499,7 +5499,20 @@ public class StreamingResponseRefusalDoneUpdate : StreamingResponseUpdate, IJson
protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options);
}
[Experimental("OPENAI001")]
public class StreamingResponseTextAnnotationAddedUpdate {
public class StreamingResponseTextAnnotationAddedUpdate : StreamingResponseUpdate, IJsonModel<StreamingResponseTextAnnotationAddedUpdate>, IPersistableModel<StreamingResponseTextAnnotationAddedUpdate> {
public BinaryData Annotation { get; }

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any chance this could be parsed as an ResponseMessageAnnotation ?

public int AnnotationIndex { get; }
public int ContentIndex { get; }
public string ItemId { get; }
public int OutputIndex { get; }
[Experimental("OPENAI001")]
protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options);
[Experimental("OPENAI001")]
protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options);
[Experimental("OPENAI001")]
protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options);
[Experimental("OPENAI001")]
protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options);
}
[Experimental("OPENAI001")]
public class StreamingResponseUpdate : IJsonModel<StreamingResponseUpdate>, IPersistableModel<StreamingResponseUpdate> {
Expand Down
11 changes: 10 additions & 1 deletion api/OpenAI.netstandard2.0.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4326,7 +4326,16 @@ public class StreamingResponseRefusalDoneUpdate : StreamingResponseUpdate, IJson
protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options);
protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options);
}
public class StreamingResponseTextAnnotationAddedUpdate {
public class StreamingResponseTextAnnotationAddedUpdate : StreamingResponseUpdate, IJsonModel<StreamingResponseTextAnnotationAddedUpdate>, IPersistableModel<StreamingResponseTextAnnotationAddedUpdate> {
public BinaryData Annotation { get; }

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here, ideally this would be parsed as a ResponseMessageAnnotation

public int AnnotationIndex { get; }
public int ContentIndex { get; }
public string ItemId { get; }
public int OutputIndex { get; }
protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options);
protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options);
protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options);
protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options);
}
public class StreamingResponseUpdate : IJsonModel<StreamingResponseUpdate>, IPersistableModel<StreamingResponseUpdate> {
public int SequenceNumber { get; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace OpenAI.Responses;
// - Added Experimental attribute.
// - Renamed.
[Experimental("OPENAI001")]
[CodeGenType("ResponseTextAnnotationDeltaEvent")]
[CodeGenType("ResponseOutputTextAnnotationAddedEvent")]
public partial class StreamingResponseTextAnnotationAddedUpdate
{
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
// <auto-generated/>

#nullable disable

using System;
using System.ClientModel.Primitives;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using OpenAI;

namespace OpenAI.Responses
{
public partial class StreamingResponseTextAnnotationAddedUpdate : IJsonModel<StreamingResponseTextAnnotationAddedUpdate>
{
internal StreamingResponseTextAnnotationAddedUpdate() : this(InternalResponseStreamEventType.ResponseOutputTextAnnotationAdded, default, null, null, default, default, default, null)
{
}

void IJsonModel<StreamingResponseTextAnnotationAddedUpdate>.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
{
writer.WriteStartObject();
JsonModelWriteCore(writer, options);
writer.WriteEndObject();
}

[Experimental("OPENAI001")]
protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<StreamingResponseTextAnnotationAddedUpdate>)this).GetFormatFromOptions(options) : options.Format;
if (format != "J")
{
throw new FormatException($"The model {nameof(StreamingResponseTextAnnotationAddedUpdate)} does not support writing '{format}' format.");
}
base.JsonModelWriteCore(writer, options);
if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true)
{
writer.WritePropertyName("item_id"u8);
writer.WriteStringValue(ItemId);
}
if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true)
{
writer.WritePropertyName("output_index"u8);
writer.WriteNumberValue(OutputIndex);
}
if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true)
{
writer.WritePropertyName("content_index"u8);
writer.WriteNumberValue(ContentIndex);
}
if (_additionalBinaryDataProperties?.ContainsKey("annotation_index") != true)
{
writer.WritePropertyName("annotation_index"u8);
writer.WriteNumberValue(AnnotationIndex);
}
if (_additionalBinaryDataProperties?.ContainsKey("annotation") != true)
{
writer.WritePropertyName("annotation"u8);
#if NET6_0_OR_GREATER
writer.WriteRawValue(Annotation);
#else
using (JsonDocument document = JsonDocument.Parse(Annotation))
{
JsonSerializer.Serialize(writer, document.RootElement);
}
#endif
}
}

StreamingResponseTextAnnotationAddedUpdate IJsonModel<StreamingResponseTextAnnotationAddedUpdate>.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseTextAnnotationAddedUpdate)JsonModelCreateCore(ref reader, options);

[Experimental("OPENAI001")]
protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<StreamingResponseTextAnnotationAddedUpdate>)this).GetFormatFromOptions(options) : options.Format;
if (format != "J")
{
throw new FormatException($"The model {nameof(StreamingResponseTextAnnotationAddedUpdate)} does not support reading '{format}' format.");
}
using JsonDocument document = JsonDocument.ParseValue(ref reader);
return DeserializeStreamingResponseTextAnnotationAddedUpdate(document.RootElement, options);
}

internal static StreamingResponseTextAnnotationAddedUpdate DeserializeStreamingResponseTextAnnotationAddedUpdate(JsonElement element, ModelReaderWriterOptions options)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
InternalResponseStreamEventType kind = default;
int sequenceNumber = default;
IDictionary<string, BinaryData> additionalBinaryDataProperties = new ChangeTrackingDictionary<string, BinaryData>();
string itemId = default;
int outputIndex = default;
int contentIndex = default;
int annotationIndex = default;
BinaryData annotation = default;
foreach (var prop in element.EnumerateObject())
{
if (prop.NameEquals("type"u8))
{
kind = new InternalResponseStreamEventType(prop.Value.GetString());
continue;
}
if (prop.NameEquals("sequence_number"u8))
{
sequenceNumber = prop.Value.GetInt32();
continue;
}
if (prop.NameEquals("item_id"u8))
{
itemId = prop.Value.GetString();
continue;
}
if (prop.NameEquals("output_index"u8))
{
outputIndex = prop.Value.GetInt32();
continue;
}
if (prop.NameEquals("content_index"u8))
{
contentIndex = prop.Value.GetInt32();
continue;
}
if (prop.NameEquals("annotation_index"u8))
{
annotationIndex = prop.Value.GetInt32();
continue;
}
if (prop.NameEquals("annotation"u8))
{
annotation = BinaryData.FromString(prop.Value.GetRawText());
continue;
}
// Plugin customization: remove options.Format != "W" check
additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText()));
}
return new StreamingResponseTextAnnotationAddedUpdate(
kind,
sequenceNumber,
additionalBinaryDataProperties,
itemId,
outputIndex,
contentIndex,
annotationIndex,
annotation);
}

BinaryData IPersistableModel<StreamingResponseTextAnnotationAddedUpdate>.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options);

[Experimental("OPENAI001")]
protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<StreamingResponseTextAnnotationAddedUpdate>)this).GetFormatFromOptions(options) : options.Format;
switch (format)
{
case "J":
return ModelReaderWriter.Write(this, options, OpenAIContext.Default);
default:
throw new FormatException($"The model {nameof(StreamingResponseTextAnnotationAddedUpdate)} does not support writing '{options.Format}' format.");
}
}

StreamingResponseTextAnnotationAddedUpdate IPersistableModel<StreamingResponseTextAnnotationAddedUpdate>.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseTextAnnotationAddedUpdate)PersistableModelCreateCore(data, options);

[Experimental("OPENAI001")]
protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options)
{
string format = options.Format == "W" ? ((IPersistableModel<StreamingResponseTextAnnotationAddedUpdate>)this).GetFormatFromOptions(options) : options.Format;
switch (format)
{
case "J":
using (JsonDocument document = JsonDocument.Parse(data))
{
return DeserializeStreamingResponseTextAnnotationAddedUpdate(document.RootElement, options);
}
default:
throw new FormatException($"The model {nameof(StreamingResponseTextAnnotationAddedUpdate)} does not support reading '{options.Format}' format.");
}
}

string IPersistableModel<StreamingResponseTextAnnotationAddedUpdate>.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// <auto-generated/>

#nullable disable

using System;
using System.Collections.Generic;

namespace OpenAI.Responses
{
public partial class StreamingResponseTextAnnotationAddedUpdate : StreamingResponseUpdate
{
internal StreamingResponseTextAnnotationAddedUpdate(int sequenceNumber, string itemId, int outputIndex, int contentIndex, int annotationIndex, BinaryData annotation) : base(InternalResponseStreamEventType.ResponseOutputTextAnnotationAdded, sequenceNumber)
{
ItemId = itemId;
OutputIndex = outputIndex;
ContentIndex = contentIndex;
AnnotationIndex = annotationIndex;
Annotation = annotation;
}

internal StreamingResponseTextAnnotationAddedUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary<string, BinaryData> additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, int annotationIndex, BinaryData annotation) : base(kind, sequenceNumber, additionalBinaryDataProperties)
{
ItemId = itemId;
OutputIndex = outputIndex;
ContentIndex = contentIndex;
AnnotationIndex = annotationIndex;
Annotation = annotation;
}

public string ItemId { get; }

public int OutputIndex { get; }

public int ContentIndex { get; }

public int AnnotationIndex { get; }

public BinaryData Annotation { get; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ internal static StreamingResponseUpdate DeserializeStreamingResponseUpdate(JsonE
return InternalResponseMCPListToolsFailedEvent.DeserializeInternalResponseMCPListToolsFailedEvent(element, options);
case "response.mcp_list_tools.in_progress":
return InternalResponseMCPListToolsInProgressEvent.DeserializeInternalResponseMCPListToolsInProgressEvent(element, options);
case "response.output_text.annotation.added":
return StreamingResponseTextAnnotationAddedUpdate.DeserializeStreamingResponseTextAnnotationAddedUpdate(element, options);
case "response.queued":
return StreamingResponseQueuedUpdate.DeserializeStreamingResponseQueuedUpdate(element, options);
case "response.reasoning.delta":
Expand Down