-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Description
Background and motivation
The System.ClientModel library provides building blocks for .NET clients that call cloud services. This addition supports client APIs for long-running operations, i.e. service operations where the service returns a response before the requested operation has completed. For such operations, SCM-based clients return a subclient derived from SCM's abstract OperationResult
class, which allows users to monitor the operation's status and obtain any resulting value.
The new OperationResult
type is similar to the Operation and Operation<T> types in Azure.Core, but has fewer public APIs in ordre to support greater variation of implementation patterns in the third-party cloud service space. It serves as a base type for public operation subclients such as the CreateVectorStoreOperation
type in the .NET OpenAI client library. It provides APIs to wait for the operation to complete processing on the service, and a rehydration token that can be to "rehydrate" an operation in progress, e.g. to obtain the value computed by a long-running operation from a different process than the one that started the operation. Client subtypes add public properties such as Value
and Status
as applicable to the operation implementation.
API Proposal
namespace System.ClientModel.Primitives
{
public abstract partial class OperationResult : System.ClientModel.ClientResult
{
protected OperationResult(System.ClientModel.Primitives.PipelineResponse response) { }
public abstract bool IsCompleted { get; protected set; }
public abstract System.ClientModel.ContinuationToken? RehydrationToken { get; protected set; }
public abstract void WaitForCompletion(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
public abstract System.Threading.Tasks.Task WaitForCompletionAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));
}
}
API Usage
Example usage of derived CreateVectorStoreOperation
type in OpenAI client:
VectorStoreClient client = new VectorStoreClient(new OpenAIClientOptions());
CreateVectorStoreOperation operation = await client.CreateVectorStoreAsync(waitUntilCompleted: false);
await operation.WaitForCompletionAsync();
VectorStore vectorStore = operation.Value;
Alternative Designs
No response
Risks
No response