Skip to content
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

Azure OpenAI updates #46103

Merged
merged 14 commits into from
Sep 23, 2024
Merged
Show file tree
Hide file tree
Changes from 11 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
5 changes: 3 additions & 2 deletions eng/Packages.Data.props
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@

<!-- BCL packages -->
<PackageReference Update="System.Buffers" Version="4.5.1" />
<PackageReference Update="System.ClientModel" Version="1.0.0" />
<PackageReference Update="System.ClientModel" Version="1.1.0" />
ralph-msft marked this conversation as resolved.
Show resolved Hide resolved
<PackageReference Update="System.IO.Hashing" Version="6.0.0" />
<PackageReference Update="System.Memory" Version="4.5.5" />
<PackageReference Update="System.Memory.Data" Version="1.0.2" />
Expand Down Expand Up @@ -179,7 +179,7 @@
</ItemGroup>

<ItemGroup Condition="$(MSBuildProjectName.StartsWith('Azure.AI.OpenAI'))">
<PackageReference Update="OpenAI" Version="2.0.0-beta.7" />
<PackageReference Update="OpenAI" Version="2.0.0-beta.12" />
</ItemGroup>

<!--
Expand Down Expand Up @@ -350,6 +350,7 @@
<PackageReference Update="Polly.Contrib.WaitAndRetry" Version="1.1.1" />
<PackageReference Update="Portable.BouncyCastle" Version="1.9.0" />
<PackageReference Update="PublicApiGenerator" Version="10.0.1" />
<PackageReference Update="System.ClientModel" Version="1.1.0" />
<PackageReference Update="System.Diagnostics.TraceSource" Version="4.3.0" />
<PackageReference Update="System.IO.Compression" Version="4.3.0" />
<PackageReference Update="System.IO.Pipelines" Version="4.5.1" />
Expand Down
2 changes: 1 addition & 1 deletion sdk/openai/Azure.AI.OpenAI/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<ExternalAzureCoreLibrary>../../external/Azure.Core.Slim/netstandard2.0/Azure.Core.Slim.dll</ExternalAzureCoreLibrary>
-->
</PropertyGroup>

<!--
Add any shared properties you want for the projects under this package directory that need to be set before the auto imported Directory.Build.props
-->
Expand Down
4 changes: 3 additions & 1 deletion sdk/openai/Azure.AI.OpenAI/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,9 @@ foreach (KeyValuePair<int, string> indexToIdPair in toolCallIdsByIndex)
functionArgumentBuildersByIndex[indexToIdPair.Key].ToString()));
}

conversationMessages.Add(new AssistantChatMessage(toolCalls, contentBuilder.ToString()));
var assistantChatMessage = new AssistantChatMessage(toolCalls);
assistantChatMessage.Content.Add(ChatMessageContentPart.CreateTextPart(contentBuilder.ToString()));
conversationMessages.Add(assistantChatMessage);

// Placeholder: each tool call must be resolved, like in the non-streaming case
string GetToolCallOutput(ChatToolCall toolCall) => null;
Expand Down
207 changes: 105 additions & 102 deletions sdk/openai/Azure.AI.OpenAI/api/Azure.AI.OpenAI.netstandard2.0.cs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion sdk/openai/Azure.AI.OpenAI/assets.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"AssetsRepo": "Azure/azure-sdk-assets",
"AssetsRepoPrefixPath": "net",
"TagPrefix": "net/openai/Azure.AI.OpenAI",
"Tag": "net/openai/Azure.AI.OpenAI_23ae923738"
"Tag": "net/openai/Azure.AI.OpenAI_ddacca2107"
}
9 changes: 2 additions & 7 deletions sdk/openai/Azure.AI.OpenAI/src/Azure.AI.OpenAI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,7 @@
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="Azure.Core" VersionOverride="1.42.0" />

