Skip to content
Merged
35 changes: 35 additions & 0 deletions api/OpenAI.net8.0.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3969,7 +3969,17 @@ public static class OpenAIModelsModelFactory {
}
}
namespace OpenAI.Moderations {
[Experimental("OPENAI001")]
[Flags]
public enum ModerationApplicableInputKinds {
None = 0,
Other = 1,
Text = 2,
Image = 4
}
public class ModerationCategory {
[Experimental("OPENAI001")]
public ModerationApplicableInputKinds ApplicableInputKinds { get; }
public bool Flagged { get; }
public float Score { get; }
}
Expand All @@ -3988,13 +3998,38 @@ public class ModerationClient {
[Experimental("OPENAI001")]
public string Model { get; }
public ClientPipeline Pipeline { get; }
[Experimental("OPENAI001")]
public virtual ClientResult ClassifyInputs(BinaryContent content, RequestOptions options = null);
[Experimental("OPENAI001")]
public virtual ClientResult<ModerationResult> ClassifyInputs(IEnumerable<ModerationInputPart> inputParts, CancellationToken cancellationToken = default);
[Experimental("OPENAI001")]
public virtual Task<ClientResult> ClassifyInputsAsync(BinaryContent content, RequestOptions options = null);
[Experimental("OPENAI001")]
public virtual Task<ClientResult<ModerationResult>> ClassifyInputsAsync(IEnumerable<ModerationInputPart> inputParts, CancellationToken cancellationToken = default);
public virtual ClientResult ClassifyText(BinaryContent content, RequestOptions options = null);
public virtual ClientResult<ModerationResultCollection> ClassifyText(IEnumerable<string> inputs, CancellationToken cancellationToken = default);
public virtual ClientResult<ModerationResult> ClassifyText(string input, CancellationToken cancellationToken = default);
public virtual Task<ClientResult> ClassifyTextAsync(BinaryContent content, RequestOptions options = null);
public virtual Task<ClientResult<ModerationResultCollection>> ClassifyTextAsync(IEnumerable<string> inputs, CancellationToken cancellationToken = default);
public virtual Task<ClientResult<ModerationResult>> ClassifyTextAsync(string input, CancellationToken cancellationToken = default);
}
[Experimental("OPENAI001")]
public class ModerationInputPart : IJsonModel<ModerationInputPart>, IPersistableModel<ModerationInputPart> {
public Uri ImageUri { get; }
public ModerationInputPartKind Kind { get; }
public string Text { get; }
public static ModerationInputPart CreateImagePart(Uri imageUri);
public static ModerationInputPart CreateTextPart(string text);
protected virtual ModerationInputPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options);
protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options);
protected virtual ModerationInputPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options);
protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options);
}
[Experimental("OPENAI001")]
public enum ModerationInputPartKind {
Text = 0,
Image = 1
}
public class ModerationResult : IJsonModel<ModerationResult>, IPersistableModel<ModerationResult> {
public bool Flagged { get; }
public ModerationCategory Harassment { get; }
Expand Down
27 changes: 27 additions & 0 deletions api/OpenAI.netstandard2.0.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3422,7 +3422,15 @@ public static class OpenAIModelsModelFactory {
}
}
namespace OpenAI.Moderations {
[Flags]
public enum ModerationApplicableInputKinds {
None = 0,
Other = 1,
Text = 2,
Image = 4
}
public class ModerationCategory {
public ModerationApplicableInputKinds ApplicableInputKinds { get; }
public bool Flagged { get; }
public float Score { get; }
}
Expand All @@ -3437,13 +3445,32 @@ public class ModerationClient {
public Uri Endpoint { get; }
public string Model { get; }
public ClientPipeline Pipeline { get; }
public virtual ClientResult ClassifyInputs(BinaryContent content, RequestOptions options = null);
public virtual ClientResult<ModerationResult> ClassifyInputs(IEnumerable<ModerationInputPart> inputParts, CancellationToken cancellationToken = default);
public virtual Task<ClientResult> ClassifyInputsAsync(BinaryContent content, RequestOptions options = null);
public virtual Task<ClientResult<ModerationResult>> ClassifyInputsAsync(IEnumerable<ModerationInputPart> inputParts, CancellationToken cancellationToken = default);
public virtual ClientResult ClassifyText(BinaryContent content, RequestOptions options = null);
public virtual ClientResult<ModerationResultCollection> ClassifyText(IEnumerable<string> inputs, CancellationToken cancellationToken = default);
public virtual ClientResult<ModerationResult> ClassifyText(string input, CancellationToken cancellationToken = default);
public virtual Task<ClientResult> ClassifyTextAsync(BinaryContent content, RequestOptions options = null);
public virtual Task<ClientResult<ModerationResultCollection>> ClassifyTextAsync(IEnumerable<string> inputs, CancellationToken cancellationToken = default);
public virtual Task<ClientResult<ModerationResult>> ClassifyTextAsync(string input, CancellationToken cancellationToken = default);
}
public class ModerationInputPart : IJsonModel<ModerationInputPart>, IPersistableModel<ModerationInputPart> {
public Uri ImageUri { get; }
public ModerationInputPartKind Kind { get; }
public string Text { get; }
public static ModerationInputPart CreateImagePart(Uri imageUri);
public static ModerationInputPart CreateTextPart(string text);
protected virtual ModerationInputPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options);
protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options);
protected virtual ModerationInputPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options);
protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options);
}
public enum ModerationInputPartKind {
Text = 0,
Image = 1
}
public class ModerationResult : IJsonModel<ModerationResult>, IPersistableModel<ModerationResult> {
public bool Flagged { get; }
public ModerationCategory Harassment { get; }
Expand Down
21 changes: 16 additions & 5 deletions codegen/generator/src/Visitors/NumericPropertiesVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,39 @@
namespace OpenAILibraryPlugin.Visitors;

/// <summary>
/// We prefer to use `int` (Int32) for numeric properties unless there is a specific reason to
/// use `long` (Int64). Because using `long` is therefore the exception, this visitor converts all
/// `long` properties to `int` by default unless they are explicitly excluded.
/// We prefer to use 32-bit numeric types (`int`, `float`) for numeric properties unless there is a specific reason to
/// use 64-bit numeric types (`long`, `double`). Because using 64-bit types is therefore the exception, this visitor
/// converts all `long` properties to `int` and all `double` properties to `float` by default unless they are explicitly excluded.
/// </summary>
public class NumericPropertiesVisitor : ScmLibraryVisitor
{
private static readonly HashSet<string> _excludedProperties = new(StringComparer.OrdinalIgnoreCase)
// Add any long properties that should remain long here.
private static readonly HashSet<string> _excludedLongProperties = new(StringComparer.OrdinalIgnoreCase)
{
"OpenAI.Chat.ChatCompletionOptions.Seed",

"OpenAI.LegacyCompletions.InternalCreateCompletionRequest.Seed",
};

// Add any double properties that should remain double here.
private static readonly HashSet<string> _excludedDoubleProperties = new(StringComparer.OrdinalIgnoreCase) { };

protected override PropertyProvider? PreVisitProperty(InputProperty property, PropertyProvider? propertyProvider)
{
if (propertyProvider is not null
&& propertyProvider.Type.Equals(typeof(long))
&& !_excludedProperties.Contains($"{propertyProvider.EnclosingType.Type.Namespace}.{propertyProvider.EnclosingType.Name}.{propertyProvider.Name}"))
&& !_excludedLongProperties.Contains($"{propertyProvider.EnclosingType.Type.Namespace}.{propertyProvider.EnclosingType.Name}.{propertyProvider.Name}"))
{
propertyProvider.Update(type: new CSharpType(typeof(int), propertyProvider.Type.IsNullable));
}

if (propertyProvider is not null
&& propertyProvider.Type.Equals(typeof(double))
&& !_excludedDoubleProperties.Contains($"{propertyProvider.EnclosingType.Type.Namespace}.{propertyProvider.EnclosingType.Name}.{propertyProvider.Name}"))
{
propertyProvider.Update(type: new CSharpType(typeof(float), propertyProvider.Type.IsNullable));
}

return propertyProvider;
}
}
140 changes: 0 additions & 140 deletions specification/base/typespec/moderations/custom.tsp

This file was deleted.

1 change: 1 addition & 0 deletions specification/base/typespec/moderations/main.tsp
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
import "./models.tsp";
import "./operations.tsp";
Loading