<ExcludeFromProjectReferenceToConversion Include="Azure.Core" />
<ExcludeFromProjectReferenceToConversion Include="System.ClientModel" />
<PackageReference Include="Azure.Core" />
ralph-msft marked this conversation as resolved.
Show resolved Hide resolved
</ItemGroup>
</Otherwise>
</Choose>
Expand All @@ -56,13 +53,11 @@
<ItemGroup>
<Reference Include="$([System.IO.Path]::GetFileName('$(ExternalOpenAILibrary)'))" HintPath="$(ExternalOpenAILibrary)" />
<PackageReference Include="System.ClientModel" VersionOverride="$(SystemClientModelVersion)" />
ralph-msft marked this conversation as resolved.
Show resolved Hide resolved

<ExcludeFromProjectReferenceToConversion Include="System.ClientModel" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="OpenAI" VersionOverride="2.0.0-beta.11" />
<PackageReference Include="OpenAI" />
</ItemGroup>
</Otherwise>
</Choose>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.ClientModel;
using System.ClientModel.Primitives;
using System.Diagnostics.CodeAnalysis;
using Azure.AI.OpenAI.Utility;

namespace Azure.AI.OpenAI.Assistants;

Expand All @@ -26,16 +27,25 @@ public override ClientResult CreateAssistant(BinaryContent content, RequestOptio
return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options));
}

public override IAsyncEnumerable<ClientResult> GetAssistantsAsync(int? limit, string order, string after, string before, RequestOptions options)
public override AsyncCollectionResult GetAssistantsAsync(int? limit, string order, string after, string before, RequestOptions options)
{
AzureAssistantsPageEnumerator enumerator = new(Pipeline, _endpoint, limit, order, after, before, _apiVersion, options);
return PageCollectionHelpers.CreateAsync(enumerator);
return new AzureAsyncCollectionResult<Assistant, AssistantCollectionPageToken>(
Pipeline,
options,
continuation => CreateGetAssistantsRequest(limit, order, continuation?.After ?? after, continuation?.Before ?? before, options),
page => AssistantCollectionPageToken.FromResponse(page, limit, order, before),
page => ModelReaderWriter.Read<InternalListAssistantsResponse>(page.GetRawResponse().Content).Data,
options?.CancellationToken ?? default);
}

public override IEnumerable<ClientResult> GetAssistants(int? limit, string order, string after, string before, RequestOptions options)
public override CollectionResult GetAssistants(int? limit, string order, string after, string before, RequestOptions options)
{
AzureAssistantsPageEnumerator enumerator = new(Pipeline, _endpoint, limit, order, after, before, _apiVersion, options);
return PageCollectionHelpers.Create(enumerator);
return new AzureCollectionResult<Assistant, AssistantCollectionPageToken>(
Pipeline,
options,
continuation => CreateGetAssistantsRequest(limit, order, continuation?.After ?? after, continuation?.Before ?? before, options),
page => AssistantCollectionPageToken.FromResponse(page, limit, order, before),
page => ModelReaderWriter.Read<InternalListAssistantsResponse>(page.GetRawResponse().Content).Data);
}

public override async Task<ClientResult> GetAssistantAsync(string assistantId, RequestOptions options)
Expand Down Expand Up @@ -107,20 +117,27 @@ public override ClientResult CreateMessage(string threadId, BinaryContent conten
}

/// <inheritdoc />
public override IAsyncEnumerable<ClientResult> GetMessagesAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options)
public override AsyncCollectionResult GetMessagesAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options)
{
Argument.AssertNotNullOrEmpty(threadId, nameof(threadId));

AzureMessagesPageEnumerator enumerator = new(Pipeline, _endpoint, threadId, limit, order, after, before, _apiVersion, options);
return PageCollectionHelpers.CreateAsync(enumerator);
return new AzureAsyncCollectionResult<ThreadMessage, MessageCollectionPageToken>(
Pipeline,
options,
continuation => CreateGetMessagesRequest(threadId, limit, order, continuation?.After ?? after, continuation?.Before ?? before, options),
page => MessageCollectionPageToken.FromResponse(page, threadId, limit, order, before),
page => ModelReaderWriter.Read<InternalListMessagesResponse>(page.GetRawResponse().Content).Data,
options?.CancellationToken ?? default);
}

public override IEnumerable<ClientResult> GetMessages(string threadId, int? limit, string order, string after, string before, RequestOptions options)
public override CollectionResult GetMessages(string threadId, int? limit, string order, string after, string before, RequestOptions options)
{
Argument.AssertNotNullOrEmpty(threadId, nameof(threadId));

AzureMessagesPageEnumerator enumerator = new(Pipeline, _endpoint, threadId, limit, order, after, before, _apiVersion, options);
return PageCollectionHelpers.Create(enumerator);
return new AzureCollectionResult<ThreadMessage, MessageCollectionPageToken>(
Pipeline,
options,
continuation => CreateGetMessagesRequest(threadId, limit, order, continuation?.After ?? after, continuation?.Before ?? before, options),
page => MessageCollectionPageToken.FromResponse(page, threadId, limit, order, before),
page => ModelReaderWriter.Read<InternalListMessagesResponse>(page.GetRawResponse().Content).Data);
}

/// <inheritdoc cref="InternalAssistantMessageClient.GetMessageAsync"/>
Expand Down Expand Up @@ -257,20 +274,27 @@ public override ClientResult CreateRun(string threadId, BinaryContent content, R
}
}

public override IAsyncEnumerable<ClientResult> GetRunsAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options)
public override AsyncCollectionResult GetRunsAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options)
{
Argument.AssertNotNullOrEmpty(threadId, nameof(threadId));

AzureRunsPageEnumerator enumerator = new(Pipeline, _endpoint, threadId, limit, order, after, before, _apiVersion, options);
return PageCollectionHelpers.CreateAsync(enumerator);
return new AzureAsyncCollectionResult<ThreadRun, RunCollectionPageToken>(
Pipeline,
options,
continuation => CreateGetRunsRequest(threadId, limit, order, continuation?.After ?? after, continuation?.Before ?? before, options),
page => RunCollectionPageToken.FromResponse(page, threadId, limit, order, before),
page => ModelReaderWriter.Read<InternalListRunsResponse>(page.GetRawResponse().Content).Data,
options?.CancellationToken ?? default);
}

public override IEnumerable<ClientResult> GetRuns(string threadId, int? limit, string order, string after, string before, RequestOptions options)
public override CollectionResult GetRuns(string threadId, int? limit, string order, string after, string before, RequestOptions options)
{
Argument.AssertNotNullOrEmpty(threadId, nameof(threadId));

AzureRunsPageEnumerator enumerator = new(Pipeline, _endpoint, threadId, limit, order, after, before, _apiVersion, options);
return PageCollectionHelpers.Create(enumerator);
return new AzureCollectionResult<ThreadRun, RunCollectionPageToken>(
Pipeline,
options,
continuation => CreateGetRunsRequest(threadId, limit, order, continuation?.After ?? after, continuation?.Before ?? before, options),
page => RunCollectionPageToken.FromResponse(page, threadId, limit, order, before),
page => ModelReaderWriter.Read<InternalListRunsResponse>(page.GetRawResponse().Content).Data);
}

/// <inheritdoc cref="InternalAssistantRunClient.GetRunAsync"/>
Expand Down Expand Up @@ -375,22 +399,31 @@ public override ClientResult SubmitToolOutputsToRun(string threadId, string runI
}
}

public override IAsyncEnumerable<ClientResult> GetRunStepsAsync(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options)
public override AsyncCollectionResult GetRunStepsAsync(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options)
{
Argument.AssertNotNullOrEmpty(threadId, nameof(threadId));
Argument.AssertNotNullOrEmpty(runId, nameof(runId));

AzureRunStepsPageEnumerator enumerator = new(Pipeline, _endpoint, threadId, runId, limit, order, after, before, _apiVersion, options);
return PageCollectionHelpers.CreateAsync(enumerator);
return new AzureAsyncCollectionResult<RunStep, RunStepCollectionPageToken>(
Pipeline,
options,
continuation => CreateGetRunStepsRequest(threadId, runId, limit, order, continuation?.After ?? after, continuation?.Before ?? before, options),
page => RunStepCollectionPageToken.FromResponse(page, threadId, runId, limit, order, before),
page => ModelReaderWriter.Read<InternalListRunStepsResponse>(page.GetRawResponse().Content).Data,
options?.CancellationToken ?? default);
}

public override IEnumerable<ClientResult> GetRunSteps(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options)
public override CollectionResult GetRunSteps(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options)
{
Argument.AssertNotNullOrEmpty(threadId, nameof(threadId));
Argument.AssertNotNullOrEmpty(runId, nameof(runId));

AzureRunStepsPageEnumerator enumerator = new(Pipeline, _endpoint, threadId, runId, limit, order, after, before, _apiVersion, options);
return PageCollectionHelpers.Create(enumerator);
return new AzureCollectionResult<RunStep, RunStepCollectionPageToken>(
Pipeline,
options,
continuation => CreateGetRunStepsRequest(threadId, runId, limit, order, continuation?.After ?? after, continuation?.Before ?? before, options),
page => RunStepCollectionPageToken.FromResponse(page, threadId, runId, limit, order, before),
page => ModelReaderWriter.Read<InternalListRunStepsResponse>(page.GetRawResponse().Content).Data);
}

/// <inheritdoc cref="InternalAssistantRunClient.GetRunStepAsync"/>
Expand Down Expand Up @@ -486,6 +519,9 @@ public override ClientResult DeleteThread(string threadId, RequestOptions option
private new PipelineMessage CreateCreateAssistantRequest(BinaryContent content, RequestOptions options = null)
=> NewJsonPostBuilder(content, options).WithPath("assistants").Build();

private new PipelineMessage CreateGetAssistantsRequest(int? limit, string order, string after, string before, RequestOptions options)
=> NewGetListBuilder(limit, order, after, before, options).WithPath("assistants").Build();

private new PipelineMessage CreateGetAssistantRequest(string assistantId, RequestOptions options)
=> NewJsonGetBuilder(options).WithPath("assistants", assistantId).Build();

Expand Down Expand Up @@ -513,6 +549,9 @@ private PipelineMessage CreateDeleteThreadRequest(string threadId, RequestOption
private PipelineMessage CreateCreateMessageRequest(string threadId, BinaryContent content, RequestOptions options)
=> NewJsonPostBuilder(content, options).WithPath("threads", threadId, "messages").Build();

private PipelineMessage CreateGetMessagesRequest(string threadId, int? limit, string order, string after, string before, RequestOptions options)
=> NewGetListBuilder(limit, order, after, before, options).WithPath("threads", threadId, "messages").Build();

private PipelineMessage CreateGetMessageRequest(string threadId, string messageId, RequestOptions options)
=> NewJsonGetBuilder(options).WithPath("threads", threadId, "messages", messageId).Build();

Expand All @@ -528,6 +567,9 @@ private PipelineMessage CreateCreateThreadAndRunRequest(BinaryContent content, R
private PipelineMessage CreateCreateRunRequest(string threadId, BinaryContent content, RequestOptions options)
=> NewJsonPostBuilder(content, options).WithPath("threads", threadId, "runs").Build();

private PipelineMessage CreateGetRunsRequest(string threadId, int? limit, string order, string after, string before, RequestOptions options)
=> NewGetListBuilder(limit, order, after, before, options).WithPath("threads", threadId, "runs").Build();

private PipelineMessage CreateGetRunRequest(string threadId, string runId, RequestOptions options)
=> NewJsonGetBuilder(options).WithPath("threads", threadId, "runs", runId).Build();

Expand All @@ -540,6 +582,9 @@ private PipelineMessage CreateCancelRunRequest(string threadId, string runId, Re
private PipelineMessage CreateSubmitToolOutputsToRunRequest(string threadId, string runId, BinaryContent content, RequestOptions options)
=> NewJsonPostBuilder(content, options).WithPath("threads", threadId, "runs", runId, "submit_tool_outputs").Build();

private PipelineMessage CreateGetRunStepsRequest(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options)
=> NewGetListBuilder(limit, order, after, before, options).WithPath("threads", threadId, "runs", runId, "steps").Build();

private PipelineMessage CreateGetRunStepRequest(string threadId, string runId, string stepId, RequestOptions options)
=> NewJsonGetBuilder(options).WithPath("threads", threadId, "runs", runId, "steps", stepId).Build();

Expand Down

This file was deleted.

Loading